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