2 .text$ SEGMENT ALIGN(256) 'CODE'
4 EXTERN OPENSSL_ia32cap_P:NEAR
9 bn_mul_mont PROC PUBLIC
10 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
11 mov QWORD PTR[16+rsp],rsi
13 $L$SEH_begin_bn_mul_mont::
18 mov r8,QWORD PTR[40+rsp]
19 mov r9,QWORD PTR[48+rsp]
42 lea r10,QWORD PTR[2+r9]
45 lea rsp,QWORD PTR[r10*8+rsp]
48 mov QWORD PTR[8+r9*8+rsp],r11
52 mov rbx,QWORD PTR[r12]
53 mov rax,QWORD PTR[rsi]
61 mov rax,QWORD PTR[rcx]
68 mov rax,QWORD PTR[8+rsi]
72 lea r15,QWORD PTR[1+r15]
78 mov rax,QWORD PTR[r15*8+rsi]
83 mov QWORD PTR[((-16))+r15*8+rsp],r13
89 mov rax,QWORD PTR[r15*8+rcx]
91 lea r15,QWORD PTR[1+r15]
99 mov rax,QWORD PTR[rsi]
103 mov QWORD PTR[((-16))+r15*8+rsp],r13
110 mov QWORD PTR[((-8))+r9*8+rsp],r13
111 mov QWORD PTR[r9*8+rsp],rdx
113 lea r14,QWORD PTR[1+r14]
117 mov rbx,QWORD PTR[r14*8+r12]
120 mov r10,QWORD PTR[rsp]
123 mov rax,QWORD PTR[rcx]
131 mov rax,QWORD PTR[8+rsi]
133 mov r10,QWORD PTR[8+rsp]
136 lea r15,QWORD PTR[1+r15]
142 mov rax,QWORD PTR[r15*8+rsi]
145 mov r10,QWORD PTR[r15*8+rsp]
147 mov QWORD PTR[((-16))+r15*8+rsp],r13
153 mov rax,QWORD PTR[r15*8+rcx]
158 lea r15,QWORD PTR[1+r15]
165 mov rax,QWORD PTR[rsi]
168 mov r10,QWORD PTR[r15*8+rsp]
170 mov QWORD PTR[((-16))+r15*8+rsp],r13
178 mov QWORD PTR[((-8))+r9*8+rsp],r13
179 mov QWORD PTR[r9*8+rsp],rdx
181 lea r14,QWORD PTR[1+r14]
186 mov rax,QWORD PTR[rsp]
187 lea rsi,QWORD PTR[rsp]
191 $L$sub:: sbb rax,QWORD PTR[r14*8+rcx]
192 mov QWORD PTR[r14*8+rdi],rax
193 mov rax,QWORD PTR[8+r14*8+rsi]
194 lea r14,QWORD PTR[1+r14]
203 mov rsi,QWORD PTR[r14*8+rsp]
204 mov rcx,QWORD PTR[r14*8+rdi]
208 mov QWORD PTR[r14*8+rsp],r14
209 mov QWORD PTR[r14*8+rdi],rsi
210 lea r14,QWORD PTR[1+r14]
214 mov rsi,QWORD PTR[8+r9*8+rsp]
216 mov r15,QWORD PTR[rsi]
217 mov r14,QWORD PTR[8+rsi]
218 mov r13,QWORD PTR[16+rsi]
219 mov r12,QWORD PTR[24+rsi]
220 mov rbp,QWORD PTR[32+rsi]
221 mov rbx,QWORD PTR[40+rsi]
222 lea rsp,QWORD PTR[48+rsi]
224 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
225 mov rsi,QWORD PTR[16+rsp]
227 $L$SEH_end_bn_mul_mont::
231 bn_mul4x_mont PROC PRIVATE
232 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
233 mov QWORD PTR[16+rsp],rsi
235 $L$SEH_begin_bn_mul4x_mont::
240 mov r8,QWORD PTR[40+rsp]
241 mov r9,QWORD PTR[48+rsp]
253 lea r10,QWORD PTR[4+r9]
256 lea rsp,QWORD PTR[r10*8+rsp]
259 mov QWORD PTR[8+r9*8+rsp],r11
261 mov QWORD PTR[16+r9*8+rsp],rdi
264 mov rbx,QWORD PTR[r12]
265 mov rax,QWORD PTR[rsi]
273 mov rax,QWORD PTR[rcx]
280 mov rax,QWORD PTR[8+rsi]
286 mov rax,QWORD PTR[8+rcx]
292 mov rax,QWORD PTR[16+rsi]
295 lea r15,QWORD PTR[4+r15]
297 mov QWORD PTR[rsp],rdi
304 mov rax,QWORD PTR[((-16))+r15*8+rcx]
310 mov rax,QWORD PTR[((-8))+r15*8+rsi]
314 mov QWORD PTR[((-24))+r15*8+rsp],r13
319 mov rax,QWORD PTR[((-8))+r15*8+rcx]
325 mov rax,QWORD PTR[r15*8+rsi]
329 mov QWORD PTR[((-16))+r15*8+rsp],rdi
334 mov rax,QWORD PTR[r15*8+rcx]
340 mov rax,QWORD PTR[8+r15*8+rsi]
344 mov QWORD PTR[((-8))+r15*8+rsp],r13
349 mov rax,QWORD PTR[8+r15*8+rcx]
351 lea r15,QWORD PTR[4+r15]
356 mov rax,QWORD PTR[((-16))+r15*8+rsi]
360 mov QWORD PTR[((-32))+r15*8+rsp],rdi
367 mov rax,QWORD PTR[((-16))+r15*8+rcx]
373 mov rax,QWORD PTR[((-8))+r15*8+rsi]
377 mov QWORD PTR[((-24))+r15*8+rsp],r13
382 mov rax,QWORD PTR[((-8))+r15*8+rcx]
388 mov rax,QWORD PTR[rsi]
392 mov QWORD PTR[((-16))+r15*8+rsp],rdi
398 mov QWORD PTR[((-8))+r15*8+rsp],r13
399 mov QWORD PTR[r15*8+rsp],rdi
401 lea r14,QWORD PTR[1+r14]
404 mov rbx,QWORD PTR[r14*8+r12]
406 mov r10,QWORD PTR[rsp]
410 mov rax,QWORD PTR[rcx]
418 mov rax,QWORD PTR[8+rsi]
424 mov rax,QWORD PTR[8+rcx]
426 add r11,QWORD PTR[8+rsp]
432 mov rax,QWORD PTR[16+rsi]
435 lea r15,QWORD PTR[4+r15]
437 mov QWORD PTR[rsp],rdi
444 mov rax,QWORD PTR[((-16))+r15*8+rcx]
446 add r10,QWORD PTR[((-16))+r15*8+rsp]
452 mov rax,QWORD PTR[((-8))+r15*8+rsi]
456 mov QWORD PTR[((-24))+r15*8+rsp],r13
461 mov rax,QWORD PTR[((-8))+r15*8+rcx]
463 add r11,QWORD PTR[((-8))+r15*8+rsp]
469 mov rax,QWORD PTR[r15*8+rsi]
473 mov QWORD PTR[((-16))+r15*8+rsp],rdi
478 mov rax,QWORD PTR[r15*8+rcx]
480 add r10,QWORD PTR[r15*8+rsp]
486 mov rax,QWORD PTR[8+r15*8+rsi]
490 mov QWORD PTR[((-8))+r15*8+rsp],r13
495 mov rax,QWORD PTR[8+r15*8+rcx]
497 add r11,QWORD PTR[8+r15*8+rsp]
499 lea r15,QWORD PTR[4+r15]
504 mov rax,QWORD PTR[((-16))+r15*8+rsi]
508 mov QWORD PTR[((-32))+r15*8+rsp],rdi
515 mov rax,QWORD PTR[((-16))+r15*8+rcx]
517 add r10,QWORD PTR[((-16))+r15*8+rsp]
523 mov rax,QWORD PTR[((-8))+r15*8+rsi]
527 mov QWORD PTR[((-24))+r15*8+rsp],r13
532 mov rax,QWORD PTR[((-8))+r15*8+rcx]
534 add r11,QWORD PTR[((-8))+r15*8+rsp]
536 lea r14,QWORD PTR[1+r14]
541 mov rax,QWORD PTR[rsi]
545 mov QWORD PTR[((-16))+r15*8+rsp],rdi
551 add r13,QWORD PTR[r9*8+rsp]
553 mov QWORD PTR[((-8))+r15*8+rsp],r13
554 mov QWORD PTR[r15*8+rsp],rdi
558 mov rdi,QWORD PTR[16+r9*8+rsp]
559 mov rax,QWORD PTR[rsp]
560 mov rdx,QWORD PTR[8+rsp]
562 lea rsi,QWORD PTR[rsp]
565 sub rax,QWORD PTR[rcx]
566 mov rbx,QWORD PTR[16+rsi]
567 mov rbp,QWORD PTR[24+rsi]
568 sbb rdx,QWORD PTR[8+rcx]
569 lea r15,QWORD PTR[((-1))+r9]
573 mov QWORD PTR[r14*8+rdi],rax
574 mov QWORD PTR[8+r14*8+rdi],rdx
575 sbb rbx,QWORD PTR[16+r14*8+rcx]
576 mov rax,QWORD PTR[32+r14*8+rsi]
577 mov rdx,QWORD PTR[40+r14*8+rsi]
578 sbb rbp,QWORD PTR[24+r14*8+rcx]
579 mov QWORD PTR[16+r14*8+rdi],rbx
580 mov QWORD PTR[24+r14*8+rdi],rbp
581 sbb rax,QWORD PTR[32+r14*8+rcx]
582 mov rbx,QWORD PTR[48+r14*8+rsi]
583 mov rbp,QWORD PTR[56+r14*8+rsi]
584 sbb rdx,QWORD PTR[40+r14*8+rcx]
585 lea r14,QWORD PTR[4+r14]
589 mov QWORD PTR[r14*8+rdi],rax
590 mov rax,QWORD PTR[32+r14*8+rsi]
591 sbb rbx,QWORD PTR[16+r14*8+rcx]
592 mov QWORD PTR[8+r14*8+rdi],rdx
593 sbb rbp,QWORD PTR[24+r14*8+rcx]
594 mov QWORD PTR[16+r14*8+rdi],rbx
597 DB 66h, 48h, 0fh, 6eh, 0c0h
599 mov QWORD PTR[24+r14*8+rdi],rbp
607 movdqu xmm2,XMMWORD PTR[r14*1+rsp]
608 movdqu xmm4,XMMWORD PTR[16+r14*1+rsp]
609 movdqu xmm1,XMMWORD PTR[r14*1+rdi]
610 movdqu xmm3,XMMWORD PTR[16+r14*1+rdi]
617 movdqu XMMWORD PTR[r14*1+rdi],xmm2
618 movdqu XMMWORD PTR[16+r14*1+rdi],xmm4
619 movdqa XMMWORD PTR[r14*1+rsp],xmm5
620 movdqa XMMWORD PTR[16+r14*1+rsp],xmm5
622 lea r14,QWORD PTR[32+r14]
627 mov rsi,QWORD PTR[8+r9*8+rsp]
629 mov r15,QWORD PTR[rsi]
630 mov r14,QWORD PTR[8+rsi]
631 mov r13,QWORD PTR[16+rsi]
632 mov r12,QWORD PTR[24+rsi]
633 mov rbp,QWORD PTR[32+rsi]
634 mov rbx,QWORD PTR[40+rsi]
635 lea rsp,QWORD PTR[48+rsi]
637 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
638 mov rsi,QWORD PTR[16+rsp]
640 $L$SEH_end_bn_mul4x_mont::
642 EXTERN bn_sqr8x_internal:NEAR
646 bn_sqr8x_mont PROC PRIVATE
647 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
648 mov QWORD PTR[16+rsp],rsi
650 $L$SEH_begin_bn_sqr8x_mont::
655 mov r8,QWORD PTR[40+rsp]
656 mov r9,QWORD PTR[48+rsp]
678 lea r11,QWORD PTR[((-64))+r9*4+rsp]
685 lea rsp,QWORD PTR[((-64))+r9*4+rsp]
690 lea r10,QWORD PTR[((4096-64))+r9*4]
691 lea rsp,QWORD PTR[((-64))+r9*4+rsp]
701 lea r11,QWORD PTR[64+r9*2+rsp]
702 mov QWORD PTR[32+rsp],r8
703 mov QWORD PTR[40+rsp],rax
709 mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
714 movq xmm0,QWORD PTR[rcx]
715 movq xmm1,QWORD PTR[8+rcx]
716 movq xmm3,QWORD PTR[16+rcx]
717 movq xmm4,QWORD PTR[24+rcx]
718 lea rcx,QWORD PTR[32+rcx]
719 movdqa XMMWORD PTR[r11],xmm0
720 movdqa XMMWORD PTR[16+r11],xmm1
721 movdqa XMMWORD PTR[32+r11],xmm3
722 movdqa XMMWORD PTR[48+r11],xmm4
723 lea r11,QWORD PTR[64+r11]
730 call bn_sqr8x_internal
733 lea rax,QWORD PTR[48+rsp]
734 lea rdx,QWORD PTR[64+r9*2+rsp]
736 mov rsi,QWORD PTR[40+rsp]
741 movdqa XMMWORD PTR[rax],xmm0
742 movdqa XMMWORD PTR[16+rax],xmm0
743 movdqa XMMWORD PTR[32+rax],xmm0
744 movdqa XMMWORD PTR[48+rax],xmm0
745 lea rax,QWORD PTR[64+rax]
746 movdqa XMMWORD PTR[rdx],xmm0
747 movdqa XMMWORD PTR[16+rdx],xmm0
748 movdqa XMMWORD PTR[32+rdx],xmm0
749 movdqa XMMWORD PTR[48+rdx],xmm0
750 lea rdx,QWORD PTR[64+rdx]
755 mov r15,QWORD PTR[((-48))+rsi]
756 mov r14,QWORD PTR[((-40))+rsi]
757 mov r13,QWORD PTR[((-32))+rsi]
758 mov r12,QWORD PTR[((-24))+rsi]
759 mov rbp,QWORD PTR[((-16))+rsi]
760 mov rbx,QWORD PTR[((-8))+rsi]
761 lea rsp,QWORD PTR[rsi]
763 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
764 mov rsi,QWORD PTR[16+rsp]
766 $L$SEH_end_bn_sqr8x_mont::
768 DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
769 DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
770 DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83
771 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
772 DB 115,108,46,111,114,103,62,0
774 EXTERN __imp_RtlVirtualUnwind:NEAR
777 mul_handler PROC PRIVATE
789 mov rax,QWORD PTR[120+r8]
790 mov rbx,QWORD PTR[248+r8]
792 mov rsi,QWORD PTR[8+r9]
793 mov r11,QWORD PTR[56+r9]
795 mov r10d,DWORD PTR[r11]
796 lea r10,QWORD PTR[r10*1+rsi]
798 jb $L$common_seh_tail
800 mov rax,QWORD PTR[152+r8]
802 mov r10d,DWORD PTR[4+r11]
803 lea r10,QWORD PTR[r10*1+rsi]
805 jae $L$common_seh_tail
807 mov r10,QWORD PTR[192+r8]
808 mov rax,QWORD PTR[8+r10*8+rax]
809 lea rax,QWORD PTR[48+rax]
811 mov rbx,QWORD PTR[((-8))+rax]
812 mov rbp,QWORD PTR[((-16))+rax]
813 mov r12,QWORD PTR[((-24))+rax]
814 mov r13,QWORD PTR[((-32))+rax]
815 mov r14,QWORD PTR[((-40))+rax]
816 mov r15,QWORD PTR[((-48))+rax]
817 mov QWORD PTR[144+r8],rbx
818 mov QWORD PTR[160+r8],rbp
819 mov QWORD PTR[216+r8],r12
820 mov QWORD PTR[224+r8],r13
821 mov QWORD PTR[232+r8],r14
822 mov QWORD PTR[240+r8],r15
824 jmp $L$common_seh_tail
829 sqr_handler PROC PRIVATE
841 mov rax,QWORD PTR[120+r8]
842 mov rbx,QWORD PTR[248+r8]
844 mov rsi,QWORD PTR[8+r9]
845 mov r11,QWORD PTR[56+r9]
847 mov r10d,DWORD PTR[r11]
848 lea r10,QWORD PTR[r10*1+rsi]
850 jb $L$common_seh_tail
852 mov rax,QWORD PTR[152+r8]
854 mov r10d,DWORD PTR[4+r11]
855 lea r10,QWORD PTR[r10*1+rsi]
857 jae $L$common_seh_tail
859 mov rax,QWORD PTR[40+rax]
861 mov rbx,QWORD PTR[((-8))+rax]
862 mov rbp,QWORD PTR[((-16))+rax]
863 mov r12,QWORD PTR[((-24))+rax]
864 mov r13,QWORD PTR[((-32))+rax]
865 mov r14,QWORD PTR[((-40))+rax]
866 mov r15,QWORD PTR[((-48))+rax]
867 mov QWORD PTR[144+r8],rbx
868 mov QWORD PTR[160+r8],rbp
869 mov QWORD PTR[216+r8],r12
870 mov QWORD PTR[224+r8],r13
871 mov QWORD PTR[232+r8],r14
872 mov QWORD PTR[240+r8],r15
875 mov rdi,QWORD PTR[8+rax]
876 mov rsi,QWORD PTR[16+rax]
877 mov QWORD PTR[152+r8],rax
878 mov QWORD PTR[168+r8],rsi
879 mov QWORD PTR[176+r8],rdi
881 mov rdi,QWORD PTR[40+r9]
888 mov rdx,QWORD PTR[8+rsi]
889 mov r8,QWORD PTR[rsi]
890 mov r9,QWORD PTR[16+rsi]
891 mov r10,QWORD PTR[40+rsi]
892 lea r11,QWORD PTR[56+rsi]
893 lea r12,QWORD PTR[24+rsi]
894 mov QWORD PTR[32+rsp],r10
895 mov QWORD PTR[40+rsp],r11
896 mov QWORD PTR[48+rsp],r12
897 mov QWORD PTR[56+rsp],rcx
898 call QWORD PTR[__imp_RtlVirtualUnwind]
915 .pdata SEGMENT READONLY ALIGN(4)
917 DD imagerel $L$SEH_begin_bn_mul_mont
918 DD imagerel $L$SEH_end_bn_mul_mont
919 DD imagerel $L$SEH_info_bn_mul_mont
921 DD imagerel $L$SEH_begin_bn_mul4x_mont
922 DD imagerel $L$SEH_end_bn_mul4x_mont
923 DD imagerel $L$SEH_info_bn_mul4x_mont
925 DD imagerel $L$SEH_begin_bn_sqr8x_mont
926 DD imagerel $L$SEH_end_bn_sqr8x_mont
927 DD imagerel $L$SEH_info_bn_sqr8x_mont
929 .xdata SEGMENT READONLY ALIGN(8)
931 $L$SEH_info_bn_mul_mont::
933 DD imagerel mul_handler
934 DD imagerel $L$mul_body,imagerel $L$mul_epilogue
935 $L$SEH_info_bn_mul4x_mont::
937 DD imagerel mul_handler
938 DD imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
939 $L$SEH_info_bn_sqr8x_mont::
941 DD imagerel sqr_handler
942 DD imagerel $L$sqr8x_body,imagerel $L$sqr8x_epilogue