Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / win-x86_64 / crypto / sha / sha512-x86_64.asm
1 default rel
2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section .text code align=64
6
7
8 EXTERN  OPENSSL_ia32cap_P
9 global  sha512_block_data_order
10
11 ALIGN   16
12 sha512_block_data_order:
13         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
14         mov     QWORD[16+rsp],rsi
15         mov     rax,rsp
16 $L$SEH_begin_sha512_block_data_order:
17         mov     rdi,rcx
18         mov     rsi,rdx
19         mov     rdx,r8
20
21
22         push    rbx
23         push    rbp
24         push    r12
25         push    r13
26         push    r14
27         push    r15
28         mov     r11,rsp
29         shl     rdx,4
30         sub     rsp,16*8+4*8
31         lea     rdx,[rdx*8+rsi]
32         and     rsp,-64
33         mov     QWORD[((128+0))+rsp],rdi
34         mov     QWORD[((128+8))+rsp],rsi
35         mov     QWORD[((128+16))+rsp],rdx
36         mov     QWORD[((128+24))+rsp],r11
37 $L$prologue:
38
39         mov     rax,QWORD[rdi]
40         mov     rbx,QWORD[8+rdi]
41         mov     rcx,QWORD[16+rdi]
42         mov     rdx,QWORD[24+rdi]
43         mov     r8,QWORD[32+rdi]
44         mov     r9,QWORD[40+rdi]
45         mov     r10,QWORD[48+rdi]
46         mov     r11,QWORD[56+rdi]
47         jmp     NEAR $L$loop
48
49 ALIGN   16
50 $L$loop:
51         mov     rdi,rbx
52         lea     rbp,[K512]
53         xor     rdi,rcx
54         mov     r12,QWORD[rsi]
55         mov     r13,r8
56         mov     r14,rax
57         bswap   r12
58         ror     r13,23
59         mov     r15,r9
60
61         xor     r13,r8
62         ror     r14,5
63         xor     r15,r10
64
65         mov     QWORD[rsp],r12
66         xor     r14,rax
67         and     r15,r8
68
69         ror     r13,4
70         add     r12,r11
71         xor     r15,r10
72
73         ror     r14,6
74         xor     r13,r8
75         add     r12,r15
76
77         mov     r15,rax
78         add     r12,QWORD[rbp]
79         xor     r14,rax
80
81         xor     r15,rbx
82         ror     r13,14
83         mov     r11,rbx
84
85         and     rdi,r15
86         ror     r14,28
87         add     r12,r13
88
89         xor     r11,rdi
90         add     rdx,r12
91         add     r11,r12
92
93         lea     rbp,[8+rbp]
94         add     r11,r14
95         mov     r12,QWORD[8+rsi]
96         mov     r13,rdx
97         mov     r14,r11
98         bswap   r12
99         ror     r13,23
100         mov     rdi,r8
101
102         xor     r13,rdx
103         ror     r14,5
104         xor     rdi,r9
105
106         mov     QWORD[8+rsp],r12
107         xor     r14,r11
108         and     rdi,rdx
109
110         ror     r13,4
111         add     r12,r10
112         xor     rdi,r9
113
114         ror     r14,6
115         xor     r13,rdx
116         add     r12,rdi
117
118         mov     rdi,r11
119         add     r12,QWORD[rbp]
120         xor     r14,r11
121
122         xor     rdi,rax
123         ror     r13,14
124         mov     r10,rax
125
126         and     r15,rdi
127         ror     r14,28
128         add     r12,r13
129
130         xor     r10,r15
131         add     rcx,r12
132         add     r10,r12
133
134         lea     rbp,[24+rbp]
135         add     r10,r14
136         mov     r12,QWORD[16+rsi]
137         mov     r13,rcx
138         mov     r14,r10
139         bswap   r12
140         ror     r13,23
141         mov     r15,rdx
142
143         xor     r13,rcx
144         ror     r14,5
145         xor     r15,r8
146
147         mov     QWORD[16+rsp],r12
148         xor     r14,r10
149         and     r15,rcx
150
151         ror     r13,4
152         add     r12,r9
153         xor     r15,r8
154
155         ror     r14,6
156         xor     r13,rcx
157         add     r12,r15
158
159         mov     r15,r10
160         add     r12,QWORD[rbp]
161         xor     r14,r10
162
163         xor     r15,r11
164         ror     r13,14
165         mov     r9,r11
166
167         and     rdi,r15
168         ror     r14,28
169         add     r12,r13
170
171         xor     r9,rdi
172         add     rbx,r12
173         add     r9,r12
174
175         lea     rbp,[8+rbp]
176         add     r9,r14
177         mov     r12,QWORD[24+rsi]
178         mov     r13,rbx
179         mov     r14,r9
180         bswap   r12
181         ror     r13,23
182         mov     rdi,rcx
183
184         xor     r13,rbx
185         ror     r14,5
186         xor     rdi,rdx
187
188         mov     QWORD[24+rsp],r12
189         xor     r14,r9
190         and     rdi,rbx
191
192         ror     r13,4
193         add     r12,r8
194         xor     rdi,rdx
195
196         ror     r14,6
197         xor     r13,rbx
198         add     r12,rdi
199
200         mov     rdi,r9
201         add     r12,QWORD[rbp]
202         xor     r14,r9
203
204         xor     rdi,r10
205         ror     r13,14
206         mov     r8,r10
207
208         and     r15,rdi
209         ror     r14,28
210         add     r12,r13
211
212         xor     r8,r15
213         add     rax,r12
214         add     r8,r12
215
216         lea     rbp,[24+rbp]
217         add     r8,r14
218         mov     r12,QWORD[32+rsi]
219         mov     r13,rax
220         mov     r14,r8
221         bswap   r12
222         ror     r13,23
223         mov     r15,rbx
224
225         xor     r13,rax
226         ror     r14,5
227         xor     r15,rcx
228
229         mov     QWORD[32+rsp],r12
230         xor     r14,r8
231         and     r15,rax
232
233         ror     r13,4
234         add     r12,rdx
235         xor     r15,rcx
236
237         ror     r14,6
238         xor     r13,rax
239         add     r12,r15
240
241         mov     r15,r8
242         add     r12,QWORD[rbp]
243         xor     r14,r8
244
245         xor     r15,r9
246         ror     r13,14
247         mov     rdx,r9
248
249         and     rdi,r15
250         ror     r14,28
251         add     r12,r13
252
253         xor     rdx,rdi
254         add     r11,r12
255         add     rdx,r12
256
257         lea     rbp,[8+rbp]
258         add     rdx,r14
259         mov     r12,QWORD[40+rsi]
260         mov     r13,r11
261         mov     r14,rdx
262         bswap   r12
263         ror     r13,23
264         mov     rdi,rax
265
266         xor     r13,r11
267         ror     r14,5
268         xor     rdi,rbx
269
270         mov     QWORD[40+rsp],r12
271         xor     r14,rdx
272         and     rdi,r11
273
274         ror     r13,4
275         add     r12,rcx
276         xor     rdi,rbx
277
278         ror     r14,6
279         xor     r13,r11
280         add     r12,rdi
281
282         mov     rdi,rdx
283         add     r12,QWORD[rbp]
284         xor     r14,rdx
285
286         xor     rdi,r8
287         ror     r13,14
288         mov     rcx,r8
289
290         and     r15,rdi
291         ror     r14,28
292         add     r12,r13
293
294         xor     rcx,r15
295         add     r10,r12
296         add     rcx,r12
297
298         lea     rbp,[24+rbp]
299         add     rcx,r14
300         mov     r12,QWORD[48+rsi]
301         mov     r13,r10
302         mov     r14,rcx
303         bswap   r12
304         ror     r13,23
305         mov     r15,r11
306
307         xor     r13,r10
308         ror     r14,5
309         xor     r15,rax
310
311         mov     QWORD[48+rsp],r12
312         xor     r14,rcx
313         and     r15,r10
314
315         ror     r13,4
316         add     r12,rbx
317         xor     r15,rax
318
319         ror     r14,6
320         xor     r13,r10
321         add     r12,r15
322
323         mov     r15,rcx
324         add     r12,QWORD[rbp]
325         xor     r14,rcx
326
327         xor     r15,rdx
328         ror     r13,14
329         mov     rbx,rdx
330
331         and     rdi,r15
332         ror     r14,28
333         add     r12,r13
334
335         xor     rbx,rdi
336         add     r9,r12
337         add     rbx,r12
338
339         lea     rbp,[8+rbp]
340         add     rbx,r14
341         mov     r12,QWORD[56+rsi]
342         mov     r13,r9
343         mov     r14,rbx
344         bswap   r12
345         ror     r13,23
346         mov     rdi,r10
347
348         xor     r13,r9
349         ror     r14,5
350         xor     rdi,r11
351
352         mov     QWORD[56+rsp],r12
353         xor     r14,rbx
354         and     rdi,r9
355
356         ror     r13,4
357         add     r12,rax
358         xor     rdi,r11
359
360         ror     r14,6
361         xor     r13,r9
362         add     r12,rdi
363
364         mov     rdi,rbx
365         add     r12,QWORD[rbp]
366         xor     r14,rbx
367
368         xor     rdi,rcx
369         ror     r13,14
370         mov     rax,rcx
371
372         and     r15,rdi
373         ror     r14,28
374         add     r12,r13
375
376         xor     rax,r15
377         add     r8,r12
378         add     rax,r12
379
380         lea     rbp,[24+rbp]
381         add     rax,r14
382         mov     r12,QWORD[64+rsi]
383         mov     r13,r8
384         mov     r14,rax
385         bswap   r12
386         ror     r13,23
387         mov     r15,r9
388
389         xor     r13,r8
390         ror     r14,5
391         xor     r15,r10
392
393         mov     QWORD[64+rsp],r12
394         xor     r14,rax
395         and     r15,r8
396
397         ror     r13,4
398         add     r12,r11
399         xor     r15,r10
400
401         ror     r14,6
402         xor     r13,r8
403         add     r12,r15
404
405         mov     r15,rax
406         add     r12,QWORD[rbp]
407         xor     r14,rax
408
409         xor     r15,rbx
410         ror     r13,14
411         mov     r11,rbx
412
413         and     rdi,r15
414         ror     r14,28
415         add     r12,r13
416
417         xor     r11,rdi
418         add     rdx,r12
419         add     r11,r12
420
421         lea     rbp,[8+rbp]
422         add     r11,r14
423         mov     r12,QWORD[72+rsi]
424         mov     r13,rdx
425         mov     r14,r11
426         bswap   r12
427         ror     r13,23
428         mov     rdi,r8
429
430         xor     r13,rdx
431         ror     r14,5
432         xor     rdi,r9
433
434         mov     QWORD[72+rsp],r12
435         xor     r14,r11
436         and     rdi,rdx
437
438         ror     r13,4
439         add     r12,r10
440         xor     rdi,r9
441
442         ror     r14,6
443         xor     r13,rdx
444         add     r12,rdi
445
446         mov     rdi,r11
447         add     r12,QWORD[rbp]
448         xor     r14,r11
449
450         xor     rdi,rax
451         ror     r13,14
452         mov     r10,rax
453
454         and     r15,rdi
455         ror     r14,28
456         add     r12,r13
457
458         xor     r10,r15
459         add     rcx,r12
460         add     r10,r12
461
462         lea     rbp,[24+rbp]
463         add     r10,r14
464         mov     r12,QWORD[80+rsi]
465         mov     r13,rcx
466         mov     r14,r10
467         bswap   r12
468         ror     r13,23
469         mov     r15,rdx
470
471         xor     r13,rcx
472         ror     r14,5
473         xor     r15,r8
474
475         mov     QWORD[80+rsp],r12
476         xor     r14,r10
477         and     r15,rcx
478
479         ror     r13,4
480         add     r12,r9
481         xor     r15,r8
482
483         ror     r14,6
484         xor     r13,rcx
485         add     r12,r15
486
487         mov     r15,r10
488         add     r12,QWORD[rbp]
489         xor     r14,r10
490
491         xor     r15,r11
492         ror     r13,14
493         mov     r9,r11
494
495         and     rdi,r15
496         ror     r14,28
497         add     r12,r13
498
499         xor     r9,rdi
500         add     rbx,r12
501         add     r9,r12
502
503         lea     rbp,[8+rbp]
504         add     r9,r14
505         mov     r12,QWORD[88+rsi]
506         mov     r13,rbx
507         mov     r14,r9
508         bswap   r12
509         ror     r13,23
510         mov     rdi,rcx
511
512         xor     r13,rbx
513         ror     r14,5
514         xor     rdi,rdx
515
516         mov     QWORD[88+rsp],r12
517         xor     r14,r9
518         and     rdi,rbx
519
520         ror     r13,4
521         add     r12,r8
522         xor     rdi,rdx
523
524         ror     r14,6
525         xor     r13,rbx
526         add     r12,rdi
527
528         mov     rdi,r9
529         add     r12,QWORD[rbp]
530         xor     r14,r9
531
532         xor     rdi,r10
533         ror     r13,14
534         mov     r8,r10
535
536         and     r15,rdi
537         ror     r14,28
538         add     r12,r13
539
540         xor     r8,r15
541         add     rax,r12
542         add     r8,r12
543
544         lea     rbp,[24+rbp]
545         add     r8,r14
546         mov     r12,QWORD[96+rsi]
547         mov     r13,rax
548         mov     r14,r8
549         bswap   r12
550         ror     r13,23
551         mov     r15,rbx
552
553         xor     r13,rax
554         ror     r14,5
555         xor     r15,rcx
556
557         mov     QWORD[96+rsp],r12
558         xor     r14,r8
559         and     r15,rax
560
561         ror     r13,4
562         add     r12,rdx
563         xor     r15,rcx
564
565         ror     r14,6
566         xor     r13,rax
567         add     r12,r15
568
569         mov     r15,r8
570         add     r12,QWORD[rbp]
571         xor     r14,r8
572
573         xor     r15,r9
574         ror     r13,14
575         mov     rdx,r9
576
577         and     rdi,r15
578         ror     r14,28
579         add     r12,r13
580
581         xor     rdx,rdi
582         add     r11,r12
583         add     rdx,r12
584
585         lea     rbp,[8+rbp]
586         add     rdx,r14
587         mov     r12,QWORD[104+rsi]
588         mov     r13,r11
589         mov     r14,rdx
590         bswap   r12
591         ror     r13,23
592         mov     rdi,rax
593
594         xor     r13,r11
595         ror     r14,5
596         xor     rdi,rbx
597
598         mov     QWORD[104+rsp],r12
599         xor     r14,rdx
600         and     rdi,r11
601
602         ror     r13,4
603         add     r12,rcx
604         xor     rdi,rbx
605
606         ror     r14,6
607         xor     r13,r11
608         add     r12,rdi
609
610         mov     rdi,rdx
611         add     r12,QWORD[rbp]
612         xor     r14,rdx
613
614         xor     rdi,r8
615         ror     r13,14
616         mov     rcx,r8
617
618         and     r15,rdi
619         ror     r14,28
620         add     r12,r13
621
622         xor     rcx,r15
623         add     r10,r12
624         add     rcx,r12
625
626         lea     rbp,[24+rbp]
627         add     rcx,r14
628         mov     r12,QWORD[112+rsi]
629         mov     r13,r10
630         mov     r14,rcx
631         bswap   r12
632         ror     r13,23
633         mov     r15,r11
634
635         xor     r13,r10
636         ror     r14,5
637         xor     r15,rax
638
639         mov     QWORD[112+rsp],r12
640         xor     r14,rcx
641         and     r15,r10
642
643         ror     r13,4
644         add     r12,rbx
645         xor     r15,rax
646
647         ror     r14,6
648         xor     r13,r10
649         add     r12,r15
650
651         mov     r15,rcx
652         add     r12,QWORD[rbp]
653         xor     r14,rcx
654
655         xor     r15,rdx
656         ror     r13,14
657         mov     rbx,rdx
658
659         and     rdi,r15
660         ror     r14,28
661         add     r12,r13
662
663         xor     rbx,rdi
664         add     r9,r12
665         add     rbx,r12
666
667         lea     rbp,[8+rbp]
668         add     rbx,r14
669         mov     r12,QWORD[120+rsi]
670         mov     r13,r9
671         mov     r14,rbx
672         bswap   r12
673         ror     r13,23
674         mov     rdi,r10
675
676         xor     r13,r9
677         ror     r14,5
678         xor     rdi,r11
679
680         mov     QWORD[120+rsp],r12
681         xor     r14,rbx
682         and     rdi,r9
683
684         ror     r13,4
685         add     r12,rax
686         xor     rdi,r11
687
688         ror     r14,6
689         xor     r13,r9
690         add     r12,rdi
691
692         mov     rdi,rbx
693         add     r12,QWORD[rbp]
694         xor     r14,rbx
695
696         xor     rdi,rcx
697         ror     r13,14
698         mov     rax,rcx
699
700         and     r15,rdi
701         ror     r14,28
702         add     r12,r13
703
704         xor     rax,r15
705         add     r8,r12
706         add     rax,r12
707
708         lea     rbp,[24+rbp]
709         jmp     NEAR $L$rounds_16_xx
710 ALIGN   16
711 $L$rounds_16_xx:
712         mov     r13,QWORD[8+rsp]
713         mov     r15,QWORD[112+rsp]
714
715         mov     r12,r13
716         ror     r13,7
717         add     rax,r14
718         mov     r14,r15
719         ror     r15,42
720
721         xor     r13,r12
722         shr     r12,7
723         ror     r13,1
724         xor     r15,r14
725         shr     r14,6
726
727         ror     r15,19
728         xor     r12,r13
729         xor     r15,r14
730         add     r12,QWORD[72+rsp]
731
732         add     r12,QWORD[rsp]
733         mov     r13,r8
734         add     r12,r15
735         mov     r14,rax
736         ror     r13,23
737         mov     r15,r9
738
739         xor     r13,r8
740         ror     r14,5
741         xor     r15,r10
742
743         mov     QWORD[rsp],r12
744         xor     r14,rax
745         and     r15,r8
746
747         ror     r13,4
748         add     r12,r11
749         xor     r15,r10
750
751         ror     r14,6
752         xor     r13,r8
753         add     r12,r15
754
755         mov     r15,rax
756         add     r12,QWORD[rbp]
757         xor     r14,rax
758
759         xor     r15,rbx
760         ror     r13,14
761         mov     r11,rbx
762
763         and     rdi,r15
764         ror     r14,28
765         add     r12,r13
766
767         xor     r11,rdi
768         add     rdx,r12
769         add     r11,r12
770
771         lea     rbp,[8+rbp]
772         mov     r13,QWORD[16+rsp]
773         mov     rdi,QWORD[120+rsp]
774
775         mov     r12,r13
776         ror     r13,7
777         add     r11,r14
778         mov     r14,rdi
779         ror     rdi,42
780
781         xor     r13,r12
782         shr     r12,7
783         ror     r13,1
784         xor     rdi,r14
785         shr     r14,6
786
787         ror     rdi,19
788         xor     r12,r13
789         xor     rdi,r14
790         add     r12,QWORD[80+rsp]
791
792         add     r12,QWORD[8+rsp]
793         mov     r13,rdx
794         add     r12,rdi
795         mov     r14,r11
796         ror     r13,23
797         mov     rdi,r8
798
799         xor     r13,rdx
800         ror     r14,5
801         xor     rdi,r9
802
803         mov     QWORD[8+rsp],r12
804         xor     r14,r11
805         and     rdi,rdx
806
807         ror     r13,4
808         add     r12,r10
809         xor     rdi,r9
810
811         ror     r14,6
812         xor     r13,rdx
813         add     r12,rdi
814
815         mov     rdi,r11
816         add     r12,QWORD[rbp]
817         xor     r14,r11
818
819         xor     rdi,rax
820         ror     r13,14
821         mov     r10,rax
822
823         and     r15,rdi
824         ror     r14,28
825         add     r12,r13
826
827         xor     r10,r15
828         add     rcx,r12
829         add     r10,r12
830
831         lea     rbp,[24+rbp]
832         mov     r13,QWORD[24+rsp]
833         mov     r15,QWORD[rsp]
834
835         mov     r12,r13
836         ror     r13,7
837         add     r10,r14
838         mov     r14,r15
839         ror     r15,42
840
841         xor     r13,r12
842         shr     r12,7
843         ror     r13,1
844         xor     r15,r14
845         shr     r14,6
846
847         ror     r15,19
848         xor     r12,r13
849         xor     r15,r14
850         add     r12,QWORD[88+rsp]
851
852         add     r12,QWORD[16+rsp]
853         mov     r13,rcx
854         add     r12,r15
855         mov     r14,r10
856         ror     r13,23
857         mov     r15,rdx
858
859         xor     r13,rcx
860         ror     r14,5
861         xor     r15,r8
862
863         mov     QWORD[16+rsp],r12
864         xor     r14,r10
865         and     r15,rcx
866
867         ror     r13,4
868         add     r12,r9
869         xor     r15,r8
870
871         ror     r14,6
872         xor     r13,rcx
873         add     r12,r15
874
875         mov     r15,r10
876         add     r12,QWORD[rbp]
877         xor     r14,r10
878
879         xor     r15,r11
880         ror     r13,14
881         mov     r9,r11
882
883         and     rdi,r15
884         ror     r14,28
885         add     r12,r13
886
887         xor     r9,rdi
888         add     rbx,r12
889         add     r9,r12
890
891         lea     rbp,[8+rbp]
892         mov     r13,QWORD[32+rsp]
893         mov     rdi,QWORD[8+rsp]
894
895         mov     r12,r13
896         ror     r13,7
897         add     r9,r14
898         mov     r14,rdi
899         ror     rdi,42
900
901         xor     r13,r12
902         shr     r12,7
903         ror     r13,1
904         xor     rdi,r14
905         shr     r14,6
906
907         ror     rdi,19
908         xor     r12,r13
909         xor     rdi,r14
910         add     r12,QWORD[96+rsp]
911
912         add     r12,QWORD[24+rsp]
913         mov     r13,rbx
914         add     r12,rdi
915         mov     r14,r9
916         ror     r13,23
917         mov     rdi,rcx
918
919         xor     r13,rbx
920         ror     r14,5
921         xor     rdi,rdx
922
923         mov     QWORD[24+rsp],r12
924         xor     r14,r9
925         and     rdi,rbx
926
927         ror     r13,4
928         add     r12,r8
929         xor     rdi,rdx
930
931         ror     r14,6
932         xor     r13,rbx
933         add     r12,rdi
934
935         mov     rdi,r9
936         add     r12,QWORD[rbp]
937         xor     r14,r9
938
939         xor     rdi,r10
940         ror     r13,14
941         mov     r8,r10
942
943         and     r15,rdi
944         ror     r14,28
945         add     r12,r13
946
947         xor     r8,r15
948         add     rax,r12
949         add     r8,r12
950
951         lea     rbp,[24+rbp]
952         mov     r13,QWORD[40+rsp]
953         mov     r15,QWORD[16+rsp]
954
955         mov     r12,r13
956         ror     r13,7
957         add     r8,r14
958         mov     r14,r15
959         ror     r15,42
960
961         xor     r13,r12
962         shr     r12,7
963         ror     r13,1
964         xor     r15,r14
965         shr     r14,6
966
967         ror     r15,19
968         xor     r12,r13
969         xor     r15,r14
970         add     r12,QWORD[104+rsp]
971
972         add     r12,QWORD[32+rsp]
973         mov     r13,rax
974         add     r12,r15
975         mov     r14,r8
976         ror     r13,23
977         mov     r15,rbx
978
979         xor     r13,rax
980         ror     r14,5
981         xor     r15,rcx
982
983         mov     QWORD[32+rsp],r12
984         xor     r14,r8
985         and     r15,rax
986
987         ror     r13,4
988         add     r12,rdx
989         xor     r15,rcx
990
991         ror     r14,6
992         xor     r13,rax
993         add     r12,r15
994
995         mov     r15,r8
996         add     r12,QWORD[rbp]
997         xor     r14,r8
998
999         xor     r15,r9
1000         ror     r13,14
1001         mov     rdx,r9
1002
1003         and     rdi,r15
1004         ror     r14,28
1005         add     r12,r13
1006
1007         xor     rdx,rdi
1008         add     r11,r12
1009         add     rdx,r12
1010
1011         lea     rbp,[8+rbp]
1012         mov     r13,QWORD[48+rsp]
1013         mov     rdi,QWORD[24+rsp]
1014
1015         mov     r12,r13
1016         ror     r13,7
1017         add     rdx,r14
1018         mov     r14,rdi
1019         ror     rdi,42
1020
1021         xor     r13,r12
1022         shr     r12,7
1023         ror     r13,1
1024         xor     rdi,r14
1025         shr     r14,6
1026
1027         ror     rdi,19
1028         xor     r12,r13
1029         xor     rdi,r14
1030         add     r12,QWORD[112+rsp]
1031
1032         add     r12,QWORD[40+rsp]
1033         mov     r13,r11
1034         add     r12,rdi
1035         mov     r14,rdx
1036         ror     r13,23
1037         mov     rdi,rax
1038
1039         xor     r13,r11
1040         ror     r14,5
1041         xor     rdi,rbx
1042
1043         mov     QWORD[40+rsp],r12
1044         xor     r14,rdx
1045         and     rdi,r11
1046
1047         ror     r13,4
1048         add     r12,rcx
1049         xor     rdi,rbx
1050
1051         ror     r14,6
1052         xor     r13,r11
1053         add     r12,rdi
1054
1055         mov     rdi,rdx
1056         add     r12,QWORD[rbp]
1057         xor     r14,rdx
1058
1059         xor     rdi,r8
1060         ror     r13,14
1061         mov     rcx,r8
1062
1063         and     r15,rdi
1064         ror     r14,28
1065         add     r12,r13
1066
1067         xor     rcx,r15
1068         add     r10,r12
1069         add     rcx,r12
1070
1071         lea     rbp,[24+rbp]
1072         mov     r13,QWORD[56+rsp]
1073         mov     r15,QWORD[32+rsp]
1074
1075         mov     r12,r13
1076         ror     r13,7
1077         add     rcx,r14
1078         mov     r14,r15
1079         ror     r15,42
1080
1081         xor     r13,r12
1082         shr     r12,7
1083         ror     r13,1
1084         xor     r15,r14
1085         shr     r14,6
1086
1087         ror     r15,19
1088         xor     r12,r13
1089         xor     r15,r14
1090         add     r12,QWORD[120+rsp]
1091
1092         add     r12,QWORD[48+rsp]
1093         mov     r13,r10
1094         add     r12,r15
1095         mov     r14,rcx
1096         ror     r13,23
1097         mov     r15,r11
1098
1099         xor     r13,r10
1100         ror     r14,5
1101         xor     r15,rax
1102
1103         mov     QWORD[48+rsp],r12
1104         xor     r14,rcx
1105         and     r15,r10
1106
1107         ror     r13,4
1108         add     r12,rbx
1109         xor     r15,rax
1110
1111         ror     r14,6
1112         xor     r13,r10
1113         add     r12,r15
1114
1115         mov     r15,rcx
1116         add     r12,QWORD[rbp]
1117         xor     r14,rcx
1118
1119         xor     r15,rdx
1120         ror     r13,14
1121         mov     rbx,rdx
1122
1123         and     rdi,r15
1124         ror     r14,28
1125         add     r12,r13
1126
1127         xor     rbx,rdi
1128         add     r9,r12
1129         add     rbx,r12
1130
1131         lea     rbp,[8+rbp]
1132         mov     r13,QWORD[64+rsp]
1133         mov     rdi,QWORD[40+rsp]
1134
1135         mov     r12,r13
1136         ror     r13,7
1137         add     rbx,r14
1138         mov     r14,rdi
1139         ror     rdi,42
1140
1141         xor     r13,r12
1142         shr     r12,7
1143         ror     r13,1
1144         xor     rdi,r14
1145         shr     r14,6
1146
1147         ror     rdi,19
1148         xor     r12,r13
1149         xor     rdi,r14
1150         add     r12,QWORD[rsp]
1151
1152         add     r12,QWORD[56+rsp]
1153         mov     r13,r9
1154         add     r12,rdi
1155         mov     r14,rbx
1156         ror     r13,23
1157         mov     rdi,r10
1158
1159         xor     r13,r9
1160         ror     r14,5
1161         xor     rdi,r11
1162
1163         mov     QWORD[56+rsp],r12
1164         xor     r14,rbx
1165         and     rdi,r9
1166
1167         ror     r13,4
1168         add     r12,rax
1169         xor     rdi,r11
1170
1171         ror     r14,6
1172         xor     r13,r9
1173         add     r12,rdi
1174
1175         mov     rdi,rbx
1176         add     r12,QWORD[rbp]
1177         xor     r14,rbx
1178
1179         xor     rdi,rcx
1180         ror     r13,14
1181         mov     rax,rcx
1182
1183         and     r15,rdi
1184         ror     r14,28
1185         add     r12,r13
1186
1187         xor     rax,r15
1188         add     r8,r12
1189         add     rax,r12
1190
1191         lea     rbp,[24+rbp]
1192         mov     r13,QWORD[72+rsp]
1193         mov     r15,QWORD[48+rsp]
1194
1195         mov     r12,r13
1196         ror     r13,7
1197         add     rax,r14
1198         mov     r14,r15
1199         ror     r15,42
1200
1201         xor     r13,r12
1202         shr     r12,7
1203         ror     r13,1
1204         xor     r15,r14
1205         shr     r14,6
1206
1207         ror     r15,19
1208         xor     r12,r13
1209         xor     r15,r14
1210         add     r12,QWORD[8+rsp]
1211
1212         add     r12,QWORD[64+rsp]
1213         mov     r13,r8
1214         add     r12,r15
1215         mov     r14,rax
1216         ror     r13,23
1217         mov     r15,r9
1218
1219         xor     r13,r8
1220         ror     r14,5
1221         xor     r15,r10
1222
1223         mov     QWORD[64+rsp],r12
1224         xor     r14,rax
1225         and     r15,r8
1226
1227         ror     r13,4
1228         add     r12,r11
1229         xor     r15,r10
1230
1231         ror     r14,6
1232         xor     r13,r8
1233         add     r12,r15
1234
1235         mov     r15,rax
1236         add     r12,QWORD[rbp]
1237         xor     r14,rax
1238
1239         xor     r15,rbx
1240         ror     r13,14
1241         mov     r11,rbx
1242
1243         and     rdi,r15
1244         ror     r14,28
1245         add     r12,r13
1246
1247         xor     r11,rdi
1248         add     rdx,r12
1249         add     r11,r12
1250
1251         lea     rbp,[8+rbp]
1252         mov     r13,QWORD[80+rsp]
1253         mov     rdi,QWORD[56+rsp]
1254
1255         mov     r12,r13
1256         ror     r13,7
1257         add     r11,r14
1258         mov     r14,rdi
1259         ror     rdi,42
1260
1261         xor     r13,r12
1262         shr     r12,7
1263         ror     r13,1
1264         xor     rdi,r14
1265         shr     r14,6
1266
1267         ror     rdi,19
1268         xor     r12,r13
1269         xor     rdi,r14
1270         add     r12,QWORD[16+rsp]
1271
1272         add     r12,QWORD[72+rsp]
1273         mov     r13,rdx
1274         add     r12,rdi
1275         mov     r14,r11
1276         ror     r13,23
1277         mov     rdi,r8
1278
1279         xor     r13,rdx
1280         ror     r14,5
1281         xor     rdi,r9
1282
1283         mov     QWORD[72+rsp],r12
1284         xor     r14,r11
1285         and     rdi,rdx
1286
1287         ror     r13,4
1288         add     r12,r10
1289         xor     rdi,r9
1290
1291         ror     r14,6
1292         xor     r13,rdx
1293         add     r12,rdi
1294
1295         mov     rdi,r11
1296         add     r12,QWORD[rbp]
1297         xor     r14,r11
1298
1299         xor     rdi,rax
1300         ror     r13,14
1301         mov     r10,rax
1302
1303         and     r15,rdi
1304         ror     r14,28
1305         add     r12,r13
1306
1307         xor     r10,r15
1308         add     rcx,r12
1309         add     r10,r12
1310
1311         lea     rbp,[24+rbp]
1312         mov     r13,QWORD[88+rsp]
1313         mov     r15,QWORD[64+rsp]
1314
1315         mov     r12,r13
1316         ror     r13,7
1317         add     r10,r14
1318         mov     r14,r15
1319         ror     r15,42
1320
1321         xor     r13,r12
1322         shr     r12,7
1323         ror     r13,1
1324         xor     r15,r14
1325         shr     r14,6
1326
1327         ror     r15,19
1328         xor     r12,r13
1329         xor     r15,r14
1330         add     r12,QWORD[24+rsp]
1331
1332         add     r12,QWORD[80+rsp]
1333         mov     r13,rcx
1334         add     r12,r15
1335         mov     r14,r10
1336         ror     r13,23
1337         mov     r15,rdx
1338
1339         xor     r13,rcx
1340         ror     r14,5
1341         xor     r15,r8
1342
1343         mov     QWORD[80+rsp],r12
1344         xor     r14,r10
1345         and     r15,rcx
1346
1347         ror     r13,4
1348         add     r12,r9
1349         xor     r15,r8
1350
1351         ror     r14,6
1352         xor     r13,rcx
1353         add     r12,r15
1354
1355         mov     r15,r10
1356         add     r12,QWORD[rbp]
1357         xor     r14,r10
1358
1359         xor     r15,r11
1360         ror     r13,14
1361         mov     r9,r11
1362
1363         and     rdi,r15
1364         ror     r14,28
1365         add     r12,r13
1366
1367         xor     r9,rdi
1368         add     rbx,r12
1369         add     r9,r12
1370
1371         lea     rbp,[8+rbp]
1372         mov     r13,QWORD[96+rsp]
1373         mov     rdi,QWORD[72+rsp]
1374
1375         mov     r12,r13
1376         ror     r13,7
1377         add     r9,r14
1378         mov     r14,rdi
1379         ror     rdi,42
1380
1381         xor     r13,r12
1382         shr     r12,7
1383         ror     r13,1
1384         xor     rdi,r14
1385         shr     r14,6
1386
1387         ror     rdi,19
1388         xor     r12,r13
1389         xor     rdi,r14
1390         add     r12,QWORD[32+rsp]
1391
1392         add     r12,QWORD[88+rsp]
1393         mov     r13,rbx
1394         add     r12,rdi
1395         mov     r14,r9
1396         ror     r13,23
1397         mov     rdi,rcx
1398
1399         xor     r13,rbx
1400         ror     r14,5
1401         xor     rdi,rdx
1402
1403         mov     QWORD[88+rsp],r12
1404         xor     r14,r9
1405         and     rdi,rbx
1406
1407         ror     r13,4
1408         add     r12,r8
1409         xor     rdi,rdx
1410
1411         ror     r14,6
1412         xor     r13,rbx
1413         add     r12,rdi
1414
1415         mov     rdi,r9
1416         add     r12,QWORD[rbp]
1417         xor     r14,r9
1418
1419         xor     rdi,r10
1420         ror     r13,14
1421         mov     r8,r10
1422
1423         and     r15,rdi
1424         ror     r14,28
1425         add     r12,r13
1426
1427         xor     r8,r15
1428         add     rax,r12
1429         add     r8,r12
1430
1431         lea     rbp,[24+rbp]
1432         mov     r13,QWORD[104+rsp]
1433         mov     r15,QWORD[80+rsp]
1434
1435         mov     r12,r13
1436         ror     r13,7
1437         add     r8,r14
1438         mov     r14,r15
1439         ror     r15,42
1440
1441         xor     r13,r12
1442         shr     r12,7
1443         ror     r13,1
1444         xor     r15,r14
1445         shr     r14,6
1446
1447         ror     r15,19
1448         xor     r12,r13
1449         xor     r15,r14
1450         add     r12,QWORD[40+rsp]
1451
1452         add     r12,QWORD[96+rsp]
1453         mov     r13,rax
1454         add     r12,r15
1455         mov     r14,r8
1456         ror     r13,23
1457         mov     r15,rbx
1458
1459         xor     r13,rax
1460         ror     r14,5
1461         xor     r15,rcx
1462
1463         mov     QWORD[96+rsp],r12
1464         xor     r14,r8
1465         and     r15,rax
1466
1467         ror     r13,4
1468         add     r12,rdx
1469         xor     r15,rcx
1470
1471         ror     r14,6
1472         xor     r13,rax
1473         add     r12,r15
1474
1475         mov     r15,r8
1476         add     r12,QWORD[rbp]
1477         xor     r14,r8
1478
1479         xor     r15,r9
1480         ror     r13,14
1481         mov     rdx,r9
1482
1483         and     rdi,r15
1484         ror     r14,28
1485         add     r12,r13
1486
1487         xor     rdx,rdi
1488         add     r11,r12
1489         add     rdx,r12
1490
1491         lea     rbp,[8+rbp]
1492         mov     r13,QWORD[112+rsp]
1493         mov     rdi,QWORD[88+rsp]
1494
1495         mov     r12,r13
1496         ror     r13,7
1497         add     rdx,r14
1498         mov     r14,rdi
1499         ror     rdi,42
1500
1501         xor     r13,r12
1502         shr     r12,7
1503         ror     r13,1
1504         xor     rdi,r14
1505         shr     r14,6
1506
1507         ror     rdi,19
1508         xor     r12,r13
1509         xor     rdi,r14
1510         add     r12,QWORD[48+rsp]
1511
1512         add     r12,QWORD[104+rsp]
1513         mov     r13,r11
1514         add     r12,rdi
1515         mov     r14,rdx
1516         ror     r13,23
1517         mov     rdi,rax
1518
1519         xor     r13,r11
1520         ror     r14,5
1521         xor     rdi,rbx
1522
1523         mov     QWORD[104+rsp],r12
1524         xor     r14,rdx
1525         and     rdi,r11
1526
1527         ror     r13,4
1528         add     r12,rcx
1529         xor     rdi,rbx
1530
1531         ror     r14,6
1532         xor     r13,r11
1533         add     r12,rdi
1534
1535         mov     rdi,rdx
1536         add     r12,QWORD[rbp]
1537         xor     r14,rdx
1538
1539         xor     rdi,r8
1540         ror     r13,14
1541         mov     rcx,r8
1542
1543         and     r15,rdi
1544         ror     r14,28
1545         add     r12,r13
1546
1547         xor     rcx,r15
1548         add     r10,r12
1549         add     rcx,r12
1550
1551         lea     rbp,[24+rbp]
1552         mov     r13,QWORD[120+rsp]
1553         mov     r15,QWORD[96+rsp]
1554
1555         mov     r12,r13
1556         ror     r13,7
1557         add     rcx,r14
1558         mov     r14,r15
1559         ror     r15,42
1560
1561         xor     r13,r12
1562         shr     r12,7
1563         ror     r13,1
1564         xor     r15,r14
1565         shr     r14,6
1566
1567         ror     r15,19
1568         xor     r12,r13
1569         xor     r15,r14
1570         add     r12,QWORD[56+rsp]
1571
1572         add     r12,QWORD[112+rsp]
1573         mov     r13,r10
1574         add     r12,r15
1575         mov     r14,rcx
1576         ror     r13,23
1577         mov     r15,r11
1578
1579         xor     r13,r10
1580         ror     r14,5
1581         xor     r15,rax
1582
1583         mov     QWORD[112+rsp],r12
1584         xor     r14,rcx
1585         and     r15,r10
1586
1587         ror     r13,4
1588         add     r12,rbx
1589         xor     r15,rax
1590
1591         ror     r14,6
1592         xor     r13,r10
1593         add     r12,r15
1594
1595         mov     r15,rcx
1596         add     r12,QWORD[rbp]
1597         xor     r14,rcx
1598
1599         xor     r15,rdx
1600         ror     r13,14
1601         mov     rbx,rdx
1602
1603         and     rdi,r15
1604         ror     r14,28
1605         add     r12,r13
1606
1607         xor     rbx,rdi
1608         add     r9,r12
1609         add     rbx,r12
1610
1611         lea     rbp,[8+rbp]
1612         mov     r13,QWORD[rsp]
1613         mov     rdi,QWORD[104+rsp]
1614
1615         mov     r12,r13
1616         ror     r13,7
1617         add     rbx,r14
1618         mov     r14,rdi
1619         ror     rdi,42
1620
1621         xor     r13,r12
1622         shr     r12,7
1623         ror     r13,1
1624         xor     rdi,r14
1625         shr     r14,6
1626
1627         ror     rdi,19
1628         xor     r12,r13
1629         xor     rdi,r14
1630         add     r12,QWORD[64+rsp]
1631
1632         add     r12,QWORD[120+rsp]
1633         mov     r13,r9
1634         add     r12,rdi
1635         mov     r14,rbx
1636         ror     r13,23
1637         mov     rdi,r10
1638
1639         xor     r13,r9
1640         ror     r14,5
1641         xor     rdi,r11
1642
1643         mov     QWORD[120+rsp],r12
1644         xor     r14,rbx
1645         and     rdi,r9
1646
1647         ror     r13,4
1648         add     r12,rax
1649         xor     rdi,r11
1650
1651         ror     r14,6
1652         xor     r13,r9
1653         add     r12,rdi
1654
1655         mov     rdi,rbx
1656         add     r12,QWORD[rbp]
1657         xor     r14,rbx
1658
1659         xor     rdi,rcx
1660         ror     r13,14
1661         mov     rax,rcx
1662
1663         and     r15,rdi
1664         ror     r14,28
1665         add     r12,r13
1666
1667         xor     rax,r15
1668         add     r8,r12
1669         add     rax,r12
1670
1671         lea     rbp,[24+rbp]
1672         cmp     BYTE[7+rbp],0
1673         jnz     NEAR $L$rounds_16_xx
1674
1675         mov     rdi,QWORD[((128+0))+rsp]
1676         add     rax,r14
1677         lea     rsi,[128+rsi]
1678
1679         add     rax,QWORD[rdi]
1680         add     rbx,QWORD[8+rdi]
1681         add     rcx,QWORD[16+rdi]
1682         add     rdx,QWORD[24+rdi]
1683         add     r8,QWORD[32+rdi]
1684         add     r9,QWORD[40+rdi]
1685         add     r10,QWORD[48+rdi]
1686         add     r11,QWORD[56+rdi]
1687
1688         cmp     rsi,QWORD[((128+16))+rsp]
1689
1690         mov     QWORD[rdi],rax
1691         mov     QWORD[8+rdi],rbx
1692         mov     QWORD[16+rdi],rcx
1693         mov     QWORD[24+rdi],rdx
1694         mov     QWORD[32+rdi],r8
1695         mov     QWORD[40+rdi],r9
1696         mov     QWORD[48+rdi],r10
1697         mov     QWORD[56+rdi],r11
1698         jb      NEAR $L$loop
1699
1700         mov     rsi,QWORD[((128+24))+rsp]
1701         mov     r15,QWORD[rsi]
1702         mov     r14,QWORD[8+rsi]
1703         mov     r13,QWORD[16+rsi]
1704         mov     r12,QWORD[24+rsi]
1705         mov     rbp,QWORD[32+rsi]
1706         mov     rbx,QWORD[40+rsi]
1707         lea     rsp,[48+rsi]
1708 $L$epilogue:
1709         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
1710         mov     rsi,QWORD[16+rsp]
1711         DB      0F3h,0C3h               ;repret
1712 $L$SEH_end_sha512_block_data_order:
1713 ALIGN   64
1714
1715 K512:
1716         DQ      0x428a2f98d728ae22,0x7137449123ef65cd
1717         DQ      0x428a2f98d728ae22,0x7137449123ef65cd
1718         DQ      0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
1719         DQ      0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
1720         DQ      0x3956c25bf348b538,0x59f111f1b605d019
1721         DQ      0x3956c25bf348b538,0x59f111f1b605d019
1722         DQ      0x923f82a4af194f9b,0xab1c5ed5da6d8118
1723         DQ      0x923f82a4af194f9b,0xab1c5ed5da6d8118
1724         DQ      0xd807aa98a3030242,0x12835b0145706fbe
1725         DQ      0xd807aa98a3030242,0x12835b0145706fbe
1726         DQ      0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
1727         DQ      0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
1728         DQ      0x72be5d74f27b896f,0x80deb1fe3b1696b1
1729         DQ      0x72be5d74f27b896f,0x80deb1fe3b1696b1
1730         DQ      0x9bdc06a725c71235,0xc19bf174cf692694
1731         DQ      0x9bdc06a725c71235,0xc19bf174cf692694
1732         DQ      0xe49b69c19ef14ad2,0xefbe4786384f25e3
1733         DQ      0xe49b69c19ef14ad2,0xefbe4786384f25e3
1734         DQ      0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
1735         DQ      0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
1736         DQ      0x2de92c6f592b0275,0x4a7484aa6ea6e483
1737         DQ      0x2de92c6f592b0275,0x4a7484aa6ea6e483
1738         DQ      0x5cb0a9dcbd41fbd4,0x76f988da831153b5
1739         DQ      0x5cb0a9dcbd41fbd4,0x76f988da831153b5
1740         DQ      0x983e5152ee66dfab,0xa831c66d2db43210
1741         DQ      0x983e5152ee66dfab,0xa831c66d2db43210
1742         DQ      0xb00327c898fb213f,0xbf597fc7beef0ee4
1743         DQ      0xb00327c898fb213f,0xbf597fc7beef0ee4
1744         DQ      0xc6e00bf33da88fc2,0xd5a79147930aa725
1745         DQ      0xc6e00bf33da88fc2,0xd5a79147930aa725
1746         DQ      0x06ca6351e003826f,0x142929670a0e6e70
1747         DQ      0x06ca6351e003826f,0x142929670a0e6e70
1748         DQ      0x27b70a8546d22ffc,0x2e1b21385c26c926
1749         DQ      0x27b70a8546d22ffc,0x2e1b21385c26c926
1750         DQ      0x4d2c6dfc5ac42aed,0x53380d139d95b3df
1751         DQ      0x4d2c6dfc5ac42aed,0x53380d139d95b3df
1752         DQ      0x650a73548baf63de,0x766a0abb3c77b2a8
1753         DQ      0x650a73548baf63de,0x766a0abb3c77b2a8
1754         DQ      0x81c2c92e47edaee6,0x92722c851482353b
1755         DQ      0x81c2c92e47edaee6,0x92722c851482353b
1756         DQ      0xa2bfe8a14cf10364,0xa81a664bbc423001
1757         DQ      0xa2bfe8a14cf10364,0xa81a664bbc423001
1758         DQ      0xc24b8b70d0f89791,0xc76c51a30654be30
1759         DQ      0xc24b8b70d0f89791,0xc76c51a30654be30
1760         DQ      0xd192e819d6ef5218,0xd69906245565a910
1761         DQ      0xd192e819d6ef5218,0xd69906245565a910
1762         DQ      0xf40e35855771202a,0x106aa07032bbd1b8
1763         DQ      0xf40e35855771202a,0x106aa07032bbd1b8
1764         DQ      0x19a4c116b8d2d0c8,0x1e376c085141ab53
1765         DQ      0x19a4c116b8d2d0c8,0x1e376c085141ab53
1766         DQ      0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
1767         DQ      0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
1768         DQ      0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
1769         DQ      0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
1770         DQ      0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
1771         DQ      0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
1772         DQ      0x748f82ee5defb2fc,0x78a5636f43172f60
1773         DQ      0x748f82ee5defb2fc,0x78a5636f43172f60
1774         DQ      0x84c87814a1f0ab72,0x8cc702081a6439ec
1775         DQ      0x84c87814a1f0ab72,0x8cc702081a6439ec
1776         DQ      0x90befffa23631e28,0xa4506cebde82bde9
1777         DQ      0x90befffa23631e28,0xa4506cebde82bde9
1778         DQ      0xbef9a3f7b2c67915,0xc67178f2e372532b
1779         DQ      0xbef9a3f7b2c67915,0xc67178f2e372532b
1780         DQ      0xca273eceea26619c,0xd186b8c721c0c207
1781         DQ      0xca273eceea26619c,0xd186b8c721c0c207
1782         DQ      0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
1783         DQ      0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
1784         DQ      0x06f067aa72176fba,0x0a637dc5a2c898a6
1785         DQ      0x06f067aa72176fba,0x0a637dc5a2c898a6
1786         DQ      0x113f9804bef90dae,0x1b710b35131c471b
1787         DQ      0x113f9804bef90dae,0x1b710b35131c471b
1788         DQ      0x28db77f523047d84,0x32caab7b40c72493
1789         DQ      0x28db77f523047d84,0x32caab7b40c72493
1790         DQ      0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
1791         DQ      0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
1792         DQ      0x4cc5d4becb3e42b6,0x597f299cfc657e2a
1793         DQ      0x4cc5d4becb3e42b6,0x597f299cfc657e2a
1794         DQ      0x5fcb6fab3ad6faec,0x6c44198c4a475817
1795         DQ      0x5fcb6fab3ad6faec,0x6c44198c4a475817
1796
1797         DQ      0x0001020304050607,0x08090a0b0c0d0e0f
1798         DQ      0x0001020304050607,0x08090a0b0c0d0e0f
1799 DB      83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
1800 DB      110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
1801 DB      52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
1802 DB      32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
1803 DB      111,114,103,62,0
1804 EXTERN  __imp_RtlVirtualUnwind
1805
1806 ALIGN   16
1807 se_handler:
1808         push    rsi
1809         push    rdi
1810         push    rbx
1811         push    rbp
1812         push    r12
1813         push    r13
1814         push    r14
1815         push    r15
1816         pushfq
1817         sub     rsp,64
1818
1819         mov     rax,QWORD[120+r8]
1820         mov     rbx,QWORD[248+r8]
1821
1822         mov     rsi,QWORD[8+r9]
1823         mov     r11,QWORD[56+r9]
1824
1825         mov     r10d,DWORD[r11]
1826         lea     r10,[r10*1+rsi]
1827         cmp     rbx,r10
1828         jb      NEAR $L$in_prologue
1829
1830         mov     rax,QWORD[152+r8]
1831
1832         mov     r10d,DWORD[4+r11]
1833         lea     r10,[r10*1+rsi]
1834         cmp     rbx,r10
1835         jae     NEAR $L$in_prologue
1836         mov     rsi,rax
1837         mov     rax,QWORD[((128+24))+rax]
1838         lea     rax,[48+rax]
1839
1840         mov     rbx,QWORD[((-8))+rax]
1841         mov     rbp,QWORD[((-16))+rax]
1842         mov     r12,QWORD[((-24))+rax]
1843         mov     r13,QWORD[((-32))+rax]
1844         mov     r14,QWORD[((-40))+rax]
1845         mov     r15,QWORD[((-48))+rax]
1846         mov     QWORD[144+r8],rbx
1847         mov     QWORD[160+r8],rbp
1848         mov     QWORD[216+r8],r12
1849         mov     QWORD[224+r8],r13
1850         mov     QWORD[232+r8],r14
1851         mov     QWORD[240+r8],r15
1852
1853         lea     r10,[$L$epilogue]
1854         cmp     rbx,r10
1855         jb      NEAR $L$in_prologue
1856
1857         lea     rsi,[((128+32))+rsi]
1858         lea     rdi,[512+r8]
1859         mov     ecx,12
1860         DD      0xa548f3fc
1861
1862 $L$in_prologue:
1863         mov     rdi,QWORD[8+rax]
1864         mov     rsi,QWORD[16+rax]
1865         mov     QWORD[152+r8],rax
1866         mov     QWORD[168+r8],rsi
1867         mov     QWORD[176+r8],rdi
1868
1869         mov     rdi,QWORD[40+r9]
1870         mov     rsi,r8
1871         mov     ecx,154
1872         DD      0xa548f3fc
1873
1874         mov     rsi,r9
1875         xor     rcx,rcx
1876         mov     rdx,QWORD[8+rsi]
1877         mov     r8,QWORD[rsi]
1878         mov     r9,QWORD[16+rsi]
1879         mov     r10,QWORD[40+rsi]
1880         lea     r11,[56+rsi]
1881         lea     r12,[24+rsi]
1882         mov     QWORD[32+rsp],r10
1883         mov     QWORD[40+rsp],r11
1884         mov     QWORD[48+rsp],r12
1885         mov     QWORD[56+rsp],rcx
1886         call    QWORD[__imp_RtlVirtualUnwind]
1887
1888         mov     eax,1
1889         add     rsp,64
1890         popfq
1891         pop     r15
1892         pop     r14
1893         pop     r13
1894         pop     r12
1895         pop     rbp
1896         pop     rbx
1897         pop     rdi
1898         pop     rsi
1899         DB      0F3h,0C3h               ;repret
1900
1901 section .pdata rdata align=4
1902 ALIGN   4
1903         DD      $L$SEH_begin_sha512_block_data_order wrt ..imagebase
1904         DD      $L$SEH_end_sha512_block_data_order wrt ..imagebase
1905         DD      $L$SEH_info_sha512_block_data_order wrt ..imagebase
1906 section .xdata rdata align=8
1907 ALIGN   8
1908 $L$SEH_info_sha512_block_data_order:
1909 DB      9,0,0,0
1910         DD      se_handler wrt ..imagebase
1911         DD      $L$prologue wrt ..imagebase,$L$epilogue wrt ..imagebase