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