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