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