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