Home | History | Annotate | Download | only in rc4
      1 default	rel
      2 %define XMMWORD
      3 %define YMMWORD
      4 %define ZMMWORD
      5 section	.text code align=64
      6 
      7 ALIGN	16
      8 
      9 global	rc4_md5_enc
     10 
     11 rc4_md5_enc:
     12 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
     13 	mov	QWORD[16+rsp],rsi
     14 	mov	rax,rsp
     15 $L$SEH_begin_rc4_md5_enc:
     16 	mov	rdi,rcx
     17 	mov	rsi,rdx
     18 	mov	rdx,r8
     19 	mov	rcx,r9
     20 	mov	r8,QWORD[40+rsp]
     21 	mov	r9,QWORD[48+rsp]
     22 
     23 
     24 	cmp	r9,0
     25 	je	NEAR $L$abort
     26 	push	rbx
     27 	push	rbp
     28 	push	r12
     29 	push	r13
     30 	push	r14
     31 	push	r15
     32 	sub	rsp,40
     33 $L$body:
     34 	mov	r11,rcx
     35 	mov	r12,r9
     36 	mov	r13,rsi
     37 	mov	r14,rdx
     38 	mov	r15,r8
     39 	xor	rbp,rbp
     40 	xor	rcx,rcx
     41 
     42 	lea	rdi,[8+rdi]
     43 	mov	bpl,BYTE[((-8))+rdi]
     44 	mov	cl,BYTE[((-4))+rdi]
     45 
     46 	inc	bpl
     47 	sub	r14,r13
     48 	mov	eax,DWORD[rbp*4+rdi]
     49 	add	cl,al
     50 	lea	rsi,[rbp*4+rdi]
     51 	shl	r12,6
     52 	add	r12,r15
     53 	mov	QWORD[16+rsp],r12
     54 
     55 	mov	QWORD[24+rsp],r11
     56 	mov	r8d,DWORD[r11]
     57 	mov	r9d,DWORD[4+r11]
     58 	mov	r10d,DWORD[8+r11]
     59 	mov	r11d,DWORD[12+r11]
     60 	jmp	NEAR $L$oop
     61 
     62 ALIGN	16
     63 $L$oop:
     64 	mov	DWORD[rsp],r8d
     65 	mov	DWORD[4+rsp],r9d
     66 	mov	DWORD[8+rsp],r10d
     67 	mov	r12d,r11d
     68 	mov	DWORD[12+rsp],r11d
     69 	pxor	xmm0,xmm0
     70 	mov	edx,DWORD[rcx*4+rdi]
     71 	xor	r12d,r10d
     72 	mov	DWORD[rcx*4+rdi],eax
     73 	and	r12d,r9d
     74 	add	r8d,DWORD[r15]
     75 	add	al,dl
     76 	mov	ebx,DWORD[4+rsi]
     77 	add	r8d,3614090360
     78 	xor	r12d,r11d
     79 	movzx	eax,al
     80 	mov	DWORD[rsi],edx
     81 	add	r8d,r12d
     82 	add	cl,bl
     83 	rol	r8d,7
     84 	mov	r12d,r10d
     85 	movd	xmm0,DWORD[rax*4+rdi]
     86 
     87 	add	r8d,r9d
     88 	pxor	xmm1,xmm1
     89 	mov	edx,DWORD[rcx*4+rdi]
     90 	xor	r12d,r9d
     91 	mov	DWORD[rcx*4+rdi],ebx
     92 	and	r12d,r8d
     93 	add	r11d,DWORD[4+r15]
     94 	add	bl,dl
     95 	mov	eax,DWORD[8+rsi]
     96 	add	r11d,3905402710
     97 	xor	r12d,r10d
     98 	movzx	ebx,bl
     99 	mov	DWORD[4+rsi],edx
    100 	add	r11d,r12d
    101 	add	cl,al
    102 	rol	r11d,12
    103 	mov	r12d,r9d
    104 	movd	xmm1,DWORD[rbx*4+rdi]
    105 
    106 	add	r11d,r8d
    107 	mov	edx,DWORD[rcx*4+rdi]
    108 	xor	r12d,r8d
    109 	mov	DWORD[rcx*4+rdi],eax
    110 	and	r12d,r11d
    111 	add	r10d,DWORD[8+r15]
    112 	add	al,dl
    113 	mov	ebx,DWORD[12+rsi]
    114 	add	r10d,606105819
    115 	xor	r12d,r9d
    116 	movzx	eax,al
    117 	mov	DWORD[8+rsi],edx
    118 	add	r10d,r12d
    119 	add	cl,bl
    120 	rol	r10d,17
    121 	mov	r12d,r8d
    122 	pinsrw	xmm0,WORD[rax*4+rdi],1
    123 
    124 	add	r10d,r11d
    125 	mov	edx,DWORD[rcx*4+rdi]
    126 	xor	r12d,r11d
    127 	mov	DWORD[rcx*4+rdi],ebx
    128 	and	r12d,r10d
    129 	add	r9d,DWORD[12+r15]
    130 	add	bl,dl
    131 	mov	eax,DWORD[16+rsi]
    132 	add	r9d,3250441966
    133 	xor	r12d,r8d
    134 	movzx	ebx,bl
    135 	mov	DWORD[12+rsi],edx
    136 	add	r9d,r12d
    137 	add	cl,al
    138 	rol	r9d,22
    139 	mov	r12d,r11d
    140 	pinsrw	xmm1,WORD[rbx*4+rdi],1
    141 
    142 	add	r9d,r10d
    143 	mov	edx,DWORD[rcx*4+rdi]
    144 	xor	r12d,r10d
    145 	mov	DWORD[rcx*4+rdi],eax
    146 	and	r12d,r9d
    147 	add	r8d,DWORD[16+r15]
    148 	add	al,dl
    149 	mov	ebx,DWORD[20+rsi]
    150 	add	r8d,4118548399
    151 	xor	r12d,r11d
    152 	movzx	eax,al
    153 	mov	DWORD[16+rsi],edx
    154 	add	r8d,r12d
    155 	add	cl,bl
    156 	rol	r8d,7
    157 	mov	r12d,r10d
    158 	pinsrw	xmm0,WORD[rax*4+rdi],2
    159 
    160 	add	r8d,r9d
    161 	mov	edx,DWORD[rcx*4+rdi]
    162 	xor	r12d,r9d
    163 	mov	DWORD[rcx*4+rdi],ebx
    164 	and	r12d,r8d
    165 	add	r11d,DWORD[20+r15]
    166 	add	bl,dl
    167 	mov	eax,DWORD[24+rsi]
    168 	add	r11d,1200080426
    169 	xor	r12d,r10d
    170 	movzx	ebx,bl
    171 	mov	DWORD[20+rsi],edx
    172 	add	r11d,r12d
    173 	add	cl,al
    174 	rol	r11d,12
    175 	mov	r12d,r9d
    176 	pinsrw	xmm1,WORD[rbx*4+rdi],2
    177 
    178 	add	r11d,r8d
    179 	mov	edx,DWORD[rcx*4+rdi]
    180 	xor	r12d,r8d
    181 	mov	DWORD[rcx*4+rdi],eax
    182 	and	r12d,r11d
    183 	add	r10d,DWORD[24+r15]
    184 	add	al,dl
    185 	mov	ebx,DWORD[28+rsi]
    186 	add	r10d,2821735955
    187 	xor	r12d,r9d
    188 	movzx	eax,al
    189 	mov	DWORD[24+rsi],edx
    190 	add	r10d,r12d
    191 	add	cl,bl
    192 	rol	r10d,17
    193 	mov	r12d,r8d
    194 	pinsrw	xmm0,WORD[rax*4+rdi],3
    195 
    196 	add	r10d,r11d
    197 	mov	edx,DWORD[rcx*4+rdi]
    198 	xor	r12d,r11d
    199 	mov	DWORD[rcx*4+rdi],ebx
    200 	and	r12d,r10d
    201 	add	r9d,DWORD[28+r15]
    202 	add	bl,dl
    203 	mov	eax,DWORD[32+rsi]
    204 	add	r9d,4249261313
    205 	xor	r12d,r8d
    206 	movzx	ebx,bl
    207 	mov	DWORD[28+rsi],edx
    208 	add	r9d,r12d
    209 	add	cl,al
    210 	rol	r9d,22
    211 	mov	r12d,r11d
    212 	pinsrw	xmm1,WORD[rbx*4+rdi],3
    213 
    214 	add	r9d,r10d
    215 	mov	edx,DWORD[rcx*4+rdi]
    216 	xor	r12d,r10d
    217 	mov	DWORD[rcx*4+rdi],eax
    218 	and	r12d,r9d
    219 	add	r8d,DWORD[32+r15]
    220 	add	al,dl
    221 	mov	ebx,DWORD[36+rsi]
    222 	add	r8d,1770035416
    223 	xor	r12d,r11d
    224 	movzx	eax,al
    225 	mov	DWORD[32+rsi],edx
    226 	add	r8d,r12d
    227 	add	cl,bl
    228 	rol	r8d,7
    229 	mov	r12d,r10d
    230 	pinsrw	xmm0,WORD[rax*4+rdi],4
    231 
    232 	add	r8d,r9d
    233 	mov	edx,DWORD[rcx*4+rdi]
    234 	xor	r12d,r9d
    235 	mov	DWORD[rcx*4+rdi],ebx
    236 	and	r12d,r8d
    237 	add	r11d,DWORD[36+r15]
    238 	add	bl,dl
    239 	mov	eax,DWORD[40+rsi]
    240 	add	r11d,2336552879
    241 	xor	r12d,r10d
    242 	movzx	ebx,bl
    243 	mov	DWORD[36+rsi],edx
    244 	add	r11d,r12d
    245 	add	cl,al
    246 	rol	r11d,12
    247 	mov	r12d,r9d
    248 	pinsrw	xmm1,WORD[rbx*4+rdi],4
    249 
    250 	add	r11d,r8d
    251 	mov	edx,DWORD[rcx*4+rdi]
    252 	xor	r12d,r8d
    253 	mov	DWORD[rcx*4+rdi],eax
    254 	and	r12d,r11d
    255 	add	r10d,DWORD[40+r15]
    256 	add	al,dl
    257 	mov	ebx,DWORD[44+rsi]
    258 	add	r10d,4294925233
    259 	xor	r12d,r9d
    260 	movzx	eax,al
    261 	mov	DWORD[40+rsi],edx
    262 	add	r10d,r12d
    263 	add	cl,bl
    264 	rol	r10d,17
    265 	mov	r12d,r8d
    266 	pinsrw	xmm0,WORD[rax*4+rdi],5
    267 
    268 	add	r10d,r11d
    269 	mov	edx,DWORD[rcx*4+rdi]
    270 	xor	r12d,r11d
    271 	mov	DWORD[rcx*4+rdi],ebx
    272 	and	r12d,r10d
    273 	add	r9d,DWORD[44+r15]
    274 	add	bl,dl
    275 	mov	eax,DWORD[48+rsi]
    276 	add	r9d,2304563134
    277 	xor	r12d,r8d
    278 	movzx	ebx,bl
    279 	mov	DWORD[44+rsi],edx
    280 	add	r9d,r12d
    281 	add	cl,al
    282 	rol	r9d,22
    283 	mov	r12d,r11d
    284 	pinsrw	xmm1,WORD[rbx*4+rdi],5
    285 
    286 	add	r9d,r10d
    287 	mov	edx,DWORD[rcx*4+rdi]
    288 	xor	r12d,r10d
    289 	mov	DWORD[rcx*4+rdi],eax
    290 	and	r12d,r9d
    291 	add	r8d,DWORD[48+r15]
    292 	add	al,dl
    293 	mov	ebx,DWORD[52+rsi]
    294 	add	r8d,1804603682
    295 	xor	r12d,r11d
    296 	movzx	eax,al
    297 	mov	DWORD[48+rsi],edx
    298 	add	r8d,r12d
    299 	add	cl,bl
    300 	rol	r8d,7
    301 	mov	r12d,r10d
    302 	pinsrw	xmm0,WORD[rax*4+rdi],6
    303 
    304 	add	r8d,r9d
    305 	mov	edx,DWORD[rcx*4+rdi]
    306 	xor	r12d,r9d
    307 	mov	DWORD[rcx*4+rdi],ebx
    308 	and	r12d,r8d
    309 	add	r11d,DWORD[52+r15]
    310 	add	bl,dl
    311 	mov	eax,DWORD[56+rsi]
    312 	add	r11d,4254626195
    313 	xor	r12d,r10d
    314 	movzx	ebx,bl
    315 	mov	DWORD[52+rsi],edx
    316 	add	r11d,r12d
    317 	add	cl,al
    318 	rol	r11d,12
    319 	mov	r12d,r9d
    320 	pinsrw	xmm1,WORD[rbx*4+rdi],6
    321 
    322 	add	r11d,r8d
    323 	mov	edx,DWORD[rcx*4+rdi]
    324 	xor	r12d,r8d
    325 	mov	DWORD[rcx*4+rdi],eax
    326 	and	r12d,r11d
    327 	add	r10d,DWORD[56+r15]
    328 	add	al,dl
    329 	mov	ebx,DWORD[60+rsi]
    330 	add	r10d,2792965006
    331 	xor	r12d,r9d
    332 	movzx	eax,al
    333 	mov	DWORD[56+rsi],edx
    334 	add	r10d,r12d
    335 	add	cl,bl
    336 	rol	r10d,17
    337 	mov	r12d,r8d
    338 	pinsrw	xmm0,WORD[rax*4+rdi],7
    339 
    340 	add	r10d,r11d
    341 	movdqu	xmm2,XMMWORD[r13]
    342 	mov	edx,DWORD[rcx*4+rdi]
    343 	xor	r12d,r11d
    344 	mov	DWORD[rcx*4+rdi],ebx
    345 	and	r12d,r10d
    346 	add	r9d,DWORD[60+r15]
    347 	add	bl,dl
    348 	mov	eax,DWORD[64+rsi]
    349 	add	r9d,1236535329
    350 	xor	r12d,r8d
    351 	movzx	ebx,bl
    352 	mov	DWORD[60+rsi],edx
    353 	add	r9d,r12d
    354 	add	cl,al
    355 	rol	r9d,22
    356 	mov	r12d,r10d
    357 	pinsrw	xmm1,WORD[rbx*4+rdi],7
    358 
    359 	add	r9d,r10d
    360 	psllq	xmm1,8
    361 	pxor	xmm2,xmm0
    362 	pxor	xmm2,xmm1
    363 	pxor	xmm0,xmm0
    364 	mov	edx,DWORD[rcx*4+rdi]
    365 	xor	r12d,r9d
    366 	mov	DWORD[rcx*4+rdi],eax
    367 	and	r12d,r11d
    368 	add	r8d,DWORD[4+r15]
    369 	add	al,dl
    370 	mov	ebx,DWORD[68+rsi]
    371 	add	r8d,4129170786
    372 	xor	r12d,r10d
    373 	movzx	eax,al
    374 	mov	DWORD[64+rsi],edx
    375 	add	r8d,r12d
    376 	add	cl,bl
    377 	rol	r8d,5
    378 	mov	r12d,r9d
    379 	movd	xmm0,DWORD[rax*4+rdi]
    380 
    381 	add	r8d,r9d
    382 	pxor	xmm1,xmm1
    383 	mov	edx,DWORD[rcx*4+rdi]
    384 	xor	r12d,r8d
    385 	mov	DWORD[rcx*4+rdi],ebx
    386 	and	r12d,r10d
    387 	add	r11d,DWORD[24+r15]
    388 	add	bl,dl
    389 	mov	eax,DWORD[72+rsi]
    390 	add	r11d,3225465664
    391 	xor	r12d,r9d
    392 	movzx	ebx,bl
    393 	mov	DWORD[68+rsi],edx
    394 	add	r11d,r12d
    395 	add	cl,al
    396 	rol	r11d,9
    397 	mov	r12d,r8d
    398 	movd	xmm1,DWORD[rbx*4+rdi]
    399 
    400 	add	r11d,r8d
    401 	mov	edx,DWORD[rcx*4+rdi]
    402 	xor	r12d,r11d
    403 	mov	DWORD[rcx*4+rdi],eax
    404 	and	r12d,r9d
    405 	add	r10d,DWORD[44+r15]
    406 	add	al,dl
    407 	mov	ebx,DWORD[76+rsi]
    408 	add	r10d,643717713
    409 	xor	r12d,r8d
    410 	movzx	eax,al
    411 	mov	DWORD[72+rsi],edx
    412 	add	r10d,r12d
    413 	add	cl,bl
    414 	rol	r10d,14
    415 	mov	r12d,r11d
    416 	pinsrw	xmm0,WORD[rax*4+rdi],1
    417 
    418 	add	r10d,r11d
    419 	mov	edx,DWORD[rcx*4+rdi]
    420 	xor	r12d,r10d
    421 	mov	DWORD[rcx*4+rdi],ebx
    422 	and	r12d,r8d
    423 	add	r9d,DWORD[r15]
    424 	add	bl,dl
    425 	mov	eax,DWORD[80+rsi]
    426 	add	r9d,3921069994
    427 	xor	r12d,r11d
    428 	movzx	ebx,bl
    429 	mov	DWORD[76+rsi],edx
    430 	add	r9d,r12d
    431 	add	cl,al
    432 	rol	r9d,20
    433 	mov	r12d,r10d
    434 	pinsrw	xmm1,WORD[rbx*4+rdi],1
    435 
    436 	add	r9d,r10d
    437 	mov	edx,DWORD[rcx*4+rdi]
    438 	xor	r12d,r9d
    439 	mov	DWORD[rcx*4+rdi],eax
    440 	and	r12d,r11d
    441 	add	r8d,DWORD[20+r15]
    442 	add	al,dl
    443 	mov	ebx,DWORD[84+rsi]
    444 	add	r8d,3593408605
    445 	xor	r12d,r10d
    446 	movzx	eax,al
    447 	mov	DWORD[80+rsi],edx
    448 	add	r8d,r12d
    449 	add	cl,bl
    450 	rol	r8d,5
    451 	mov	r12d,r9d
    452 	pinsrw	xmm0,WORD[rax*4+rdi],2
    453 
    454 	add	r8d,r9d
    455 	mov	edx,DWORD[rcx*4+rdi]
    456 	xor	r12d,r8d
    457 	mov	DWORD[rcx*4+rdi],ebx
    458 	and	r12d,r10d
    459 	add	r11d,DWORD[40+r15]
    460 	add	bl,dl
    461 	mov	eax,DWORD[88+rsi]
    462 	add	r11d,38016083
    463 	xor	r12d,r9d
    464 	movzx	ebx,bl
    465 	mov	DWORD[84+rsi],edx
    466 	add	r11d,r12d
    467 	add	cl,al
    468 	rol	r11d,9
    469 	mov	r12d,r8d
    470 	pinsrw	xmm1,WORD[rbx*4+rdi],2
    471 
    472 	add	r11d,r8d
    473 	mov	edx,DWORD[rcx*4+rdi]
    474 	xor	r12d,r11d
    475 	mov	DWORD[rcx*4+rdi],eax
    476 	and	r12d,r9d
    477 	add	r10d,DWORD[60+r15]
    478 	add	al,dl
    479 	mov	ebx,DWORD[92+rsi]
    480 	add	r10d,3634488961
    481 	xor	r12d,r8d
    482 	movzx	eax,al
    483 	mov	DWORD[88+rsi],edx
    484 	add	r10d,r12d
    485 	add	cl,bl
    486 	rol	r10d,14
    487 	mov	r12d,r11d
    488 	pinsrw	xmm0,WORD[rax*4+rdi],3
    489 
    490 	add	r10d,r11d
    491 	mov	edx,DWORD[rcx*4+rdi]
    492 	xor	r12d,r10d
    493 	mov	DWORD[rcx*4+rdi],ebx
    494 	and	r12d,r8d
    495 	add	r9d,DWORD[16+r15]
    496 	add	bl,dl
    497 	mov	eax,DWORD[96+rsi]
    498 	add	r9d,3889429448
    499 	xor	r12d,r11d
    500 	movzx	ebx,bl
    501 	mov	DWORD[92+rsi],edx
    502 	add	r9d,r12d
    503 	add	cl,al
    504 	rol	r9d,20
    505 	mov	r12d,r10d
    506 	pinsrw	xmm1,WORD[rbx*4+rdi],3
    507 
    508 	add	r9d,r10d
    509 	mov	edx,DWORD[rcx*4+rdi]
    510 	xor	r12d,r9d
    511 	mov	DWORD[rcx*4+rdi],eax
    512 	and	r12d,r11d
    513 	add	r8d,DWORD[36+r15]
    514 	add	al,dl
    515 	mov	ebx,DWORD[100+rsi]
    516 	add	r8d,568446438
    517 	xor	r12d,r10d
    518 	movzx	eax,al
    519 	mov	DWORD[96+rsi],edx
    520 	add	r8d,r12d
    521 	add	cl,bl
    522 	rol	r8d,5
    523 	mov	r12d,r9d
    524 	pinsrw	xmm0,WORD[rax*4+rdi],4
    525 
    526 	add	r8d,r9d
    527 	mov	edx,DWORD[rcx*4+rdi]
    528 	xor	r12d,r8d
    529 	mov	DWORD[rcx*4+rdi],ebx
    530 	and	r12d,r10d
    531 	add	r11d,DWORD[56+r15]
    532 	add	bl,dl
    533 	mov	eax,DWORD[104+rsi]
    534 	add	r11d,3275163606
    535 	xor	r12d,r9d
    536 	movzx	ebx,bl
    537 	mov	DWORD[100+rsi],edx
    538 	add	r11d,r12d
    539 	add	cl,al
    540 	rol	r11d,9
    541 	mov	r12d,r8d
    542 	pinsrw	xmm1,WORD[rbx*4+rdi],4
    543 
    544 	add	r11d,r8d
    545 	mov	edx,DWORD[rcx*4+rdi]
    546 	xor	r12d,r11d
    547 	mov	DWORD[rcx*4+rdi],eax
    548 	and	r12d,r9d
    549 	add	r10d,DWORD[12+r15]
    550 	add	al,dl
    551 	mov	ebx,DWORD[108+rsi]
    552 	add	r10d,4107603335
    553 	xor	r12d,r8d
    554 	movzx	eax,al
    555 	mov	DWORD[104+rsi],edx
    556 	add	r10d,r12d
    557 	add	cl,bl
    558 	rol	r10d,14
    559 	mov	r12d,r11d
    560 	pinsrw	xmm0,WORD[rax*4+rdi],5
    561 
    562 	add	r10d,r11d
    563 	mov	edx,DWORD[rcx*4+rdi]
    564 	xor	r12d,r10d
    565 	mov	DWORD[rcx*4+rdi],ebx
    566 	and	r12d,r8d
    567 	add	r9d,DWORD[32+r15]
    568 	add	bl,dl
    569 	mov	eax,DWORD[112+rsi]
    570 	add	r9d,1163531501
    571 	xor	r12d,r11d
    572 	movzx	ebx,bl
    573 	mov	DWORD[108+rsi],edx
    574 	add	r9d,r12d
    575 	add	cl,al
    576 	rol	r9d,20
    577 	mov	r12d,r10d
    578 	pinsrw	xmm1,WORD[rbx*4+rdi],5
    579 
    580 	add	r9d,r10d
    581 	mov	edx,DWORD[rcx*4+rdi]
    582 	xor	r12d,r9d
    583 	mov	DWORD[rcx*4+rdi],eax
    584 	and	r12d,r11d
    585 	add	r8d,DWORD[52+r15]
    586 	add	al,dl
    587 	mov	ebx,DWORD[116+rsi]
    588 	add	r8d,2850285829
    589 	xor	r12d,r10d
    590 	movzx	eax,al
    591 	mov	DWORD[112+rsi],edx
    592 	add	r8d,r12d
    593 	add	cl,bl
    594 	rol	r8d,5
    595 	mov	r12d,r9d
    596 	pinsrw	xmm0,WORD[rax*4+rdi],6
    597 
    598 	add	r8d,r9d
    599 	mov	edx,DWORD[rcx*4+rdi]
    600 	xor	r12d,r8d
    601 	mov	DWORD[rcx*4+rdi],ebx
    602 	and	r12d,r10d
    603 	add	r11d,DWORD[8+r15]
    604 	add	bl,dl
    605 	mov	eax,DWORD[120+rsi]
    606 	add	r11d,4243563512
    607 	xor	r12d,r9d
    608 	movzx	ebx,bl
    609 	mov	DWORD[116+rsi],edx
    610 	add	r11d,r12d
    611 	add	cl,al
    612 	rol	r11d,9
    613 	mov	r12d,r8d
    614 	pinsrw	xmm1,WORD[rbx*4+rdi],6
    615 
    616 	add	r11d,r8d
    617 	mov	edx,DWORD[rcx*4+rdi]
    618 	xor	r12d,r11d
    619 	mov	DWORD[rcx*4+rdi],eax
    620 	and	r12d,r9d
    621 	add	r10d,DWORD[28+r15]
    622 	add	al,dl
    623 	mov	ebx,DWORD[124+rsi]
    624 	add	r10d,1735328473
    625 	xor	r12d,r8d
    626 	movzx	eax,al
    627 	mov	DWORD[120+rsi],edx
    628 	add	r10d,r12d
    629 	add	cl,bl
    630 	rol	r10d,14
    631 	mov	r12d,r11d
    632 	pinsrw	xmm0,WORD[rax*4+rdi],7
    633 
    634 	add	r10d,r11d
    635 	movdqu	xmm3,XMMWORD[16+r13]
    636 	add	bpl,32
    637 	mov	edx,DWORD[rcx*4+rdi]
    638 	xor	r12d,r10d
    639 	mov	DWORD[rcx*4+rdi],ebx
    640 	and	r12d,r8d
    641 	add	r9d,DWORD[48+r15]
    642 	add	bl,dl
    643 	mov	eax,DWORD[rbp*4+rdi]
    644 	add	r9d,2368359562
    645 	xor	r12d,r11d
    646 	movzx	ebx,bl
    647 	mov	DWORD[124+rsi],edx
    648 	add	r9d,r12d
    649 	add	cl,al
    650 	rol	r9d,20
    651 	mov	r12d,r11d
    652 	pinsrw	xmm1,WORD[rbx*4+rdi],7
    653 
    654 	add	r9d,r10d
    655 	mov	rsi,rcx
    656 	xor	rcx,rcx
    657 	mov	cl,sil
    658 	lea	rsi,[rbp*4+rdi]
    659 	psllq	xmm1,8
    660 	pxor	xmm3,xmm0
    661 	pxor	xmm3,xmm1
    662 	pxor	xmm0,xmm0
    663 	mov	edx,DWORD[rcx*4+rdi]
    664 	xor	r12d,r10d
    665 	mov	DWORD[rcx*4+rdi],eax
    666 	xor	r12d,r9d
    667 	add	r8d,DWORD[20+r15]
    668 	add	al,dl
    669 	mov	ebx,DWORD[4+rsi]
    670 	add	r8d,4294588738
    671 	movzx	eax,al
    672 	add	r8d,r12d
    673 	mov	DWORD[rsi],edx
    674 	add	cl,bl
    675 	rol	r8d,4
    676 	mov	r12d,r10d
    677 	movd	xmm0,DWORD[rax*4+rdi]
    678 
    679 	add	r8d,r9d
    680 	pxor	xmm1,xmm1
    681 	mov	edx,DWORD[rcx*4+rdi]
    682 	xor	r12d,r9d
    683 	mov	DWORD[rcx*4+rdi],ebx
    684 	xor	r12d,r8d
    685 	add	r11d,DWORD[32+r15]
    686 	add	bl,dl
    687 	mov	eax,DWORD[8+rsi]
    688 	add	r11d,2272392833
    689 	movzx	ebx,bl
    690 	add	r11d,r12d
    691 	mov	DWORD[4+rsi],edx
    692 	add	cl,al
    693 	rol	r11d,11
    694 	mov	r12d,r9d
    695 	movd	xmm1,DWORD[rbx*4+rdi]
    696 
    697 	add	r11d,r8d
    698 	mov	edx,DWORD[rcx*4+rdi]
    699 	xor	r12d,r8d
    700 	mov	DWORD[rcx*4+rdi],eax
    701 	xor	r12d,r11d
    702 	add	r10d,DWORD[44+r15]
    703 	add	al,dl
    704 	mov	ebx,DWORD[12+rsi]
    705 	add	r10d,1839030562
    706 	movzx	eax,al
    707 	add	r10d,r12d
    708 	mov	DWORD[8+rsi],edx
    709 	add	cl,bl
    710 	rol	r10d,16
    711 	mov	r12d,r8d
    712 	pinsrw	xmm0,WORD[rax*4+rdi],1
    713 
    714 	add	r10d,r11d
    715 	mov	edx,DWORD[rcx*4+rdi]
    716 	xor	r12d,r11d
    717 	mov	DWORD[rcx*4+rdi],ebx
    718 	xor	r12d,r10d
    719 	add	r9d,DWORD[56+r15]
    720 	add	bl,dl
    721 	mov	eax,DWORD[16+rsi]
    722 	add	r9d,4259657740
    723 	movzx	ebx,bl
    724 	add	r9d,r12d
    725 	mov	DWORD[12+rsi],edx
    726 	add	cl,al
    727 	rol	r9d,23
    728 	mov	r12d,r11d
    729 	pinsrw	xmm1,WORD[rbx*4+rdi],1
    730 
    731 	add	r9d,r10d
    732 	mov	edx,DWORD[rcx*4+rdi]
    733 	xor	r12d,r10d
    734 	mov	DWORD[rcx*4+rdi],eax
    735 	xor	r12d,r9d
    736 	add	r8d,DWORD[4+r15]
    737 	add	al,dl
    738 	mov	ebx,DWORD[20+rsi]
    739 	add	r8d,2763975236
    740 	movzx	eax,al
    741 	add	r8d,r12d
    742 	mov	DWORD[16+rsi],edx
    743 	add	cl,bl
    744 	rol	r8d,4
    745 	mov	r12d,r10d
    746 	pinsrw	xmm0,WORD[rax*4+rdi],2
    747 
    748 	add	r8d,r9d
    749 	mov	edx,DWORD[rcx*4+rdi]
    750 	xor	r12d,r9d
    751 	mov	DWORD[rcx*4+rdi],ebx
    752 	xor	r12d,r8d
    753 	add	r11d,DWORD[16+r15]
    754 	add	bl,dl
    755 	mov	eax,DWORD[24+rsi]
    756 	add	r11d,1272893353
    757 	movzx	ebx,bl
    758 	add	r11d,r12d
    759 	mov	DWORD[20+rsi],edx
    760 	add	cl,al
    761 	rol	r11d,11
    762 	mov	r12d,r9d
    763 	pinsrw	xmm1,WORD[rbx*4+rdi],2
    764 
    765 	add	r11d,r8d
    766 	mov	edx,DWORD[rcx*4+rdi]
    767 	xor	r12d,r8d
    768 	mov	DWORD[rcx*4+rdi],eax
    769 	xor	r12d,r11d
    770 	add	r10d,DWORD[28+r15]
    771 	add	al,dl
    772 	mov	ebx,DWORD[28+rsi]
    773 	add	r10d,4139469664
    774 	movzx	eax,al
    775 	add	r10d,r12d
    776 	mov	DWORD[24+rsi],edx
    777 	add	cl,bl
    778 	rol	r10d,16
    779 	mov	r12d,r8d
    780 	pinsrw	xmm0,WORD[rax*4+rdi],3
    781 
    782 	add	r10d,r11d
    783 	mov	edx,DWORD[rcx*4+rdi]
    784 	xor	r12d,r11d
    785 	mov	DWORD[rcx*4+rdi],ebx
    786 	xor	r12d,r10d
    787 	add	r9d,DWORD[40+r15]
    788 	add	bl,dl
    789 	mov	eax,DWORD[32+rsi]
    790 	add	r9d,3200236656
    791 	movzx	ebx,bl
    792 	add	r9d,r12d
    793 	mov	DWORD[28+rsi],edx
    794 	add	cl,al
    795 	rol	r9d,23
    796 	mov	r12d,r11d
    797 	pinsrw	xmm1,WORD[rbx*4+rdi],3
    798 
    799 	add	r9d,r10d
    800 	mov	edx,DWORD[rcx*4+rdi]
    801 	xor	r12d,r10d
    802 	mov	DWORD[rcx*4+rdi],eax
    803 	xor	r12d,r9d
    804 	add	r8d,DWORD[52+r15]
    805 	add	al,dl
    806 	mov	ebx,DWORD[36+rsi]
    807 	add	r8d,681279174
    808 	movzx	eax,al
    809 	add	r8d,r12d
    810 	mov	DWORD[32+rsi],edx
    811 	add	cl,bl
    812 	rol	r8d,4
    813 	mov	r12d,r10d
    814 	pinsrw	xmm0,WORD[rax*4+rdi],4
    815 
    816 	add	r8d,r9d
    817 	mov	edx,DWORD[rcx*4+rdi]
    818 	xor	r12d,r9d
    819 	mov	DWORD[rcx*4+rdi],ebx
    820 	xor	r12d,r8d
    821 	add	r11d,DWORD[r15]
    822 	add	bl,dl
    823 	mov	eax,DWORD[40+rsi]
    824 	add	r11d,3936430074
    825 	movzx	ebx,bl
    826 	add	r11d,r12d
    827 	mov	DWORD[36+rsi],edx
    828 	add	cl,al
    829 	rol	r11d,11
    830 	mov	r12d,r9d
    831 	pinsrw	xmm1,WORD[rbx*4+rdi],4
    832 
    833 	add	r11d,r8d
    834 	mov	edx,DWORD[rcx*4+rdi]
    835 	xor	r12d,r8d
    836 	mov	DWORD[rcx*4+rdi],eax
    837 	xor	r12d,r11d
    838 	add	r10d,DWORD[12+r15]
    839 	add	al,dl
    840 	mov	ebx,DWORD[44+rsi]
    841 	add	r10d,3572445317
    842 	movzx	eax,al
    843 	add	r10d,r12d
    844 	mov	DWORD[40+rsi],edx
    845 	add	cl,bl
    846 	rol	r10d,16
    847 	mov	r12d,r8d
    848 	pinsrw	xmm0,WORD[rax*4+rdi],5
    849 
    850 	add	r10d,r11d
    851 	mov	edx,DWORD[rcx*4+rdi]
    852 	xor	r12d,r11d
    853 	mov	DWORD[rcx*4+rdi],ebx
    854 	xor	r12d,r10d
    855 	add	r9d,DWORD[24+r15]
    856 	add	bl,dl
    857 	mov	eax,DWORD[48+rsi]
    858 	add	r9d,76029189
    859 	movzx	ebx,bl
    860 	add	r9d,r12d
    861 	mov	DWORD[44+rsi],edx
    862 	add	cl,al
    863 	rol	r9d,23
    864 	mov	r12d,r11d
    865 	pinsrw	xmm1,WORD[rbx*4+rdi],5
    866 
    867 	add	r9d,r10d
    868 	mov	edx,DWORD[rcx*4+rdi]
    869 	xor	r12d,r10d
    870 	mov	DWORD[rcx*4+rdi],eax
    871 	xor	r12d,r9d
    872 	add	r8d,DWORD[36+r15]
    873 	add	al,dl
    874 	mov	ebx,DWORD[52+rsi]
    875 	add	r8d,3654602809
    876 	movzx	eax,al
    877 	add	r8d,r12d
    878 	mov	DWORD[48+rsi],edx
    879 	add	cl,bl
    880 	rol	r8d,4
    881 	mov	r12d,r10d
    882 	pinsrw	xmm0,WORD[rax*4+rdi],6
    883 
    884 	add	r8d,r9d
    885 	mov	edx,DWORD[rcx*4+rdi]
    886 	xor	r12d,r9d
    887 	mov	DWORD[rcx*4+rdi],ebx
    888 	xor	r12d,r8d
    889 	add	r11d,DWORD[48+r15]
    890 	add	bl,dl
    891 	mov	eax,DWORD[56+rsi]
    892 	add	r11d,3873151461
    893 	movzx	ebx,bl
    894 	add	r11d,r12d
    895 	mov	DWORD[52+rsi],edx
    896 	add	cl,al
    897 	rol	r11d,11
    898 	mov	r12d,r9d
    899 	pinsrw	xmm1,WORD[rbx*4+rdi],6
    900 
    901 	add	r11d,r8d
    902 	mov	edx,DWORD[rcx*4+rdi]
    903 	xor	r12d,r8d
    904 	mov	DWORD[rcx*4+rdi],eax
    905 	xor	r12d,r11d
    906 	add	r10d,DWORD[60+r15]
    907 	add	al,dl
    908 	mov	ebx,DWORD[60+rsi]
    909 	add	r10d,530742520
    910 	movzx	eax,al
    911 	add	r10d,r12d
    912 	mov	DWORD[56+rsi],edx
    913 	add	cl,bl
    914 	rol	r10d,16
    915 	mov	r12d,r8d
    916 	pinsrw	xmm0,WORD[rax*4+rdi],7
    917 
    918 	add	r10d,r11d
    919 	movdqu	xmm4,XMMWORD[32+r13]
    920 	mov	edx,DWORD[rcx*4+rdi]
    921 	xor	r12d,r11d
    922 	mov	DWORD[rcx*4+rdi],ebx
    923 	xor	r12d,r10d
    924 	add	r9d,DWORD[8+r15]
    925 	add	bl,dl
    926 	mov	eax,DWORD[64+rsi]
    927 	add	r9d,3299628645
    928 	movzx	ebx,bl
    929 	add	r9d,r12d
    930 	mov	DWORD[60+rsi],edx
    931 	add	cl,al
    932 	rol	r9d,23
    933 	mov	r12d,-1
    934 	pinsrw	xmm1,WORD[rbx*4+rdi],7
    935 
    936 	add	r9d,r10d
    937 	psllq	xmm1,8
    938 	pxor	xmm4,xmm0
    939 	pxor	xmm4,xmm1
    940 	pxor	xmm0,xmm0
    941 	mov	edx,DWORD[rcx*4+rdi]
    942 	xor	r12d,r11d
    943 	mov	DWORD[rcx*4+rdi],eax
    944 	or	r12d,r9d
    945 	add	r8d,DWORD[r15]
    946 	add	al,dl
    947 	mov	ebx,DWORD[68+rsi]
    948 	add	r8d,4096336452
    949 	movzx	eax,al
    950 	xor	r12d,r10d
    951 	mov	DWORD[64+rsi],edx
    952 	add	r8d,r12d
    953 	add	cl,bl
    954 	rol	r8d,6
    955 	mov	r12d,-1
    956 	movd	xmm0,DWORD[rax*4+rdi]
    957 
    958 	add	r8d,r9d
    959 	pxor	xmm1,xmm1
    960 	mov	edx,DWORD[rcx*4+rdi]
    961 	xor	r12d,r10d
    962 	mov	DWORD[rcx*4+rdi],ebx
    963 	or	r12d,r8d
    964 	add	r11d,DWORD[28+r15]
    965 	add	bl,dl
    966 	mov	eax,DWORD[72+rsi]
    967 	add	r11d,1126891415
    968 	movzx	ebx,bl
    969 	xor	r12d,r9d
    970 	mov	DWORD[68+rsi],edx
    971 	add	r11d,r12d
    972 	add	cl,al
    973 	rol	r11d,10
    974 	mov	r12d,-1
    975 	movd	xmm1,DWORD[rbx*4+rdi]
    976 
    977 	add	r11d,r8d
    978 	mov	edx,DWORD[rcx*4+rdi]
    979 	xor	r12d,r9d
    980 	mov	DWORD[rcx*4+rdi],eax
    981 	or	r12d,r11d
    982 	add	r10d,DWORD[56+r15]
    983 	add	al,dl
    984 	mov	ebx,DWORD[76+rsi]
    985 	add	r10d,2878612391
    986 	movzx	eax,al
    987 	xor	r12d,r8d
    988 	mov	DWORD[72+rsi],edx
    989 	add	r10d,r12d
    990 	add	cl,bl
    991 	rol	r10d,15
    992 	mov	r12d,-1
    993 	pinsrw	xmm0,WORD[rax*4+rdi],1
    994 
    995 	add	r10d,r11d
    996 	mov	edx,DWORD[rcx*4+rdi]
    997 	xor	r12d,r8d
    998 	mov	DWORD[rcx*4+rdi],ebx
    999 	or	r12d,r10d
   1000 	add	r9d,DWORD[20+r15]
   1001 	add	bl,dl
   1002 	mov	eax,DWORD[80+rsi]
   1003 	add	r9d,4237533241
   1004 	movzx	ebx,bl
   1005 	xor	r12d,r11d
   1006 	mov	DWORD[76+rsi],edx
   1007 	add	r9d,r12d
   1008 	add	cl,al
   1009 	rol	r9d,21
   1010 	mov	r12d,-1
   1011 	pinsrw	xmm1,WORD[rbx*4+rdi],1
   1012 
   1013 	add	r9d,r10d
   1014 	mov	edx,DWORD[rcx*4+rdi]
   1015 	xor	r12d,r11d
   1016 	mov	DWORD[rcx*4+rdi],eax
   1017 	or	r12d,r9d
   1018 	add	r8d,DWORD[48+r15]
   1019 	add	al,dl
   1020 	mov	ebx,DWORD[84+rsi]
   1021 	add	r8d,1700485571
   1022 	movzx	eax,al
   1023 	xor	r12d,r10d
   1024 	mov	DWORD[80+rsi],edx
   1025 	add	r8d,r12d
   1026 	add	cl,bl
   1027 	rol	r8d,6
   1028 	mov	r12d,-1
   1029 	pinsrw	xmm0,WORD[rax*4+rdi],2
   1030 
   1031 	add	r8d,r9d
   1032 	mov	edx,DWORD[rcx*4+rdi]
   1033 	xor	r12d,r10d
   1034 	mov	DWORD[rcx*4+rdi],ebx
   1035 	or	r12d,r8d
   1036 	add	r11d,DWORD[12+r15]
   1037 	add	bl,dl
   1038 	mov	eax,DWORD[88+rsi]
   1039 	add	r11d,2399980690
   1040 	movzx	ebx,bl
   1041 	xor	r12d,r9d
   1042 	mov	DWORD[84+rsi],edx
   1043 	add	r11d,r12d
   1044 	add	cl,al
   1045 	rol	r11d,10
   1046 	mov	r12d,-1
   1047 	pinsrw	xmm1,WORD[rbx*4+rdi],2
   1048 
   1049 	add	r11d,r8d
   1050 	mov	edx,DWORD[rcx*4+rdi]
   1051 	xor	r12d,r9d
   1052 	mov	DWORD[rcx*4+rdi],eax
   1053 	or	r12d,r11d
   1054 	add	r10d,DWORD[40+r15]
   1055 	add	al,dl
   1056 	mov	ebx,DWORD[92+rsi]
   1057 	add	r10d,4293915773
   1058 	movzx	eax,al
   1059 	xor	r12d,r8d
   1060 	mov	DWORD[88+rsi],edx
   1061 	add	r10d,r12d
   1062 	add	cl,bl
   1063 	rol	r10d,15
   1064 	mov	r12d,-1
   1065 	pinsrw	xmm0,WORD[rax*4+rdi],3
   1066 
   1067 	add	r10d,r11d
   1068 	mov	edx,DWORD[rcx*4+rdi]
   1069 	xor	r12d,r8d
   1070 	mov	DWORD[rcx*4+rdi],ebx
   1071 	or	r12d,r10d
   1072 	add	r9d,DWORD[4+r15]
   1073 	add	bl,dl
   1074 	mov	eax,DWORD[96+rsi]
   1075 	add	r9d,2240044497
   1076 	movzx	ebx,bl
   1077 	xor	r12d,r11d
   1078 	mov	DWORD[92+rsi],edx
   1079 	add	r9d,r12d
   1080 	add	cl,al
   1081 	rol	r9d,21
   1082 	mov	r12d,-1
   1083 	pinsrw	xmm1,WORD[rbx*4+rdi],3
   1084 
   1085 	add	r9d,r10d
   1086 	mov	edx,DWORD[rcx*4+rdi]
   1087 	xor	r12d,r11d
   1088 	mov	DWORD[rcx*4+rdi],eax
   1089 	or	r12d,r9d
   1090 	add	r8d,DWORD[32+r15]
   1091 	add	al,dl
   1092 	mov	ebx,DWORD[100+rsi]
   1093 	add	r8d,1873313359
   1094 	movzx	eax,al
   1095 	xor	r12d,r10d
   1096 	mov	DWORD[96+rsi],edx
   1097 	add	r8d,r12d
   1098 	add	cl,bl
   1099 	rol	r8d,6
   1100 	mov	r12d,-1
   1101 	pinsrw	xmm0,WORD[rax*4+rdi],4
   1102 
   1103 	add	r8d,r9d
   1104 	mov	edx,DWORD[rcx*4+rdi]
   1105 	xor	r12d,r10d
   1106 	mov	DWORD[rcx*4+rdi],ebx
   1107 	or	r12d,r8d
   1108 	add	r11d,DWORD[60+r15]
   1109 	add	bl,dl
   1110 	mov	eax,DWORD[104+rsi]
   1111 	add	r11d,4264355552
   1112 	movzx	ebx,bl
   1113 	xor	r12d,r9d
   1114 	mov	DWORD[100+rsi],edx
   1115 	add	r11d,r12d
   1116 	add	cl,al
   1117 	rol	r11d,10
   1118 	mov	r12d,-1
   1119 	pinsrw	xmm1,WORD[rbx*4+rdi],4
   1120 
   1121 	add	r11d,r8d
   1122 	mov	edx,DWORD[rcx*4+rdi]
   1123 	xor	r12d,r9d
   1124 	mov	DWORD[rcx*4+rdi],eax
   1125 	or	r12d,r11d
   1126 	add	r10d,DWORD[24+r15]
   1127 	add	al,dl
   1128 	mov	ebx,DWORD[108+rsi]
   1129 	add	r10d,2734768916
   1130 	movzx	eax,al
   1131 	xor	r12d,r8d
   1132 	mov	DWORD[104+rsi],edx
   1133 	add	r10d,r12d
   1134 	add	cl,bl
   1135 	rol	r10d,15
   1136 	mov	r12d,-1
   1137 	pinsrw	xmm0,WORD[rax*4+rdi],5
   1138 
   1139 	add	r10d,r11d
   1140 	mov	edx,DWORD[rcx*4+rdi]
   1141 	xor	r12d,r8d
   1142 	mov	DWORD[rcx*4+rdi],ebx
   1143 	or	r12d,r10d
   1144 	add	r9d,DWORD[52+r15]
   1145 	add	bl,dl
   1146 	mov	eax,DWORD[112+rsi]
   1147 	add	r9d,1309151649
   1148 	movzx	ebx,bl
   1149 	xor	r12d,r11d
   1150 	mov	DWORD[108+rsi],edx
   1151 	add	r9d,r12d
   1152 	add	cl,al
   1153 	rol	r9d,21
   1154 	mov	r12d,-1
   1155 	pinsrw	xmm1,WORD[rbx*4+rdi],5
   1156 
   1157 	add	r9d,r10d
   1158 	mov	edx,DWORD[rcx*4+rdi]
   1159 	xor	r12d,r11d
   1160 	mov	DWORD[rcx*4+rdi],eax
   1161 	or	r12d,r9d
   1162 	add	r8d,DWORD[16+r15]
   1163 	add	al,dl
   1164 	mov	ebx,DWORD[116+rsi]
   1165 	add	r8d,4149444226
   1166 	movzx	eax,al
   1167 	xor	r12d,r10d
   1168 	mov	DWORD[112+rsi],edx
   1169 	add	r8d,r12d
   1170 	add	cl,bl
   1171 	rol	r8d,6
   1172 	mov	r12d,-1
   1173 	pinsrw	xmm0,WORD[rax*4+rdi],6
   1174 
   1175 	add	r8d,r9d
   1176 	mov	edx,DWORD[rcx*4+rdi]
   1177 	xor	r12d,r10d
   1178 	mov	DWORD[rcx*4+rdi],ebx
   1179 	or	r12d,r8d
   1180 	add	r11d,DWORD[44+r15]
   1181 	add	bl,dl
   1182 	mov	eax,DWORD[120+rsi]
   1183 	add	r11d,3174756917
   1184 	movzx	ebx,bl
   1185 	xor	r12d,r9d
   1186 	mov	DWORD[116+rsi],edx
   1187 	add	r11d,r12d
   1188 	add	cl,al
   1189 	rol	r11d,10
   1190 	mov	r12d,-1
   1191 	pinsrw	xmm1,WORD[rbx*4+rdi],6
   1192 
   1193 	add	r11d,r8d
   1194 	mov	edx,DWORD[rcx*4+rdi]
   1195 	xor	r12d,r9d
   1196 	mov	DWORD[rcx*4+rdi],eax
   1197 	or	r12d,r11d
   1198 	add	r10d,DWORD[8+r15]
   1199 	add	al,dl
   1200 	mov	ebx,DWORD[124+rsi]
   1201 	add	r10d,718787259
   1202 	movzx	eax,al
   1203 	xor	r12d,r8d
   1204 	mov	DWORD[120+rsi],edx
   1205 	add	r10d,r12d
   1206 	add	cl,bl
   1207 	rol	r10d,15
   1208 	mov	r12d,-1
   1209 	pinsrw	xmm0,WORD[rax*4+rdi],7
   1210 
   1211 	add	r10d,r11d
   1212 	movdqu	xmm5,XMMWORD[48+r13]
   1213 	add	bpl,32
   1214 	mov	edx,DWORD[rcx*4+rdi]
   1215 	xor	r12d,r8d
   1216 	mov	DWORD[rcx*4+rdi],ebx
   1217 	or	r12d,r10d
   1218 	add	r9d,DWORD[36+r15]
   1219 	add	bl,dl
   1220 	mov	eax,DWORD[rbp*4+rdi]
   1221 	add	r9d,3951481745
   1222 	movzx	ebx,bl
   1223 	xor	r12d,r11d
   1224 	mov	DWORD[124+rsi],edx
   1225 	add	r9d,r12d
   1226 	add	cl,al
   1227 	rol	r9d,21
   1228 	mov	r12d,-1
   1229 	pinsrw	xmm1,WORD[rbx*4+rdi],7
   1230 
   1231 	add	r9d,r10d
   1232 	mov	rsi,rbp
   1233 	xor	rbp,rbp
   1234 	mov	bpl,sil
   1235 	mov	rsi,rcx
   1236 	xor	rcx,rcx
   1237 	mov	cl,sil
   1238 	lea	rsi,[rbp*4+rdi]
   1239 	psllq	xmm1,8
   1240 	pxor	xmm5,xmm0
   1241 	pxor	xmm5,xmm1
   1242 	add	r8d,DWORD[rsp]
   1243 	add	r9d,DWORD[4+rsp]
   1244 	add	r10d,DWORD[8+rsp]
   1245 	add	r11d,DWORD[12+rsp]
   1246 
   1247 	movdqu	XMMWORD[r13*1+r14],xmm2
   1248 	movdqu	XMMWORD[16+r13*1+r14],xmm3
   1249 	movdqu	XMMWORD[32+r13*1+r14],xmm4
   1250 	movdqu	XMMWORD[48+r13*1+r14],xmm5
   1251 	lea	r15,[64+r15]
   1252 	lea	r13,[64+r13]
   1253 	cmp	r15,QWORD[16+rsp]
   1254 	jb	NEAR $L$oop
   1255 
   1256 	mov	r12,QWORD[24+rsp]
   1257 	sub	cl,al
   1258 	mov	DWORD[r12],r8d
   1259 	mov	DWORD[4+r12],r9d
   1260 	mov	DWORD[8+r12],r10d
   1261 	mov	DWORD[12+r12],r11d
   1262 	sub	bpl,1
   1263 	mov	DWORD[((-8))+rdi],ebp
   1264 	mov	DWORD[((-4))+rdi],ecx
   1265 
   1266 	mov	r15,QWORD[40+rsp]
   1267 	mov	r14,QWORD[48+rsp]
   1268 	mov	r13,QWORD[56+rsp]
   1269 	mov	r12,QWORD[64+rsp]
   1270 	mov	rbp,QWORD[72+rsp]
   1271 	mov	rbx,QWORD[80+rsp]
   1272 	lea	rsp,[88+rsp]
   1273 $L$epilogue:
   1274 $L$abort:
   1275 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   1276 	mov	rsi,QWORD[16+rsp]
   1277 	DB	0F3h,0C3h		;repret
   1278 $L$SEH_end_rc4_md5_enc:
   1279 EXTERN	__imp_RtlVirtualUnwind
   1280 
   1281 ALIGN	16
   1282 se_handler:
   1283 	push	rsi
   1284 	push	rdi
   1285 	push	rbx
   1286 	push	rbp
   1287 	push	r12
   1288 	push	r13
   1289 	push	r14
   1290 	push	r15
   1291 	pushfq
   1292 	sub	rsp,64
   1293 
   1294 	mov	rax,QWORD[120+r8]
   1295 	mov	rbx,QWORD[248+r8]
   1296 
   1297 	lea	r10,[$L$body]
   1298 	cmp	rbx,r10
   1299 	jb	NEAR $L$in_prologue
   1300 
   1301 	mov	rax,QWORD[152+r8]
   1302 
   1303 	lea	r10,[$L$epilogue]
   1304 	cmp	rbx,r10
   1305 	jae	NEAR $L$in_prologue
   1306 
   1307 	mov	r15,QWORD[40+rax]
   1308 	mov	r14,QWORD[48+rax]
   1309 	mov	r13,QWORD[56+rax]
   1310 	mov	r12,QWORD[64+rax]
   1311 	mov	rbp,QWORD[72+rax]
   1312 	mov	rbx,QWORD[80+rax]
   1313 	lea	rax,[88+rax]
   1314 
   1315 	mov	QWORD[144+r8],rbx
   1316 	mov	QWORD[160+r8],rbp
   1317 	mov	QWORD[216+r8],r12
   1318 	mov	QWORD[224+r8],r13
   1319 	mov	QWORD[232+r8],r14
   1320 	mov	QWORD[240+r8],r15
   1321 
   1322 $L$in_prologue:
   1323 	mov	rdi,QWORD[8+rax]
   1324 	mov	rsi,QWORD[16+rax]
   1325 	mov	QWORD[152+r8],rax
   1326 	mov	QWORD[168+r8],rsi
   1327 	mov	QWORD[176+r8],rdi
   1328 
   1329 	mov	rdi,QWORD[40+r9]
   1330 	mov	rsi,r8
   1331 	mov	ecx,154
   1332 	DD	0xa548f3fc
   1333 
   1334 	mov	rsi,r9
   1335 	xor	rcx,rcx
   1336 	mov	rdx,QWORD[8+rsi]
   1337 	mov	r8,QWORD[rsi]
   1338 	mov	r9,QWORD[16+rsi]
   1339 	mov	r10,QWORD[40+rsi]
   1340 	lea	r11,[56+rsi]
   1341 	lea	r12,[24+rsi]
   1342 	mov	QWORD[32+rsp],r10
   1343 	mov	QWORD[40+rsp],r11
   1344 	mov	QWORD[48+rsp],r12
   1345 	mov	QWORD[56+rsp],rcx
   1346 	call	QWORD[__imp_RtlVirtualUnwind]
   1347 
   1348 	mov	eax,1
   1349 	add	rsp,64
   1350 	popfq
   1351 	pop	r15
   1352 	pop	r14
   1353 	pop	r13
   1354 	pop	r12
   1355 	pop	rbp
   1356 	pop	rbx
   1357 	pop	rdi
   1358 	pop	rsi
   1359 	DB	0F3h,0C3h		;repret
   1360 
   1361 
   1362 section	.pdata rdata align=4
   1363 ALIGN	4
   1364 	DD	$L$SEH_begin_rc4_md5_enc wrt ..imagebase
   1365 	DD	$L$SEH_end_rc4_md5_enc wrt ..imagebase
   1366 	DD	$L$SEH_info_rc4_md5_enc wrt ..imagebase
   1367 
   1368 section	.xdata rdata align=8
   1369 ALIGN	8
   1370 $L$SEH_info_rc4_md5_enc:
   1371 DB	9,0,0,0
   1372 	DD	se_handler wrt ..imagebase
   1373