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 default	rel
      5 %define XMMWORD
      6 %define YMMWORD
      7 %define ZMMWORD
      8 
      9 %ifdef BORINGSSL_PREFIX
     10 %include "boringssl_prefix_symbols_nasm.inc"
     11 %endif
     12 section	.text code align=64
     13 
     14 
     15 
     16 ALIGN	32
     17 _aesni_ctr32_ghash_6x:
     18 
     19 	vmovdqu	xmm2,XMMWORD[32+r11]
     20 	sub	rdx,6
     21 	vpxor	xmm4,xmm4,xmm4
     22 	vmovdqu	xmm15,XMMWORD[((0-128))+rcx]
     23 	vpaddb	xmm10,xmm1,xmm2
     24 	vpaddb	xmm11,xmm10,xmm2
     25 	vpaddb	xmm12,xmm11,xmm2
     26 	vpaddb	xmm13,xmm12,xmm2
     27 	vpaddb	xmm14,xmm13,xmm2
     28 	vpxor	xmm9,xmm1,xmm15
     29 	vmovdqu	XMMWORD[(16+8)+rsp],xmm4
     30 	jmp	NEAR $L$oop6x
     31 
     32 ALIGN	32
     33 $L$oop6x:
     34 	add	ebx,100663296
     35 	jc	NEAR $L$handle_ctr32
     36 	vmovdqu	xmm3,XMMWORD[((0-32))+r9]
     37 	vpaddb	xmm1,xmm14,xmm2
     38 	vpxor	xmm10,xmm10,xmm15
     39 	vpxor	xmm11,xmm11,xmm15
     40 
     41 $L$resume_ctr32:
     42 	vmovdqu	XMMWORD[r8],xmm1
     43 	vpclmulqdq	xmm5,xmm7,xmm3,0x10
     44 	vpxor	xmm12,xmm12,xmm15
     45 	vmovups	xmm2,XMMWORD[((16-128))+rcx]
     46 	vpclmulqdq	xmm6,xmm7,xmm3,0x01
     47 
     48 
     49 
     50 
     51 
     52 
     53 
     54 
     55 
     56 
     57 
     58 
     59 
     60 
     61 
     62 
     63 
     64 	xor	r12,r12
     65 	cmp	r15,r14
     66 
     67 	vaesenc	xmm9,xmm9,xmm2
     68 	vmovdqu	xmm0,XMMWORD[((48+8))+rsp]
     69 	vpxor	xmm13,xmm13,xmm15
     70 	vpclmulqdq	xmm1,xmm7,xmm3,0x00
     71 	vaesenc	xmm10,xmm10,xmm2
     72 	vpxor	xmm14,xmm14,xmm15
     73 	setnc	r12b
     74 	vpclmulqdq	xmm7,xmm7,xmm3,0x11
     75 	vaesenc	xmm11,xmm11,xmm2
     76 	vmovdqu	xmm3,XMMWORD[((16-32))+r9]
     77 	neg	r12
     78 	vaesenc	xmm12,xmm12,xmm2
     79 	vpxor	xmm6,xmm6,xmm5
     80 	vpclmulqdq	xmm5,xmm0,xmm3,0x00
     81 	vpxor	xmm8,xmm8,xmm4
     82 	vaesenc	xmm13,xmm13,xmm2
     83 	vpxor	xmm4,xmm1,xmm5
     84 	and	r12,0x60
     85 	vmovups	xmm15,XMMWORD[((32-128))+rcx]
     86 	vpclmulqdq	xmm1,xmm0,xmm3,0x10
     87 	vaesenc	xmm14,xmm14,xmm2
     88 
     89 	vpclmulqdq	xmm2,xmm0,xmm3,0x01
     90 	lea	r14,[r12*1+r14]
     91 	vaesenc	xmm9,xmm9,xmm15
     92 	vpxor	xmm8,xmm8,XMMWORD[((16+8))+rsp]
     93 	vpclmulqdq	xmm3,xmm0,xmm3,0x11
     94 	vmovdqu	xmm0,XMMWORD[((64+8))+rsp]
     95 	vaesenc	xmm10,xmm10,xmm15
     96 	movbe	r13,QWORD[88+r14]
     97 	vaesenc	xmm11,xmm11,xmm15
     98 	movbe	r12,QWORD[80+r14]
     99 	vaesenc	xmm12,xmm12,xmm15
    100 	mov	QWORD[((32+8))+rsp],r13
    101 	vaesenc	xmm13,xmm13,xmm15
    102 	mov	QWORD[((40+8))+rsp],r12
    103 	vmovdqu	xmm5,XMMWORD[((48-32))+r9]
    104 	vaesenc	xmm14,xmm14,xmm15
    105 
    106 	vmovups	xmm15,XMMWORD[((48-128))+rcx]
    107 	vpxor	xmm6,xmm6,xmm1
    108 	vpclmulqdq	xmm1,xmm0,xmm5,0x00
    109 	vaesenc	xmm9,xmm9,xmm15
    110 	vpxor	xmm6,xmm6,xmm2
    111 	vpclmulqdq	xmm2,xmm0,xmm5,0x10
    112 	vaesenc	xmm10,xmm10,xmm15
    113 	vpxor	xmm7,xmm7,xmm3
    114 	vpclmulqdq	xmm3,xmm0,xmm5,0x01
    115 	vaesenc	xmm11,xmm11,xmm15
    116 	vpclmulqdq	xmm5,xmm0,xmm5,0x11
    117 	vmovdqu	xmm0,XMMWORD[((80+8))+rsp]
    118 	vaesenc	xmm12,xmm12,xmm15
    119 	vaesenc	xmm13,xmm13,xmm15
    120 	vpxor	xmm4,xmm4,xmm1
    121 	vmovdqu	xmm1,XMMWORD[((64-32))+r9]
    122 	vaesenc	xmm14,xmm14,xmm15
    123 
    124 	vmovups	xmm15,XMMWORD[((64-128))+rcx]
    125 	vpxor	xmm6,xmm6,xmm2
    126 	vpclmulqdq	xmm2,xmm0,xmm1,0x00
    127 	vaesenc	xmm9,xmm9,xmm15
    128 	vpxor	xmm6,xmm6,xmm3
    129 	vpclmulqdq	xmm3,xmm0,xmm1,0x10
    130 	vaesenc	xmm10,xmm10,xmm15
    131 	movbe	r13,QWORD[72+r14]
    132 	vpxor	xmm7,xmm7,xmm5
    133 	vpclmulqdq	xmm5,xmm0,xmm1,0x01
    134 	vaesenc	xmm11,xmm11,xmm15
    135 	movbe	r12,QWORD[64+r14]
    136 	vpclmulqdq	xmm1,xmm0,xmm1,0x11
    137 	vmovdqu	xmm0,XMMWORD[((96+8))+rsp]
    138 	vaesenc	xmm12,xmm12,xmm15
    139 	mov	QWORD[((48+8))+rsp],r13
    140 	vaesenc	xmm13,xmm13,xmm15
    141 	mov	QWORD[((56+8))+rsp],r12
    142 	vpxor	xmm4,xmm4,xmm2
    143 	vmovdqu	xmm2,XMMWORD[((96-32))+r9]
    144 	vaesenc	xmm14,xmm14,xmm15
    145 
    146 	vmovups	xmm15,XMMWORD[((80-128))+rcx]
    147 	vpxor	xmm6,xmm6,xmm3
    148 	vpclmulqdq	xmm3,xmm0,xmm2,0x00
    149 	vaesenc	xmm9,xmm9,xmm15
    150 	vpxor	xmm6,xmm6,xmm5
    151 	vpclmulqdq	xmm5,xmm0,xmm2,0x10
    152 	vaesenc	xmm10,xmm10,xmm15
    153 	movbe	r13,QWORD[56+r14]
    154 	vpxor	xmm7,xmm7,xmm1
    155 	vpclmulqdq	xmm1,xmm0,xmm2,0x01
    156 	vpxor	xmm8,xmm8,XMMWORD[((112+8))+rsp]
    157 	vaesenc	xmm11,xmm11,xmm15
    158 	movbe	r12,QWORD[48+r14]
    159 	vpclmulqdq	xmm2,xmm0,xmm2,0x11
    160 	vaesenc	xmm12,xmm12,xmm15
    161 	mov	QWORD[((64+8))+rsp],r13
    162 	vaesenc	xmm13,xmm13,xmm15
    163 	mov	QWORD[((72+8))+rsp],r12
    164 	vpxor	xmm4,xmm4,xmm3
    165 	vmovdqu	xmm3,XMMWORD[((112-32))+r9]
    166 	vaesenc	xmm14,xmm14,xmm15
    167 
    168 	vmovups	xmm15,XMMWORD[((96-128))+rcx]
    169 	vpxor	xmm6,xmm6,xmm5
    170 	vpclmulqdq	xmm5,xmm8,xmm3,0x10
    171 	vaesenc	xmm9,xmm9,xmm15
    172 	vpxor	xmm6,xmm6,xmm1
    173 	vpclmulqdq	xmm1,xmm8,xmm3,0x01
    174 	vaesenc	xmm10,xmm10,xmm15
    175 	movbe	r13,QWORD[40+r14]
    176 	vpxor	xmm7,xmm7,xmm2
    177 	vpclmulqdq	xmm2,xmm8,xmm3,0x00
    178 	vaesenc	xmm11,xmm11,xmm15
    179 	movbe	r12,QWORD[32+r14]
    180 	vpclmulqdq	xmm8,xmm8,xmm3,0x11
    181 	vaesenc	xmm12,xmm12,xmm15
    182 	mov	QWORD[((80+8))+rsp],r13
    183 	vaesenc	xmm13,xmm13,xmm15
    184 	mov	QWORD[((88+8))+rsp],r12
    185 	vpxor	xmm6,xmm6,xmm5
    186 	vaesenc	xmm14,xmm14,xmm15
    187 	vpxor	xmm6,xmm6,xmm1
    188 
    189 	vmovups	xmm15,XMMWORD[((112-128))+rcx]
    190 	vpslldq	xmm5,xmm6,8
    191 	vpxor	xmm4,xmm4,xmm2
    192 	vmovdqu	xmm3,XMMWORD[16+r11]
    193 
    194 	vaesenc	xmm9,xmm9,xmm15
    195 	vpxor	xmm7,xmm7,xmm8
    196 	vaesenc	xmm10,xmm10,xmm15
    197 	vpxor	xmm4,xmm4,xmm5
    198 	movbe	r13,QWORD[24+r14]
    199 	vaesenc	xmm11,xmm11,xmm15
    200 	movbe	r12,QWORD[16+r14]
    201 	vpalignr	xmm0,xmm4,xmm4,8
    202 	vpclmulqdq	xmm4,xmm4,xmm3,0x10
    203 	mov	QWORD[((96+8))+rsp],r13
    204 	vaesenc	xmm12,xmm12,xmm15
    205 	mov	QWORD[((104+8))+rsp],r12
    206 	vaesenc	xmm13,xmm13,xmm15
    207 	vmovups	xmm1,XMMWORD[((128-128))+rcx]
    208 	vaesenc	xmm14,xmm14,xmm15
    209 
    210 	vaesenc	xmm9,xmm9,xmm1
    211 	vmovups	xmm15,XMMWORD[((144-128))+rcx]
    212 	vaesenc	xmm10,xmm10,xmm1
    213 	vpsrldq	xmm6,xmm6,8
    214 	vaesenc	xmm11,xmm11,xmm1
    215 	vpxor	xmm7,xmm7,xmm6
    216 	vaesenc	xmm12,xmm12,xmm1
    217 	vpxor	xmm4,xmm4,xmm0
    218 	movbe	r13,QWORD[8+r14]
    219 	vaesenc	xmm13,xmm13,xmm1
    220 	movbe	r12,QWORD[r14]
    221 	vaesenc	xmm14,xmm14,xmm1
    222 	vmovups	xmm1,XMMWORD[((160-128))+rcx]
    223 	cmp	ebp,11
    224 	jb	NEAR $L$enc_tail
    225 
    226 	vaesenc	xmm9,xmm9,xmm15
    227 	vaesenc	xmm10,xmm10,xmm15
    228 	vaesenc	xmm11,xmm11,xmm15
    229 	vaesenc	xmm12,xmm12,xmm15
    230 	vaesenc	xmm13,xmm13,xmm15
    231 	vaesenc	xmm14,xmm14,xmm15
    232 
    233 	vaesenc	xmm9,xmm9,xmm1
    234 	vaesenc	xmm10,xmm10,xmm1
    235 	vaesenc	xmm11,xmm11,xmm1
    236 	vaesenc	xmm12,xmm12,xmm1
    237 	vaesenc	xmm13,xmm13,xmm1
    238 	vmovups	xmm15,XMMWORD[((176-128))+rcx]
    239 	vaesenc	xmm14,xmm14,xmm1
    240 	vmovups	xmm1,XMMWORD[((192-128))+rcx]
    241 	je	NEAR $L$enc_tail
    242 
    243 	vaesenc	xmm9,xmm9,xmm15
    244 	vaesenc	xmm10,xmm10,xmm15
    245 	vaesenc	xmm11,xmm11,xmm15
    246 	vaesenc	xmm12,xmm12,xmm15
    247 	vaesenc	xmm13,xmm13,xmm15
    248 	vaesenc	xmm14,xmm14,xmm15
    249 
    250 	vaesenc	xmm9,xmm9,xmm1
    251 	vaesenc	xmm10,xmm10,xmm1
    252 	vaesenc	xmm11,xmm11,xmm1
    253 	vaesenc	xmm12,xmm12,xmm1
    254 	vaesenc	xmm13,xmm13,xmm1
    255 	vmovups	xmm15,XMMWORD[((208-128))+rcx]
    256 	vaesenc	xmm14,xmm14,xmm1
    257 	vmovups	xmm1,XMMWORD[((224-128))+rcx]
    258 	jmp	NEAR $L$enc_tail
    259 
    260 ALIGN	32
    261 $L$handle_ctr32:
    262 	vmovdqu	xmm0,XMMWORD[r11]
    263 	vpshufb	xmm6,xmm1,xmm0
    264 	vmovdqu	xmm5,XMMWORD[48+r11]
    265 	vpaddd	xmm10,xmm6,XMMWORD[64+r11]
    266 	vpaddd	xmm11,xmm6,xmm5
    267 	vmovdqu	xmm3,XMMWORD[((0-32))+r9]
    268 	vpaddd	xmm12,xmm10,xmm5
    269 	vpshufb	xmm10,xmm10,xmm0
    270 	vpaddd	xmm13,xmm11,xmm5
    271 	vpshufb	xmm11,xmm11,xmm0
    272 	vpxor	xmm10,xmm10,xmm15
    273 	vpaddd	xmm14,xmm12,xmm5
    274 	vpshufb	xmm12,xmm12,xmm0
    275 	vpxor	xmm11,xmm11,xmm15
    276 	vpaddd	xmm1,xmm13,xmm5
    277 	vpshufb	xmm13,xmm13,xmm0
    278 	vpshufb	xmm14,xmm14,xmm0
    279 	vpshufb	xmm1,xmm1,xmm0
    280 	jmp	NEAR $L$resume_ctr32
    281 
    282 ALIGN	32
    283 $L$enc_tail:
    284 	vaesenc	xmm9,xmm9,xmm15
    285 	vmovdqu	XMMWORD[(16+8)+rsp],xmm7
    286 	vpalignr	xmm8,xmm4,xmm4,8
    287 	vaesenc	xmm10,xmm10,xmm15
    288 	vpclmulqdq	xmm4,xmm4,xmm3,0x10
    289 	vpxor	xmm2,xmm1,XMMWORD[rdi]
    290 	vaesenc	xmm11,xmm11,xmm15
    291 	vpxor	xmm0,xmm1,XMMWORD[16+rdi]
    292 	vaesenc	xmm12,xmm12,xmm15
    293 	vpxor	xmm5,xmm1,XMMWORD[32+rdi]
    294 	vaesenc	xmm13,xmm13,xmm15
    295 	vpxor	xmm6,xmm1,XMMWORD[48+rdi]
    296 	vaesenc	xmm14,xmm14,xmm15
    297 	vpxor	xmm7,xmm1,XMMWORD[64+rdi]
    298 	vpxor	xmm3,xmm1,XMMWORD[80+rdi]
    299 	vmovdqu	xmm1,XMMWORD[r8]
    300 
    301 	vaesenclast	xmm9,xmm9,xmm2
    302 	vmovdqu	xmm2,XMMWORD[32+r11]
    303 	vaesenclast	xmm10,xmm10,xmm0
    304 	vpaddb	xmm0,xmm1,xmm2
    305 	mov	QWORD[((112+8))+rsp],r13
    306 	lea	rdi,[96+rdi]
    307 	vaesenclast	xmm11,xmm11,xmm5
    308 	vpaddb	xmm5,xmm0,xmm2
    309 	mov	QWORD[((120+8))+rsp],r12
    310 	lea	rsi,[96+rsi]
    311 	vmovdqu	xmm15,XMMWORD[((0-128))+rcx]
    312 	vaesenclast	xmm12,xmm12,xmm6
    313 	vpaddb	xmm6,xmm5,xmm2
    314 	vaesenclast	xmm13,xmm13,xmm7
    315 	vpaddb	xmm7,xmm6,xmm2
    316 	vaesenclast	xmm14,xmm14,xmm3
    317 	vpaddb	xmm3,xmm7,xmm2
    318 
    319 	add	r10,0x60
    320 	sub	rdx,0x6
    321 	jc	NEAR $L$6x_done
    322 
    323 	vmovups	XMMWORD[(-96)+rsi],xmm9
    324 	vpxor	xmm9,xmm1,xmm15
    325 	vmovups	XMMWORD[(-80)+rsi],xmm10
    326 	vmovdqa	xmm10,xmm0
    327 	vmovups	XMMWORD[(-64)+rsi],xmm11
    328 	vmovdqa	xmm11,xmm5
    329 	vmovups	XMMWORD[(-48)+rsi],xmm12
    330 	vmovdqa	xmm12,xmm6
    331 	vmovups	XMMWORD[(-32)+rsi],xmm13
    332 	vmovdqa	xmm13,xmm7
    333 	vmovups	XMMWORD[(-16)+rsi],xmm14
    334 	vmovdqa	xmm14,xmm3
    335 	vmovdqu	xmm7,XMMWORD[((32+8))+rsp]
    336 	jmp	NEAR $L$oop6x
    337 
    338 $L$6x_done:
    339 	vpxor	xmm8,xmm8,XMMWORD[((16+8))+rsp]
    340 	vpxor	xmm8,xmm8,xmm4
    341 
    342 	DB	0F3h,0C3h		;repret
    343 
    344 
    345 global	aesni_gcm_decrypt
    346 
    347 ALIGN	32
    348 aesni_gcm_decrypt:
    349 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    350 	mov	QWORD[16+rsp],rsi
    351 	mov	rax,rsp
    352 $L$SEH_begin_aesni_gcm_decrypt:
    353 	mov	rdi,rcx
    354 	mov	rsi,rdx
    355 	mov	rdx,r8
    356 	mov	rcx,r9
    357 	mov	r8,QWORD[40+rsp]
    358 	mov	r9,QWORD[48+rsp]
    359 
    360 
    361 
    362 	xor	r10,r10
    363 
    364 
    365 
    366 	cmp	rdx,0x60
    367 	jb	NEAR $L$gcm_dec_abort
    368 
    369 	lea	rax,[rsp]
    370 
    371 	push	rbx
    372 
    373 	push	rbp
    374 
    375 	push	r12
    376 
    377 	push	r13
    378 
    379 	push	r14
    380 
    381 	push	r15
    382 
    383 	lea	rsp,[((-168))+rsp]
    384 	movaps	XMMWORD[(-216)+rax],xmm6
    385 	movaps	XMMWORD[(-200)+rax],xmm7
    386 	movaps	XMMWORD[(-184)+rax],xmm8
    387 	movaps	XMMWORD[(-168)+rax],xmm9
    388 	movaps	XMMWORD[(-152)+rax],xmm10
    389 	movaps	XMMWORD[(-136)+rax],xmm11
    390 	movaps	XMMWORD[(-120)+rax],xmm12
    391 	movaps	XMMWORD[(-104)+rax],xmm13
    392 	movaps	XMMWORD[(-88)+rax],xmm14
    393 	movaps	XMMWORD[(-72)+rax],xmm15
    394 $L$gcm_dec_body:
    395 	vzeroupper
    396 
    397 	vmovdqu	xmm1,XMMWORD[r8]
    398 	add	rsp,-128
    399 	mov	ebx,DWORD[12+r8]
    400 	lea	r11,[$L$bswap_mask]
    401 	lea	r14,[((-128))+rcx]
    402 	mov	r15,0xf80
    403 	vmovdqu	xmm8,XMMWORD[r9]
    404 	and	rsp,-128
    405 	vmovdqu	xmm0,XMMWORD[r11]
    406 	lea	rcx,[128+rcx]
    407 	lea	r9,[((32+32))+r9]
    408 	mov	ebp,DWORD[((240-128))+rcx]
    409 	vpshufb	xmm8,xmm8,xmm0
    410 
    411 	and	r14,r15
    412 	and	r15,rsp
    413 	sub	r15,r14
    414 	jc	NEAR $L$dec_no_key_aliasing
    415 	cmp	r15,768
    416 	jnc	NEAR $L$dec_no_key_aliasing
    417 	sub	rsp,r15
    418 $L$dec_no_key_aliasing:
    419 
    420 	vmovdqu	xmm7,XMMWORD[80+rdi]
    421 	lea	r14,[rdi]
    422 	vmovdqu	xmm4,XMMWORD[64+rdi]
    423 
    424 
    425 
    426 
    427 
    428 
    429 
    430 	lea	r15,[((-192))+rdx*1+rdi]
    431 
    432 	vmovdqu	xmm5,XMMWORD[48+rdi]
    433 	shr	rdx,4
    434 	xor	r10,r10
    435 	vmovdqu	xmm6,XMMWORD[32+rdi]
    436 	vpshufb	xmm7,xmm7,xmm0
    437 	vmovdqu	xmm2,XMMWORD[16+rdi]
    438 	vpshufb	xmm4,xmm4,xmm0
    439 	vmovdqu	xmm3,XMMWORD[rdi]
    440 	vpshufb	xmm5,xmm5,xmm0
    441 	vmovdqu	XMMWORD[48+rsp],xmm4
    442 	vpshufb	xmm6,xmm6,xmm0
    443 	vmovdqu	XMMWORD[64+rsp],xmm5
    444 	vpshufb	xmm2,xmm2,xmm0
    445 	vmovdqu	XMMWORD[80+rsp],xmm6
    446 	vpshufb	xmm3,xmm3,xmm0
    447 	vmovdqu	XMMWORD[96+rsp],xmm2
    448 	vmovdqu	XMMWORD[112+rsp],xmm3
    449 
    450 	call	_aesni_ctr32_ghash_6x
    451 
    452 	vmovups	XMMWORD[(-96)+rsi],xmm9
    453 	vmovups	XMMWORD[(-80)+rsi],xmm10
    454 	vmovups	XMMWORD[(-64)+rsi],xmm11
    455 	vmovups	XMMWORD[(-48)+rsi],xmm12
    456 	vmovups	XMMWORD[(-32)+rsi],xmm13
    457 	vmovups	XMMWORD[(-16)+rsi],xmm14
    458 
    459 	vpshufb	xmm8,xmm8,XMMWORD[r11]
    460 	vmovdqu	XMMWORD[(-64)+r9],xmm8
    461 
    462 	vzeroupper
    463 	movaps	xmm6,XMMWORD[((-216))+rax]
    464 	movaps	xmm7,XMMWORD[((-200))+rax]
    465 	movaps	xmm8,XMMWORD[((-184))+rax]
    466 	movaps	xmm9,XMMWORD[((-168))+rax]
    467 	movaps	xmm10,XMMWORD[((-152))+rax]
    468 	movaps	xmm11,XMMWORD[((-136))+rax]
    469 	movaps	xmm12,XMMWORD[((-120))+rax]
    470 	movaps	xmm13,XMMWORD[((-104))+rax]
    471 	movaps	xmm14,XMMWORD[((-88))+rax]
    472 	movaps	xmm15,XMMWORD[((-72))+rax]
    473 	mov	r15,QWORD[((-48))+rax]
    474 
    475 	mov	r14,QWORD[((-40))+rax]
    476 
    477 	mov	r13,QWORD[((-32))+rax]
    478 
    479 	mov	r12,QWORD[((-24))+rax]
    480 
    481 	mov	rbp,QWORD[((-16))+rax]
    482 
    483 	mov	rbx,QWORD[((-8))+rax]
    484 
    485 	lea	rsp,[rax]
    486 
    487 $L$gcm_dec_abort:
    488 	mov	rax,r10
    489 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    490 	mov	rsi,QWORD[16+rsp]
    491 	DB	0F3h,0C3h		;repret
    492 
    493 $L$SEH_end_aesni_gcm_decrypt:
    494 
    495 ALIGN	32
    496 _aesni_ctr32_6x:
    497 
    498 	vmovdqu	xmm4,XMMWORD[((0-128))+rcx]
    499 	vmovdqu	xmm2,XMMWORD[32+r11]
    500 	lea	r13,[((-1))+rbp]
    501 	vmovups	xmm15,XMMWORD[((16-128))+rcx]
    502 	lea	r12,[((32-128))+rcx]
    503 	vpxor	xmm9,xmm1,xmm4
    504 	add	ebx,100663296
    505 	jc	NEAR $L$handle_ctr32_2
    506 	vpaddb	xmm10,xmm1,xmm2
    507 	vpaddb	xmm11,xmm10,xmm2
    508 	vpxor	xmm10,xmm10,xmm4
    509 	vpaddb	xmm12,xmm11,xmm2
    510 	vpxor	xmm11,xmm11,xmm4
    511 	vpaddb	xmm13,xmm12,xmm2
    512 	vpxor	xmm12,xmm12,xmm4
    513 	vpaddb	xmm14,xmm13,xmm2
    514 	vpxor	xmm13,xmm13,xmm4
    515 	vpaddb	xmm1,xmm14,xmm2
    516 	vpxor	xmm14,xmm14,xmm4
    517 	jmp	NEAR $L$oop_ctr32
    518 
    519 ALIGN	16
    520 $L$oop_ctr32:
    521 	vaesenc	xmm9,xmm9,xmm15
    522 	vaesenc	xmm10,xmm10,xmm15
    523 	vaesenc	xmm11,xmm11,xmm15
    524 	vaesenc	xmm12,xmm12,xmm15
    525 	vaesenc	xmm13,xmm13,xmm15
    526 	vaesenc	xmm14,xmm14,xmm15
    527 	vmovups	xmm15,XMMWORD[r12]
    528 	lea	r12,[16+r12]
    529 	dec	r13d
    530 	jnz	NEAR $L$oop_ctr32
    531 
    532 	vmovdqu	xmm3,XMMWORD[r12]
    533 	vaesenc	xmm9,xmm9,xmm15
    534 	vpxor	xmm4,xmm3,XMMWORD[rdi]
    535 	vaesenc	xmm10,xmm10,xmm15
    536 	vpxor	xmm5,xmm3,XMMWORD[16+rdi]
    537 	vaesenc	xmm11,xmm11,xmm15
    538 	vpxor	xmm6,xmm3,XMMWORD[32+rdi]
    539 	vaesenc	xmm12,xmm12,xmm15
    540 	vpxor	xmm8,xmm3,XMMWORD[48+rdi]
    541 	vaesenc	xmm13,xmm13,xmm15
    542 	vpxor	xmm2,xmm3,XMMWORD[64+rdi]
    543 	vaesenc	xmm14,xmm14,xmm15
    544 	vpxor	xmm3,xmm3,XMMWORD[80+rdi]
    545 	lea	rdi,[96+rdi]
    546 
    547 	vaesenclast	xmm9,xmm9,xmm4
    548 	vaesenclast	xmm10,xmm10,xmm5
    549 	vaesenclast	xmm11,xmm11,xmm6
    550 	vaesenclast	xmm12,xmm12,xmm8
    551 	vaesenclast	xmm13,xmm13,xmm2
    552 	vaesenclast	xmm14,xmm14,xmm3
    553 	vmovups	XMMWORD[rsi],xmm9
    554 	vmovups	XMMWORD[16+rsi],xmm10
    555 	vmovups	XMMWORD[32+rsi],xmm11
    556 	vmovups	XMMWORD[48+rsi],xmm12
    557 	vmovups	XMMWORD[64+rsi],xmm13
    558 	vmovups	XMMWORD[80+rsi],xmm14
    559 	lea	rsi,[96+rsi]
    560 
    561 	DB	0F3h,0C3h		;repret
    562 ALIGN	32
    563 $L$handle_ctr32_2:
    564 	vpshufb	xmm6,xmm1,xmm0
    565 	vmovdqu	xmm5,XMMWORD[48+r11]
    566 	vpaddd	xmm10,xmm6,XMMWORD[64+r11]
    567 	vpaddd	xmm11,xmm6,xmm5
    568 	vpaddd	xmm12,xmm10,xmm5
    569 	vpshufb	xmm10,xmm10,xmm0
    570 	vpaddd	xmm13,xmm11,xmm5
    571 	vpshufb	xmm11,xmm11,xmm0
    572 	vpxor	xmm10,xmm10,xmm4
    573 	vpaddd	xmm14,xmm12,xmm5
    574 	vpshufb	xmm12,xmm12,xmm0
    575 	vpxor	xmm11,xmm11,xmm4
    576 	vpaddd	xmm1,xmm13,xmm5
    577 	vpshufb	xmm13,xmm13,xmm0
    578 	vpxor	xmm12,xmm12,xmm4
    579 	vpshufb	xmm14,xmm14,xmm0
    580 	vpxor	xmm13,xmm13,xmm4
    581 	vpshufb	xmm1,xmm1,xmm0
    582 	vpxor	xmm14,xmm14,xmm4
    583 	jmp	NEAR $L$oop_ctr32
    584 
    585 
    586 
    587 global	aesni_gcm_encrypt
    588 
    589 ALIGN	32
    590 aesni_gcm_encrypt:
    591 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    592 	mov	QWORD[16+rsp],rsi
    593 	mov	rax,rsp
    594 $L$SEH_begin_aesni_gcm_encrypt:
    595 	mov	rdi,rcx
    596 	mov	rsi,rdx
    597 	mov	rdx,r8
    598 	mov	rcx,r9
    599 	mov	r8,QWORD[40+rsp]
    600 	mov	r9,QWORD[48+rsp]
    601 
    602 
    603 
    604 %ifndef NDEBUG
    605 %ifndef BORINGSSL_FIPS
    606 EXTERN	BORINGSSL_function_hit
    607 	mov	BYTE[((BORINGSSL_function_hit+2))],1
    608 %endif
    609 %endif
    610 	xor	r10,r10
    611 
    612 
    613 
    614 
    615 	cmp	rdx,0x60*3
    616 	jb	NEAR $L$gcm_enc_abort
    617 
    618 	lea	rax,[rsp]
    619 
    620 	push	rbx
    621 
    622 	push	rbp
    623 
    624 	push	r12
    625 
    626 	push	r13
    627 
    628 	push	r14
    629 
    630 	push	r15
    631 
    632 	lea	rsp,[((-168))+rsp]
    633 	movaps	XMMWORD[(-216)+rax],xmm6
    634 	movaps	XMMWORD[(-200)+rax],xmm7
    635 	movaps	XMMWORD[(-184)+rax],xmm8
    636 	movaps	XMMWORD[(-168)+rax],xmm9
    637 	movaps	XMMWORD[(-152)+rax],xmm10
    638 	movaps	XMMWORD[(-136)+rax],xmm11
    639 	movaps	XMMWORD[(-120)+rax],xmm12
    640 	movaps	XMMWORD[(-104)+rax],xmm13
    641 	movaps	XMMWORD[(-88)+rax],xmm14
    642 	movaps	XMMWORD[(-72)+rax],xmm15
    643 $L$gcm_enc_body:
    644 	vzeroupper
    645 
    646 	vmovdqu	xmm1,XMMWORD[r8]
    647 	add	rsp,-128
    648 	mov	ebx,DWORD[12+r8]
    649 	lea	r11,[$L$bswap_mask]
    650 	lea	r14,[((-128))+rcx]
    651 	mov	r15,0xf80
    652 	lea	rcx,[128+rcx]
    653 	vmovdqu	xmm0,XMMWORD[r11]
    654 	and	rsp,-128
    655 	mov	ebp,DWORD[((240-128))+rcx]
    656 
    657 	and	r14,r15
    658 	and	r15,rsp
    659 	sub	r15,r14
    660 	jc	NEAR $L$enc_no_key_aliasing
    661 	cmp	r15,768
    662 	jnc	NEAR $L$enc_no_key_aliasing
    663 	sub	rsp,r15
    664 $L$enc_no_key_aliasing:
    665 
    666 	lea	r14,[rsi]
    667 
    668 
    669 
    670 
    671 
    672 
    673 
    674 
    675 	lea	r15,[((-192))+rdx*1+rsi]
    676 
    677 	shr	rdx,4
    678 
    679 	call	_aesni_ctr32_6x
    680 	vpshufb	xmm8,xmm9,xmm0
    681 	vpshufb	xmm2,xmm10,xmm0
    682 	vmovdqu	XMMWORD[112+rsp],xmm8
    683 	vpshufb	xmm4,xmm11,xmm0
    684 	vmovdqu	XMMWORD[96+rsp],xmm2
    685 	vpshufb	xmm5,xmm12,xmm0
    686 	vmovdqu	XMMWORD[80+rsp],xmm4
    687 	vpshufb	xmm6,xmm13,xmm0
    688 	vmovdqu	XMMWORD[64+rsp],xmm5
    689 	vpshufb	xmm7,xmm14,xmm0
    690 	vmovdqu	XMMWORD[48+rsp],xmm6
    691 
    692 	call	_aesni_ctr32_6x
    693 
    694 	vmovdqu	xmm8,XMMWORD[r9]
    695 	lea	r9,[((32+32))+r9]
    696 	sub	rdx,12
    697 	mov	r10,0x60*2
    698 	vpshufb	xmm8,xmm8,xmm0
    699 
    700 	call	_aesni_ctr32_ghash_6x
    701 	vmovdqu	xmm7,XMMWORD[32+rsp]
    702 	vmovdqu	xmm0,XMMWORD[r11]
    703 	vmovdqu	xmm3,XMMWORD[((0-32))+r9]
    704 	vpunpckhqdq	xmm1,xmm7,xmm7
    705 	vmovdqu	xmm15,XMMWORD[((32-32))+r9]
    706 	vmovups	XMMWORD[(-96)+rsi],xmm9
    707 	vpshufb	xmm9,xmm9,xmm0
    708 	vpxor	xmm1,xmm1,xmm7
    709 	vmovups	XMMWORD[(-80)+rsi],xmm10
    710 	vpshufb	xmm10,xmm10,xmm0
    711 	vmovups	XMMWORD[(-64)+rsi],xmm11
    712 	vpshufb	xmm11,xmm11,xmm0
    713 	vmovups	XMMWORD[(-48)+rsi],xmm12
    714 	vpshufb	xmm12,xmm12,xmm0
    715 	vmovups	XMMWORD[(-32)+rsi],xmm13
    716 	vpshufb	xmm13,xmm13,xmm0
    717 	vmovups	XMMWORD[(-16)+rsi],xmm14
    718 	vpshufb	xmm14,xmm14,xmm0
    719 	vmovdqu	XMMWORD[16+rsp],xmm9
    720 	vmovdqu	xmm6,XMMWORD[48+rsp]
    721 	vmovdqu	xmm0,XMMWORD[((16-32))+r9]
    722 	vpunpckhqdq	xmm2,xmm6,xmm6
    723 	vpclmulqdq	xmm5,xmm7,xmm3,0x00
    724 	vpxor	xmm2,xmm2,xmm6
    725 	vpclmulqdq	xmm7,xmm7,xmm3,0x11
    726 	vpclmulqdq	xmm1,xmm1,xmm15,0x00
    727 
    728 	vmovdqu	xmm9,XMMWORD[64+rsp]
    729 	vpclmulqdq	xmm4,xmm6,xmm0,0x00
    730 	vmovdqu	xmm3,XMMWORD[((48-32))+r9]
    731 	vpxor	xmm4,xmm4,xmm5
    732 	vpunpckhqdq	xmm5,xmm9,xmm9
    733 	vpclmulqdq	xmm6,xmm6,xmm0,0x11
    734 	vpxor	xmm5,xmm5,xmm9
    735 	vpxor	xmm6,xmm6,xmm7
    736 	vpclmulqdq	xmm2,xmm2,xmm15,0x10
    737 	vmovdqu	xmm15,XMMWORD[((80-32))+r9]
    738 	vpxor	xmm2,xmm2,xmm1
    739 
    740 	vmovdqu	xmm1,XMMWORD[80+rsp]
    741 	vpclmulqdq	xmm7,xmm9,xmm3,0x00
    742 	vmovdqu	xmm0,XMMWORD[((64-32))+r9]
    743 	vpxor	xmm7,xmm7,xmm4
    744 	vpunpckhqdq	xmm4,xmm1,xmm1
    745 	vpclmulqdq	xmm9,xmm9,xmm3,0x11
    746 	vpxor	xmm4,xmm4,xmm1
    747 	vpxor	xmm9,xmm9,xmm6
    748 	vpclmulqdq	xmm5,xmm5,xmm15,0x00
    749 	vpxor	xmm5,xmm5,xmm2
    750 
    751 	vmovdqu	xmm2,XMMWORD[96+rsp]
    752 	vpclmulqdq	xmm6,xmm1,xmm0,0x00
    753 	vmovdqu	xmm3,XMMWORD[((96-32))+r9]
    754 	vpxor	xmm6,xmm6,xmm7
    755 	vpunpckhqdq	xmm7,xmm2,xmm2
    756 	vpclmulqdq	xmm1,xmm1,xmm0,0x11
    757 	vpxor	xmm7,xmm7,xmm2
    758 	vpxor	xmm1,xmm1,xmm9
    759 	vpclmulqdq	xmm4,xmm4,xmm15,0x10
    760 	vmovdqu	xmm15,XMMWORD[((128-32))+r9]
    761 	vpxor	xmm4,xmm4,xmm5
    762 
    763 	vpxor	xmm8,xmm8,XMMWORD[112+rsp]
    764 	vpclmulqdq	xmm5,xmm2,xmm3,0x00
    765 	vmovdqu	xmm0,XMMWORD[((112-32))+r9]
    766 	vpunpckhqdq	xmm9,xmm8,xmm8
    767 	vpxor	xmm5,xmm5,xmm6
    768 	vpclmulqdq	xmm2,xmm2,xmm3,0x11
    769 	vpxor	xmm9,xmm9,xmm8
    770 	vpxor	xmm2,xmm2,xmm1
    771 	vpclmulqdq	xmm7,xmm7,xmm15,0x00
    772 	vpxor	xmm4,xmm7,xmm4
    773 
    774 	vpclmulqdq	xmm6,xmm8,xmm0,0x00
    775 	vmovdqu	xmm3,XMMWORD[((0-32))+r9]
    776 	vpunpckhqdq	xmm1,xmm14,xmm14
    777 	vpclmulqdq	xmm8,xmm8,xmm0,0x11
    778 	vpxor	xmm1,xmm1,xmm14
    779 	vpxor	xmm5,xmm6,xmm5
    780 	vpclmulqdq	xmm9,xmm9,xmm15,0x10
    781 	vmovdqu	xmm15,XMMWORD[((32-32))+r9]
    782 	vpxor	xmm7,xmm8,xmm2
    783 	vpxor	xmm6,xmm9,xmm4
    784 
    785 	vmovdqu	xmm0,XMMWORD[((16-32))+r9]
    786 	vpxor	xmm9,xmm7,xmm5
    787 	vpclmulqdq	xmm4,xmm14,xmm3,0x00
    788 	vpxor	xmm6,xmm6,xmm9
    789 	vpunpckhqdq	xmm2,xmm13,xmm13
    790 	vpclmulqdq	xmm14,xmm14,xmm3,0x11
    791 	vpxor	xmm2,xmm2,xmm13
    792 	vpslldq	xmm9,xmm6,8
    793 	vpclmulqdq	xmm1,xmm1,xmm15,0x00
    794 	vpxor	xmm8,xmm5,xmm9
    795 	vpsrldq	xmm6,xmm6,8
    796 	vpxor	xmm7,xmm7,xmm6
    797 
    798 	vpclmulqdq	xmm5,xmm13,xmm0,0x00
    799 	vmovdqu	xmm3,XMMWORD[((48-32))+r9]
    800 	vpxor	xmm5,xmm5,xmm4
    801 	vpunpckhqdq	xmm9,xmm12,xmm12
    802 	vpclmulqdq	xmm13,xmm13,xmm0,0x11
    803 	vpxor	xmm9,xmm9,xmm12
    804 	vpxor	xmm13,xmm13,xmm14
    805 	vpalignr	xmm14,xmm8,xmm8,8
    806 	vpclmulqdq	xmm2,xmm2,xmm15,0x10
    807 	vmovdqu	xmm15,XMMWORD[((80-32))+r9]
    808 	vpxor	xmm2,xmm2,xmm1
    809 
    810 	vpclmulqdq	xmm4,xmm12,xmm3,0x00
    811 	vmovdqu	xmm0,XMMWORD[((64-32))+r9]
    812 	vpxor	xmm4,xmm4,xmm5
    813 	vpunpckhqdq	xmm1,xmm11,xmm11
    814 	vpclmulqdq	xmm12,xmm12,xmm3,0x11
    815 	vpxor	xmm1,xmm1,xmm11
    816 	vpxor	xmm12,xmm12,xmm13
    817 	vxorps	xmm7,xmm7,XMMWORD[16+rsp]
    818 	vpclmulqdq	xmm9,xmm9,xmm15,0x00
    819 	vpxor	xmm9,xmm9,xmm2
    820 
    821 	vpclmulqdq	xmm8,xmm8,XMMWORD[16+r11],0x10
    822 	vxorps	xmm8,xmm8,xmm14
    823 
    824 	vpclmulqdq	xmm5,xmm11,xmm0,0x00
    825 	vmovdqu	xmm3,XMMWORD[((96-32))+r9]
    826 	vpxor	xmm5,xmm5,xmm4
    827 	vpunpckhqdq	xmm2,xmm10,xmm10
    828 	vpclmulqdq	xmm11,xmm11,xmm0,0x11
    829 	vpxor	xmm2,xmm2,xmm10
    830 	vpalignr	xmm14,xmm8,xmm8,8
    831 	vpxor	xmm11,xmm11,xmm12
    832 	vpclmulqdq	xmm1,xmm1,xmm15,0x10
    833 	vmovdqu	xmm15,XMMWORD[((128-32))+r9]
    834 	vpxor	xmm1,xmm1,xmm9
    835 
    836 	vxorps	xmm14,xmm14,xmm7
    837 	vpclmulqdq	xmm8,xmm8,XMMWORD[16+r11],0x10
    838 	vxorps	xmm8,xmm8,xmm14
    839 
    840 	vpclmulqdq	xmm4,xmm10,xmm3,0x00
    841 	vmovdqu	xmm0,XMMWORD[((112-32))+r9]
    842 	vpxor	xmm4,xmm4,xmm5
    843 	vpunpckhqdq	xmm9,xmm8,xmm8
    844 	vpclmulqdq	xmm10,xmm10,xmm3,0x11
    845 	vpxor	xmm9,xmm9,xmm8
    846 	vpxor	xmm10,xmm10,xmm11
    847 	vpclmulqdq	xmm2,xmm2,xmm15,0x00
    848 	vpxor	xmm2,xmm2,xmm1
    849 
    850 	vpclmulqdq	xmm5,xmm8,xmm0,0x00
    851 	vpclmulqdq	xmm7,xmm8,xmm0,0x11
    852 	vpxor	xmm5,xmm5,xmm4
    853 	vpclmulqdq	xmm6,xmm9,xmm15,0x10
    854 	vpxor	xmm7,xmm7,xmm10
    855 	vpxor	xmm6,xmm6,xmm2
    856 
    857 	vpxor	xmm4,xmm7,xmm5
    858 	vpxor	xmm6,xmm6,xmm4
    859 	vpslldq	xmm1,xmm6,8
    860 	vmovdqu	xmm3,XMMWORD[16+r11]
    861 	vpsrldq	xmm6,xmm6,8
    862 	vpxor	xmm8,xmm5,xmm1
    863 	vpxor	xmm7,xmm7,xmm6
    864 
    865 	vpalignr	xmm2,xmm8,xmm8,8
    866 	vpclmulqdq	xmm8,xmm8,xmm3,0x10
    867 	vpxor	xmm8,xmm8,xmm2
    868 
    869 	vpalignr	xmm2,xmm8,xmm8,8
    870 	vpclmulqdq	xmm8,xmm8,xmm3,0x10
    871 	vpxor	xmm2,xmm2,xmm7
    872 	vpxor	xmm8,xmm8,xmm2
    873 	vpshufb	xmm8,xmm8,XMMWORD[r11]
    874 	vmovdqu	XMMWORD[(-64)+r9],xmm8
    875 
    876 	vzeroupper
    877 	movaps	xmm6,XMMWORD[((-216))+rax]
    878 	movaps	xmm7,XMMWORD[((-200))+rax]
    879 	movaps	xmm8,XMMWORD[((-184))+rax]
    880 	movaps	xmm9,XMMWORD[((-168))+rax]
    881 	movaps	xmm10,XMMWORD[((-152))+rax]
    882 	movaps	xmm11,XMMWORD[((-136))+rax]
    883 	movaps	xmm12,XMMWORD[((-120))+rax]
    884 	movaps	xmm13,XMMWORD[((-104))+rax]
    885 	movaps	xmm14,XMMWORD[((-88))+rax]
    886 	movaps	xmm15,XMMWORD[((-72))+rax]
    887 	mov	r15,QWORD[((-48))+rax]
    888 
    889 	mov	r14,QWORD[((-40))+rax]
    890 
    891 	mov	r13,QWORD[((-32))+rax]
    892 
    893 	mov	r12,QWORD[((-24))+rax]
    894 
    895 	mov	rbp,QWORD[((-16))+rax]
    896 
    897 	mov	rbx,QWORD[((-8))+rax]
    898 
    899 	lea	rsp,[rax]
    900 
    901 $L$gcm_enc_abort:
    902 	mov	rax,r10
    903 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    904 	mov	rsi,QWORD[16+rsp]
    905 	DB	0F3h,0C3h		;repret
    906 
    907 $L$SEH_end_aesni_gcm_encrypt:
    908 ALIGN	64
    909 $L$bswap_mask:
    910 DB	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
    911 $L$poly:
    912 DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
    913 $L$one_msb:
    914 DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
    915 $L$two_lsb:
    916 DB	2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    917 $L$one_lsb:
    918 DB	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    919 DB	65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108
    920 DB	101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
    921 DB	89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
    922 DB	114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
    923 ALIGN	64
    924 EXTERN	__imp_RtlVirtualUnwind
    925 
    926 ALIGN	16
    927 gcm_se_handler:
    928 	push	rsi
    929 	push	rdi
    930 	push	rbx
    931 	push	rbp
    932 	push	r12
    933 	push	r13
    934 	push	r14
    935 	push	r15
    936 	pushfq
    937 	sub	rsp,64
    938 
    939 	mov	rax,QWORD[120+r8]
    940 	mov	rbx,QWORD[248+r8]
    941 
    942 	mov	rsi,QWORD[8+r9]
    943 	mov	r11,QWORD[56+r9]
    944 
    945 	mov	r10d,DWORD[r11]
    946 	lea	r10,[r10*1+rsi]
    947 	cmp	rbx,r10
    948 	jb	NEAR $L$common_seh_tail
    949 
    950 	mov	rax,QWORD[152+r8]
    951 
    952 	mov	r10d,DWORD[4+r11]
    953 	lea	r10,[r10*1+rsi]
    954 	cmp	rbx,r10
    955 	jae	NEAR $L$common_seh_tail
    956 
    957 	mov	rax,QWORD[120+r8]
    958 
    959 	mov	r15,QWORD[((-48))+rax]
    960 	mov	r14,QWORD[((-40))+rax]
    961 	mov	r13,QWORD[((-32))+rax]
    962 	mov	r12,QWORD[((-24))+rax]
    963 	mov	rbp,QWORD[((-16))+rax]
    964 	mov	rbx,QWORD[((-8))+rax]
    965 	mov	QWORD[240+r8],r15
    966 	mov	QWORD[232+r8],r14
    967 	mov	QWORD[224+r8],r13
    968 	mov	QWORD[216+r8],r12
    969 	mov	QWORD[160+r8],rbp
    970 	mov	QWORD[144+r8],rbx
    971 
    972 	lea	rsi,[((-216))+rax]
    973 	lea	rdi,[512+r8]
    974 	mov	ecx,20
    975 	DD	0xa548f3fc
    976 
    977 $L$common_seh_tail:
    978 	mov	rdi,QWORD[8+rax]
    979 	mov	rsi,QWORD[16+rax]
    980 	mov	QWORD[152+r8],rax
    981 	mov	QWORD[168+r8],rsi
    982 	mov	QWORD[176+r8],rdi
    983 
    984 	mov	rdi,QWORD[40+r9]
    985 	mov	rsi,r8
    986 	mov	ecx,154
    987 	DD	0xa548f3fc
    988 
    989 	mov	rsi,r9
    990 	xor	rcx,rcx
    991 	mov	rdx,QWORD[8+rsi]
    992 	mov	r8,QWORD[rsi]
    993 	mov	r9,QWORD[16+rsi]
    994 	mov	r10,QWORD[40+rsi]
    995 	lea	r11,[56+rsi]
    996 	lea	r12,[24+rsi]
    997 	mov	QWORD[32+rsp],r10
    998 	mov	QWORD[40+rsp],r11
    999 	mov	QWORD[48+rsp],r12
   1000 	mov	QWORD[56+rsp],rcx
   1001 	call	QWORD[__imp_RtlVirtualUnwind]
   1002 
   1003 	mov	eax,1
   1004 	add	rsp,64
   1005 	popfq
   1006 	pop	r15
   1007 	pop	r14
   1008 	pop	r13
   1009 	pop	r12
   1010 	pop	rbp
   1011 	pop	rbx
   1012 	pop	rdi
   1013 	pop	rsi
   1014 	DB	0F3h,0C3h		;repret
   1015 
   1016 
   1017 section	.pdata rdata align=4
   1018 ALIGN	4
   1019 	DD	$L$SEH_begin_aesni_gcm_decrypt wrt ..imagebase
   1020 	DD	$L$SEH_end_aesni_gcm_decrypt wrt ..imagebase
   1021 	DD	$L$SEH_gcm_dec_info wrt ..imagebase
   1022 
   1023 	DD	$L$SEH_begin_aesni_gcm_encrypt wrt ..imagebase
   1024 	DD	$L$SEH_end_aesni_gcm_encrypt wrt ..imagebase
   1025 	DD	$L$SEH_gcm_enc_info wrt ..imagebase
   1026 section	.xdata rdata align=8
   1027 ALIGN	8
   1028 $L$SEH_gcm_dec_info:
   1029 DB	9,0,0,0
   1030 	DD	gcm_se_handler wrt ..imagebase
   1031 	DD	$L$gcm_dec_body wrt ..imagebase,$L$gcm_dec_abort wrt ..imagebase
   1032 $L$SEH_gcm_enc_info:
   1033 DB	9,0,0,0
   1034 	DD	gcm_se_handler wrt ..imagebase
   1035 	DD	$L$gcm_enc_body wrt ..imagebase,$L$gcm_enc_abort wrt ..imagebase
   1036