Home | History | Annotate | Download | only in fipsmodule
      1 # This file is generated from a similarly-named Perl script in the BoringSSL
      2 # source tree. Do not edit by hand.
      3 
      4 #if defined(__has_feature)
      5 #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
      6 #define OPENSSL_NO_ASM
      7 #endif
      8 #endif
      9 
     10 #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
     11 #if defined(BORINGSSL_PREFIX)
     12 #include <boringssl_prefix_symbols_asm.h>
     13 #endif
     14 .text
     15 
     16 
     17 .p2align	5
     18 _aesni_ctr32_ghash_6x:
     19 
     20 	vmovdqu	32(%r11),%xmm2
     21 	subq	$6,%rdx
     22 	vpxor	%xmm4,%xmm4,%xmm4
     23 	vmovdqu	0-128(%rcx),%xmm15
     24 	vpaddb	%xmm2,%xmm1,%xmm10
     25 	vpaddb	%xmm2,%xmm10,%xmm11
     26 	vpaddb	%xmm2,%xmm11,%xmm12
     27 	vpaddb	%xmm2,%xmm12,%xmm13
     28 	vpaddb	%xmm2,%xmm13,%xmm14
     29 	vpxor	%xmm15,%xmm1,%xmm9
     30 	vmovdqu	%xmm4,16+8(%rsp)
     31 	jmp	L$oop6x
     32 
     33 .p2align	5
     34 L$oop6x:
     35 	addl	$100663296,%ebx
     36 	jc	L$handle_ctr32
     37 	vmovdqu	0-32(%r9),%xmm3
     38 	vpaddb	%xmm2,%xmm14,%xmm1
     39 	vpxor	%xmm15,%xmm10,%xmm10
     40 	vpxor	%xmm15,%xmm11,%xmm11
     41 
     42 L$resume_ctr32:
     43 	vmovdqu	%xmm1,(%r8)
     44 	vpclmulqdq	$0x10,%xmm3,%xmm7,%xmm5
     45 	vpxor	%xmm15,%xmm12,%xmm12
     46 	vmovups	16-128(%rcx),%xmm2
     47 	vpclmulqdq	$0x01,%xmm3,%xmm7,%xmm6
     48 
     49 
     50 
     51 
     52 
     53 
     54 
     55 
     56 
     57 
     58 
     59 
     60 
     61 
     62 
     63 
     64 
     65 	xorq	%r12,%r12
     66 	cmpq	%r14,%r15
     67 
     68 	vaesenc	%xmm2,%xmm9,%xmm9
     69 	vmovdqu	48+8(%rsp),%xmm0
     70 	vpxor	%xmm15,%xmm13,%xmm13
     71 	vpclmulqdq	$0x00,%xmm3,%xmm7,%xmm1
     72 	vaesenc	%xmm2,%xmm10,%xmm10
     73 	vpxor	%xmm15,%xmm14,%xmm14
     74 	setnc	%r12b
     75 	vpclmulqdq	$0x11,%xmm3,%xmm7,%xmm7
     76 	vaesenc	%xmm2,%xmm11,%xmm11
     77 	vmovdqu	16-32(%r9),%xmm3
     78 	negq	%r12
     79 	vaesenc	%xmm2,%xmm12,%xmm12
     80 	vpxor	%xmm5,%xmm6,%xmm6
     81 	vpclmulqdq	$0x00,%xmm3,%xmm0,%xmm5
     82 	vpxor	%xmm4,%xmm8,%xmm8
     83 	vaesenc	%xmm2,%xmm13,%xmm13
     84 	vpxor	%xmm5,%xmm1,%xmm4
     85 	andq	$0x60,%r12
     86 	vmovups	32-128(%rcx),%xmm15
     87 	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm1
     88 	vaesenc	%xmm2,%xmm14,%xmm14
     89 
     90 	vpclmulqdq	$0x01,%xmm3,%xmm0,%xmm2
     91 	leaq	(%r14,%r12,1),%r14
     92 	vaesenc	%xmm15,%xmm9,%xmm9
     93 	vpxor	16+8(%rsp),%xmm8,%xmm8
     94 	vpclmulqdq	$0x11,%xmm3,%xmm0,%xmm3
     95 	vmovdqu	64+8(%rsp),%xmm0
     96 	vaesenc	%xmm15,%xmm10,%xmm10
     97 	movbeq	88(%r14),%r13
     98 	vaesenc	%xmm15,%xmm11,%xmm11
     99 	movbeq	80(%r14),%r12
    100 	vaesenc	%xmm15,%xmm12,%xmm12
    101 	movq	%r13,32+8(%rsp)
    102 	vaesenc	%xmm15,%xmm13,%xmm13
    103 	movq	%r12,40+8(%rsp)
    104 	vmovdqu	48-32(%r9),%xmm5
    105 	vaesenc	%xmm15,%xmm14,%xmm14
    106 
    107 	vmovups	48-128(%rcx),%xmm15
    108 	vpxor	%xmm1,%xmm6,%xmm6
    109 	vpclmulqdq	$0x00,%xmm5,%xmm0,%xmm1
    110 	vaesenc	%xmm15,%xmm9,%xmm9
    111 	vpxor	%xmm2,%xmm6,%xmm6
    112 	vpclmulqdq	$0x10,%xmm5,%xmm0,%xmm2
    113 	vaesenc	%xmm15,%xmm10,%xmm10
    114 	vpxor	%xmm3,%xmm7,%xmm7
    115 	vpclmulqdq	$0x01,%xmm5,%xmm0,%xmm3
    116 	vaesenc	%xmm15,%xmm11,%xmm11
    117 	vpclmulqdq	$0x11,%xmm5,%xmm0,%xmm5
    118 	vmovdqu	80+8(%rsp),%xmm0
    119 	vaesenc	%xmm15,%xmm12,%xmm12
    120 	vaesenc	%xmm15,%xmm13,%xmm13
    121 	vpxor	%xmm1,%xmm4,%xmm4
    122 	vmovdqu	64-32(%r9),%xmm1
    123 	vaesenc	%xmm15,%xmm14,%xmm14
    124 
    125 	vmovups	64-128(%rcx),%xmm15
    126 	vpxor	%xmm2,%xmm6,%xmm6
    127 	vpclmulqdq	$0x00,%xmm1,%xmm0,%xmm2
    128 	vaesenc	%xmm15,%xmm9,%xmm9
    129 	vpxor	%xmm3,%xmm6,%xmm6
    130 	vpclmulqdq	$0x10,%xmm1,%xmm0,%xmm3
    131 	vaesenc	%xmm15,%xmm10,%xmm10
    132 	movbeq	72(%r14),%r13
    133 	vpxor	%xmm5,%xmm7,%xmm7
    134 	vpclmulqdq	$0x01,%xmm1,%xmm0,%xmm5
    135 	vaesenc	%xmm15,%xmm11,%xmm11
    136 	movbeq	64(%r14),%r12
    137 	vpclmulqdq	$0x11,%xmm1,%xmm0,%xmm1
    138 	vmovdqu	96+8(%rsp),%xmm0
    139 	vaesenc	%xmm15,%xmm12,%xmm12
    140 	movq	%r13,48+8(%rsp)
    141 	vaesenc	%xmm15,%xmm13,%xmm13
    142 	movq	%r12,56+8(%rsp)
    143 	vpxor	%xmm2,%xmm4,%xmm4
    144 	vmovdqu	96-32(%r9),%xmm2
    145 	vaesenc	%xmm15,%xmm14,%xmm14
    146 
    147 	vmovups	80-128(%rcx),%xmm15
    148 	vpxor	%xmm3,%xmm6,%xmm6
    149 	vpclmulqdq	$0x00,%xmm2,%xmm0,%xmm3
    150 	vaesenc	%xmm15,%xmm9,%xmm9
    151 	vpxor	%xmm5,%xmm6,%xmm6
    152 	vpclmulqdq	$0x10,%xmm2,%xmm0,%xmm5
    153 	vaesenc	%xmm15,%xmm10,%xmm10
    154 	movbeq	56(%r14),%r13
    155 	vpxor	%xmm1,%xmm7,%xmm7
    156 	vpclmulqdq	$0x01,%xmm2,%xmm0,%xmm1
    157 	vpxor	112+8(%rsp),%xmm8,%xmm8
    158 	vaesenc	%xmm15,%xmm11,%xmm11
    159 	movbeq	48(%r14),%r12
    160 	vpclmulqdq	$0x11,%xmm2,%xmm0,%xmm2
    161 	vaesenc	%xmm15,%xmm12,%xmm12
    162 	movq	%r13,64+8(%rsp)
    163 	vaesenc	%xmm15,%xmm13,%xmm13
    164 	movq	%r12,72+8(%rsp)
    165 	vpxor	%xmm3,%xmm4,%xmm4
    166 	vmovdqu	112-32(%r9),%xmm3
    167 	vaesenc	%xmm15,%xmm14,%xmm14
    168 
    169 	vmovups	96-128(%rcx),%xmm15
    170 	vpxor	%xmm5,%xmm6,%xmm6
    171 	vpclmulqdq	$0x10,%xmm3,%xmm8,%xmm5
    172 	vaesenc	%xmm15,%xmm9,%xmm9
    173 	vpxor	%xmm1,%xmm6,%xmm6
    174 	vpclmulqdq	$0x01,%xmm3,%xmm8,%xmm1
    175 	vaesenc	%xmm15,%xmm10,%xmm10
    176 	movbeq	40(%r14),%r13
    177 	vpxor	%xmm2,%xmm7,%xmm7
    178 	vpclmulqdq	$0x00,%xmm3,%xmm8,%xmm2
    179 	vaesenc	%xmm15,%xmm11,%xmm11
    180 	movbeq	32(%r14),%r12
    181 	vpclmulqdq	$0x11,%xmm3,%xmm8,%xmm8
    182 	vaesenc	%xmm15,%xmm12,%xmm12
    183 	movq	%r13,80+8(%rsp)
    184 	vaesenc	%xmm15,%xmm13,%xmm13
    185 	movq	%r12,88+8(%rsp)
    186 	vpxor	%xmm5,%xmm6,%xmm6
    187 	vaesenc	%xmm15,%xmm14,%xmm14
    188 	vpxor	%xmm1,%xmm6,%xmm6
    189 
    190 	vmovups	112-128(%rcx),%xmm15
    191 	vpslldq	$8,%xmm6,%xmm5
    192 	vpxor	%xmm2,%xmm4,%xmm4
    193 	vmovdqu	16(%r11),%xmm3
    194 
    195 	vaesenc	%xmm15,%xmm9,%xmm9
    196 	vpxor	%xmm8,%xmm7,%xmm7
    197 	vaesenc	%xmm15,%xmm10,%xmm10
    198 	vpxor	%xmm5,%xmm4,%xmm4
    199 	movbeq	24(%r14),%r13
    200 	vaesenc	%xmm15,%xmm11,%xmm11
    201 	movbeq	16(%r14),%r12
    202 	vpalignr	$8,%xmm4,%xmm4,%xmm0
    203 	vpclmulqdq	$0x10,%xmm3,%xmm4,%xmm4
    204 	movq	%r13,96+8(%rsp)
    205 	vaesenc	%xmm15,%xmm12,%xmm12
    206 	movq	%r12,104+8(%rsp)
    207 	vaesenc	%xmm15,%xmm13,%xmm13
    208 	vmovups	128-128(%rcx),%xmm1
    209 	vaesenc	%xmm15,%xmm14,%xmm14
    210 
    211 	vaesenc	%xmm1,%xmm9,%xmm9
    212 	vmovups	144-128(%rcx),%xmm15
    213 	vaesenc	%xmm1,%xmm10,%xmm10
    214 	vpsrldq	$8,%xmm6,%xmm6
    215 	vaesenc	%xmm1,%xmm11,%xmm11
    216 	vpxor	%xmm6,%xmm7,%xmm7
    217 	vaesenc	%xmm1,%xmm12,%xmm12
    218 	vpxor	%xmm0,%xmm4,%xmm4
    219 	movbeq	8(%r14),%r13
    220 	vaesenc	%xmm1,%xmm13,%xmm13
    221 	movbeq	0(%r14),%r12
    222 	vaesenc	%xmm1,%xmm14,%xmm14
    223 	vmovups	160-128(%rcx),%xmm1
    224 	cmpl	$11,%ebp
    225 	jb	L$enc_tail
    226 
    227 	vaesenc	%xmm15,%xmm9,%xmm9
    228 	vaesenc	%xmm15,%xmm10,%xmm10
    229 	vaesenc	%xmm15,%xmm11,%xmm11
    230 	vaesenc	%xmm15,%xmm12,%xmm12
    231 	vaesenc	%xmm15,%xmm13,%xmm13
    232 	vaesenc	%xmm15,%xmm14,%xmm14
    233 
    234 	vaesenc	%xmm1,%xmm9,%xmm9
    235 	vaesenc	%xmm1,%xmm10,%xmm10
    236 	vaesenc	%xmm1,%xmm11,%xmm11
    237 	vaesenc	%xmm1,%xmm12,%xmm12
    238 	vaesenc	%xmm1,%xmm13,%xmm13
    239 	vmovups	176-128(%rcx),%xmm15
    240 	vaesenc	%xmm1,%xmm14,%xmm14
    241 	vmovups	192-128(%rcx),%xmm1
    242 	je	L$enc_tail
    243 
    244 	vaesenc	%xmm15,%xmm9,%xmm9
    245 	vaesenc	%xmm15,%xmm10,%xmm10
    246 	vaesenc	%xmm15,%xmm11,%xmm11
    247 	vaesenc	%xmm15,%xmm12,%xmm12
    248 	vaesenc	%xmm15,%xmm13,%xmm13
    249 	vaesenc	%xmm15,%xmm14,%xmm14
    250 
    251 	vaesenc	%xmm1,%xmm9,%xmm9
    252 	vaesenc	%xmm1,%xmm10,%xmm10
    253 	vaesenc	%xmm1,%xmm11,%xmm11
    254 	vaesenc	%xmm1,%xmm12,%xmm12
    255 	vaesenc	%xmm1,%xmm13,%xmm13
    256 	vmovups	208-128(%rcx),%xmm15
    257 	vaesenc	%xmm1,%xmm14,%xmm14
    258 	vmovups	224-128(%rcx),%xmm1
    259 	jmp	L$enc_tail
    260 
    261 .p2align	5
    262 L$handle_ctr32:
    263 	vmovdqu	(%r11),%xmm0
    264 	vpshufb	%xmm0,%xmm1,%xmm6
    265 	vmovdqu	48(%r11),%xmm5
    266 	vpaddd	64(%r11),%xmm6,%xmm10
    267 	vpaddd	%xmm5,%xmm6,%xmm11
    268 	vmovdqu	0-32(%r9),%xmm3
    269 	vpaddd	%xmm5,%xmm10,%xmm12
    270 	vpshufb	%xmm0,%xmm10,%xmm10
    271 	vpaddd	%xmm5,%xmm11,%xmm13
    272 	vpshufb	%xmm0,%xmm11,%xmm11
    273 	vpxor	%xmm15,%xmm10,%xmm10
    274 	vpaddd	%xmm5,%xmm12,%xmm14
    275 	vpshufb	%xmm0,%xmm12,%xmm12
    276 	vpxor	%xmm15,%xmm11,%xmm11
    277 	vpaddd	%xmm5,%xmm13,%xmm1
    278 	vpshufb	%xmm0,%xmm13,%xmm13
    279 	vpshufb	%xmm0,%xmm14,%xmm14
    280 	vpshufb	%xmm0,%xmm1,%xmm1
    281 	jmp	L$resume_ctr32
    282 
    283 .p2align	5
    284 L$enc_tail:
    285 	vaesenc	%xmm15,%xmm9,%xmm9
    286 	vmovdqu	%xmm7,16+8(%rsp)
    287 	vpalignr	$8,%xmm4,%xmm4,%xmm8
    288 	vaesenc	%xmm15,%xmm10,%xmm10
    289 	vpclmulqdq	$0x10,%xmm3,%xmm4,%xmm4
    290 	vpxor	0(%rdi),%xmm1,%xmm2
    291 	vaesenc	%xmm15,%xmm11,%xmm11
    292 	vpxor	16(%rdi),%xmm1,%xmm0
    293 	vaesenc	%xmm15,%xmm12,%xmm12
    294 	vpxor	32(%rdi),%xmm1,%xmm5
    295 	vaesenc	%xmm15,%xmm13,%xmm13
    296 	vpxor	48(%rdi),%xmm1,%xmm6
    297 	vaesenc	%xmm15,%xmm14,%xmm14
    298 	vpxor	64(%rdi),%xmm1,%xmm7
    299 	vpxor	80(%rdi),%xmm1,%xmm3
    300 	vmovdqu	(%r8),%xmm1
    301 
    302 	vaesenclast	%xmm2,%xmm9,%xmm9
    303 	vmovdqu	32(%r11),%xmm2
    304 	vaesenclast	%xmm0,%xmm10,%xmm10
    305 	vpaddb	%xmm2,%xmm1,%xmm0
    306 	movq	%r13,112+8(%rsp)
    307 	leaq	96(%rdi),%rdi
    308 	vaesenclast	%xmm5,%xmm11,%xmm11
    309 	vpaddb	%xmm2,%xmm0,%xmm5
    310 	movq	%r12,120+8(%rsp)
    311 	leaq	96(%rsi),%rsi
    312 	vmovdqu	0-128(%rcx),%xmm15
    313 	vaesenclast	%xmm6,%xmm12,%xmm12
    314 	vpaddb	%xmm2,%xmm5,%xmm6
    315 	vaesenclast	%xmm7,%xmm13,%xmm13
    316 	vpaddb	%xmm2,%xmm6,%xmm7
    317 	vaesenclast	%xmm3,%xmm14,%xmm14
    318 	vpaddb	%xmm2,%xmm7,%xmm3
    319 
    320 	addq	$0x60,%r10
    321 	subq	$0x6,%rdx
    322 	jc	L$6x_done
    323 
    324 	vmovups	%xmm9,-96(%rsi)
    325 	vpxor	%xmm15,%xmm1,%xmm9
    326 	vmovups	%xmm10,-80(%rsi)
    327 	vmovdqa	%xmm0,%xmm10
    328 	vmovups	%xmm11,-64(%rsi)
    329 	vmovdqa	%xmm5,%xmm11
    330 	vmovups	%xmm12,-48(%rsi)
    331 	vmovdqa	%xmm6,%xmm12
    332 	vmovups	%xmm13,-32(%rsi)
    333 	vmovdqa	%xmm7,%xmm13
    334 	vmovups	%xmm14,-16(%rsi)
    335 	vmovdqa	%xmm3,%xmm14
    336 	vmovdqu	32+8(%rsp),%xmm7
    337 	jmp	L$oop6x
    338 
    339 L$6x_done:
    340 	vpxor	16+8(%rsp),%xmm8,%xmm8
    341 	vpxor	%xmm4,%xmm8,%xmm8
    342 
    343 	.byte	0xf3,0xc3
    344 
    345 
    346 .globl	_aesni_gcm_decrypt
    347 .private_extern _aesni_gcm_decrypt
    348 
    349 .p2align	5
    350 _aesni_gcm_decrypt:
    351 
    352 	xorq	%r10,%r10
    353 
    354 
    355 
    356 	cmpq	$0x60,%rdx
    357 	jb	L$gcm_dec_abort
    358 
    359 	leaq	(%rsp),%rax
    360 
    361 	pushq	%rbx
    362 
    363 	pushq	%rbp
    364 
    365 	pushq	%r12
    366 
    367 	pushq	%r13
    368 
    369 	pushq	%r14
    370 
    371 	pushq	%r15
    372 
    373 	vzeroupper
    374 
    375 	vmovdqu	(%r8),%xmm1
    376 	addq	$-128,%rsp
    377 	movl	12(%r8),%ebx
    378 	leaq	L$bswap_mask(%rip),%r11
    379 	leaq	-128(%rcx),%r14
    380 	movq	$0xf80,%r15
    381 	vmovdqu	(%r9),%xmm8
    382 	andq	$-128,%rsp
    383 	vmovdqu	(%r11),%xmm0
    384 	leaq	128(%rcx),%rcx
    385 	leaq	32+32(%r9),%r9
    386 	movl	240-128(%rcx),%ebp
    387 	vpshufb	%xmm0,%xmm8,%xmm8
    388 
    389 	andq	%r15,%r14
    390 	andq	%rsp,%r15
    391 	subq	%r14,%r15
    392 	jc	L$dec_no_key_aliasing
    393 	cmpq	$768,%r15
    394 	jnc	L$dec_no_key_aliasing
    395 	subq	%r15,%rsp
    396 L$dec_no_key_aliasing:
    397 
    398 	vmovdqu	80(%rdi),%xmm7
    399 	leaq	(%rdi),%r14
    400 	vmovdqu	64(%rdi),%xmm4
    401 
    402 
    403 
    404 
    405 
    406 
    407 
    408 	leaq	-192(%rdi,%rdx,1),%r15
    409 
    410 	vmovdqu	48(%rdi),%xmm5
    411 	shrq	$4,%rdx
    412 	xorq	%r10,%r10
    413 	vmovdqu	32(%rdi),%xmm6
    414 	vpshufb	%xmm0,%xmm7,%xmm7
    415 	vmovdqu	16(%rdi),%xmm2
    416 	vpshufb	%xmm0,%xmm4,%xmm4
    417 	vmovdqu	(%rdi),%xmm3
    418 	vpshufb	%xmm0,%xmm5,%xmm5
    419 	vmovdqu	%xmm4,48(%rsp)
    420 	vpshufb	%xmm0,%xmm6,%xmm6
    421 	vmovdqu	%xmm5,64(%rsp)
    422 	vpshufb	%xmm0,%xmm2,%xmm2
    423 	vmovdqu	%xmm6,80(%rsp)
    424 	vpshufb	%xmm0,%xmm3,%xmm3
    425 	vmovdqu	%xmm2,96(%rsp)
    426 	vmovdqu	%xmm3,112(%rsp)
    427 
    428 	call	_aesni_ctr32_ghash_6x
    429 
    430 	vmovups	%xmm9,-96(%rsi)
    431 	vmovups	%xmm10,-80(%rsi)
    432 	vmovups	%xmm11,-64(%rsi)
    433 	vmovups	%xmm12,-48(%rsi)
    434 	vmovups	%xmm13,-32(%rsi)
    435 	vmovups	%xmm14,-16(%rsi)
    436 
    437 	vpshufb	(%r11),%xmm8,%xmm8
    438 	vmovdqu	%xmm8,-64(%r9)
    439 
    440 	vzeroupper
    441 	movq	-48(%rax),%r15
    442 
    443 	movq	-40(%rax),%r14
    444 
    445 	movq	-32(%rax),%r13
    446 
    447 	movq	-24(%rax),%r12
    448 
    449 	movq	-16(%rax),%rbp
    450 
    451 	movq	-8(%rax),%rbx
    452 
    453 	leaq	(%rax),%rsp
    454 
    455 L$gcm_dec_abort:
    456 	movq	%r10,%rax
    457 	.byte	0xf3,0xc3
    458 
    459 
    460 
    461 .p2align	5
    462 _aesni_ctr32_6x:
    463 
    464 	vmovdqu	0-128(%rcx),%xmm4
    465 	vmovdqu	32(%r11),%xmm2
    466 	leaq	-1(%rbp),%r13
    467 	vmovups	16-128(%rcx),%xmm15
    468 	leaq	32-128(%rcx),%r12
    469 	vpxor	%xmm4,%xmm1,%xmm9
    470 	addl	$100663296,%ebx
    471 	jc	L$handle_ctr32_2
    472 	vpaddb	%xmm2,%xmm1,%xmm10
    473 	vpaddb	%xmm2,%xmm10,%xmm11
    474 	vpxor	%xmm4,%xmm10,%xmm10
    475 	vpaddb	%xmm2,%xmm11,%xmm12
    476 	vpxor	%xmm4,%xmm11,%xmm11
    477 	vpaddb	%xmm2,%xmm12,%xmm13
    478 	vpxor	%xmm4,%xmm12,%xmm12
    479 	vpaddb	%xmm2,%xmm13,%xmm14
    480 	vpxor	%xmm4,%xmm13,%xmm13
    481 	vpaddb	%xmm2,%xmm14,%xmm1
    482 	vpxor	%xmm4,%xmm14,%xmm14
    483 	jmp	L$oop_ctr32
    484 
    485 .p2align	4
    486 L$oop_ctr32:
    487 	vaesenc	%xmm15,%xmm9,%xmm9
    488 	vaesenc	%xmm15,%xmm10,%xmm10
    489 	vaesenc	%xmm15,%xmm11,%xmm11
    490 	vaesenc	%xmm15,%xmm12,%xmm12
    491 	vaesenc	%xmm15,%xmm13,%xmm13
    492 	vaesenc	%xmm15,%xmm14,%xmm14
    493 	vmovups	(%r12),%xmm15
    494 	leaq	16(%r12),%r12
    495 	decl	%r13d
    496 	jnz	L$oop_ctr32
    497 
    498 	vmovdqu	(%r12),%xmm3
    499 	vaesenc	%xmm15,%xmm9,%xmm9
    500 	vpxor	0(%rdi),%xmm3,%xmm4
    501 	vaesenc	%xmm15,%xmm10,%xmm10
    502 	vpxor	16(%rdi),%xmm3,%xmm5
    503 	vaesenc	%xmm15,%xmm11,%xmm11
    504 	vpxor	32(%rdi),%xmm3,%xmm6
    505 	vaesenc	%xmm15,%xmm12,%xmm12
    506 	vpxor	48(%rdi),%xmm3,%xmm8
    507 	vaesenc	%xmm15,%xmm13,%xmm13
    508 	vpxor	64(%rdi),%xmm3,%xmm2
    509 	vaesenc	%xmm15,%xmm14,%xmm14
    510 	vpxor	80(%rdi),%xmm3,%xmm3
    511 	leaq	96(%rdi),%rdi
    512 
    513 	vaesenclast	%xmm4,%xmm9,%xmm9
    514 	vaesenclast	%xmm5,%xmm10,%xmm10
    515 	vaesenclast	%xmm6,%xmm11,%xmm11
    516 	vaesenclast	%xmm8,%xmm12,%xmm12
    517 	vaesenclast	%xmm2,%xmm13,%xmm13
    518 	vaesenclast	%xmm3,%xmm14,%xmm14
    519 	vmovups	%xmm9,0(%rsi)
    520 	vmovups	%xmm10,16(%rsi)
    521 	vmovups	%xmm11,32(%rsi)
    522 	vmovups	%xmm12,48(%rsi)
    523 	vmovups	%xmm13,64(%rsi)
    524 	vmovups	%xmm14,80(%rsi)
    525 	leaq	96(%rsi),%rsi
    526 
    527 	.byte	0xf3,0xc3
    528 .p2align	5
    529 L$handle_ctr32_2:
    530 	vpshufb	%xmm0,%xmm1,%xmm6
    531 	vmovdqu	48(%r11),%xmm5
    532 	vpaddd	64(%r11),%xmm6,%xmm10
    533 	vpaddd	%xmm5,%xmm6,%xmm11
    534 	vpaddd	%xmm5,%xmm10,%xmm12
    535 	vpshufb	%xmm0,%xmm10,%xmm10
    536 	vpaddd	%xmm5,%xmm11,%xmm13
    537 	vpshufb	%xmm0,%xmm11,%xmm11
    538 	vpxor	%xmm4,%xmm10,%xmm10
    539 	vpaddd	%xmm5,%xmm12,%xmm14
    540 	vpshufb	%xmm0,%xmm12,%xmm12
    541 	vpxor	%xmm4,%xmm11,%xmm11
    542 	vpaddd	%xmm5,%xmm13,%xmm1
    543 	vpshufb	%xmm0,%xmm13,%xmm13
    544 	vpxor	%xmm4,%xmm12,%xmm12
    545 	vpshufb	%xmm0,%xmm14,%xmm14
    546 	vpxor	%xmm4,%xmm13,%xmm13
    547 	vpshufb	%xmm0,%xmm1,%xmm1
    548 	vpxor	%xmm4,%xmm14,%xmm14
    549 	jmp	L$oop_ctr32
    550 
    551 
    552 
    553 .globl	_aesni_gcm_encrypt
    554 .private_extern _aesni_gcm_encrypt
    555 
    556 .p2align	5
    557 _aesni_gcm_encrypt:
    558 
    559 #ifndef NDEBUG
    560 #ifndef BORINGSSL_FIPS
    561 
    562 	movb	$1,_BORINGSSL_function_hit+2(%rip)
    563 #endif
    564 #endif
    565 	xorq	%r10,%r10
    566 
    567 
    568 
    569 
    570 	cmpq	$288,%rdx
    571 	jb	L$gcm_enc_abort
    572 
    573 	leaq	(%rsp),%rax
    574 
    575 	pushq	%rbx
    576 
    577 	pushq	%rbp
    578 
    579 	pushq	%r12
    580 
    581 	pushq	%r13
    582 
    583 	pushq	%r14
    584 
    585 	pushq	%r15
    586 
    587 	vzeroupper
    588 
    589 	vmovdqu	(%r8),%xmm1
    590 	addq	$-128,%rsp
    591 	movl	12(%r8),%ebx
    592 	leaq	L$bswap_mask(%rip),%r11
    593 	leaq	-128(%rcx),%r14
    594 	movq	$0xf80,%r15
    595 	leaq	128(%rcx),%rcx
    596 	vmovdqu	(%r11),%xmm0
    597 	andq	$-128,%rsp
    598 	movl	240-128(%rcx),%ebp
    599 
    600 	andq	%r15,%r14
    601 	andq	%rsp,%r15
    602 	subq	%r14,%r15
    603 	jc	L$enc_no_key_aliasing
    604 	cmpq	$768,%r15
    605 	jnc	L$enc_no_key_aliasing
    606 	subq	%r15,%rsp
    607 L$enc_no_key_aliasing:
    608 
    609 	leaq	(%rsi),%r14
    610 
    611 
    612 
    613 
    614 
    615 
    616 
    617 
    618 	leaq	-192(%rsi,%rdx,1),%r15
    619 
    620 	shrq	$4,%rdx
    621 
    622 	call	_aesni_ctr32_6x
    623 	vpshufb	%xmm0,%xmm9,%xmm8
    624 	vpshufb	%xmm0,%xmm10,%xmm2
    625 	vmovdqu	%xmm8,112(%rsp)
    626 	vpshufb	%xmm0,%xmm11,%xmm4
    627 	vmovdqu	%xmm2,96(%rsp)
    628 	vpshufb	%xmm0,%xmm12,%xmm5
    629 	vmovdqu	%xmm4,80(%rsp)
    630 	vpshufb	%xmm0,%xmm13,%xmm6
    631 	vmovdqu	%xmm5,64(%rsp)
    632 	vpshufb	%xmm0,%xmm14,%xmm7
    633 	vmovdqu	%xmm6,48(%rsp)
    634 
    635 	call	_aesni_ctr32_6x
    636 
    637 	vmovdqu	(%r9),%xmm8
    638 	leaq	32+32(%r9),%r9
    639 	subq	$12,%rdx
    640 	movq	$192,%r10
    641 	vpshufb	%xmm0,%xmm8,%xmm8
    642 
    643 	call	_aesni_ctr32_ghash_6x
    644 	vmovdqu	32(%rsp),%xmm7
    645 	vmovdqu	(%r11),%xmm0
    646 	vmovdqu	0-32(%r9),%xmm3
    647 	vpunpckhqdq	%xmm7,%xmm7,%xmm1
    648 	vmovdqu	32-32(%r9),%xmm15
    649 	vmovups	%xmm9,-96(%rsi)
    650 	vpshufb	%xmm0,%xmm9,%xmm9
    651 	vpxor	%xmm7,%xmm1,%xmm1
    652 	vmovups	%xmm10,-80(%rsi)
    653 	vpshufb	%xmm0,%xmm10,%xmm10
    654 	vmovups	%xmm11,-64(%rsi)
    655 	vpshufb	%xmm0,%xmm11,%xmm11
    656 	vmovups	%xmm12,-48(%rsi)
    657 	vpshufb	%xmm0,%xmm12,%xmm12
    658 	vmovups	%xmm13,-32(%rsi)
    659 	vpshufb	%xmm0,%xmm13,%xmm13
    660 	vmovups	%xmm14,-16(%rsi)
    661 	vpshufb	%xmm0,%xmm14,%xmm14
    662 	vmovdqu	%xmm9,16(%rsp)
    663 	vmovdqu	48(%rsp),%xmm6
    664 	vmovdqu	16-32(%r9),%xmm0
    665 	vpunpckhqdq	%xmm6,%xmm6,%xmm2
    666 	vpclmulqdq	$0x00,%xmm3,%xmm7,%xmm5
    667 	vpxor	%xmm6,%xmm2,%xmm2
    668 	vpclmulqdq	$0x11,%xmm3,%xmm7,%xmm7
    669 	vpclmulqdq	$0x00,%xmm15,%xmm1,%xmm1
    670 
    671 	vmovdqu	64(%rsp),%xmm9
    672 	vpclmulqdq	$0x00,%xmm0,%xmm6,%xmm4
    673 	vmovdqu	48-32(%r9),%xmm3
    674 	vpxor	%xmm5,%xmm4,%xmm4
    675 	vpunpckhqdq	%xmm9,%xmm9,%xmm5
    676 	vpclmulqdq	$0x11,%xmm0,%xmm6,%xmm6
    677 	vpxor	%xmm9,%xmm5,%xmm5
    678 	vpxor	%xmm7,%xmm6,%xmm6
    679 	vpclmulqdq	$0x10,%xmm15,%xmm2,%xmm2
    680 	vmovdqu	80-32(%r9),%xmm15
    681 	vpxor	%xmm1,%xmm2,%xmm2
    682 
    683 	vmovdqu	80(%rsp),%xmm1
    684 	vpclmulqdq	$0x00,%xmm3,%xmm9,%xmm7
    685 	vmovdqu	64-32(%r9),%xmm0
    686 	vpxor	%xmm4,%xmm7,%xmm7
    687 	vpunpckhqdq	%xmm1,%xmm1,%xmm4
    688 	vpclmulqdq	$0x11,%xmm3,%xmm9,%xmm9
    689 	vpxor	%xmm1,%xmm4,%xmm4
    690 	vpxor	%xmm6,%xmm9,%xmm9
    691 	vpclmulqdq	$0x00,%xmm15,%xmm5,%xmm5
    692 	vpxor	%xmm2,%xmm5,%xmm5
    693 
    694 	vmovdqu	96(%rsp),%xmm2
    695 	vpclmulqdq	$0x00,%xmm0,%xmm1,%xmm6
    696 	vmovdqu	96-32(%r9),%xmm3
    697 	vpxor	%xmm7,%xmm6,%xmm6
    698 	vpunpckhqdq	%xmm2,%xmm2,%xmm7
    699 	vpclmulqdq	$0x11,%xmm0,%xmm1,%xmm1
    700 	vpxor	%xmm2,%xmm7,%xmm7
    701 	vpxor	%xmm9,%xmm1,%xmm1
    702 	vpclmulqdq	$0x10,%xmm15,%xmm4,%xmm4
    703 	vmovdqu	128-32(%r9),%xmm15
    704 	vpxor	%xmm5,%xmm4,%xmm4
    705 
    706 	vpxor	112(%rsp),%xmm8,%xmm8
    707 	vpclmulqdq	$0x00,%xmm3,%xmm2,%xmm5
    708 	vmovdqu	112-32(%r9),%xmm0
    709 	vpunpckhqdq	%xmm8,%xmm8,%xmm9
    710 	vpxor	%xmm6,%xmm5,%xmm5
    711 	vpclmulqdq	$0x11,%xmm3,%xmm2,%xmm2
    712 	vpxor	%xmm8,%xmm9,%xmm9
    713 	vpxor	%xmm1,%xmm2,%xmm2
    714 	vpclmulqdq	$0x00,%xmm15,%xmm7,%xmm7
    715 	vpxor	%xmm4,%xmm7,%xmm4
    716 
    717 	vpclmulqdq	$0x00,%xmm0,%xmm8,%xmm6
    718 	vmovdqu	0-32(%r9),%xmm3
    719 	vpunpckhqdq	%xmm14,%xmm14,%xmm1
    720 	vpclmulqdq	$0x11,%xmm0,%xmm8,%xmm8
    721 	vpxor	%xmm14,%xmm1,%xmm1
    722 	vpxor	%xmm5,%xmm6,%xmm5
    723 	vpclmulqdq	$0x10,%xmm15,%xmm9,%xmm9
    724 	vmovdqu	32-32(%r9),%xmm15
    725 	vpxor	%xmm2,%xmm8,%xmm7
    726 	vpxor	%xmm4,%xmm9,%xmm6
    727 
    728 	vmovdqu	16-32(%r9),%xmm0
    729 	vpxor	%xmm5,%xmm7,%xmm9
    730 	vpclmulqdq	$0x00,%xmm3,%xmm14,%xmm4
    731 	vpxor	%xmm9,%xmm6,%xmm6
    732 	vpunpckhqdq	%xmm13,%xmm13,%xmm2
    733 	vpclmulqdq	$0x11,%xmm3,%xmm14,%xmm14
    734 	vpxor	%xmm13,%xmm2,%xmm2
    735 	vpslldq	$8,%xmm6,%xmm9
    736 	vpclmulqdq	$0x00,%xmm15,%xmm1,%xmm1
    737 	vpxor	%xmm9,%xmm5,%xmm8
    738 	vpsrldq	$8,%xmm6,%xmm6
    739 	vpxor	%xmm6,%xmm7,%xmm7
    740 
    741 	vpclmulqdq	$0x00,%xmm0,%xmm13,%xmm5
    742 	vmovdqu	48-32(%r9),%xmm3
    743 	vpxor	%xmm4,%xmm5,%xmm5
    744 	vpunpckhqdq	%xmm12,%xmm12,%xmm9
    745 	vpclmulqdq	$0x11,%xmm0,%xmm13,%xmm13
    746 	vpxor	%xmm12,%xmm9,%xmm9
    747 	vpxor	%xmm14,%xmm13,%xmm13
    748 	vpalignr	$8,%xmm8,%xmm8,%xmm14
    749 	vpclmulqdq	$0x10,%xmm15,%xmm2,%xmm2
    750 	vmovdqu	80-32(%r9),%xmm15
    751 	vpxor	%xmm1,%xmm2,%xmm2
    752 
    753 	vpclmulqdq	$0x00,%xmm3,%xmm12,%xmm4
    754 	vmovdqu	64-32(%r9),%xmm0
    755 	vpxor	%xmm5,%xmm4,%xmm4
    756 	vpunpckhqdq	%xmm11,%xmm11,%xmm1
    757 	vpclmulqdq	$0x11,%xmm3,%xmm12,%xmm12
    758 	vpxor	%xmm11,%xmm1,%xmm1
    759 	vpxor	%xmm13,%xmm12,%xmm12
    760 	vxorps	16(%rsp),%xmm7,%xmm7
    761 	vpclmulqdq	$0x00,%xmm15,%xmm9,%xmm9
    762 	vpxor	%xmm2,%xmm9,%xmm9
    763 
    764 	vpclmulqdq	$0x10,16(%r11),%xmm8,%xmm8
    765 	vxorps	%xmm14,%xmm8,%xmm8
    766 
    767 	vpclmulqdq	$0x00,%xmm0,%xmm11,%xmm5
    768 	vmovdqu	96-32(%r9),%xmm3
    769 	vpxor	%xmm4,%xmm5,%xmm5
    770 	vpunpckhqdq	%xmm10,%xmm10,%xmm2
    771 	vpclmulqdq	$0x11,%xmm0,%xmm11,%xmm11
    772 	vpxor	%xmm10,%xmm2,%xmm2
    773 	vpalignr	$8,%xmm8,%xmm8,%xmm14
    774 	vpxor	%xmm12,%xmm11,%xmm11
    775 	vpclmulqdq	$0x10,%xmm15,%xmm1,%xmm1
    776 	vmovdqu	128-32(%r9),%xmm15
    777 	vpxor	%xmm9,%xmm1,%xmm1
    778 
    779 	vxorps	%xmm7,%xmm14,%xmm14
    780 	vpclmulqdq	$0x10,16(%r11),%xmm8,%xmm8
    781 	vxorps	%xmm14,%xmm8,%xmm8
    782 
    783 	vpclmulqdq	$0x00,%xmm3,%xmm10,%xmm4
    784 	vmovdqu	112-32(%r9),%xmm0
    785 	vpxor	%xmm5,%xmm4,%xmm4
    786 	vpunpckhqdq	%xmm8,%xmm8,%xmm9
    787 	vpclmulqdq	$0x11,%xmm3,%xmm10,%xmm10
    788 	vpxor	%xmm8,%xmm9,%xmm9
    789 	vpxor	%xmm11,%xmm10,%xmm10
    790 	vpclmulqdq	$0x00,%xmm15,%xmm2,%xmm2
    791 	vpxor	%xmm1,%xmm2,%xmm2
    792 
    793 	vpclmulqdq	$0x00,%xmm0,%xmm8,%xmm5
    794 	vpclmulqdq	$0x11,%xmm0,%xmm8,%xmm7
    795 	vpxor	%xmm4,%xmm5,%xmm5
    796 	vpclmulqdq	$0x10,%xmm15,%xmm9,%xmm6
    797 	vpxor	%xmm10,%xmm7,%xmm7
    798 	vpxor	%xmm2,%xmm6,%xmm6
    799 
    800 	vpxor	%xmm5,%xmm7,%xmm4
    801 	vpxor	%xmm4,%xmm6,%xmm6
    802 	vpslldq	$8,%xmm6,%xmm1
    803 	vmovdqu	16(%r11),%xmm3
    804 	vpsrldq	$8,%xmm6,%xmm6
    805 	vpxor	%xmm1,%xmm5,%xmm8
    806 	vpxor	%xmm6,%xmm7,%xmm7
    807 
    808 	vpalignr	$8,%xmm8,%xmm8,%xmm2
    809 	vpclmulqdq	$0x10,%xmm3,%xmm8,%xmm8
    810 	vpxor	%xmm2,%xmm8,%xmm8
    811 
    812 	vpalignr	$8,%xmm8,%xmm8,%xmm2
    813 	vpclmulqdq	$0x10,%xmm3,%xmm8,%xmm8
    814 	vpxor	%xmm7,%xmm2,%xmm2
    815 	vpxor	%xmm2,%xmm8,%xmm8
    816 	vpshufb	(%r11),%xmm8,%xmm8
    817 	vmovdqu	%xmm8,-64(%r9)
    818 
    819 	vzeroupper
    820 	movq	-48(%rax),%r15
    821 
    822 	movq	-40(%rax),%r14
    823 
    824 	movq	-32(%rax),%r13
    825 
    826 	movq	-24(%rax),%r12
    827 
    828 	movq	-16(%rax),%rbp
    829 
    830 	movq	-8(%rax),%rbx
    831 
    832 	leaq	(%rax),%rsp
    833 
    834 L$gcm_enc_abort:
    835 	movq	%r10,%rax
    836 	.byte	0xf3,0xc3
    837 
    838 
    839 .p2align	6
    840 L$bswap_mask:
    841 .byte	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
    842 L$poly:
    843 .byte	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
    844 L$one_msb:
    845 .byte	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
    846 L$two_lsb:
    847 .byte	2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    848 L$one_lsb:
    849 .byte	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    850 .byte	65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
    851 .p2align	6
    852 #endif
    853