2 .text$ SEGMENT ALIGN(256) 'CODE'
4 EXTERN OPENSSL_ia32cap_P:NEAR
6 PUBLIC bn_mul_mont_gather5
9 bn_mul_mont_gather5 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_gather5::
18 mov r8,QWORD PTR[40+rsp]
19 mov r9,QWORD PTR[48+rsp]
30 mov r10d,DWORD PTR[56+rsp]
37 lea rsp,QWORD PTR[((-40))+rsp]
38 movaps XMMWORD PTR[rsp],xmm6
39 movaps XMMWORD PTR[16+rsp],xmm7
40 lea r11,QWORD PTR[2+r9]
42 lea rsp,QWORD PTR[r11*8+rsp]
45 mov QWORD PTR[8+r9*8+rsp],rax
52 lea rax,QWORD PTR[$L$magic_masks]
54 lea r12,QWORD PTR[96+r11*8+r12]
55 movq xmm4,QWORD PTR[r10*8+rax]
56 movq xmm5,QWORD PTR[8+r10*8+rax]
57 movq xmm6,QWORD PTR[16+r10*8+rax]
58 movq xmm7,QWORD PTR[24+r10*8+rax]
60 movq xmm0,QWORD PTR[(((-96)))+r12]
61 movq xmm1,QWORD PTR[((-32))+r12]
63 movq xmm2,QWORD PTR[32+r12]
65 movq xmm3,QWORD PTR[96+r12]
70 lea r12,QWORD PTR[256+r12]
76 mov rax,QWORD PTR[rsi]
81 movq xmm0,QWORD PTR[(((-96)))+r12]
82 movq xmm1,QWORD PTR[((-32))+r12]
84 movq xmm2,QWORD PTR[32+r12]
90 mov rax,QWORD PTR[rcx]
92 movq xmm3,QWORD PTR[96+r12]
101 lea r12,QWORD PTR[256+r12]
106 mov rax,QWORD PTR[8+rsi]
110 lea r15,QWORD PTR[1+r15]
116 mov rax,QWORD PTR[r15*8+rsi]
121 mov QWORD PTR[((-16))+r15*8+rsp],r13
127 mov rax,QWORD PTR[r15*8+rcx]
129 lea r15,QWORD PTR[1+r15]
139 mov rax,QWORD PTR[rsi]
143 mov QWORD PTR[((-16))+r15*8+rsp],r13
150 mov QWORD PTR[((-8))+r9*8+rsp],r13
151 mov QWORD PTR[r9*8+rsp],rdx
153 lea r14,QWORD PTR[1+r14]
159 mov r10,QWORD PTR[rsp]
161 movq xmm0,QWORD PTR[(((-96)))+r12]
162 movq xmm1,QWORD PTR[((-32))+r12]
164 movq xmm2,QWORD PTR[32+r12]
169 mov rax,QWORD PTR[rcx]
172 movq xmm3,QWORD PTR[96+r12]
181 lea r12,QWORD PTR[256+r12]
186 mov rax,QWORD PTR[8+rsi]
188 mov r10,QWORD PTR[8+rsp]
191 lea r15,QWORD PTR[1+r15]
197 mov rax,QWORD PTR[r15*8+rsi]
200 mov r10,QWORD PTR[r15*8+rsp]
202 mov QWORD PTR[((-16))+r15*8+rsp],r13
208 mov rax,QWORD PTR[r15*8+rcx]
213 lea r15,QWORD PTR[1+r15]
222 mov rax,QWORD PTR[rsi]
225 mov r10,QWORD PTR[r15*8+rsp]
227 mov QWORD PTR[((-16))+r15*8+rsp],r13
235 mov QWORD PTR[((-8))+r9*8+rsp],r13
236 mov QWORD PTR[r9*8+rsp],rdx
238 lea r14,QWORD PTR[1+r14]
243 mov rax,QWORD PTR[rsp]
244 lea rsi,QWORD PTR[rsp]
248 $L$sub:: sbb rax,QWORD PTR[r14*8+rcx]
249 mov QWORD PTR[r14*8+rdi],rax
250 mov rax,QWORD PTR[8+r14*8+rsi]
251 lea r14,QWORD PTR[1+r14]
260 mov rsi,QWORD PTR[r14*8+rsp]
261 mov rcx,QWORD PTR[r14*8+rdi]
265 mov QWORD PTR[r14*8+rsp],r14
266 mov QWORD PTR[r14*8+rdi],rsi
267 lea r14,QWORD PTR[1+r14]
271 mov rsi,QWORD PTR[8+r9*8+rsp]
273 movaps xmm6,XMMWORD PTR[((-88))+rsi]
274 movaps xmm7,XMMWORD PTR[((-72))+rsi]
275 mov r15,QWORD PTR[((-48))+rsi]
276 mov r14,QWORD PTR[((-40))+rsi]
277 mov r13,QWORD PTR[((-32))+rsi]
278 mov r12,QWORD PTR[((-24))+rsi]
279 mov rbp,QWORD PTR[((-16))+rsi]
280 mov rbx,QWORD PTR[((-8))+rsi]
281 lea rsp,QWORD PTR[rsi]
283 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
284 mov rsi,QWORD PTR[16+rsp]
286 $L$SEH_end_bn_mul_mont_gather5::
287 bn_mul_mont_gather5 ENDP
290 bn_mul4x_mont_gather5 PROC PRIVATE
291 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
292 mov QWORD PTR[16+rsp],rsi
294 $L$SEH_begin_bn_mul4x_mont_gather5::
299 mov r8,QWORD PTR[40+rsp]
300 mov r9,QWORD PTR[48+rsp]
312 lea rsp,QWORD PTR[((-40))+rsp]
313 movaps XMMWORD PTR[rsp],xmm6
314 movaps XMMWORD PTR[16+rsp],xmm7
328 lea r11,QWORD PTR[((-64))+r9*2+rsp]
334 lea rsp,QWORD PTR[((-64))+r9*2+rsp]
339 lea r10,QWORD PTR[((4096-64))+r9*2]
340 lea rsp,QWORD PTR[((-64))+r9*2+rsp]
349 mov QWORD PTR[40+rsp],rax
354 mov rsi,QWORD PTR[40+rsp]
356 movaps xmm6,XMMWORD PTR[((-88))+rsi]
357 movaps xmm7,XMMWORD PTR[((-72))+rsi]
358 mov r15,QWORD PTR[((-48))+rsi]
359 mov r14,QWORD PTR[((-40))+rsi]
360 mov r13,QWORD PTR[((-32))+rsi]
361 mov r12,QWORD PTR[((-24))+rsi]
362 mov rbp,QWORD PTR[((-16))+rsi]
363 mov rbx,QWORD PTR[((-8))+rsi]
364 lea rsp,QWORD PTR[rsi]
366 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
367 mov rsi,QWORD PTR[16+rsp]
369 $L$SEH_end_bn_mul4x_mont_gather5::
370 bn_mul4x_mont_gather5 ENDP
374 mul4x_internal PROC PRIVATE
376 mov r10d,DWORD PTR[56+rax]
377 lea r13,QWORD PTR[256+r9*1+rdx]
383 lea rax,QWORD PTR[$L$magic_masks]
385 lea r12,QWORD PTR[96+r11*8+rdx]
386 movq xmm4,QWORD PTR[r10*8+rax]
387 movq xmm5,QWORD PTR[8+r10*8+rax]
389 movq xmm6,QWORD PTR[16+r10*8+rax]
390 movq xmm7,QWORD PTR[24+r10*8+rax]
393 movq xmm0,QWORD PTR[(((-96)))+r12]
394 lea r14,QWORD PTR[256+r12]
395 movq xmm1,QWORD PTR[((-32))+r12]
397 movq xmm2,QWORD PTR[32+r12]
399 movq xmm3,QWORD PTR[96+r12]
403 movq xmm1,QWORD PTR[((-96))+r14]
408 movq xmm2,QWORD PTR[((-32))+r14]
413 movq xmm3,QWORD PTR[32+r14]
416 movq xmm0,QWORD PTR[96+r14]
417 mov QWORD PTR[((16+8))+rsp],r13
418 mov QWORD PTR[((56+8))+rsp],rdi
421 mov rax,QWORD PTR[rsi]
422 lea rsi,QWORD PTR[r9*1+rsi]
428 mov rax,QWORD PTR[rcx]
442 lea r14,QWORD PTR[((64+8))+r11*8+rsp]
447 lea r12,QWORD PTR[512+r12]
452 mov rax,QWORD PTR[8+r9*1+rsi]
458 mov rax,QWORD PTR[16+rcx]
464 mov rax,QWORD PTR[16+r9*1+rsi]
467 lea r15,QWORD PTR[32+r9]
468 lea rcx,QWORD PTR[64+rcx]
470 mov QWORD PTR[r14],rdi
478 mov rax,QWORD PTR[((-32))+rcx]
479 lea r14,QWORD PTR[32+r14]
485 mov rax,QWORD PTR[((-8))+r15*1+rsi]
489 mov QWORD PTR[((-24))+r14],r13
494 mov rax,QWORD PTR[((-16))+rcx]
500 mov rax,QWORD PTR[r15*1+rsi]
504 mov QWORD PTR[((-16))+r14],rdi
509 mov rax,QWORD PTR[rcx]
515 mov rax,QWORD PTR[8+r15*1+rsi]
519 mov QWORD PTR[((-8))+r14],r13
524 mov rax,QWORD PTR[16+rcx]
530 mov rax,QWORD PTR[16+r15*1+rsi]
533 lea rcx,QWORD PTR[64+rcx]
535 mov QWORD PTR[r14],rdi
543 mov rax,QWORD PTR[((-32))+rcx]
544 lea r14,QWORD PTR[32+r14]
550 mov rax,QWORD PTR[((-8))+rsi]
554 mov QWORD PTR[((-24))+r14],r13
559 mov rax,QWORD PTR[((-16))+rcx]
565 mov rax,QWORD PTR[r9*1+rsi]
569 mov QWORD PTR[((-16))+r14],rdi
573 lea rcx,QWORD PTR[r9*2+rcx]
578 mov QWORD PTR[((-8))+r14],r13
584 mov r10,QWORD PTR[r9*1+r14]
588 mov rax,QWORD PTR[rcx]
591 movq xmm0,QWORD PTR[(((-96)))+r12]
592 movq xmm1,QWORD PTR[((-32))+r12]
594 movq xmm2,QWORD PTR[32+r12]
596 movq xmm3,QWORD PTR[96+r12]
601 mov QWORD PTR[r14],rdi
607 lea r14,QWORD PTR[r9*1+r14]
608 lea r12,QWORD PTR[256+r12]
613 mov rax,QWORD PTR[8+r9*1+rsi]
619 mov rax,QWORD PTR[16+rcx]
621 add r11,QWORD PTR[8+r14]
627 mov rax,QWORD PTR[16+r9*1+rsi]
630 lea r15,QWORD PTR[32+r9]
631 lea rcx,QWORD PTR[64+rcx]
640 mov rax,QWORD PTR[((-32))+rcx]
642 add r10,QWORD PTR[16+r14]
643 lea r14,QWORD PTR[32+r14]
649 mov rax,QWORD PTR[((-8))+r15*1+rsi]
653 mov QWORD PTR[((-32))+r14],rdi
658 mov rax,QWORD PTR[((-16))+rcx]
660 add r11,QWORD PTR[((-8))+r14]
666 mov rax,QWORD PTR[r15*1+rsi]
670 mov QWORD PTR[((-24))+r14],r13
675 mov rax,QWORD PTR[rcx]
677 add r10,QWORD PTR[r14]
683 mov rax,QWORD PTR[8+r15*1+rsi]
687 mov QWORD PTR[((-16))+r14],rdi
692 mov rax,QWORD PTR[16+rcx]
694 add r11,QWORD PTR[8+r14]
700 mov rax,QWORD PTR[16+r15*1+rsi]
703 lea rcx,QWORD PTR[64+rcx]
705 mov QWORD PTR[((-8))+r14],r13
713 mov rax,QWORD PTR[((-32))+rcx]
715 add r10,QWORD PTR[16+r14]
716 lea r14,QWORD PTR[32+r14]
722 mov rax,QWORD PTR[((-8))+rsi]
726 mov QWORD PTR[((-32))+r14],rdi
732 mov rbp,QWORD PTR[((-16))+rcx]
734 add r11,QWORD PTR[((-8))+r14]
740 mov rax,QWORD PTR[r9*1+rsi]
744 mov QWORD PTR[((-24))+r14],r13
748 mov QWORD PTR[((-16))+r14],rdi
749 lea rcx,QWORD PTR[r9*2+rcx]
754 add r13,QWORD PTR[r14]
756 mov QWORD PTR[((-8))+r14],r13
758 cmp r12,QWORD PTR[((16+8))+rsp]
764 lea rbx,QWORD PTR[r9*1+r14]
765 lea rbp,QWORD PTR[rdi*8+rcx]
768 mov rdi,QWORD PTR[((56+8))+rsp]
774 bn_power5 PROC PUBLIC
775 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
776 mov QWORD PTR[16+rsp],rsi
778 $L$SEH_begin_bn_power5::
783 mov r8,QWORD PTR[40+rsp]
784 mov r9,QWORD PTR[48+rsp]
794 lea rsp,QWORD PTR[((-40))+rsp]
795 movaps XMMWORD PTR[rsp],xmm6
796 movaps XMMWORD PTR[16+rsp],xmm7
809 lea r11,QWORD PTR[((-64))+r9*2+rsp]
815 lea rsp,QWORD PTR[((-64))+r9*2+rsp]
820 lea r10,QWORD PTR[((4096-64))+r9*2]
821 lea rsp,QWORD PTR[((-64))+r9*2+rsp]
840 mov QWORD PTR[32+rsp],r8
841 mov QWORD PTR[40+rsp],rax
848 call __bn_sqr8x_internal
849 call __bn_sqr8x_internal
850 call __bn_sqr8x_internal
851 call __bn_sqr8x_internal
852 call __bn_sqr8x_internal
857 mov rax,QWORD PTR[40+rsp]
858 lea r8,QWORD PTR[32+rsp]
862 mov rsi,QWORD PTR[40+rsp]
864 mov r15,QWORD PTR[((-48))+rsi]
865 mov r14,QWORD PTR[((-40))+rsi]
866 mov r13,QWORD PTR[((-32))+rsi]
867 mov r12,QWORD PTR[((-24))+rsi]
868 mov rbp,QWORD PTR[((-16))+rsi]
869 mov rbx,QWORD PTR[((-8))+rsi]
870 lea rsp,QWORD PTR[rsi]
872 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
873 mov rsi,QWORD PTR[16+rsp]
875 $L$SEH_end_bn_power5::
878 PUBLIC bn_sqr8x_internal
882 bn_sqr8x_internal PROC PUBLIC
883 __bn_sqr8x_internal::
957 lea rbp,QWORD PTR[32+r10]
958 lea rsi,QWORD PTR[r9*1+rsi]
963 mov r14,QWORD PTR[((-32))+rbp*1+rsi]
964 lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
965 mov rax,QWORD PTR[((-24))+rbp*1+rsi]
966 lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
967 mov rbx,QWORD PTR[((-16))+rbp*1+rsi]
974 mov QWORD PTR[((-24))+rbp*1+rdi],r10
980 mov QWORD PTR[((-16))+rbp*1+rdi],r11
984 mov rbx,QWORD PTR[((-8))+rbp*1+rsi]
990 lea rcx,QWORD PTR[rbp]
998 mov QWORD PTR[((-8))+rcx*1+rdi],r10
1003 mov rbx,QWORD PTR[rcx*1+rsi]
1013 mov rbx,QWORD PTR[8+rcx*1+rsi]
1023 mov QWORD PTR[rcx*1+rdi],r11
1030 mov rbx,QWORD PTR[16+rcx*1+rsi]
1039 mov QWORD PTR[8+rcx*1+rdi],r10
1046 mov rbx,QWORD PTR[24+rcx*1+rsi]
1056 mov QWORD PTR[16+rcx*1+rdi],r11
1059 lea rcx,QWORD PTR[32+rcx]
1068 mov QWORD PTR[((-8))+rcx*1+rdi],r10
1075 lea rbp,QWORD PTR[16+rbp]
1080 mov QWORD PTR[rdi],r13
1082 mov QWORD PTR[8+rdi],rdx
1087 mov r14,QWORD PTR[((-32))+rbp*1+rsi]
1088 lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
1089 mov rax,QWORD PTR[((-24))+rbp*1+rsi]
1090 lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
1091 mov rbx,QWORD PTR[((-16))+rbp*1+rsi]
1095 mov r10,QWORD PTR[((-24))+rbp*1+rdi]
1099 mov QWORD PTR[((-24))+rbp*1+rdi],r10
1106 add r11,QWORD PTR[((-16))+rbp*1+rdi]
1109 mov QWORD PTR[((-16))+rbp*1+rdi],r11
1113 mov rbx,QWORD PTR[((-8))+rbp*1+rsi]
1118 add r12,QWORD PTR[((-8))+rbp*1+rdi]
1129 mov QWORD PTR[((-8))+rbp*1+rdi],r10
1131 lea rcx,QWORD PTR[rbp]
1136 mov rbx,QWORD PTR[rcx*1+rsi]
1142 add r13,QWORD PTR[rcx*1+rdi]
1149 mov rbx,QWORD PTR[8+rcx*1+rsi]
1157 mov QWORD PTR[rcx*1+rdi],r11
1161 add r12,QWORD PTR[8+rcx*1+rdi]
1162 lea rcx,QWORD PTR[16+rcx]
1172 mov QWORD PTR[((-8))+rcx*1+rdi],r10
1184 mov QWORD PTR[rdi],r13
1186 mov QWORD PTR[8+rdi],rdx
1192 mov r14,QWORD PTR[((-32))+rsi]
1193 lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
1194 mov rax,QWORD PTR[((-24))+rsi]
1195 lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
1196 mov rbx,QWORD PTR[((-16))+rsi]
1208 mov QWORD PTR[((-24))+rdi],r10
1212 mov rbx,QWORD PTR[((-8))+rsi]
1218 mov QWORD PTR[((-16))+rdi],r11
1229 mov QWORD PTR[((-8))+rdi],r10
1233 mov rax,QWORD PTR[((-16))+rsi]
1238 mov QWORD PTR[rdi],r13
1240 mov QWORD PTR[8+rdi],rdx
1250 mov QWORD PTR[8+rdi],rax
1251 mov QWORD PTR[16+rdi],rdx
1252 mov QWORD PTR[24+rdi],r15
1254 mov rax,QWORD PTR[((-16))+rbp*1+rsi]
1255 lea rdi,QWORD PTR[((48+8))+rsp]
1257 mov r11,QWORD PTR[8+rdi]
1259 lea r12,QWORD PTR[r10*2+r14]
1261 lea r13,QWORD PTR[r11*2+rcx]
1264 mov r10,QWORD PTR[16+rdi]
1268 mov r11,QWORD PTR[24+rdi]
1270 mov rax,QWORD PTR[((-8))+rbp*1+rsi]
1271 mov QWORD PTR[rdi],r12
1274 lea rbx,QWORD PTR[r10*2+r14]
1275 mov QWORD PTR[8+rdi],r13
1278 lea r8,QWORD PTR[r11*2+rcx]
1281 mov r10,QWORD PTR[32+rdi]
1285 mov r11,QWORD PTR[40+rdi]
1287 mov rax,QWORD PTR[rbp*1+rsi]
1288 mov QWORD PTR[16+rdi],rbx
1290 lea rbp,QWORD PTR[16+rbp]
1291 mov QWORD PTR[24+rdi],r8
1293 lea rdi,QWORD PTR[64+rdi]
1294 jmp $L$sqr4x_shift_n_add
1297 $L$sqr4x_shift_n_add::
1298 lea r12,QWORD PTR[r10*2+r14]
1300 lea r13,QWORD PTR[r11*2+rcx]
1303 mov r10,QWORD PTR[((-16))+rdi]
1307 mov r11,QWORD PTR[((-8))+rdi]
1309 mov rax,QWORD PTR[((-8))+rbp*1+rsi]
1310 mov QWORD PTR[((-32))+rdi],r12
1313 lea rbx,QWORD PTR[r10*2+r14]
1314 mov QWORD PTR[((-24))+rdi],r13
1317 lea r8,QWORD PTR[r11*2+rcx]
1320 mov r10,QWORD PTR[rdi]
1324 mov r11,QWORD PTR[8+rdi]
1326 mov rax,QWORD PTR[rbp*1+rsi]
1327 mov QWORD PTR[((-16))+rdi],rbx
1330 lea r12,QWORD PTR[r10*2+r14]
1331 mov QWORD PTR[((-8))+rdi],r8
1334 lea r13,QWORD PTR[r11*2+rcx]
1337 mov r10,QWORD PTR[16+rdi]
1341 mov r11,QWORD PTR[24+rdi]
1343 mov rax,QWORD PTR[8+rbp*1+rsi]
1344 mov QWORD PTR[rdi],r12
1347 lea rbx,QWORD PTR[r10*2+r14]
1348 mov QWORD PTR[8+rdi],r13
1351 lea r8,QWORD PTR[r11*2+rcx]
1354 mov r10,QWORD PTR[32+rdi]
1358 mov r11,QWORD PTR[40+rdi]
1360 mov rax,QWORD PTR[16+rbp*1+rsi]
1361 mov QWORD PTR[16+rdi],rbx
1363 mov QWORD PTR[24+rdi],r8
1365 lea rdi,QWORD PTR[64+rdi]
1367 jnz $L$sqr4x_shift_n_add
1369 lea r12,QWORD PTR[r10*2+r14]
1372 lea r13,QWORD PTR[r11*2+rcx]
1375 mov r10,QWORD PTR[((-16))+rdi]
1379 mov r11,QWORD PTR[((-8))+rdi]
1381 mov rax,QWORD PTR[((-8))+rsi]
1382 mov QWORD PTR[((-32))+rdi],r12
1385 lea rbx,QWORD PTR[r10*2+r14]
1386 mov QWORD PTR[((-24))+rdi],r13
1389 lea r8,QWORD PTR[r11*2+rcx]
1396 mov QWORD PTR[((-16))+rdi],rbx
1397 mov QWORD PTR[((-8))+rdi],r8
1398 DB 102,72,15,126,213
1401 lea rcx,QWORD PTR[r9*2+rbp]
1402 lea rdx,QWORD PTR[((48+8))+r9*2+rsp]
1403 mov QWORD PTR[((0+8))+rsp],rcx
1404 lea rdi,QWORD PTR[((48+8))+r9*1+rsp]
1405 mov QWORD PTR[((8+8))+rsp],rdx
1407 jmp $L$8x_reduction_loop
1410 $L$8x_reduction_loop::
1411 lea rdi,QWORD PTR[r9*1+rdi]
1413 mov rbx,QWORD PTR[rdi]
1414 mov r9,QWORD PTR[8+rdi]
1415 mov r10,QWORD PTR[16+rdi]
1416 mov r11,QWORD PTR[24+rdi]
1417 mov r12,QWORD PTR[32+rdi]
1418 mov r13,QWORD PTR[40+rdi]
1419 mov r14,QWORD PTR[48+rdi]
1420 mov r15,QWORD PTR[56+rdi]
1421 mov QWORD PTR[rdx],rax
1422 lea rdi,QWORD PTR[64+rdi]
1426 imul rbx,QWORD PTR[((32+8))+rsp]
1427 mov rax,QWORD PTR[rbp]
1434 mov rax,QWORD PTR[16+rbp]
1441 mov rax,QWORD PTR[32+rbp]
1444 mov QWORD PTR[((48-8+8))+rcx*8+rsp],rbx
1450 mov rax,QWORD PTR[48+rbp]
1453 mov rsi,QWORD PTR[((32+8))+rsp]
1459 mov rax,QWORD PTR[64+rbp]
1468 mov rax,QWORD PTR[80+rbp]
1476 mov rax,QWORD PTR[96+rbp]
1484 mov rax,QWORD PTR[112+rbp]
1493 mov rax,QWORD PTR[rbp]
1502 lea rbp,QWORD PTR[128+rbp]
1504 mov rdx,QWORD PTR[((8+8))+rsp]
1505 cmp rbp,QWORD PTR[((0+8))+rsp]
1509 add r8,QWORD PTR[rdi]
1510 adc r9,QWORD PTR[8+rdi]
1511 adc r10,QWORD PTR[16+rdi]
1512 adc r11,QWORD PTR[24+rdi]
1513 adc r12,QWORD PTR[32+rdi]
1514 adc r13,QWORD PTR[40+rdi]
1515 adc r14,QWORD PTR[48+rdi]
1516 adc r15,QWORD PTR[56+rdi]
1519 mov rbx,QWORD PTR[((48+56+8))+rsp]
1521 mov rax,QWORD PTR[rbp]
1528 mov rax,QWORD PTR[16+rbp]
1529 mov QWORD PTR[rdi],r8
1535 mov rax,QWORD PTR[32+rbp]
1538 lea rdi,QWORD PTR[8+rdi]
1544 mov rax,QWORD PTR[48+rbp]
1552 mov rax,QWORD PTR[64+rbp]
1560 mov rax,QWORD PTR[80+rbp]
1568 mov rax,QWORD PTR[96+rbp]
1576 mov rax,QWORD PTR[112+rbp]
1583 mov rbx,QWORD PTR[((48-16+8))+rcx*8+rsp]
1587 mov rax,QWORD PTR[rbp]
1594 lea rbp,QWORD PTR[128+rbp]
1595 mov rdx,QWORD PTR[((8+8))+rsp]
1596 cmp rbp,QWORD PTR[((0+8))+rsp]
1599 mov rbx,QWORD PTR[((48+56+8))+rsp]
1601 mov rax,QWORD PTR[rbp]
1602 adc r8,QWORD PTR[rdi]
1603 adc r9,QWORD PTR[8+rdi]
1604 adc r10,QWORD PTR[16+rdi]
1605 adc r11,QWORD PTR[24+rdi]
1606 adc r12,QWORD PTR[32+rdi]
1607 adc r13,QWORD PTR[40+rdi]
1608 adc r14,QWORD PTR[48+rdi]
1609 adc r15,QWORD PTR[56+rdi]
1617 add r8,QWORD PTR[rdx]
1622 adc r8,QWORD PTR[rdi]
1623 adc r9,QWORD PTR[8+rdi]
1624 adc r10,QWORD PTR[16+rdi]
1625 adc r11,QWORD PTR[24+rdi]
1626 adc r12,QWORD PTR[32+rdi]
1627 adc r13,QWORD PTR[40+rdi]
1628 adc r14,QWORD PTR[48+rdi]
1629 adc r15,QWORD PTR[56+rdi]
1631 mov rcx,QWORD PTR[((-16))+rbp]
1634 DB 102,72,15,126,213
1636 mov QWORD PTR[rdi],r8
1637 mov QWORD PTR[8+rdi],r9
1638 DB 102,73,15,126,217
1639 mov QWORD PTR[16+rdi],r10
1640 mov QWORD PTR[24+rdi],r11
1641 mov QWORD PTR[32+rdi],r12
1642 mov QWORD PTR[40+rdi],r13
1643 mov QWORD PTR[48+rdi],r14
1644 mov QWORD PTR[56+rdi],r15
1645 lea rdi,QWORD PTR[64+rdi]
1648 jb $L$8x_reduction_loop
1651 lea rbx,QWORD PTR[r9*1+rdi]
1655 DB 102,72,15,126,207
1657 DB 102,72,15,126,206
1658 lea rbp,QWORD PTR[rax*8+rbp]
1665 mov r12,QWORD PTR[rbx]
1666 mov r13,QWORD PTR[8+rbx]
1667 sbb r12,QWORD PTR[rbp]
1668 mov r14,QWORD PTR[16+rbx]
1669 sbb r13,QWORD PTR[16+rbp]
1670 mov r15,QWORD PTR[24+rbx]
1671 lea rbx,QWORD PTR[32+rbx]
1672 sbb r14,QWORD PTR[32+rbp]
1673 mov QWORD PTR[rdi],r12
1674 sbb r15,QWORD PTR[48+rbp]
1675 lea rbp,QWORD PTR[64+rbp]
1676 mov QWORD PTR[8+rdi],r13
1677 mov QWORD PTR[16+rdi],r14
1678 mov QWORD PTR[24+rdi],r15
1679 lea rdi,QWORD PTR[32+rdi]
1685 DB 0F3h,0C3h ;repret
1686 bn_sqr8x_internal ENDP
1687 PUBLIC bn_from_montgomery
1690 bn_from_montgomery PROC PUBLIC
1691 test DWORD PTR[48+rsp],7
1694 DB 0F3h,0C3h ;repret
1695 bn_from_montgomery ENDP
1699 bn_from_mont8x PROC PRIVATE
1700 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
1701 mov QWORD PTR[16+rsp],rsi
1703 $L$SEH_begin_bn_from_mont8x::
1708 mov r8,QWORD PTR[40+rsp]
1709 mov r9,QWORD PTR[48+rsp]
1720 lea rsp,QWORD PTR[((-40))+rsp]
1721 movaps XMMWORD PTR[rsp],xmm6
1722 movaps XMMWORD PTR[16+rsp],xmm7
1728 mov r8,QWORD PTR[r8]
1736 lea r11,QWORD PTR[((-64))+r9*2+rsp]
1742 lea rsp,QWORD PTR[((-64))+r9*2+rsp]
1747 lea r10,QWORD PTR[((4096-64))+r9*2]
1748 lea rsp,QWORD PTR[((-64))+r9*2+rsp]
1767 mov QWORD PTR[32+rsp],r8
1768 mov QWORD PTR[40+rsp],rax
1771 lea rax,QWORD PTR[48+rsp]
1777 movdqu xmm1,XMMWORD PTR[rsi]
1778 movdqu xmm2,XMMWORD PTR[16+rsi]
1779 movdqu xmm3,XMMWORD PTR[32+rsi]
1780 movdqa XMMWORD PTR[r9*1+rax],xmm0
1781 movdqu xmm4,XMMWORD PTR[48+rsi]
1782 movdqa XMMWORD PTR[16+r9*1+rax],xmm0
1783 DB 048h,08dh,0b6h,040h,000h,000h,000h
1784 movdqa XMMWORD PTR[rax],xmm1
1785 movdqa XMMWORD PTR[32+r9*1+rax],xmm0
1786 movdqa XMMWORD PTR[16+rax],xmm2
1787 movdqa XMMWORD PTR[48+r9*1+rax],xmm0
1788 movdqa XMMWORD PTR[32+rax],xmm3
1789 movdqa XMMWORD PTR[48+rax],xmm4
1790 lea rax,QWORD PTR[64+rax]
1794 DB 102,72,15,110,207
1795 DB 102,72,15,110,209
1798 DB 102,73,15,110,218
1799 call sqr8x_reduction
1802 lea rax,QWORD PTR[48+rsp]
1803 mov rsi,QWORD PTR[40+rsp]
1804 jmp $L$from_mont_zero
1808 movdqa XMMWORD PTR[rax],xmm0
1809 movdqa XMMWORD PTR[16+rax],xmm0
1810 movdqa XMMWORD PTR[32+rax],xmm0
1811 movdqa XMMWORD PTR[48+rax],xmm0
1812 lea rax,QWORD PTR[64+rax]
1814 jnz $L$from_mont_zero
1817 mov r15,QWORD PTR[((-48))+rsi]
1818 mov r14,QWORD PTR[((-40))+rsi]
1819 mov r13,QWORD PTR[((-32))+rsi]
1820 mov r12,QWORD PTR[((-24))+rsi]
1821 mov rbp,QWORD PTR[((-16))+rsi]
1822 mov rbx,QWORD PTR[((-8))+rsi]
1823 lea rsp,QWORD PTR[rsi]
1825 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
1826 mov rsi,QWORD PTR[16+rsp]
1827 DB 0F3h,0C3h ;repret
1828 $L$SEH_end_bn_from_mont8x::
1833 bn_scatter5 PROC PUBLIC
1835 jz $L$scatter_epilogue
1836 lea r8,QWORD PTR[r9*8+r8]
1838 mov rax,QWORD PTR[rcx]
1839 lea rcx,QWORD PTR[8+rcx]
1840 mov QWORD PTR[r8],rax
1841 lea r8,QWORD PTR[256+r8]
1844 $L$scatter_epilogue::
1845 DB 0F3h,0C3h ;repret
1851 bn_gather5 PROC PUBLIC
1852 $L$SEH_begin_bn_gather5::
1854 DB 048h,083h,0ech,028h
1855 DB 00fh,029h,034h,024h
1856 DB 00fh,029h,07ch,024h,010h
1861 lea rax,QWORD PTR[$L$magic_masks]
1863 lea r8,QWORD PTR[128+r11*8+r8]
1864 movq xmm4,QWORD PTR[r9*8+rax]
1865 movq xmm5,QWORD PTR[8+r9*8+rax]
1866 movq xmm6,QWORD PTR[16+r9*8+rax]
1867 movq xmm7,QWORD PTR[24+r9*8+rax]
1871 movq xmm0,QWORD PTR[(((-128)))+r8]
1872 movq xmm1,QWORD PTR[((-64))+r8]
1874 movq xmm2,QWORD PTR[r8]
1876 movq xmm3,QWORD PTR[64+r8]
1882 lea r8,QWORD PTR[256+r8]
1885 movq QWORD PTR[rcx],xmm0
1886 lea rcx,QWORD PTR[8+rcx]
1889 movaps xmm6,XMMWORD PTR[rsp]
1890 movaps xmm7,XMMWORD PTR[16+rsp]
1891 lea rsp,QWORD PTR[40+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:NEAR
1908 mul_handler PROC PRIVATE
1920 mov rax,QWORD PTR[120+r8]
1921 mov rbx,QWORD PTR[248+r8]
1923 mov rsi,QWORD PTR[8+r9]
1924 mov r11,QWORD PTR[56+r9]
1926 mov r10d,DWORD PTR[r11]
1927 lea r10,QWORD PTR[r10*1+rsi]
1929 jb $L$common_seh_tail
1931 mov rax,QWORD PTR[152+r8]
1933 mov r10d,DWORD PTR[4+r11]
1934 lea r10,QWORD PTR[r10*1+rsi]
1936 jae $L$common_seh_tail
1938 lea r10,QWORD PTR[$L$mul_epilogue]
1942 mov r10,QWORD PTR[192+r8]
1943 mov rax,QWORD PTR[8+r10*8+rax]
1947 mov rax,QWORD PTR[40+rax]
1950 movaps xmm0,XMMWORD PTR[((-88))+rax]
1951 movaps xmm1,XMMWORD PTR[((-72))+rax]
1953 mov rbx,QWORD PTR[((-8))+rax]
1954 mov rbp,QWORD PTR[((-16))+rax]
1955 mov r12,QWORD PTR[((-24))+rax]
1956 mov r13,QWORD PTR[((-32))+rax]
1957 mov r14,QWORD PTR[((-40))+rax]
1958 mov r15,QWORD PTR[((-48))+rax]
1959 mov QWORD PTR[144+r8],rbx
1960 mov QWORD PTR[160+r8],rbp
1961 mov QWORD PTR[216+r8],r12
1962 mov QWORD PTR[224+r8],r13
1963 mov QWORD PTR[232+r8],r14
1964 mov QWORD PTR[240+r8],r15
1965 movups XMMWORD PTR[512+r8],xmm0
1966 movups XMMWORD PTR[528+r8],xmm1
1968 $L$common_seh_tail::
1969 mov rdi,QWORD PTR[8+rax]
1970 mov rsi,QWORD PTR[16+rax]
1971 mov QWORD PTR[152+r8],rax
1972 mov QWORD PTR[168+r8],rsi
1973 mov QWORD PTR[176+r8],rdi
1975 mov rdi,QWORD PTR[40+r9]
1982 mov rdx,QWORD PTR[8+rsi]
1983 mov r8,QWORD PTR[rsi]
1984 mov r9,QWORD PTR[16+rsi]
1985 mov r10,QWORD PTR[40+rsi]
1986 lea r11,QWORD PTR[56+rsi]
1987 lea r12,QWORD PTR[24+rsi]
1988 mov QWORD PTR[32+rsp],r10
1989 mov QWORD PTR[40+rsp],r11
1990 mov QWORD PTR[48+rsp],r12
1991 mov QWORD PTR[56+rsp],rcx
1992 call QWORD PTR[__imp_RtlVirtualUnwind]
2005 DB 0F3h,0C3h ;repret
2009 .pdata SEGMENT READONLY ALIGN(4)
2011 DD imagerel $L$SEH_begin_bn_mul_mont_gather5
2012 DD imagerel $L$SEH_end_bn_mul_mont_gather5
2013 DD imagerel $L$SEH_info_bn_mul_mont_gather5
2015 DD imagerel $L$SEH_begin_bn_mul4x_mont_gather5
2016 DD imagerel $L$SEH_end_bn_mul4x_mont_gather5
2017 DD imagerel $L$SEH_info_bn_mul4x_mont_gather5
2019 DD imagerel $L$SEH_begin_bn_power5
2020 DD imagerel $L$SEH_end_bn_power5
2021 DD imagerel $L$SEH_info_bn_power5
2023 DD imagerel $L$SEH_begin_bn_from_mont8x
2024 DD imagerel $L$SEH_end_bn_from_mont8x
2025 DD imagerel $L$SEH_info_bn_from_mont8x
2026 DD imagerel $L$SEH_begin_bn_gather5
2027 DD imagerel $L$SEH_end_bn_gather5
2028 DD imagerel $L$SEH_info_bn_gather5
2031 .xdata SEGMENT READONLY ALIGN(8)
2033 $L$SEH_info_bn_mul_mont_gather5::
2035 DD imagerel mul_handler
2036 DD imagerel $L$mul_body,imagerel $L$mul_epilogue
2038 $L$SEH_info_bn_mul4x_mont_gather5::
2040 DD imagerel mul_handler
2041 DD imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
2043 $L$SEH_info_bn_power5::
2045 DD imagerel mul_handler
2046 DD imagerel $L$power5_body,imagerel $L$power5_epilogue
2048 $L$SEH_info_bn_from_mont8x::
2050 DD imagerel mul_handler
2051 DD imagerel $L$from_body,imagerel $L$from_epilogue
2053 $L$SEH_info_bn_gather5::
2054 DB 001h,00dh,005h,000h
2055 DB 00dh,078h,001h,000h
2056 DB 008h,068h,000h,000h
2057 DB 004h,042h,000h,000h