Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / boringssl / win-x86_64 / crypto / sha / sha512-x86_64.asm
blobb76cc0edb96ea5793c2225df8c55260a9248f0ab
1 default rel
2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section .text code align=64
8 EXTERN OPENSSL_ia32cap_P
9 global sha512_block_data_order
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
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:
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
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
61 xor r13,r8
62 ror r14,5
63 xor r15,r10
65 mov QWORD[rsp],r12
66 xor r14,rax
67 and r15,r8
69 ror r13,4
70 add r12,r11
71 xor r15,r10
73 ror r14,6
74 xor r13,r8
75 add r12,r15
77 mov r15,rax
78 add r12,QWORD[rbp]
79 xor r14,rax
81 xor r15,rbx
82 ror r13,14
83 mov r11,rbx
85 and rdi,r15
86 ror r14,28
87 add r12,r13
89 xor r11,rdi
90 add rdx,r12
91 add r11,r12
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
102 xor r13,rdx
103 ror r14,5
104 xor rdi,r9
106 mov QWORD[8+rsp],r12
107 xor r14,r11
108 and rdi,rdx
110 ror r13,4
111 add r12,r10
112 xor rdi,r9
114 ror r14,6
115 xor r13,rdx
116 add r12,rdi
118 mov rdi,r11
119 add r12,QWORD[rbp]
120 xor r14,r11
122 xor rdi,rax
123 ror r13,14
124 mov r10,rax
126 and r15,rdi
127 ror r14,28
128 add r12,r13
130 xor r10,r15
131 add rcx,r12
132 add r10,r12
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
143 xor r13,rcx
144 ror r14,5
145 xor r15,r8
147 mov QWORD[16+rsp],r12
148 xor r14,r10
149 and r15,rcx
151 ror r13,4
152 add r12,r9
153 xor r15,r8
155 ror r14,6
156 xor r13,rcx
157 add r12,r15
159 mov r15,r10
160 add r12,QWORD[rbp]
161 xor r14,r10
163 xor r15,r11
164 ror r13,14
165 mov r9,r11
167 and rdi,r15
168 ror r14,28
169 add r12,r13
171 xor r9,rdi
172 add rbx,r12
173 add r9,r12
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
184 xor r13,rbx
185 ror r14,5
186 xor rdi,rdx
188 mov QWORD[24+rsp],r12
189 xor r14,r9
190 and rdi,rbx
192 ror r13,4
193 add r12,r8
194 xor rdi,rdx
196 ror r14,6
197 xor r13,rbx
198 add r12,rdi
200 mov rdi,r9
201 add r12,QWORD[rbp]
202 xor r14,r9
204 xor rdi,r10
205 ror r13,14
206 mov r8,r10
208 and r15,rdi
209 ror r14,28
210 add r12,r13
212 xor r8,r15
213 add rax,r12
214 add r8,r12
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
225 xor r13,rax
226 ror r14,5
227 xor r15,rcx
229 mov QWORD[32+rsp],r12
230 xor r14,r8
231 and r15,rax
233 ror r13,4
234 add r12,rdx
235 xor r15,rcx
237 ror r14,6
238 xor r13,rax
239 add r12,r15
241 mov r15,r8
242 add r12,QWORD[rbp]
243 xor r14,r8
245 xor r15,r9
246 ror r13,14
247 mov rdx,r9
249 and rdi,r15
250 ror r14,28
251 add r12,r13
253 xor rdx,rdi
254 add r11,r12
255 add rdx,r12
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
266 xor r13,r11
267 ror r14,5
268 xor rdi,rbx
270 mov QWORD[40+rsp],r12
271 xor r14,rdx
272 and rdi,r11
274 ror r13,4
275 add r12,rcx
276 xor rdi,rbx
278 ror r14,6
279 xor r13,r11
280 add r12,rdi
282 mov rdi,rdx
283 add r12,QWORD[rbp]
284 xor r14,rdx
286 xor rdi,r8
287 ror r13,14
288 mov rcx,r8
290 and r15,rdi
291 ror r14,28
292 add r12,r13
294 xor rcx,r15
295 add r10,r12
296 add rcx,r12
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
307 xor r13,r10
308 ror r14,5
309 xor r15,rax
311 mov QWORD[48+rsp],r12
312 xor r14,rcx
313 and r15,r10
315 ror r13,4
316 add r12,rbx
317 xor r15,rax
319 ror r14,6
320 xor r13,r10
321 add r12,r15
323 mov r15,rcx
324 add r12,QWORD[rbp]
325 xor r14,rcx
327 xor r15,rdx
328 ror r13,14
329 mov rbx,rdx
331 and rdi,r15
332 ror r14,28
333 add r12,r13
335 xor rbx,rdi
336 add r9,r12
337 add rbx,r12
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
348 xor r13,r9
349 ror r14,5
350 xor rdi,r11
352 mov QWORD[56+rsp],r12
353 xor r14,rbx
354 and rdi,r9
356 ror r13,4
357 add r12,rax
358 xor rdi,r11
360 ror r14,6
361 xor r13,r9
362 add r12,rdi
364 mov rdi,rbx
365 add r12,QWORD[rbp]
366 xor r14,rbx
368 xor rdi,rcx
369 ror r13,14
370 mov rax,rcx
372 and r15,rdi
373 ror r14,28
374 add r12,r13
376 xor rax,r15
377 add r8,r12
378 add rax,r12
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
389 xor r13,r8
390 ror r14,5
391 xor r15,r10
393 mov QWORD[64+rsp],r12
394 xor r14,rax
395 and r15,r8
397 ror r13,4
398 add r12,r11
399 xor r15,r10
401 ror r14,6
402 xor r13,r8
403 add r12,r15
405 mov r15,rax
406 add r12,QWORD[rbp]
407 xor r14,rax
409 xor r15,rbx
410 ror r13,14
411 mov r11,rbx
413 and rdi,r15
414 ror r14,28
415 add r12,r13
417 xor r11,rdi
418 add rdx,r12
419 add r11,r12
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
430 xor r13,rdx
431 ror r14,5
432 xor rdi,r9
434 mov QWORD[72+rsp],r12
435 xor r14,r11
436 and rdi,rdx
438 ror r13,4
439 add r12,r10
440 xor rdi,r9
442 ror r14,6
443 xor r13,rdx
444 add r12,rdi
446 mov rdi,r11
447 add r12,QWORD[rbp]
448 xor r14,r11
450 xor rdi,rax
451 ror r13,14
452 mov r10,rax
454 and r15,rdi
455 ror r14,28
456 add r12,r13
458 xor r10,r15
459 add rcx,r12
460 add r10,r12
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
471 xor r13,rcx
472 ror r14,5
473 xor r15,r8
475 mov QWORD[80+rsp],r12
476 xor r14,r10
477 and r15,rcx
479 ror r13,4
480 add r12,r9
481 xor r15,r8
483 ror r14,6
484 xor r13,rcx
485 add r12,r15
487 mov r15,r10
488 add r12,QWORD[rbp]
489 xor r14,r10
491 xor r15,r11
492 ror r13,14
493 mov r9,r11
495 and rdi,r15
496 ror r14,28
497 add r12,r13
499 xor r9,rdi
500 add rbx,r12
501 add r9,r12
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
512 xor r13,rbx
513 ror r14,5
514 xor rdi,rdx
516 mov QWORD[88+rsp],r12
517 xor r14,r9
518 and rdi,rbx
520 ror r13,4
521 add r12,r8
522 xor rdi,rdx
524 ror r14,6
525 xor r13,rbx
526 add r12,rdi
528 mov rdi,r9
529 add r12,QWORD[rbp]
530 xor r14,r9
532 xor rdi,r10
533 ror r13,14
534 mov r8,r10
536 and r15,rdi
537 ror r14,28
538 add r12,r13
540 xor r8,r15
541 add rax,r12
542 add r8,r12
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
553 xor r13,rax
554 ror r14,5
555 xor r15,rcx
557 mov QWORD[96+rsp],r12
558 xor r14,r8
559 and r15,rax
561 ror r13,4
562 add r12,rdx
563 xor r15,rcx
565 ror r14,6
566 xor r13,rax
567 add r12,r15
569 mov r15,r8
570 add r12,QWORD[rbp]
571 xor r14,r8
573 xor r15,r9
574 ror r13,14
575 mov rdx,r9
577 and rdi,r15
578 ror r14,28
579 add r12,r13
581 xor rdx,rdi
582 add r11,r12
583 add rdx,r12
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
594 xor r13,r11
595 ror r14,5
596 xor rdi,rbx
598 mov QWORD[104+rsp],r12
599 xor r14,rdx
600 and rdi,r11
602 ror r13,4
603 add r12,rcx
604 xor rdi,rbx
606 ror r14,6
607 xor r13,r11
608 add r12,rdi
610 mov rdi,rdx
611 add r12,QWORD[rbp]
612 xor r14,rdx
614 xor rdi,r8
615 ror r13,14
616 mov rcx,r8
618 and r15,rdi
619 ror r14,28
620 add r12,r13
622 xor rcx,r15
623 add r10,r12
624 add rcx,r12
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
635 xor r13,r10
636 ror r14,5
637 xor r15,rax
639 mov QWORD[112+rsp],r12
640 xor r14,rcx
641 and r15,r10
643 ror r13,4
644 add r12,rbx
645 xor r15,rax
647 ror r14,6
648 xor r13,r10
649 add r12,r15
651 mov r15,rcx
652 add r12,QWORD[rbp]
653 xor r14,rcx
655 xor r15,rdx
656 ror r13,14
657 mov rbx,rdx
659 and rdi,r15
660 ror r14,28
661 add r12,r13
663 xor rbx,rdi
664 add r9,r12
665 add rbx,r12
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
676 xor r13,r9
677 ror r14,5
678 xor rdi,r11
680 mov QWORD[120+rsp],r12
681 xor r14,rbx
682 and rdi,r9
684 ror r13,4
685 add r12,rax
686 xor rdi,r11
688 ror r14,6
689 xor r13,r9
690 add r12,rdi
692 mov rdi,rbx
693 add r12,QWORD[rbp]
694 xor r14,rbx
696 xor rdi,rcx
697 ror r13,14
698 mov rax,rcx
700 and r15,rdi
701 ror r14,28
702 add r12,r13
704 xor rax,r15
705 add r8,r12
706 add rax,r12
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]
715 mov r12,r13
716 ror r13,7
717 add rax,r14
718 mov r14,r15
719 ror r15,42
721 xor r13,r12
722 shr r12,7
723 ror r13,1
724 xor r15,r14
725 shr r14,6
727 ror r15,19
728 xor r12,r13
729 xor r15,r14
730 add r12,QWORD[72+rsp]
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
739 xor r13,r8
740 ror r14,5
741 xor r15,r10
743 mov QWORD[rsp],r12
744 xor r14,rax
745 and r15,r8
747 ror r13,4
748 add r12,r11
749 xor r15,r10
751 ror r14,6
752 xor r13,r8
753 add r12,r15
755 mov r15,rax
756 add r12,QWORD[rbp]
757 xor r14,rax
759 xor r15,rbx
760 ror r13,14
761 mov r11,rbx
763 and rdi,r15
764 ror r14,28
765 add r12,r13
767 xor r11,rdi
768 add rdx,r12
769 add r11,r12
771 lea rbp,[8+rbp]
772 mov r13,QWORD[16+rsp]
773 mov rdi,QWORD[120+rsp]
775 mov r12,r13
776 ror r13,7
777 add r11,r14
778 mov r14,rdi
779 ror rdi,42
781 xor r13,r12
782 shr r12,7
783 ror r13,1
784 xor rdi,r14
785 shr r14,6
787 ror rdi,19
788 xor r12,r13
789 xor rdi,r14
790 add r12,QWORD[80+rsp]
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
799 xor r13,rdx
800 ror r14,5
801 xor rdi,r9
803 mov QWORD[8+rsp],r12
804 xor r14,r11
805 and rdi,rdx
807 ror r13,4
808 add r12,r10
809 xor rdi,r9
811 ror r14,6
812 xor r13,rdx
813 add r12,rdi
815 mov rdi,r11
816 add r12,QWORD[rbp]
817 xor r14,r11
819 xor rdi,rax
820 ror r13,14
821 mov r10,rax
823 and r15,rdi
824 ror r14,28
825 add r12,r13
827 xor r10,r15
828 add rcx,r12
829 add r10,r12
831 lea rbp,[24+rbp]
832 mov r13,QWORD[24+rsp]
833 mov r15,QWORD[rsp]
835 mov r12,r13
836 ror r13,7
837 add r10,r14
838 mov r14,r15
839 ror r15,42
841 xor r13,r12
842 shr r12,7
843 ror r13,1
844 xor r15,r14
845 shr r14,6
847 ror r15,19
848 xor r12,r13
849 xor r15,r14
850 add r12,QWORD[88+rsp]
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
859 xor r13,rcx
860 ror r14,5
861 xor r15,r8
863 mov QWORD[16+rsp],r12
864 xor r14,r10
865 and r15,rcx
867 ror r13,4
868 add r12,r9
869 xor r15,r8
871 ror r14,6
872 xor r13,rcx
873 add r12,r15
875 mov r15,r10
876 add r12,QWORD[rbp]
877 xor r14,r10
879 xor r15,r11
880 ror r13,14
881 mov r9,r11
883 and rdi,r15
884 ror r14,28
885 add r12,r13
887 xor r9,rdi
888 add rbx,r12
889 add r9,r12
891 lea rbp,[8+rbp]
892 mov r13,QWORD[32+rsp]
893 mov rdi,QWORD[8+rsp]
895 mov r12,r13
896 ror r13,7
897 add r9,r14
898 mov r14,rdi
899 ror rdi,42
901 xor r13,r12
902 shr r12,7
903 ror r13,1
904 xor rdi,r14
905 shr r14,6
907 ror rdi,19
908 xor r12,r13
909 xor rdi,r14
910 add r12,QWORD[96+rsp]
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
919 xor r13,rbx
920 ror r14,5
921 xor rdi,rdx
923 mov QWORD[24+rsp],r12
924 xor r14,r9
925 and rdi,rbx
927 ror r13,4
928 add r12,r8
929 xor rdi,rdx
931 ror r14,6
932 xor r13,rbx
933 add r12,rdi
935 mov rdi,r9
936 add r12,QWORD[rbp]
937 xor r14,r9
939 xor rdi,r10
940 ror r13,14
941 mov r8,r10
943 and r15,rdi
944 ror r14,28
945 add r12,r13
947 xor r8,r15
948 add rax,r12
949 add r8,r12
951 lea rbp,[24+rbp]
952 mov r13,QWORD[40+rsp]
953 mov r15,QWORD[16+rsp]
955 mov r12,r13
956 ror r13,7
957 add r8,r14
958 mov r14,r15
959 ror r15,42
961 xor r13,r12
962 shr r12,7
963 ror r13,1
964 xor r15,r14
965 shr r14,6
967 ror r15,19
968 xor r12,r13
969 xor r15,r14
970 add r12,QWORD[104+rsp]
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
979 xor r13,rax
980 ror r14,5
981 xor r15,rcx
983 mov QWORD[32+rsp],r12
984 xor r14,r8
985 and r15,rax
987 ror r13,4
988 add r12,rdx
989 xor r15,rcx
991 ror r14,6
992 xor r13,rax
993 add r12,r15
995 mov r15,r8
996 add r12,QWORD[rbp]
997 xor r14,r8
999 xor r15,r9
1000 ror r13,14
1001 mov rdx,r9
1003 and rdi,r15
1004 ror r14,28
1005 add r12,r13
1007 xor rdx,rdi
1008 add r11,r12
1009 add rdx,r12
1011 lea rbp,[8+rbp]
1012 mov r13,QWORD[48+rsp]
1013 mov rdi,QWORD[24+rsp]
1015 mov r12,r13
1016 ror r13,7
1017 add rdx,r14
1018 mov r14,rdi
1019 ror rdi,42
1021 xor r13,r12
1022 shr r12,7
1023 ror r13,1
1024 xor rdi,r14
1025 shr r14,6
1027 ror rdi,19
1028 xor r12,r13
1029 xor rdi,r14
1030 add r12,QWORD[112+rsp]
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
1039 xor r13,r11
1040 ror r14,5
1041 xor rdi,rbx
1043 mov QWORD[40+rsp],r12
1044 xor r14,rdx
1045 and rdi,r11
1047 ror r13,4
1048 add r12,rcx
1049 xor rdi,rbx
1051 ror r14,6
1052 xor r13,r11
1053 add r12,rdi
1055 mov rdi,rdx
1056 add r12,QWORD[rbp]
1057 xor r14,rdx
1059 xor rdi,r8
1060 ror r13,14
1061 mov rcx,r8
1063 and r15,rdi
1064 ror r14,28
1065 add r12,r13
1067 xor rcx,r15
1068 add r10,r12
1069 add rcx,r12
1071 lea rbp,[24+rbp]
1072 mov r13,QWORD[56+rsp]
1073 mov r15,QWORD[32+rsp]
1075 mov r12,r13
1076 ror r13,7
1077 add rcx,r14
1078 mov r14,r15
1079 ror r15,42
1081 xor r13,r12
1082 shr r12,7
1083 ror r13,1
1084 xor r15,r14
1085 shr r14,6
1087 ror r15,19
1088 xor r12,r13
1089 xor r15,r14
1090 add r12,QWORD[120+rsp]
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
1099 xor r13,r10
1100 ror r14,5
1101 xor r15,rax
1103 mov QWORD[48+rsp],r12
1104 xor r14,rcx
1105 and r15,r10
1107 ror r13,4
1108 add r12,rbx
1109 xor r15,rax
1111 ror r14,6
1112 xor r13,r10
1113 add r12,r15
1115 mov r15,rcx
1116 add r12,QWORD[rbp]
1117 xor r14,rcx
1119 xor r15,rdx
1120 ror r13,14
1121 mov rbx,rdx
1123 and rdi,r15
1124 ror r14,28
1125 add r12,r13
1127 xor rbx,rdi
1128 add r9,r12
1129 add rbx,r12
1131 lea rbp,[8+rbp]
1132 mov r13,QWORD[64+rsp]
1133 mov rdi,QWORD[40+rsp]
1135 mov r12,r13
1136 ror r13,7
1137 add rbx,r14
1138 mov r14,rdi
1139 ror rdi,42
1141 xor r13,r12
1142 shr r12,7
1143 ror r13,1
1144 xor rdi,r14
1145 shr r14,6
1147 ror rdi,19
1148 xor r12,r13
1149 xor rdi,r14
1150 add r12,QWORD[rsp]
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
1159 xor r13,r9
1160 ror r14,5
1161 xor rdi,r11
1163 mov QWORD[56+rsp],r12
1164 xor r14,rbx
1165 and rdi,r9
1167 ror r13,4
1168 add r12,rax
1169 xor rdi,r11
1171 ror r14,6
1172 xor r13,r9
1173 add r12,rdi
1175 mov rdi,rbx
1176 add r12,QWORD[rbp]
1177 xor r14,rbx
1179 xor rdi,rcx
1180 ror r13,14
1181 mov rax,rcx
1183 and r15,rdi
1184 ror r14,28
1185 add r12,r13
1187 xor rax,r15
1188 add r8,r12
1189 add rax,r12
1191 lea rbp,[24+rbp]
1192 mov r13,QWORD[72+rsp]
1193 mov r15,QWORD[48+rsp]
1195 mov r12,r13
1196 ror r13,7
1197 add rax,r14
1198 mov r14,r15
1199 ror r15,42
1201 xor r13,r12
1202 shr r12,7
1203 ror r13,1
1204 xor r15,r14
1205 shr r14,6
1207 ror r15,19
1208 xor r12,r13
1209 xor r15,r14
1210 add r12,QWORD[8+rsp]
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
1219 xor r13,r8
1220 ror r14,5
1221 xor r15,r10
1223 mov QWORD[64+rsp],r12
1224 xor r14,rax
1225 and r15,r8
1227 ror r13,4
1228 add r12,r11
1229 xor r15,r10
1231 ror r14,6
1232 xor r13,r8
1233 add r12,r15
1235 mov r15,rax
1236 add r12,QWORD[rbp]
1237 xor r14,rax
1239 xor r15,rbx
1240 ror r13,14
1241 mov r11,rbx
1243 and rdi,r15
1244 ror r14,28
1245 add r12,r13
1247 xor r11,rdi
1248 add rdx,r12
1249 add r11,r12
1251 lea rbp,[8+rbp]
1252 mov r13,QWORD[80+rsp]
1253 mov rdi,QWORD[56+rsp]
1255 mov r12,r13
1256 ror r13,7
1257 add r11,r14
1258 mov r14,rdi
1259 ror rdi,42
1261 xor r13,r12
1262 shr r12,7
1263 ror r13,1
1264 xor rdi,r14
1265 shr r14,6
1267 ror rdi,19
1268 xor r12,r13
1269 xor rdi,r14
1270 add r12,QWORD[16+rsp]
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
1279 xor r13,rdx
1280 ror r14,5
1281 xor rdi,r9
1283 mov QWORD[72+rsp],r12
1284 xor r14,r11
1285 and rdi,rdx
1287 ror r13,4
1288 add r12,r10
1289 xor rdi,r9
1291 ror r14,6
1292 xor r13,rdx
1293 add r12,rdi
1295 mov rdi,r11
1296 add r12,QWORD[rbp]
1297 xor r14,r11
1299 xor rdi,rax
1300 ror r13,14
1301 mov r10,rax
1303 and r15,rdi
1304 ror r14,28
1305 add r12,r13
1307 xor r10,r15
1308 add rcx,r12
1309 add r10,r12
1311 lea rbp,[24+rbp]
1312 mov r13,QWORD[88+rsp]
1313 mov r15,QWORD[64+rsp]
1315 mov r12,r13
1316 ror r13,7
1317 add r10,r14
1318 mov r14,r15
1319 ror r15,42
1321 xor r13,r12
1322 shr r12,7
1323 ror r13,1
1324 xor r15,r14
1325 shr r14,6
1327 ror r15,19
1328 xor r12,r13
1329 xor r15,r14
1330 add r12,QWORD[24+rsp]
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
1339 xor r13,rcx
1340 ror r14,5
1341 xor r15,r8
1343 mov QWORD[80+rsp],r12
1344 xor r14,r10
1345 and r15,rcx
1347 ror r13,4
1348 add r12,r9
1349 xor r15,r8
1351 ror r14,6
1352 xor r13,rcx
1353 add r12,r15
1355 mov r15,r10
1356 add r12,QWORD[rbp]
1357 xor r14,r10
1359 xor r15,r11
1360 ror r13,14
1361 mov r9,r11
1363 and rdi,r15
1364 ror r14,28
1365 add r12,r13
1367 xor r9,rdi
1368 add rbx,r12
1369 add r9,r12
1371 lea rbp,[8+rbp]
1372 mov r13,QWORD[96+rsp]
1373 mov rdi,QWORD[72+rsp]
1375 mov r12,r13
1376 ror r13,7
1377 add r9,r14
1378 mov r14,rdi
1379 ror rdi,42
1381 xor r13,r12
1382 shr r12,7
1383 ror r13,1
1384 xor rdi,r14
1385 shr r14,6
1387 ror rdi,19
1388 xor r12,r13
1389 xor rdi,r14
1390 add r12,QWORD[32+rsp]
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
1399 xor r13,rbx
1400 ror r14,5
1401 xor rdi,rdx
1403 mov QWORD[88+rsp],r12
1404 xor r14,r9
1405 and rdi,rbx
1407 ror r13,4
1408 add r12,r8
1409 xor rdi,rdx
1411 ror r14,6
1412 xor r13,rbx
1413 add r12,rdi
1415 mov rdi,r9
1416 add r12,QWORD[rbp]
1417 xor r14,r9
1419 xor rdi,r10
1420 ror r13,14
1421 mov r8,r10
1423 and r15,rdi
1424 ror r14,28
1425 add r12,r13
1427 xor r8,r15
1428 add rax,r12
1429 add r8,r12
1431 lea rbp,[24+rbp]
1432 mov r13,QWORD[104+rsp]
1433 mov r15,QWORD[80+rsp]
1435 mov r12,r13
1436 ror r13,7
1437 add r8,r14
1438 mov r14,r15
1439 ror r15,42
1441 xor r13,r12
1442 shr r12,7
1443 ror r13,1
1444 xor r15,r14
1445 shr r14,6
1447 ror r15,19
1448 xor r12,r13
1449 xor r15,r14
1450 add r12,QWORD[40+rsp]
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
1459 xor r13,rax
1460 ror r14,5
1461 xor r15,rcx
1463 mov QWORD[96+rsp],r12
1464 xor r14,r8
1465 and r15,rax
1467 ror r13,4
1468 add r12,rdx
1469 xor r15,rcx
1471 ror r14,6
1472 xor r13,rax
1473 add r12,r15
1475 mov r15,r8
1476 add r12,QWORD[rbp]
1477 xor r14,r8
1479 xor r15,r9
1480 ror r13,14
1481 mov rdx,r9
1483 and rdi,r15
1484 ror r14,28
1485 add r12,r13
1487 xor rdx,rdi
1488 add r11,r12
1489 add rdx,r12
1491 lea rbp,[8+rbp]
1492 mov r13,QWORD[112+rsp]
1493 mov rdi,QWORD[88+rsp]
1495 mov r12,r13
1496 ror r13,7
1497 add rdx,r14
1498 mov r14,rdi
1499 ror rdi,42
1501 xor r13,r12
1502 shr r12,7
1503 ror r13,1
1504 xor rdi,r14
1505 shr r14,6
1507 ror rdi,19
1508 xor r12,r13
1509 xor rdi,r14
1510 add r12,QWORD[48+rsp]
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
1519 xor r13,r11
1520 ror r14,5
1521 xor rdi,rbx
1523 mov QWORD[104+rsp],r12
1524 xor r14,rdx
1525 and rdi,r11
1527 ror r13,4
1528 add r12,rcx
1529 xor rdi,rbx
1531 ror r14,6
1532 xor r13,r11
1533 add r12,rdi
1535 mov rdi,rdx
1536 add r12,QWORD[rbp]
1537 xor r14,rdx
1539 xor rdi,r8
1540 ror r13,14
1541 mov rcx,r8
1543 and r15,rdi
1544 ror r14,28
1545 add r12,r13
1547 xor rcx,r15
1548 add r10,r12
1549 add rcx,r12
1551 lea rbp,[24+rbp]
1552 mov r13,QWORD[120+rsp]
1553 mov r15,QWORD[96+rsp]
1555 mov r12,r13
1556 ror r13,7
1557 add rcx,r14
1558 mov r14,r15
1559 ror r15,42
1561 xor r13,r12
1562 shr r12,7
1563 ror r13,1
1564 xor r15,r14
1565 shr r14,6
1567 ror r15,19
1568 xor r12,r13
1569 xor r15,r14
1570 add r12,QWORD[56+rsp]
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
1579 xor r13,r10
1580 ror r14,5
1581 xor r15,rax
1583 mov QWORD[112+rsp],r12
1584 xor r14,rcx
1585 and r15,r10
1587 ror r13,4
1588 add r12,rbx
1589 xor r15,rax
1591 ror r14,6
1592 xor r13,r10
1593 add r12,r15
1595 mov r15,rcx
1596 add r12,QWORD[rbp]
1597 xor r14,rcx
1599 xor r15,rdx
1600 ror r13,14
1601 mov rbx,rdx
1603 and rdi,r15
1604 ror r14,28
1605 add r12,r13
1607 xor rbx,rdi
1608 add r9,r12
1609 add rbx,r12
1611 lea rbp,[8+rbp]
1612 mov r13,QWORD[rsp]
1613 mov rdi,QWORD[104+rsp]
1615 mov r12,r13
1616 ror r13,7
1617 add rbx,r14
1618 mov r14,rdi
1619 ror rdi,42
1621 xor r13,r12
1622 shr r12,7
1623 ror r13,1
1624 xor rdi,r14
1625 shr r14,6
1627 ror rdi,19
1628 xor r12,r13
1629 xor rdi,r14
1630 add r12,QWORD[64+rsp]
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
1639 xor r13,r9
1640 ror r14,5
1641 xor rdi,r11
1643 mov QWORD[120+rsp],r12
1644 xor r14,rbx
1645 and rdi,r9
1647 ror r13,4
1648 add r12,rax
1649 xor rdi,r11
1651 ror r14,6
1652 xor r13,r9
1653 add r12,rdi
1655 mov rdi,rbx
1656 add r12,QWORD[rbp]
1657 xor r14,rbx
1659 xor rdi,rcx
1660 ror r13,14
1661 mov rax,rcx
1663 and r15,rdi
1664 ror r14,28
1665 add r12,r13
1667 xor rax,r15
1668 add r8,r12
1669 add rax,r12
1671 lea rbp,[24+rbp]
1672 cmp BYTE[7+rbp],0
1673 jnz NEAR $L$rounds_16_xx
1675 mov rdi,QWORD[((128+0))+rsp]
1676 add rax,r14
1677 lea rsi,[128+rsi]
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]
1688 cmp rsi,QWORD[((128+16))+rsp]
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
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
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
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
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
1819 mov rax,QWORD[120+r8]
1820 mov rbx,QWORD[248+r8]
1822 mov rsi,QWORD[8+r9]
1823 mov r11,QWORD[56+r9]
1825 mov r10d,DWORD[r11]
1826 lea r10,[r10*1+rsi]
1827 cmp rbx,r10
1828 jb NEAR $L$in_prologue
1830 mov rax,QWORD[152+r8]
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]
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
1853 lea r10,[$L$epilogue]
1854 cmp rbx,r10
1855 jb NEAR $L$in_prologue
1857 lea rsi,[((128+32))+rsi]
1858 lea rdi,[512+r8]
1859 mov ecx,12
1860 DD 0xa548f3fc
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
1869 mov rdi,QWORD[40+r9]
1870 mov rsi,r8
1871 mov ecx,154
1872 DD 0xa548f3fc
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]
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
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