5 section .text code
align=64
8 EXTERN OPENSSL_ia32cap_P
10 global bn_mul_mont_gather5
14 mov QWORD[8+rsp
],rdi
;WIN64 prologue
17 $L$
SEH_begin_bn_mul_mont_gather5:
28 jmp NEAR $L$mul4x_enter
34 mov r10d
,DWORD[56+rsp
]
42 movaps XMMWORD
[rsp
],xmm6
43 movaps XMMWORD
[16+rsp
],xmm7
49 mov QWORD[8+r9
*8+rsp
],rax
56 lea rax
,[$L$magic_masks
]
58 lea r12
,[96+r11
*8+r12
]
59 movq xmm4
,QWORD[r10
*8+rax
]
60 movq xmm5
,QWORD[8+r10
*8+rax
]
61 movq xmm6
,QWORD[16+r10
*8+rax
]
62 movq xmm7
,QWORD[24+r10
*8+rax
]
64 movq xmm0
,QWORD[(((-96)))+r12
]
65 movq xmm1
,QWORD[((-32))+r12
]
67 movq xmm2
,QWORD[32+r12
]
69 movq xmm3
,QWORD[96+r12
]
85 movq xmm0
,QWORD[(((-96)))+r12
]
86 movq xmm1
,QWORD[((-32))+r12
]
88 movq xmm2
,QWORD[32+r12
]
96 movq xmm3
,QWORD[96+r12
]
115 jmp NEAR $L
$1st_enter
120 mov rax
,QWORD[r15
*8+rsi
]
125 mov QWORD[((-16))+r15
*8+rsp
],r13
131 mov rax
,QWORD[r15
*8+rcx
]
147 mov QWORD[((-16))+r15
*8+rsp
],r13
154 mov QWORD[((-8))+r9
*8+rsp
],r13
155 mov QWORD[r9
*8+rsp
],rdx
165 movq xmm0
,QWORD[(((-96)))+r12
]
166 movq xmm1
,QWORD[((-32))+r12
]
168 movq xmm2
,QWORD[32+r12
]
176 movq xmm3
,QWORD[96+r12
]
196 jmp NEAR $L$inner_enter
201 mov rax
,QWORD[r15
*8+rsi
]
204 mov r10
,QWORD[r15
*8+rsp
]
206 mov QWORD[((-16))+r15
*8+rsp
],r13
212 mov rax
,QWORD[r15
*8+rcx
]
229 mov r10
,QWORD[r15
*8+rsp
]
231 mov QWORD[((-16))+r15
*8+rsp
],r13
239 mov QWORD[((-8))+r9
*8+rsp
],r13
240 mov QWORD[r9
*8+rsp
],rdx
252 $L$
sub: sbb rax
,QWORD[r14
*8+rcx
]
253 mov QWORD[r14
*8+rdi
],rax
254 mov rax
,QWORD[8+r14
*8+rsi
]
264 mov rsi
,QWORD[r14
*8+rsp
]
265 mov rcx
,QWORD[r14
*8+rdi
]
269 mov QWORD[r14
*8+rsp
],r14
270 mov QWORD[r14
*8+rdi
],rsi
275 mov rsi
,QWORD[8+r9
*8+rsp
]
277 movaps xmm6
,XMMWORD
[((-88))+rsi
]
278 movaps xmm7
,XMMWORD
[((-72))+rsi
]
279 mov r15
,QWORD[((-48))+rsi
]
280 mov r14
,QWORD[((-40))+rsi
]
281 mov r13
,QWORD[((-32))+rsi
]
282 mov r12
,QWORD[((-24))+rsi
]
283 mov rbp
,QWORD[((-16))+rsi
]
284 mov rbx
,QWORD[((-8))+rsi
]
287 mov rdi
,QWORD[8+rsp
] ;WIN64 epilogue
288 mov rsi
,QWORD[16+rsp
]
290 $L$
SEH_end_bn_mul_mont_gather5:
293 bn_mul4x_mont_gather5:
294 mov QWORD[8+rsp
],rdi
;WIN64 prologue
295 mov QWORD[16+rsp
],rsi
297 $L$
SEH_begin_bn_mul4x_mont_gather5:
315 lea rsp
,[((-40))+rsp
]
316 movaps XMMWORD
[rsp
],xmm6
317 movaps XMMWORD
[16+rsp
],xmm7
331 lea r11
,[((-64))+r9
*2+rsp
]
335 jb NEAR $L$mul4xsp_alt
337 lea rsp
,[((-64))+r9
*2+rsp
]
338 jmp NEAR $L$mul4xsp_done
342 lea r10
,[((4096-64))+r9
*2]
343 lea rsp
,[((-64))+r9
*2+rsp
]
352 mov QWORD[40+rsp
],rax
357 mov rsi
,QWORD[40+rsp
]
359 movaps xmm6
,XMMWORD
[((-88))+rsi
]
360 movaps xmm7
,XMMWORD
[((-72))+rsi
]
361 mov r15
,QWORD[((-48))+rsi
]
362 mov r14
,QWORD[((-40))+rsi
]
363 mov r13
,QWORD[((-32))+rsi
]
364 mov r12
,QWORD[((-24))+rsi
]
365 mov rbp
,QWORD[((-16))+rsi
]
366 mov rbx
,QWORD[((-8))+rsi
]
369 mov rdi
,QWORD[8+rsp
] ;WIN64 epilogue
370 mov rsi
,QWORD[16+rsp
]
372 $L$
SEH_end_bn_mul4x_mont_gather5:
378 mov r10d
,DWORD[56+rax
]
379 lea r13
,[256+r9
*1+rdx
]
385 lea rax
,[$L$magic_masks
]
387 lea r12
,[96+r11
*8+rdx
]
388 movq xmm4
,QWORD[r10
*8+rax
]
389 movq xmm5
,QWORD[8+r10
*8+rax
]
391 movq xmm6
,QWORD[16+r10
*8+rax
]
392 movq xmm7
,QWORD[24+r10
*8+rax
]
395 movq xmm0
,QWORD[(((-96)))+r12
]
397 movq xmm1
,QWORD[((-32))+r12
]
399 movq xmm2
,QWORD[32+r12
]
401 movq xmm3
,QWORD[96+r12
]
405 movq xmm1
,QWORD[((-96))+r14
]
410 movq xmm2
,QWORD[((-32))+r14
]
415 movq xmm3
,QWORD[32+r14
]
418 movq xmm0
,QWORD[96+r14
]
419 mov QWORD[((16+8))+rsp
],r13
420 mov QWORD[((56+8))+rsp
],rdi
444 lea r14
,[((64+8))+r11
*8+rsp
]
454 mov rax
,QWORD[8+r9
*1+rsi
]
460 mov rax
,QWORD[16+rcx
]
466 mov rax
,QWORD[16+r9
*1+rsi
]
480 mov rax
,QWORD[((-32))+rcx
]
487 mov rax
,QWORD[((-8))+r15
*1+rsi
]
491 mov QWORD[((-24))+r14
],r13
496 mov rax
,QWORD[((-16))+rcx
]
502 mov rax
,QWORD[r15
*1+rsi
]
506 mov QWORD[((-16))+r14
],rdi
517 mov rax
,QWORD[8+r15
*1+rsi
]
521 mov QWORD[((-8))+r14
],r13
526 mov rax
,QWORD[16+rcx
]
532 mov rax
,QWORD[16+r15
*1+rsi
]
545 mov rax
,QWORD[((-32))+rcx
]
552 mov rax
,QWORD[((-8))+rsi
]
556 mov QWORD[((-24))+r14
],r13
561 mov rax
,QWORD[((-16))+rcx
]
567 mov rax
,QWORD[r9
*1+rsi
]
571 mov QWORD[((-16))+r14
],rdi
580 mov QWORD[((-8))+r14
],r13
586 mov r10
,QWORD[r9
*1+r14
]
593 movq xmm0
,QWORD[(((-96)))+r12
]
594 movq xmm1
,QWORD[((-32))+r12
]
596 movq xmm2
,QWORD[32+r12
]
598 movq xmm3
,QWORD[96+r12
]
615 mov rax
,QWORD[8+r9
*1+rsi
]
621 mov rax
,QWORD[16+rcx
]
629 mov rax
,QWORD[16+r9
*1+rsi
]
642 mov rax
,QWORD[((-32))+rcx
]
644 add r10
,QWORD[16+r14
]
651 mov rax
,QWORD[((-8))+r15
*1+rsi
]
655 mov QWORD[((-32))+r14
],rdi
660 mov rax
,QWORD[((-16))+rcx
]
662 add r11
,QWORD[((-8))+r14
]
668 mov rax
,QWORD[r15
*1+rsi
]
672 mov QWORD[((-24))+r14
],r13
685 mov rax
,QWORD[8+r15
*1+rsi
]
689 mov QWORD[((-16))+r14
],rdi
694 mov rax
,QWORD[16+rcx
]
702 mov rax
,QWORD[16+r15
*1+rsi
]
707 mov QWORD[((-8))+r14
],r13
715 mov rax
,QWORD[((-32))+rcx
]
717 add r10
,QWORD[16+r14
]
724 mov rax
,QWORD[((-8))+rsi
]
728 mov QWORD[((-32))+r14
],rdi
734 mov rbp
,QWORD[((-16))+rcx
]
736 add r11
,QWORD[((-8))+r14
]
742 mov rax
,QWORD[r9
*1+rsi
]
746 mov QWORD[((-24))+r14
],r13
750 mov QWORD[((-16))+r14
],rdi
758 mov QWORD[((-8))+r14
],r13
760 cmp r12
,QWORD[((16+8))+rsp
]
770 mov rdi
,QWORD[((56+8))+rsp
]
771 jmp NEAR $L$sqr4x_sub
777 mov QWORD[8+rsp
],rdi
;WIN64 prologue
778 mov QWORD[16+rsp
],rsi
780 $L$
SEH_begin_bn_power5:
796 lea rsp
,[((-40))+rsp
]
797 movaps XMMWORD
[rsp
],xmm6
798 movaps XMMWORD
[16+rsp
],xmm7
811 lea r11
,[((-64))+r9
*2+rsp
]
815 jb NEAR $L$pwr_sp_alt
817 lea rsp
,[((-64))+r9
*2+rsp
]
818 jmp NEAR $L$pwr_sp_done
822 lea r10
,[((4096-64))+r9
*2]
823 lea rsp
,[((-64))+r9
*2+rsp
]
843 mov QWORD[40+rsp
],rax
850 call __bn_sqr8x_internal
851 call __bn_sqr8x_internal
852 call __bn_sqr8x_internal
853 call __bn_sqr8x_internal
854 call __bn_sqr8x_internal
859 mov rax
,QWORD[40+rsp
]
864 mov rsi
,QWORD[40+rsp
]
866 mov r15
,QWORD[((-48))+rsi
]
867 mov r14
,QWORD[((-40))+rsi
]
868 mov r13
,QWORD[((-32))+rsi
]
869 mov r12
,QWORD[((-24))+rsi
]
870 mov rbp
,QWORD[((-16))+rsi
]
871 mov rbx
,QWORD[((-8))+rsi
]
874 mov rdi
,QWORD[8+rsp
] ;WIN64 epilogue
875 mov rsi
,QWORD[16+rsp
]
877 $L$
SEH_end_bn_power5:
879 global bn_sqr8x_internal
964 mov r14
,QWORD[((-32))+rbp
*1+rsi
]
965 lea rdi
,[((48+8))+r9
*2+rsp
]
966 mov rax
,QWORD[((-24))+rbp
*1+rsi
]
967 lea rdi
,[((-32))+rbp
*1+rdi
]
968 mov rbx
,QWORD[((-16))+rbp
*1+rsi
]
975 mov QWORD[((-24))+rbp
*1+rdi
],r10
981 mov QWORD[((-16))+rbp
*1+rdi
],r11
985 mov rbx
,QWORD[((-8))+rbp
*1+rsi
]
999 mov QWORD[((-8))+rcx
*1+rdi
],r10
1000 jmp NEAR $L$sqr4x_1st
1004 mov rbx
,QWORD[rcx
*1+rsi
]
1014 mov rbx
,QWORD[8+rcx
*1+rsi
]
1024 mov QWORD[rcx
*1+rdi
],r11
1031 mov rbx
,QWORD[16+rcx
*1+rsi
]
1040 mov QWORD[8+rcx
*1+rdi
],r10
1047 mov rbx
,QWORD[24+rcx
*1+rsi
]
1057 mov QWORD[16+rcx
*1+rdi
],r11
1069 mov QWORD[((-8))+rcx
*1+rdi
],r10
1072 jne NEAR $L$sqr4x_1st
1083 mov QWORD[8+rdi
],rdx
1084 jmp NEAR $L$sqr4x_outer
1088 mov r14
,QWORD[((-32))+rbp
*1+rsi
]
1089 lea rdi
,[((48+8))+r9
*2+rsp
]
1090 mov rax
,QWORD[((-24))+rbp
*1+rsi
]
1091 lea rdi
,[((-32))+rbp
*1+rdi
]
1092 mov rbx
,QWORD[((-16))+rbp
*1+rsi
]
1096 mov r10
,QWORD[((-24))+rbp
*1+rdi
]
1100 mov QWORD[((-24))+rbp
*1+rdi
],r10
1107 add r11
,QWORD[((-16))+rbp
*1+rdi
]
1110 mov QWORD[((-16))+rbp
*1+rdi
],r11
1114 mov rbx
,QWORD[((-8))+rbp
*1+rsi
]
1119 add r12
,QWORD[((-8))+rbp
*1+rdi
]
1130 mov QWORD[((-8))+rbp
*1+rdi
],r10
1133 jmp NEAR $L$sqr4x_inner
1137 mov rbx
,QWORD[rcx
*1+rsi
]
1143 add r13
,QWORD[rcx
*1+rdi
]
1150 mov rbx
,QWORD[8+rcx
*1+rsi
]
1158 mov QWORD[rcx
*1+rdi
],r11
1162 add r12
,QWORD[8+rcx
*1+rdi
]
1173 mov QWORD[((-8))+rcx
*1+rdi
],r10
1176 jne NEAR $L$sqr4x_inner
1187 mov QWORD[8+rdi
],rdx
1190 jnz NEAR $L$sqr4x_outer
1193 mov r14
,QWORD[((-32))+rsi
]
1194 lea rdi
,[((48+8))+r9
*2+rsp
]
1195 mov rax
,QWORD[((-24))+rsi
]
1196 lea rdi
,[((-32))+rbp
*1+rdi
]
1197 mov rbx
,QWORD[((-16))+rsi
]
1209 mov QWORD[((-24))+rdi
],r10
1213 mov rbx
,QWORD[((-8))+rsi
]
1219 mov QWORD[((-16))+rdi
],r11
1230 mov QWORD[((-8))+rdi
],r10
1234 mov rax
,QWORD[((-16))+rsi
]
1241 mov QWORD[8+rdi
],rdx
1251 mov QWORD[8+rdi
],rax
1252 mov QWORD[16+rdi
],rdx
1253 mov QWORD[24+rdi
],r15
1255 mov rax
,QWORD[((-16))+rbp
*1+rsi
]
1256 lea rdi
,[((48+8))+rsp
]
1258 mov r11
,QWORD[8+rdi
]
1265 mov r10
,QWORD[16+rdi
]
1269 mov r11
,QWORD[24+rdi
]
1271 mov rax
,QWORD[((-8))+rbp
*1+rsi
]
1276 mov QWORD[8+rdi
],r13
1282 mov r10
,QWORD[32+rdi
]
1286 mov r11
,QWORD[40+rdi
]
1288 mov rax
,QWORD[rbp
*1+rsi
]
1289 mov QWORD[16+rdi
],rbx
1292 mov QWORD[24+rdi
],r8
1295 jmp NEAR $L$sqr4x_shift_n_add
1298 $L$
sqr4x_shift_n_add:
1304 mov r10
,QWORD[((-16))+rdi
]
1308 mov r11
,QWORD[((-8))+rdi
]
1310 mov rax
,QWORD[((-8))+rbp
*1+rsi
]
1311 mov QWORD[((-32))+rdi
],r12
1315 mov QWORD[((-24))+rdi
],r13
1325 mov r11
,QWORD[8+rdi
]
1327 mov rax
,QWORD[rbp
*1+rsi
]
1328 mov QWORD[((-16))+rdi
],rbx
1332 mov QWORD[((-8))+rdi
],r8
1338 mov r10
,QWORD[16+rdi
]
1342 mov r11
,QWORD[24+rdi
]
1344 mov rax
,QWORD[8+rbp
*1+rsi
]
1349 mov QWORD[8+rdi
],r13
1355 mov r10
,QWORD[32+rdi
]
1359 mov r11
,QWORD[40+rdi
]
1361 mov rax
,QWORD[16+rbp
*1+rsi
]
1362 mov QWORD[16+rdi
],rbx
1364 mov QWORD[24+rdi
],r8
1368 jnz NEAR $L$sqr4x_shift_n_add
1376 mov r10
,QWORD[((-16))+rdi
]
1380 mov r11
,QWORD[((-8))+rdi
]
1382 mov rax
,QWORD[((-8))+rsi
]
1383 mov QWORD[((-32))+rdi
],r12
1387 mov QWORD[((-24))+rdi
],r13
1397 mov QWORD[((-16))+rdi
],rbx
1398 mov QWORD[((-8))+rdi
],r8
1399 DB 102,72,15,126,213
1403 lea rdx
,[((48+8))+r9
*2+rsp
]
1404 mov QWORD[((0+8))+rsp
],rcx
1405 lea rdi
,[((48+8))+r9
*1+rsp
]
1406 mov QWORD[((8+8))+rsp
],rdx
1408 jmp NEAR $L
$8x_reduction_loop
1411 $L
$8x_reduction_loop
:
1416 mov r10
,QWORD[16+rdi
]
1417 mov r11
,QWORD[24+rdi
]
1418 mov r12
,QWORD[32+rdi
]
1419 mov r13
,QWORD[40+rdi
]
1420 mov r14
,QWORD[48+rdi
]
1421 mov r15
,QWORD[56+rdi
]
1427 imul rbx
,QWORD[((32+8))+rsp
]
1430 jmp NEAR $L
$8x_reduce
1435 mov rax
,QWORD[16+rbp
]
1442 mov rax
,QWORD[32+rbp
]
1445 mov QWORD[((48-8+8))+rcx
*8+rsp
],rbx
1451 mov rax
,QWORD[48+rbp
]
1454 mov rsi
,QWORD[((32+8))+rsp
]
1460 mov rax
,QWORD[64+rbp
]
1469 mov rax
,QWORD[80+rbp
]
1477 mov rax
,QWORD[96+rbp
]
1485 mov rax
,QWORD[112+rbp
]
1501 jnz NEAR $L
$8x_reduce
1505 mov rdx
,QWORD[((8+8))+rsp
]
1506 cmp rbp
,QWORD[((0+8))+rsp
]
1507 jae NEAR $L
$8x_no_tail
1512 adc r10
,QWORD[16+rdi
]
1513 adc r11
,QWORD[24+rdi
]
1514 adc r12
,QWORD[32+rdi
]
1515 adc r13
,QWORD[40+rdi
]
1516 adc r14
,QWORD[48+rdi
]
1517 adc r15
,QWORD[56+rdi
]
1520 mov rbx
,QWORD[((48+56+8))+rsp
]
1529 mov rax
,QWORD[16+rbp
]
1536 mov rax
,QWORD[32+rbp
]
1545 mov rax
,QWORD[48+rbp
]
1553 mov rax
,QWORD[64+rbp
]
1561 mov rax
,QWORD[80+rbp
]
1569 mov rax
,QWORD[96+rbp
]
1577 mov rax
,QWORD[112+rbp
]
1584 mov rbx
,QWORD[((48-16+8))+rcx
*8+rsp
]
1596 mov rdx
,QWORD[((8+8))+rsp
]
1597 cmp rbp
,QWORD[((0+8))+rsp
]
1598 jae NEAR $L
$8x_tail_done
1600 mov rbx
,QWORD[((48+56+8))+rsp
]
1605 adc r10
,QWORD[16+rdi
]
1606 adc r11
,QWORD[24+rdi
]
1607 adc r12
,QWORD[32+rdi
]
1608 adc r13
,QWORD[40+rdi
]
1609 adc r14
,QWORD[48+rdi
]
1610 adc r15
,QWORD[56+rdi
]
1625 adc r10
,QWORD[16+rdi
]
1626 adc r11
,QWORD[24+rdi
]
1627 adc r12
,QWORD[32+rdi
]
1628 adc r13
,QWORD[40+rdi
]
1629 adc r14
,QWORD[48+rdi
]
1630 adc r15
,QWORD[56+rdi
]
1632 mov rcx
,QWORD[((-16))+rbp
]
1635 DB 102,72,15,126,213
1639 DB 102,73,15,126,217
1640 mov QWORD[16+rdi
],r10
1641 mov QWORD[24+rdi
],r11
1642 mov QWORD[32+rdi
],r12
1643 mov QWORD[40+rdi
],r13
1644 mov QWORD[48+rdi
],r14
1645 mov QWORD[56+rdi
],r15
1649 jb NEAR $L
$8x_reduction_loop
1656 DB 102,72,15,126,207
1658 DB 102,72,15,126,206
1661 jmp NEAR $L$sqr4x_sub
1667 mov r13
,QWORD[8+rbx
]
1669 mov r14
,QWORD[16+rbx
]
1670 sbb r13
,QWORD[16+rbp
]
1671 mov r15
,QWORD[24+rbx
]
1673 sbb r14
,QWORD[32+rbp
]
1675 sbb r15
,QWORD[48+rbp
]
1677 mov QWORD[8+rdi
],r13
1678 mov QWORD[16+rdi
],r14
1679 mov QWORD[24+rdi
],r15
1683 jnz NEAR $L$sqr4x_sub
1686 DB 0F3h
,0C3h
;repret
1688 global bn_from_montgomery
1692 test DWORD[48+rsp
],7
1693 jz NEAR bn_from_mont8x
1695 DB 0F3h
,0C3h
;repret
1701 mov QWORD[8+rsp
],rdi
;WIN64 prologue
1702 mov QWORD[16+rsp
],rsi
1704 $L$
SEH_begin_bn_from_mont8x:
1709 mov r8
,QWORD[40+rsp
]
1710 mov r9
,QWORD[48+rsp
]
1721 lea rsp
,[((-40))+rsp
]
1722 movaps XMMWORD
[rsp
],xmm6
1723 movaps XMMWORD
[16+rsp
],xmm7
1737 lea r11
,[((-64))+r9
*2+rsp
]
1741 jb NEAR $L
$from_sp_alt
1743 lea rsp
,[((-64))+r9
*2+rsp
]
1744 jmp NEAR $L
$from_sp_done
1748 lea r10
,[((4096-64))+r9
*2]
1749 lea rsp
,[((-64))+r9
*2+rsp
]
1768 mov QWORD[32+rsp
],r8
1769 mov QWORD[40+rsp
],rax
1774 jmp NEAR $L$mul_by_1
1778 movdqu xmm1
,XMMWORD
[rsi
]
1779 movdqu xmm2
,XMMWORD
[16+rsi
]
1780 movdqu xmm3
,XMMWORD
[32+rsi
]
1781 movdqa XMMWORD
[r9
*1+rax
],xmm0
1782 movdqu xmm4
,XMMWORD
[48+rsi
]
1783 movdqa XMMWORD
[16+r9
*1+rax
],xmm0
1784 DB 0x48,0x8d,0xb6,0x40,0x00,0x00,0x00
1785 movdqa XMMWORD
[rax
],xmm1
1786 movdqa XMMWORD
[32+r9
*1+rax
],xmm0
1787 movdqa XMMWORD
[16+rax
],xmm2
1788 movdqa XMMWORD
[48+r9
*1+rax
],xmm0
1789 movdqa XMMWORD
[32+rax
],xmm3
1790 movdqa XMMWORD
[48+rax
],xmm4
1793 jnz NEAR $L$mul_by_1
1795 DB 102,72,15,110,207
1796 DB 102,72,15,110,209
1799 DB 102,73,15,110,218
1800 call sqr8x_reduction
1804 mov rsi
,QWORD[40+rsp
]
1805 jmp NEAR $L
$from_mont_zero
1809 movdqa XMMWORD
[rax
],xmm0
1810 movdqa XMMWORD
[16+rax
],xmm0
1811 movdqa XMMWORD
[32+rax
],xmm0
1812 movdqa XMMWORD
[48+rax
],xmm0
1815 jnz NEAR $L
$from_mont_zero
1818 mov r15
,QWORD[((-48))+rsi
]
1819 mov r14
,QWORD[((-40))+rsi
]
1820 mov r13
,QWORD[((-32))+rsi
]
1821 mov r12
,QWORD[((-24))+rsi
]
1822 mov rbp
,QWORD[((-16))+rsi
]
1823 mov rbx
,QWORD[((-8))+rsi
]
1826 mov rdi
,QWORD[8+rsp
] ;WIN64 epilogue
1827 mov rsi
,QWORD[16+rsp
]
1828 DB 0F3h
,0C3h
;repret
1829 $L$
SEH_end_bn_from_mont8x:
1835 jz NEAR $L$scatter_epilogue
1844 $L$
scatter_epilogue:
1845 DB 0F3h
,0C3h
;repret
1852 $L$
SEH_begin_bn_gather5:
1854 DB 0x48,0x83,0xec,0x28
1855 DB 0x0f,0x29,0x34,0x24
1856 DB 0x0f,0x29,0x7c,0x24,0x10
1861 lea rax
,[$L$magic_masks
]
1863 lea r8
,[128+r11
*8+r8
]
1864 movq xmm4
,QWORD[r9
*8+rax
]
1865 movq xmm5
,QWORD[8+r9
*8+rax
]
1866 movq xmm6
,QWORD[16+r9
*8+rax
]
1867 movq xmm7
,QWORD[24+r9
*8+rax
]
1871 movq xmm0
,QWORD[(((-128)))+r8
]
1872 movq xmm1
,QWORD[((-64))+r8
]
1876 movq xmm3
,QWORD[64+r8
]
1885 movq
QWORD[rcx
],xmm0
1889 movaps xmm6
,XMMWORD
[rsp
]
1890 movaps xmm7
,XMMWORD
[16+rsp
]
1892 DB 0F3h
,0C3h
;repret
1893 $L$
SEH_end_bn_gather5:
1897 DD 0,0,0,0,0,0,-1,-1
1899 DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
1900 DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115
1901 DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111
1902 DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79
1903 DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111
1904 DB 112,101,110,115,115,108,46,111,114,103,62,0
1905 EXTERN __imp_RtlVirtualUnwind
1920 mov rax
,QWORD[120+r8
]
1921 mov rbx
,QWORD[248+r8
]
1924 mov r11
,QWORD[56+r9
]
1929 jb NEAR $L
$common_seh_tail
1931 mov rax
,QWORD[152+r8
]
1933 mov r10d
,DWORD[4+r11
]
1936 jae NEAR $L
$common_seh_tail
1938 lea r10
,[$L$mul_epilogue
]
1942 mov r10
,QWORD[192+r8
]
1943 mov rax
,QWORD[8+r10
*8+rax
]
1944 jmp NEAR $L
$body_proceed
1947 mov rax
,QWORD[40+rax
]
1950 movaps xmm0
,XMMWORD
[((-88))+rax
]
1951 movaps xmm1
,XMMWORD
[((-72))+rax
]
1953 mov rbx
,QWORD[((-8))+rax
]
1954 mov rbp
,QWORD[((-16))+rax
]
1955 mov r12
,QWORD[((-24))+rax
]
1956 mov r13
,QWORD[((-32))+rax
]
1957 mov r14
,QWORD[((-40))+rax
]
1958 mov r15
,QWORD[((-48))+rax
]
1959 mov QWORD[144+r8
],rbx
1960 mov QWORD[160+r8
],rbp
1961 mov QWORD[216+r8
],r12
1962 mov QWORD[224+r8
],r13
1963 mov QWORD[232+r8
],r14
1964 mov QWORD[240+r8
],r15
1965 movups XMMWORD
[512+r8
],xmm0
1966 movups XMMWORD
[528+r8
],xmm1
1969 mov rdi
,QWORD[8+rax
]
1970 mov rsi
,QWORD[16+rax
]
1971 mov QWORD[152+r8
],rax
1972 mov QWORD[168+r8
],rsi
1973 mov QWORD[176+r8
],rdi
1975 mov rdi
,QWORD[40+r9
]
1982 mov rdx
,QWORD[8+rsi
]
1984 mov r9
,QWORD[16+rsi
]
1985 mov r10
,QWORD[40+rsi
]
1988 mov QWORD[32+rsp
],r10
1989 mov QWORD[40+rsp
],r11
1990 mov QWORD[48+rsp
],r12
1991 mov QWORD[56+rsp
],rcx
1992 call QWORD[__imp_RtlVirtualUnwind
]
2005 DB 0F3h
,0C3h
;repret
2008 section .pdata rdata
align=4
2010 DD $L$SEH_begin_bn_mul_mont_gather5 wrt ..imagebase
2011 DD $L$SEH_end_bn_mul_mont_gather5 wrt ..imagebase
2012 DD $L$SEH_info_bn_mul_mont_gather5 wrt ..imagebase
2014 DD $L$SEH_begin_bn_mul4x_mont_gather5 wrt ..imagebase
2015 DD $L$SEH_end_bn_mul4x_mont_gather5 wrt ..imagebase
2016 DD $L$SEH_info_bn_mul4x_mont_gather5 wrt ..imagebase
2018 DD $L$SEH_begin_bn_power5 wrt ..imagebase
2019 DD $L$SEH_end_bn_power5 wrt ..imagebase
2020 DD $L$SEH_info_bn_power5 wrt ..imagebase
2022 DD $L$SEH_begin_bn_from_mont8x wrt ..imagebase
2023 DD $L$SEH_end_bn_from_mont8x wrt ..imagebase
2024 DD $L$SEH_info_bn_from_mont8x wrt ..imagebase
2025 DD $L$SEH_begin_bn_gather5 wrt ..imagebase
2026 DD $L$SEH_end_bn_gather5 wrt ..imagebase
2027 DD $L$SEH_info_bn_gather5 wrt ..imagebase
2029 section .xdata rdata
align=8
2031 $L$
SEH_info_bn_mul_mont_gather5:
2033 DD mul_handler wrt ..imagebase
2034 DD $L$mul_body wrt ..imagebase
,$L$mul_epilogue wrt ..imagebase
2036 $L$
SEH_info_bn_mul4x_mont_gather5:
2038 DD mul_handler wrt ..imagebase
2039 DD $L$mul4x_body wrt ..imagebase
,$L$mul4x_epilogue wrt ..imagebase
2041 $L$
SEH_info_bn_power5:
2043 DD mul_handler wrt ..imagebase
2044 DD $L$power5_body wrt ..imagebase
,$L$power5_epilogue wrt ..imagebase
2046 $L$
SEH_info_bn_from_mont8x:
2048 DD mul_handler wrt ..imagebase
2049 DD $L
$from_body wrt ..imagebase
,$L
$from_epilogue wrt ..imagebase
2051 $L$
SEH_info_bn_gather5:
2052 DB 0x01,0x0d,0x05,0x00
2053 DB 0x0d,0x78,0x01,0x00
2054 DB 0x08,0x68,0x00,0x00
2055 DB 0x04,0x42,0x00,0x00