VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.7/crypto/genasm-nasm/x86_64-mont5.S@ 98024

Last change on this file since 98024 was 97373, checked in by vboxsync, 2 years ago

libs/openssl-3.0.7: Recreate openssl nasm files to hopefully fix the windows build boxes, bugref:10317

File size: 36.8 KB
Line 
1default rel
2%define XMMWORD
3%define YMMWORD
4%define ZMMWORD
5section .text code align=64
6
7
8EXTERN OPENSSL_ia32cap_P
9
10global bn_mul_mont_gather5
11
12ALIGN 64
13bn_mul_mont_gather5:
14 mov QWORD[8+rsp],rdi ;WIN64 prologue
15 mov QWORD[16+rsp],rsi
16 mov rax,rsp
17$L$SEH_begin_bn_mul_mont_gather5:
18 mov rdi,rcx
19 mov rsi,rdx
20 mov rdx,r8
21 mov rcx,r9
22 mov r8,QWORD[40+rsp]
23 mov r9,QWORD[48+rsp]
24
25
26
27 mov r9d,r9d
28 mov rax,rsp
29
30 test r9d,7
31 jnz NEAR $L$mul_enter
32 jmp NEAR $L$mul4x_enter
33
34ALIGN 16
35$L$mul_enter:
36 movd xmm5,DWORD[56+rsp]
37 push rbx
38
39 push rbp
40
41 push r12
42
43 push r13
44
45 push r14
46
47 push r15
48
49
50 neg r9
51 mov r11,rsp
52 lea r10,[((-280))+r9*8+rsp]
53 neg r9
54 and r10,-1024
55
56
57
58
59
60
61
62
63
64 sub r11,r10
65 and r11,-4096
66 lea rsp,[r11*1+r10]
67 mov r11,QWORD[rsp]
68 cmp rsp,r10
69 ja NEAR $L$mul_page_walk
70 jmp NEAR $L$mul_page_walk_done
71
72$L$mul_page_walk:
73 lea rsp,[((-4096))+rsp]
74 mov r11,QWORD[rsp]
75 cmp rsp,r10
76 ja NEAR $L$mul_page_walk
77$L$mul_page_walk_done:
78
79 lea r10,[$L$inc]
80 mov QWORD[8+r9*8+rsp],rax
81
82$L$mul_body:
83
84 lea r12,[128+rdx]
85 movdqa xmm0,XMMWORD[r10]
86 movdqa xmm1,XMMWORD[16+r10]
87 lea r10,[((24-112))+r9*8+rsp]
88 and r10,-16
89
90 pshufd xmm5,xmm5,0
91 movdqa xmm4,xmm1
92 movdqa xmm2,xmm1
93 paddd xmm1,xmm0
94 pcmpeqd xmm0,xmm5
95DB 0x67
96 movdqa xmm3,xmm4
97 paddd xmm2,xmm1
98 pcmpeqd xmm1,xmm5
99 movdqa XMMWORD[112+r10],xmm0
100 movdqa xmm0,xmm4
101
102 paddd xmm3,xmm2
103 pcmpeqd xmm2,xmm5
104 movdqa XMMWORD[128+r10],xmm1
105 movdqa xmm1,xmm4
106
107 paddd xmm0,xmm3
108 pcmpeqd xmm3,xmm5
109 movdqa XMMWORD[144+r10],xmm2
110 movdqa xmm2,xmm4
111
112 paddd xmm1,xmm0
113 pcmpeqd xmm0,xmm5
114 movdqa XMMWORD[160+r10],xmm3
115 movdqa xmm3,xmm4
116 paddd xmm2,xmm1
117 pcmpeqd xmm1,xmm5
118 movdqa XMMWORD[176+r10],xmm0
119 movdqa xmm0,xmm4
120
121 paddd xmm3,xmm2
122 pcmpeqd xmm2,xmm5
123 movdqa XMMWORD[192+r10],xmm1
124 movdqa xmm1,xmm4
125
126 paddd xmm0,xmm3
127 pcmpeqd xmm3,xmm5
128 movdqa XMMWORD[208+r10],xmm2
129 movdqa xmm2,xmm4
130
131 paddd xmm1,xmm0
132 pcmpeqd xmm0,xmm5
133 movdqa XMMWORD[224+r10],xmm3
134 movdqa xmm3,xmm4
135 paddd xmm2,xmm1
136 pcmpeqd xmm1,xmm5
137 movdqa XMMWORD[240+r10],xmm0
138 movdqa xmm0,xmm4
139
140 paddd xmm3,xmm2
141 pcmpeqd xmm2,xmm5
142 movdqa XMMWORD[256+r10],xmm1
143 movdqa xmm1,xmm4
144
145 paddd xmm0,xmm3
146 pcmpeqd xmm3,xmm5
147 movdqa XMMWORD[272+r10],xmm2
148 movdqa xmm2,xmm4
149
150 paddd xmm1,xmm0
151 pcmpeqd xmm0,xmm5
152 movdqa XMMWORD[288+r10],xmm3
153 movdqa xmm3,xmm4
154 paddd xmm2,xmm1
155 pcmpeqd xmm1,xmm5
156 movdqa XMMWORD[304+r10],xmm0
157
158 paddd xmm3,xmm2
159DB 0x67
160 pcmpeqd xmm2,xmm5
161 movdqa XMMWORD[320+r10],xmm1
162
163 pcmpeqd xmm3,xmm5
164 movdqa XMMWORD[336+r10],xmm2
165 pand xmm0,XMMWORD[64+r12]
166
167 pand xmm1,XMMWORD[80+r12]
168 pand xmm2,XMMWORD[96+r12]
169 movdqa XMMWORD[352+r10],xmm3
170 pand xmm3,XMMWORD[112+r12]
171 por xmm0,xmm2
172 por xmm1,xmm3
173 movdqa xmm4,XMMWORD[((-128))+r12]
174 movdqa xmm5,XMMWORD[((-112))+r12]
175 movdqa xmm2,XMMWORD[((-96))+r12]
176 pand xmm4,XMMWORD[112+r10]
177 movdqa xmm3,XMMWORD[((-80))+r12]
178 pand xmm5,XMMWORD[128+r10]
179 por xmm0,xmm4
180 pand xmm2,XMMWORD[144+r10]
181 por xmm1,xmm5
182 pand xmm3,XMMWORD[160+r10]
183 por xmm0,xmm2
184 por xmm1,xmm3
185 movdqa xmm4,XMMWORD[((-64))+r12]
186 movdqa xmm5,XMMWORD[((-48))+r12]
187 movdqa xmm2,XMMWORD[((-32))+r12]
188 pand xmm4,XMMWORD[176+r10]
189 movdqa xmm3,XMMWORD[((-16))+r12]
190 pand xmm5,XMMWORD[192+r10]
191 por xmm0,xmm4
192 pand xmm2,XMMWORD[208+r10]
193 por xmm1,xmm5
194 pand xmm3,XMMWORD[224+r10]
195 por xmm0,xmm2
196 por xmm1,xmm3
197 movdqa xmm4,XMMWORD[r12]
198 movdqa xmm5,XMMWORD[16+r12]
199 movdqa xmm2,XMMWORD[32+r12]
200 pand xmm4,XMMWORD[240+r10]
201 movdqa xmm3,XMMWORD[48+r12]
202 pand xmm5,XMMWORD[256+r10]
203 por xmm0,xmm4
204 pand xmm2,XMMWORD[272+r10]
205 por xmm1,xmm5
206 pand xmm3,XMMWORD[288+r10]
207 por xmm0,xmm2
208 por xmm1,xmm3
209 por xmm0,xmm1
210 pshufd xmm1,xmm0,0x4e
211 por xmm0,xmm1
212 lea r12,[256+r12]
213DB 102,72,15,126,195
214
215 mov r8,QWORD[r8]
216 mov rax,QWORD[rsi]
217
218 xor r14,r14
219 xor r15,r15
220
221 mov rbp,r8
222 mul rbx
223 mov r10,rax
224 mov rax,QWORD[rcx]
225
226 imul rbp,r10
227 mov r11,rdx
228
229 mul rbp
230 add r10,rax
231 mov rax,QWORD[8+rsi]
232 adc rdx,0
233 mov r13,rdx
234
235 lea r15,[1+r15]
236 jmp NEAR $L$1st_enter
237
238ALIGN 16
239$L$1st:
240 add r13,rax
241 mov rax,QWORD[r15*8+rsi]
242 adc rdx,0
243 add r13,r11
244 mov r11,r10
245 adc rdx,0
246 mov QWORD[((-16))+r15*8+rsp],r13
247 mov r13,rdx
248
249$L$1st_enter:
250 mul rbx
251 add r11,rax
252 mov rax,QWORD[r15*8+rcx]
253 adc rdx,0
254 lea r15,[1+r15]
255 mov r10,rdx
256
257 mul rbp
258 cmp r15,r9
259 jne NEAR $L$1st
260
261
262 add r13,rax
263 adc rdx,0
264 add r13,r11
265 adc rdx,0
266 mov QWORD[((-16))+r9*8+rsp],r13
267 mov r13,rdx
268 mov r11,r10
269
270 xor rdx,rdx
271 add r13,r11
272 adc rdx,0
273 mov QWORD[((-8))+r9*8+rsp],r13
274 mov QWORD[r9*8+rsp],rdx
275
276 lea r14,[1+r14]
277 jmp NEAR $L$outer
278ALIGN 16
279$L$outer:
280 lea rdx,[((24+128))+r9*8+rsp]
281 and rdx,-16
282 pxor xmm4,xmm4
283 pxor xmm5,xmm5
284 movdqa xmm0,XMMWORD[((-128))+r12]
285 movdqa xmm1,XMMWORD[((-112))+r12]
286 movdqa xmm2,XMMWORD[((-96))+r12]
287 movdqa xmm3,XMMWORD[((-80))+r12]
288 pand xmm0,XMMWORD[((-128))+rdx]
289 pand xmm1,XMMWORD[((-112))+rdx]
290 por xmm4,xmm0
291 pand xmm2,XMMWORD[((-96))+rdx]
292 por xmm5,xmm1
293 pand xmm3,XMMWORD[((-80))+rdx]
294 por xmm4,xmm2
295 por xmm5,xmm3
296 movdqa xmm0,XMMWORD[((-64))+r12]
297 movdqa xmm1,XMMWORD[((-48))+r12]
298 movdqa xmm2,XMMWORD[((-32))+r12]
299 movdqa xmm3,XMMWORD[((-16))+r12]
300 pand xmm0,XMMWORD[((-64))+rdx]
301 pand xmm1,XMMWORD[((-48))+rdx]
302 por xmm4,xmm0
303 pand xmm2,XMMWORD[((-32))+rdx]
304 por xmm5,xmm1
305 pand xmm3,XMMWORD[((-16))+rdx]
306 por xmm4,xmm2
307 por xmm5,xmm3
308 movdqa xmm0,XMMWORD[r12]
309 movdqa xmm1,XMMWORD[16+r12]
310 movdqa xmm2,XMMWORD[32+r12]
311 movdqa xmm3,XMMWORD[48+r12]
312 pand xmm0,XMMWORD[rdx]
313 pand xmm1,XMMWORD[16+rdx]
314 por xmm4,xmm0
315 pand xmm2,XMMWORD[32+rdx]
316 por xmm5,xmm1
317 pand xmm3,XMMWORD[48+rdx]
318 por xmm4,xmm2
319 por xmm5,xmm3
320 movdqa xmm0,XMMWORD[64+r12]
321 movdqa xmm1,XMMWORD[80+r12]
322 movdqa xmm2,XMMWORD[96+r12]
323 movdqa xmm3,XMMWORD[112+r12]
324 pand xmm0,XMMWORD[64+rdx]
325 pand xmm1,XMMWORD[80+rdx]
326 por xmm4,xmm0
327 pand xmm2,XMMWORD[96+rdx]
328 por xmm5,xmm1
329 pand xmm3,XMMWORD[112+rdx]
330 por xmm4,xmm2
331 por xmm5,xmm3
332 por xmm4,xmm5
333 pshufd xmm0,xmm4,0x4e
334 por xmm0,xmm4
335 lea r12,[256+r12]
336
337 mov rax,QWORD[rsi]
338DB 102,72,15,126,195
339
340 xor r15,r15
341 mov rbp,r8
342 mov r10,QWORD[rsp]
343
344 mul rbx
345 add r10,rax
346 mov rax,QWORD[rcx]
347 adc rdx,0
348
349 imul rbp,r10
350 mov r11,rdx
351
352 mul rbp
353 add r10,rax
354 mov rax,QWORD[8+rsi]
355 adc rdx,0
356 mov r10,QWORD[8+rsp]
357 mov r13,rdx
358
359 lea r15,[1+r15]
360 jmp NEAR $L$inner_enter
361
362ALIGN 16
363$L$inner:
364 add r13,rax
365 mov rax,QWORD[r15*8+rsi]
366 adc rdx,0
367 add r13,r10
368 mov r10,QWORD[r15*8+rsp]
369 adc rdx,0
370 mov QWORD[((-16))+r15*8+rsp],r13
371 mov r13,rdx
372
373$L$inner_enter:
374 mul rbx
375 add r11,rax
376 mov rax,QWORD[r15*8+rcx]
377 adc rdx,0
378 add r10,r11
379 mov r11,rdx
380 adc r11,0
381 lea r15,[1+r15]
382
383 mul rbp
384 cmp r15,r9
385 jne NEAR $L$inner
386
387 add r13,rax
388 adc rdx,0
389 add r13,r10
390 mov r10,QWORD[r9*8+rsp]
391 adc rdx,0
392 mov QWORD[((-16))+r9*8+rsp],r13
393 mov r13,rdx
394
395 xor rdx,rdx
396 add r13,r11
397 adc rdx,0
398 add r13,r10
399 adc rdx,0
400 mov QWORD[((-8))+r9*8+rsp],r13
401 mov QWORD[r9*8+rsp],rdx
402
403 lea r14,[1+r14]
404 cmp r14,r9
405 jb NEAR $L$outer
406
407 xor r14,r14
408 mov rax,QWORD[rsp]
409 lea rsi,[rsp]
410 mov r15,r9
411 jmp NEAR $L$sub
412ALIGN 16
413$L$sub: sbb rax,QWORD[r14*8+rcx]
414 mov QWORD[r14*8+rdi],rax
415 mov rax,QWORD[8+r14*8+rsi]
416 lea r14,[1+r14]
417 dec r15
418 jnz NEAR $L$sub
419
420 sbb rax,0
421 mov rbx,-1
422 xor rbx,rax
423 xor r14,r14
424 mov r15,r9
425
426$L$copy:
427 mov rcx,QWORD[r14*8+rdi]
428 mov rdx,QWORD[r14*8+rsp]
429 and rcx,rbx
430 and rdx,rax
431 mov QWORD[r14*8+rsp],r14
432 or rdx,rcx
433 mov QWORD[r14*8+rdi],rdx
434 lea r14,[1+r14]
435 sub r15,1
436 jnz NEAR $L$copy
437
438 mov rsi,QWORD[8+r9*8+rsp]
439
440 mov rax,1
441
442 mov r15,QWORD[((-48))+rsi]
443
444 mov r14,QWORD[((-40))+rsi]
445
446 mov r13,QWORD[((-32))+rsi]
447
448 mov r12,QWORD[((-24))+rsi]
449
450 mov rbp,QWORD[((-16))+rsi]
451
452 mov rbx,QWORD[((-8))+rsi]
453
454 lea rsp,[rsi]
455
456$L$mul_epilogue:
457 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
458 mov rsi,QWORD[16+rsp]
459 DB 0F3h,0C3h ;repret
460
461$L$SEH_end_bn_mul_mont_gather5:
462
463ALIGN 32
464bn_mul4x_mont_gather5:
465 mov QWORD[8+rsp],rdi ;WIN64 prologue
466 mov QWORD[16+rsp],rsi
467 mov rax,rsp
468$L$SEH_begin_bn_mul4x_mont_gather5:
469 mov rdi,rcx
470 mov rsi,rdx
471 mov rdx,r8
472 mov rcx,r9
473 mov r8,QWORD[40+rsp]
474 mov r9,QWORD[48+rsp]
475
476
477
478DB 0x67
479 mov rax,rsp
480
481$L$mul4x_enter:
482 push rbx
483
484 push rbp
485
486 push r12
487
488 push r13
489
490 push r14
491
492 push r15
493
494$L$mul4x_prologue:
495
496DB 0x67
497 shl r9d,3
498 lea r10,[r9*2+r9]
499 neg r9
500
501
502
503
504
505
506
507
508
509
510 lea r11,[((-320))+r9*2+rsp]
511 mov rbp,rsp
512 sub r11,rdi
513 and r11,4095
514 cmp r10,r11
515 jb NEAR $L$mul4xsp_alt
516 sub rbp,r11
517 lea rbp,[((-320))+r9*2+rbp]
518 jmp NEAR $L$mul4xsp_done
519
520ALIGN 32
521$L$mul4xsp_alt:
522 lea r10,[((4096-320))+r9*2]
523 lea rbp,[((-320))+r9*2+rbp]
524 sub r11,r10
525 mov r10,0
526 cmovc r11,r10
527 sub rbp,r11
528$L$mul4xsp_done:
529 and rbp,-64
530 mov r11,rsp
531 sub r11,rbp
532 and r11,-4096
533 lea rsp,[rbp*1+r11]
534 mov r10,QWORD[rsp]
535 cmp rsp,rbp
536 ja NEAR $L$mul4x_page_walk
537 jmp NEAR $L$mul4x_page_walk_done
538
539$L$mul4x_page_walk:
540 lea rsp,[((-4096))+rsp]
541 mov r10,QWORD[rsp]
542 cmp rsp,rbp
543 ja NEAR $L$mul4x_page_walk
544$L$mul4x_page_walk_done:
545
546 neg r9
547
548 mov QWORD[40+rsp],rax
549
550$L$mul4x_body:
551
552 call mul4x_internal
553
554 mov rsi,QWORD[40+rsp]
555
556 mov rax,1
557
558 mov r15,QWORD[((-48))+rsi]
559
560 mov r14,QWORD[((-40))+rsi]
561
562 mov r13,QWORD[((-32))+rsi]
563
564 mov r12,QWORD[((-24))+rsi]
565
566 mov rbp,QWORD[((-16))+rsi]
567
568 mov rbx,QWORD[((-8))+rsi]
569
570 lea rsp,[rsi]
571
572$L$mul4x_epilogue:
573 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
574 mov rsi,QWORD[16+rsp]
575 DB 0F3h,0C3h ;repret
576
577$L$SEH_end_bn_mul4x_mont_gather5:
578
579
580ALIGN 32
581mul4x_internal:
582
583 shl r9,5
584 movd xmm5,DWORD[56+rax]
585 lea rax,[$L$inc]
586 lea r13,[128+r9*1+rdx]
587 shr r9,5
588 movdqa xmm0,XMMWORD[rax]
589 movdqa xmm1,XMMWORD[16+rax]
590 lea r10,[((88-112))+r9*1+rsp]
591 lea r12,[128+rdx]
592
593 pshufd xmm5,xmm5,0
594 movdqa xmm4,xmm1
595DB 0x67,0x67
596 movdqa xmm2,xmm1
597 paddd xmm1,xmm0
598 pcmpeqd xmm0,xmm5
599DB 0x67
600 movdqa xmm3,xmm4
601 paddd xmm2,xmm1
602 pcmpeqd xmm1,xmm5
603 movdqa XMMWORD[112+r10],xmm0
604 movdqa xmm0,xmm4
605
606 paddd xmm3,xmm2
607 pcmpeqd xmm2,xmm5
608 movdqa XMMWORD[128+r10],xmm1
609 movdqa xmm1,xmm4
610
611 paddd xmm0,xmm3
612 pcmpeqd xmm3,xmm5
613 movdqa XMMWORD[144+r10],xmm2
614 movdqa xmm2,xmm4
615
616 paddd xmm1,xmm0
617 pcmpeqd xmm0,xmm5
618 movdqa XMMWORD[160+r10],xmm3
619 movdqa xmm3,xmm4
620 paddd xmm2,xmm1
621 pcmpeqd xmm1,xmm5
622 movdqa XMMWORD[176+r10],xmm0
623 movdqa xmm0,xmm4
624
625 paddd xmm3,xmm2
626 pcmpeqd xmm2,xmm5
627 movdqa XMMWORD[192+r10],xmm1
628 movdqa xmm1,xmm4
629
630 paddd xmm0,xmm3
631 pcmpeqd xmm3,xmm5
632 movdqa XMMWORD[208+r10],xmm2
633 movdqa xmm2,xmm4
634
635 paddd xmm1,xmm0
636 pcmpeqd xmm0,xmm5
637 movdqa XMMWORD[224+r10],xmm3
638 movdqa xmm3,xmm4
639 paddd xmm2,xmm1
640 pcmpeqd xmm1,xmm5
641 movdqa XMMWORD[240+r10],xmm0
642 movdqa xmm0,xmm4
643
644 paddd xmm3,xmm2
645 pcmpeqd xmm2,xmm5
646 movdqa XMMWORD[256+r10],xmm1
647 movdqa xmm1,xmm4
648
649 paddd xmm0,xmm3
650 pcmpeqd xmm3,xmm5
651 movdqa XMMWORD[272+r10],xmm2
652 movdqa xmm2,xmm4
653
654 paddd xmm1,xmm0
655 pcmpeqd xmm0,xmm5
656 movdqa XMMWORD[288+r10],xmm3
657 movdqa xmm3,xmm4
658 paddd xmm2,xmm1
659 pcmpeqd xmm1,xmm5
660 movdqa XMMWORD[304+r10],xmm0
661
662 paddd xmm3,xmm2
663DB 0x67
664 pcmpeqd xmm2,xmm5
665 movdqa XMMWORD[320+r10],xmm1
666
667 pcmpeqd xmm3,xmm5
668 movdqa XMMWORD[336+r10],xmm2
669 pand xmm0,XMMWORD[64+r12]
670
671 pand xmm1,XMMWORD[80+r12]
672 pand xmm2,XMMWORD[96+r12]
673 movdqa XMMWORD[352+r10],xmm3
674 pand xmm3,XMMWORD[112+r12]
675 por xmm0,xmm2
676 por xmm1,xmm3
677 movdqa xmm4,XMMWORD[((-128))+r12]
678 movdqa xmm5,XMMWORD[((-112))+r12]
679 movdqa xmm2,XMMWORD[((-96))+r12]
680 pand xmm4,XMMWORD[112+r10]
681 movdqa xmm3,XMMWORD[((-80))+r12]
682 pand xmm5,XMMWORD[128+r10]
683 por xmm0,xmm4
684 pand xmm2,XMMWORD[144+r10]
685 por xmm1,xmm5
686 pand xmm3,XMMWORD[160+r10]
687 por xmm0,xmm2
688 por xmm1,xmm3
689 movdqa xmm4,XMMWORD[((-64))+r12]
690 movdqa xmm5,XMMWORD[((-48))+r12]
691 movdqa xmm2,XMMWORD[((-32))+r12]
692 pand xmm4,XMMWORD[176+r10]
693 movdqa xmm3,XMMWORD[((-16))+r12]
694 pand xmm5,XMMWORD[192+r10]
695 por xmm0,xmm4
696 pand xmm2,XMMWORD[208+r10]
697 por xmm1,xmm5
698 pand xmm3,XMMWORD[224+r10]
699 por xmm0,xmm2
700 por xmm1,xmm3
701 movdqa xmm4,XMMWORD[r12]
702 movdqa xmm5,XMMWORD[16+r12]
703 movdqa xmm2,XMMWORD[32+r12]
704 pand xmm4,XMMWORD[240+r10]
705 movdqa xmm3,XMMWORD[48+r12]
706 pand xmm5,XMMWORD[256+r10]
707 por xmm0,xmm4
708 pand xmm2,XMMWORD[272+r10]
709 por xmm1,xmm5
710 pand xmm3,XMMWORD[288+r10]
711 por xmm0,xmm2
712 por xmm1,xmm3
713 por xmm0,xmm1
714 pshufd xmm1,xmm0,0x4e
715 por xmm0,xmm1
716 lea r12,[256+r12]
717DB 102,72,15,126,195
718
719 mov QWORD[((16+8))+rsp],r13
720 mov QWORD[((56+8))+rsp],rdi
721
722 mov r8,QWORD[r8]
723 mov rax,QWORD[rsi]
724 lea rsi,[r9*1+rsi]
725 neg r9
726
727 mov rbp,r8
728 mul rbx
729 mov r10,rax
730 mov rax,QWORD[rcx]
731
732 imul rbp,r10
733 lea r14,[((64+8))+rsp]
734 mov r11,rdx
735
736 mul rbp
737 add r10,rax
738 mov rax,QWORD[8+r9*1+rsi]
739 adc rdx,0
740 mov rdi,rdx
741
742 mul rbx
743 add r11,rax
744 mov rax,QWORD[8+rcx]
745 adc rdx,0
746 mov r10,rdx
747
748 mul rbp
749 add rdi,rax
750 mov rax,QWORD[16+r9*1+rsi]
751 adc rdx,0
752 add rdi,r11
753 lea r15,[32+r9]
754 lea rcx,[32+rcx]
755 adc rdx,0
756 mov QWORD[r14],rdi
757 mov r13,rdx
758 jmp NEAR $L$1st4x
759
760ALIGN 32
761$L$1st4x:
762 mul rbx
763 add r10,rax
764 mov rax,QWORD[((-16))+rcx]
765 lea r14,[32+r14]
766 adc rdx,0
767 mov r11,rdx
768
769 mul rbp
770 add r13,rax
771 mov rax,QWORD[((-8))+r15*1+rsi]
772 adc rdx,0
773 add r13,r10
774 adc rdx,0
775 mov QWORD[((-24))+r14],r13
776 mov rdi,rdx
777
778 mul rbx
779 add r11,rax
780 mov rax,QWORD[((-8))+rcx]
781 adc rdx,0
782 mov r10,rdx
783
784 mul rbp
785 add rdi,rax
786 mov rax,QWORD[r15*1+rsi]
787 adc rdx,0
788 add rdi,r11
789 adc rdx,0
790 mov QWORD[((-16))+r14],rdi
791 mov r13,rdx
792
793 mul rbx
794 add r10,rax
795 mov rax,QWORD[rcx]
796 adc rdx,0
797 mov r11,rdx
798
799 mul rbp
800 add r13,rax
801 mov rax,QWORD[8+r15*1+rsi]
802 adc rdx,0
803 add r13,r10
804 adc rdx,0
805 mov QWORD[((-8))+r14],r13
806 mov rdi,rdx
807
808 mul rbx
809 add r11,rax
810 mov rax,QWORD[8+rcx]
811 adc rdx,0
812 mov r10,rdx
813
814 mul rbp
815 add rdi,rax
816 mov rax,QWORD[16+r15*1+rsi]
817 adc rdx,0
818 add rdi,r11
819 lea rcx,[32+rcx]
820 adc rdx,0
821 mov QWORD[r14],rdi
822 mov r13,rdx
823
824 add r15,32
825 jnz NEAR $L$1st4x
826
827 mul rbx
828 add r10,rax
829 mov rax,QWORD[((-16))+rcx]
830 lea r14,[32+r14]
831 adc rdx,0
832 mov r11,rdx
833
834 mul rbp
835 add r13,rax
836 mov rax,QWORD[((-8))+rsi]
837 adc rdx,0
838 add r13,r10
839 adc rdx,0
840 mov QWORD[((-24))+r14],r13
841 mov rdi,rdx
842
843 mul rbx
844 add r11,rax
845 mov rax,QWORD[((-8))+rcx]
846 adc rdx,0
847 mov r10,rdx
848
849 mul rbp
850 add rdi,rax
851 mov rax,QWORD[r9*1+rsi]
852 adc rdx,0
853 add rdi,r11
854 adc rdx,0
855 mov QWORD[((-16))+r14],rdi
856 mov r13,rdx
857
858 lea rcx,[r9*1+rcx]
859
860 xor rdi,rdi
861 add r13,r10
862 adc rdi,0
863 mov QWORD[((-8))+r14],r13
864
865 jmp NEAR $L$outer4x
866
867ALIGN 32
868$L$outer4x:
869 lea rdx,[((16+128))+r14]
870 pxor xmm4,xmm4
871 pxor xmm5,xmm5
872 movdqa xmm0,XMMWORD[((-128))+r12]
873 movdqa xmm1,XMMWORD[((-112))+r12]
874 movdqa xmm2,XMMWORD[((-96))+r12]
875 movdqa xmm3,XMMWORD[((-80))+r12]
876 pand xmm0,XMMWORD[((-128))+rdx]
877 pand xmm1,XMMWORD[((-112))+rdx]
878 por xmm4,xmm0
879 pand xmm2,XMMWORD[((-96))+rdx]
880 por xmm5,xmm1
881 pand xmm3,XMMWORD[((-80))+rdx]
882 por xmm4,xmm2
883 por xmm5,xmm3
884 movdqa xmm0,XMMWORD[((-64))+r12]
885 movdqa xmm1,XMMWORD[((-48))+r12]
886 movdqa xmm2,XMMWORD[((-32))+r12]
887 movdqa xmm3,XMMWORD[((-16))+r12]
888 pand xmm0,XMMWORD[((-64))+rdx]
889 pand xmm1,XMMWORD[((-48))+rdx]
890 por xmm4,xmm0
891 pand xmm2,XMMWORD[((-32))+rdx]
892 por xmm5,xmm1
893 pand xmm3,XMMWORD[((-16))+rdx]
894 por xmm4,xmm2
895 por xmm5,xmm3
896 movdqa xmm0,XMMWORD[r12]
897 movdqa xmm1,XMMWORD[16+r12]
898 movdqa xmm2,XMMWORD[32+r12]
899 movdqa xmm3,XMMWORD[48+r12]
900 pand xmm0,XMMWORD[rdx]
901 pand xmm1,XMMWORD[16+rdx]
902 por xmm4,xmm0
903 pand xmm2,XMMWORD[32+rdx]
904 por xmm5,xmm1
905 pand xmm3,XMMWORD[48+rdx]
906 por xmm4,xmm2
907 por xmm5,xmm3
908 movdqa xmm0,XMMWORD[64+r12]
909 movdqa xmm1,XMMWORD[80+r12]
910 movdqa xmm2,XMMWORD[96+r12]
911 movdqa xmm3,XMMWORD[112+r12]
912 pand xmm0,XMMWORD[64+rdx]
913 pand xmm1,XMMWORD[80+rdx]
914 por xmm4,xmm0
915 pand xmm2,XMMWORD[96+rdx]
916 por xmm5,xmm1
917 pand xmm3,XMMWORD[112+rdx]
918 por xmm4,xmm2
919 por xmm5,xmm3
920 por xmm4,xmm5
921 pshufd xmm0,xmm4,0x4e
922 por xmm0,xmm4
923 lea r12,[256+r12]
924DB 102,72,15,126,195
925
926 mov r10,QWORD[r9*1+r14]
927 mov rbp,r8
928 mul rbx
929 add r10,rax
930 mov rax,QWORD[rcx]
931 adc rdx,0
932
933 imul rbp,r10
934 mov r11,rdx
935 mov QWORD[r14],rdi
936
937 lea r14,[r9*1+r14]
938
939 mul rbp
940 add r10,rax
941 mov rax,QWORD[8+r9*1+rsi]
942 adc rdx,0
943 mov rdi,rdx
944
945 mul rbx
946 add r11,rax
947 mov rax,QWORD[8+rcx]
948 adc rdx,0
949 add r11,QWORD[8+r14]
950 adc rdx,0
951 mov r10,rdx
952
953 mul rbp
954 add rdi,rax
955 mov rax,QWORD[16+r9*1+rsi]
956 adc rdx,0
957 add rdi,r11
958 lea r15,[32+r9]
959 lea rcx,[32+rcx]
960 adc rdx,0
961 mov r13,rdx
962 jmp NEAR $L$inner4x
963
964ALIGN 32
965$L$inner4x:
966 mul rbx
967 add r10,rax
968 mov rax,QWORD[((-16))+rcx]
969 adc rdx,0
970 add r10,QWORD[16+r14]
971 lea r14,[32+r14]
972 adc rdx,0
973 mov r11,rdx
974
975 mul rbp
976 add r13,rax
977 mov rax,QWORD[((-8))+r15*1+rsi]
978 adc rdx,0
979 add r13,r10
980 adc rdx,0
981 mov QWORD[((-32))+r14],rdi
982 mov rdi,rdx
983
984 mul rbx
985 add r11,rax
986 mov rax,QWORD[((-8))+rcx]
987 adc rdx,0
988 add r11,QWORD[((-8))+r14]
989 adc rdx,0
990 mov r10,rdx
991
992 mul rbp
993 add rdi,rax
994 mov rax,QWORD[r15*1+rsi]
995 adc rdx,0
996 add rdi,r11
997 adc rdx,0
998 mov QWORD[((-24))+r14],r13
999 mov r13,rdx
1000
1001 mul rbx
1002 add r10,rax
1003 mov rax,QWORD[rcx]
1004 adc rdx,0
1005 add r10,QWORD[r14]
1006 adc rdx,0
1007 mov r11,rdx
1008
1009 mul rbp
1010 add r13,rax
1011 mov rax,QWORD[8+r15*1+rsi]
1012 adc rdx,0
1013 add r13,r10
1014 adc rdx,0
1015 mov QWORD[((-16))+r14],rdi
1016 mov rdi,rdx
1017
1018 mul rbx
1019 add r11,rax
1020 mov rax,QWORD[8+rcx]
1021 adc rdx,0
1022 add r11,QWORD[8+r14]
1023 adc rdx,0
1024 mov r10,rdx
1025
1026 mul rbp
1027 add rdi,rax
1028 mov rax,QWORD[16+r15*1+rsi]
1029 adc rdx,0
1030 add rdi,r11
1031 lea rcx,[32+rcx]
1032 adc rdx,0
1033 mov QWORD[((-8))+r14],r13
1034 mov r13,rdx
1035
1036 add r15,32
1037 jnz NEAR $L$inner4x
1038
1039 mul rbx
1040 add r10,rax
1041 mov rax,QWORD[((-16))+rcx]
1042 adc rdx,0
1043 add r10,QWORD[16+r14]
1044 lea r14,[32+r14]
1045 adc rdx,0
1046 mov r11,rdx
1047
1048 mul rbp
1049 add r13,rax
1050 mov rax,QWORD[((-8))+rsi]
1051 adc rdx,0
1052 add r13,r10
1053 adc rdx,0
1054 mov QWORD[((-32))+r14],rdi
1055 mov rdi,rdx
1056
1057 mul rbx
1058 add r11,rax
1059 mov rax,rbp
1060 mov rbp,QWORD[((-8))+rcx]
1061 adc rdx,0
1062 add r11,QWORD[((-8))+r14]
1063 adc rdx,0
1064 mov r10,rdx
1065
1066 mul rbp
1067 add rdi,rax
1068 mov rax,QWORD[r9*1+rsi]
1069 adc rdx,0
1070 add rdi,r11
1071 adc rdx,0
1072 mov QWORD[((-24))+r14],r13
1073 mov r13,rdx
1074
1075 mov QWORD[((-16))+r14],rdi
1076 lea rcx,[r9*1+rcx]
1077
1078 xor rdi,rdi
1079 add r13,r10
1080 adc rdi,0
1081 add r13,QWORD[r14]
1082 adc rdi,0
1083 mov QWORD[((-8))+r14],r13
1084
1085 cmp r12,QWORD[((16+8))+rsp]
1086 jb NEAR $L$outer4x
1087 xor rax,rax
1088 sub rbp,r13
1089 adc r15,r15
1090 or rdi,r15
1091 sub rax,rdi
1092 lea rbx,[r9*1+r14]
1093 mov r12,QWORD[rcx]
1094 lea rbp,[rcx]
1095 mov rcx,r9
1096 sar rcx,3+2
1097 mov rdi,QWORD[((56+8))+rsp]
1098 dec r12
1099 xor r10,r10
1100 mov r13,QWORD[8+rbp]
1101 mov r14,QWORD[16+rbp]
1102 mov r15,QWORD[24+rbp]
1103 jmp NEAR $L$sqr4x_sub_entry
1104
1105
1106global bn_power5
1107
1108ALIGN 32
1109bn_power5:
1110 mov QWORD[8+rsp],rdi ;WIN64 prologue
1111 mov QWORD[16+rsp],rsi
1112 mov rax,rsp
1113$L$SEH_begin_bn_power5:
1114 mov rdi,rcx
1115 mov rsi,rdx
1116 mov rdx,r8
1117 mov rcx,r9
1118 mov r8,QWORD[40+rsp]
1119 mov r9,QWORD[48+rsp]
1120
1121
1122
1123 mov rax,rsp
1124
1125 push rbx
1126
1127 push rbp
1128
1129 push r12
1130
1131 push r13
1132
1133 push r14
1134
1135 push r15
1136
1137$L$power5_prologue:
1138
1139 shl r9d,3
1140 lea r10d,[r9*2+r9]
1141 neg r9
1142 mov r8,QWORD[r8]
1143
1144
1145
1146
1147
1148
1149
1150
1151 lea r11,[((-320))+r9*2+rsp]
1152 mov rbp,rsp
1153 sub r11,rdi
1154 and r11,4095
1155 cmp r10,r11
1156 jb NEAR $L$pwr_sp_alt
1157 sub rbp,r11
1158 lea rbp,[((-320))+r9*2+rbp]
1159 jmp NEAR $L$pwr_sp_done
1160
1161ALIGN 32
1162$L$pwr_sp_alt:
1163 lea r10,[((4096-320))+r9*2]
1164 lea rbp,[((-320))+r9*2+rbp]
1165 sub r11,r10
1166 mov r10,0
1167 cmovc r11,r10
1168 sub rbp,r11
1169$L$pwr_sp_done:
1170 and rbp,-64
1171 mov r11,rsp
1172 sub r11,rbp
1173 and r11,-4096
1174 lea rsp,[rbp*1+r11]
1175 mov r10,QWORD[rsp]
1176 cmp rsp,rbp
1177 ja NEAR $L$pwr_page_walk
1178 jmp NEAR $L$pwr_page_walk_done
1179
1180$L$pwr_page_walk:
1181 lea rsp,[((-4096))+rsp]
1182 mov r10,QWORD[rsp]
1183 cmp rsp,rbp
1184 ja NEAR $L$pwr_page_walk
1185$L$pwr_page_walk_done:
1186
1187 mov r10,r9
1188 neg r9
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199 mov QWORD[32+rsp],r8
1200 mov QWORD[40+rsp],rax
1201
1202$L$power5_body:
1203DB 102,72,15,110,207
1204DB 102,72,15,110,209
1205DB 102,73,15,110,218
1206DB 102,72,15,110,226
1207
1208 call __bn_sqr8x_internal
1209 call __bn_post4x_internal
1210 call __bn_sqr8x_internal
1211 call __bn_post4x_internal
1212 call __bn_sqr8x_internal
1213 call __bn_post4x_internal
1214 call __bn_sqr8x_internal
1215 call __bn_post4x_internal
1216 call __bn_sqr8x_internal
1217 call __bn_post4x_internal
1218
1219DB 102,72,15,126,209
1220DB 102,72,15,126,226
1221 mov rdi,rsi
1222 mov rax,QWORD[40+rsp]
1223 lea r8,[32+rsp]
1224
1225 call mul4x_internal
1226
1227 mov rsi,QWORD[40+rsp]
1228
1229 mov rax,1
1230 mov r15,QWORD[((-48))+rsi]
1231
1232 mov r14,QWORD[((-40))+rsi]
1233
1234 mov r13,QWORD[((-32))+rsi]
1235
1236 mov r12,QWORD[((-24))+rsi]
1237
1238 mov rbp,QWORD[((-16))+rsi]
1239
1240 mov rbx,QWORD[((-8))+rsi]
1241
1242 lea rsp,[rsi]
1243
1244$L$power5_epilogue:
1245 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1246 mov rsi,QWORD[16+rsp]
1247 DB 0F3h,0C3h ;repret
1248
1249$L$SEH_end_bn_power5:
1250
1251global bn_sqr8x_internal
1252
1253
1254ALIGN 32
1255bn_sqr8x_internal:
1256__bn_sqr8x_internal:
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331 lea rbp,[32+r10]
1332 lea rsi,[r9*1+rsi]
1333
1334 mov rcx,r9
1335
1336
1337 mov r14,QWORD[((-32))+rbp*1+rsi]
1338 lea rdi,[((48+8))+r9*2+rsp]
1339 mov rax,QWORD[((-24))+rbp*1+rsi]
1340 lea rdi,[((-32))+rbp*1+rdi]
1341 mov rbx,QWORD[((-16))+rbp*1+rsi]
1342 mov r15,rax
1343
1344 mul r14
1345 mov r10,rax
1346 mov rax,rbx
1347 mov r11,rdx
1348 mov QWORD[((-24))+rbp*1+rdi],r10
1349
1350 mul r14
1351 add r11,rax
1352 mov rax,rbx
1353 adc rdx,0
1354 mov QWORD[((-16))+rbp*1+rdi],r11
1355 mov r10,rdx
1356
1357
1358 mov rbx,QWORD[((-8))+rbp*1+rsi]
1359 mul r15
1360 mov r12,rax
1361 mov rax,rbx
1362 mov r13,rdx
1363
1364 lea rcx,[rbp]
1365 mul r14
1366 add r10,rax
1367 mov rax,rbx
1368 mov r11,rdx
1369 adc r11,0
1370 add r10,r12
1371 adc r11,0
1372 mov QWORD[((-8))+rcx*1+rdi],r10
1373 jmp NEAR $L$sqr4x_1st
1374
1375ALIGN 32
1376$L$sqr4x_1st:
1377 mov rbx,QWORD[rcx*1+rsi]
1378 mul r15
1379 add r13,rax
1380 mov rax,rbx
1381 mov r12,rdx
1382 adc r12,0
1383
1384 mul r14
1385 add r11,rax
1386 mov rax,rbx
1387 mov rbx,QWORD[8+rcx*1+rsi]
1388 mov r10,rdx
1389 adc r10,0
1390 add r11,r13
1391 adc r10,0
1392
1393
1394 mul r15
1395 add r12,rax
1396 mov rax,rbx
1397 mov QWORD[rcx*1+rdi],r11
1398 mov r13,rdx
1399 adc r13,0
1400
1401 mul r14
1402 add r10,rax
1403 mov rax,rbx
1404 mov rbx,QWORD[16+rcx*1+rsi]
1405 mov r11,rdx
1406 adc r11,0
1407 add r10,r12
1408 adc r11,0
1409
1410 mul r15
1411 add r13,rax
1412 mov rax,rbx
1413 mov QWORD[8+rcx*1+rdi],r10
1414 mov r12,rdx
1415 adc r12,0
1416
1417 mul r14
1418 add r11,rax
1419 mov rax,rbx
1420 mov rbx,QWORD[24+rcx*1+rsi]
1421 mov r10,rdx
1422 adc r10,0
1423 add r11,r13
1424 adc r10,0
1425
1426
1427 mul r15
1428 add r12,rax
1429 mov rax,rbx
1430 mov QWORD[16+rcx*1+rdi],r11
1431 mov r13,rdx
1432 adc r13,0
1433 lea rcx,[32+rcx]
1434
1435 mul r14
1436 add r10,rax
1437 mov rax,rbx
1438 mov r11,rdx
1439 adc r11,0
1440 add r10,r12
1441 adc r11,0
1442 mov QWORD[((-8))+rcx*1+rdi],r10
1443
1444 cmp rcx,0
1445 jne NEAR $L$sqr4x_1st
1446
1447 mul r15
1448 add r13,rax
1449 lea rbp,[16+rbp]
1450 adc rdx,0
1451 add r13,r11
1452 adc rdx,0
1453
1454 mov QWORD[rdi],r13
1455 mov r12,rdx
1456 mov QWORD[8+rdi],rdx
1457 jmp NEAR $L$sqr4x_outer
1458
1459ALIGN 32
1460$L$sqr4x_outer:
1461 mov r14,QWORD[((-32))+rbp*1+rsi]
1462 lea rdi,[((48+8))+r9*2+rsp]
1463 mov rax,QWORD[((-24))+rbp*1+rsi]
1464 lea rdi,[((-32))+rbp*1+rdi]
1465 mov rbx,QWORD[((-16))+rbp*1+rsi]
1466 mov r15,rax
1467
1468 mul r14
1469 mov r10,QWORD[((-24))+rbp*1+rdi]
1470 add r10,rax
1471 mov rax,rbx
1472 adc rdx,0
1473 mov QWORD[((-24))+rbp*1+rdi],r10
1474 mov r11,rdx
1475
1476 mul r14
1477 add r11,rax
1478 mov rax,rbx
1479 adc rdx,0
1480 add r11,QWORD[((-16))+rbp*1+rdi]
1481 mov r10,rdx
1482 adc r10,0
1483 mov QWORD[((-16))+rbp*1+rdi],r11
1484
1485 xor r12,r12
1486
1487 mov rbx,QWORD[((-8))+rbp*1+rsi]
1488 mul r15
1489 add r12,rax
1490 mov rax,rbx
1491 adc rdx,0
1492 add r12,QWORD[((-8))+rbp*1+rdi]
1493 mov r13,rdx
1494 adc r13,0
1495
1496 mul r14
1497 add r10,rax
1498 mov rax,rbx
1499 adc rdx,0
1500 add r10,r12
1501 mov r11,rdx
1502 adc r11,0
1503 mov QWORD[((-8))+rbp*1+rdi],r10
1504
1505 lea rcx,[rbp]
1506 jmp NEAR $L$sqr4x_inner
1507
1508ALIGN 32
1509$L$sqr4x_inner:
1510 mov rbx,QWORD[rcx*1+rsi]
1511 mul r15
1512 add r13,rax
1513 mov rax,rbx
1514 mov r12,rdx
1515 adc r12,0
1516 add r13,QWORD[rcx*1+rdi]
1517 adc r12,0
1518
1519DB 0x67
1520 mul r14
1521 add r11,rax
1522 mov rax,rbx
1523 mov rbx,QWORD[8+rcx*1+rsi]
1524 mov r10,rdx
1525 adc r10,0
1526 add r11,r13
1527 adc r10,0
1528
1529 mul r15
1530 add r12,rax
1531 mov QWORD[rcx*1+rdi],r11
1532 mov rax,rbx
1533 mov r13,rdx
1534 adc r13,0
1535 add r12,QWORD[8+rcx*1+rdi]
1536 lea rcx,[16+rcx]
1537 adc r13,0
1538
1539 mul r14
1540 add r10,rax
1541 mov rax,rbx
1542 adc rdx,0
1543 add r10,r12
1544 mov r11,rdx
1545 adc r11,0
1546 mov QWORD[((-8))+rcx*1+rdi],r10
1547
1548 cmp rcx,0
1549 jne NEAR $L$sqr4x_inner
1550
1551DB 0x67
1552 mul r15
1553 add r13,rax
1554 adc rdx,0
1555 add r13,r11
1556 adc rdx,0
1557
1558 mov QWORD[rdi],r13
1559 mov r12,rdx
1560 mov QWORD[8+rdi],rdx
1561
1562 add rbp,16
1563 jnz NEAR $L$sqr4x_outer
1564
1565
1566 mov r14,QWORD[((-32))+rsi]
1567 lea rdi,[((48+8))+r9*2+rsp]
1568 mov rax,QWORD[((-24))+rsi]
1569 lea rdi,[((-32))+rbp*1+rdi]
1570 mov rbx,QWORD[((-16))+rsi]
1571 mov r15,rax
1572
1573 mul r14
1574 add r10,rax
1575 mov rax,rbx
1576 mov r11,rdx
1577 adc r11,0
1578
1579 mul r14
1580 add r11,rax
1581 mov rax,rbx
1582 mov QWORD[((-24))+rdi],r10
1583 mov r10,rdx
1584 adc r10,0
1585 add r11,r13
1586 mov rbx,QWORD[((-8))+rsi]
1587 adc r10,0
1588
1589 mul r15
1590 add r12,rax
1591 mov rax,rbx
1592 mov QWORD[((-16))+rdi],r11
1593 mov r13,rdx
1594 adc r13,0
1595
1596 mul r14
1597 add r10,rax
1598 mov rax,rbx
1599 mov r11,rdx
1600 adc r11,0
1601 add r10,r12
1602 adc r11,0
1603 mov QWORD[((-8))+rdi],r10
1604
1605 mul r15
1606 add r13,rax
1607 mov rax,QWORD[((-16))+rsi]
1608 adc rdx,0
1609 add r13,r11
1610 adc rdx,0
1611
1612 mov QWORD[rdi],r13
1613 mov r12,rdx
1614 mov QWORD[8+rdi],rdx
1615
1616 mul rbx
1617 add rbp,16
1618 xor r14,r14
1619 sub rbp,r9
1620 xor r15,r15
1621
1622 add rax,r12
1623 adc rdx,0
1624 mov QWORD[8+rdi],rax
1625 mov QWORD[16+rdi],rdx
1626 mov QWORD[24+rdi],r15
1627
1628 mov rax,QWORD[((-16))+rbp*1+rsi]
1629 lea rdi,[((48+8))+rsp]
1630 xor r10,r10
1631 mov r11,QWORD[8+rdi]
1632
1633 lea r12,[r10*2+r14]
1634 shr r10,63
1635 lea r13,[r11*2+rcx]
1636 shr r11,63
1637 or r13,r10
1638 mov r10,QWORD[16+rdi]
1639 mov r14,r11
1640 mul rax
1641 neg r15
1642 mov r11,QWORD[24+rdi]
1643 adc r12,rax
1644 mov rax,QWORD[((-8))+rbp*1+rsi]
1645 mov QWORD[rdi],r12
1646 adc r13,rdx
1647
1648 lea rbx,[r10*2+r14]
1649 mov QWORD[8+rdi],r13
1650 sbb r15,r15
1651 shr r10,63
1652 lea r8,[r11*2+rcx]
1653 shr r11,63
1654 or r8,r10
1655 mov r10,QWORD[32+rdi]
1656 mov r14,r11
1657 mul rax
1658 neg r15
1659 mov r11,QWORD[40+rdi]
1660 adc rbx,rax
1661 mov rax,QWORD[rbp*1+rsi]
1662 mov QWORD[16+rdi],rbx
1663 adc r8,rdx
1664 lea rbp,[16+rbp]
1665 mov QWORD[24+rdi],r8
1666 sbb r15,r15
1667 lea rdi,[64+rdi]
1668 jmp NEAR $L$sqr4x_shift_n_add
1669
1670ALIGN 32
1671$L$sqr4x_shift_n_add:
1672 lea r12,[r10*2+r14]
1673 shr r10,63
1674 lea r13,[r11*2+rcx]
1675 shr r11,63
1676 or r13,r10
1677 mov r10,QWORD[((-16))+rdi]
1678 mov r14,r11
1679 mul rax
1680 neg r15
1681 mov r11,QWORD[((-8))+rdi]
1682 adc r12,rax
1683 mov rax,QWORD[((-8))+rbp*1+rsi]
1684 mov QWORD[((-32))+rdi],r12
1685 adc r13,rdx
1686
1687 lea rbx,[r10*2+r14]
1688 mov QWORD[((-24))+rdi],r13
1689 sbb r15,r15
1690 shr r10,63
1691 lea r8,[r11*2+rcx]
1692 shr r11,63
1693 or r8,r10
1694 mov r10,QWORD[rdi]
1695 mov r14,r11
1696 mul rax
1697 neg r15
1698 mov r11,QWORD[8+rdi]
1699 adc rbx,rax
1700 mov rax,QWORD[rbp*1+rsi]
1701 mov QWORD[((-16))+rdi],rbx
1702 adc r8,rdx
1703
1704 lea r12,[r10*2+r14]
1705 mov QWORD[((-8))+rdi],r8
1706 sbb r15,r15
1707 shr r10,63
1708 lea r13,[r11*2+rcx]
1709 shr r11,63
1710 or r13,r10
1711 mov r10,QWORD[16+rdi]
1712 mov r14,r11
1713 mul rax
1714 neg r15
1715 mov r11,QWORD[24+rdi]
1716 adc r12,rax
1717 mov rax,QWORD[8+rbp*1+rsi]
1718 mov QWORD[rdi],r12
1719 adc r13,rdx
1720
1721 lea rbx,[r10*2+r14]
1722 mov QWORD[8+rdi],r13
1723 sbb r15,r15
1724 shr r10,63
1725 lea r8,[r11*2+rcx]
1726 shr r11,63
1727 or r8,r10
1728 mov r10,QWORD[32+rdi]
1729 mov r14,r11
1730 mul rax
1731 neg r15
1732 mov r11,QWORD[40+rdi]
1733 adc rbx,rax
1734 mov rax,QWORD[16+rbp*1+rsi]
1735 mov QWORD[16+rdi],rbx
1736 adc r8,rdx
1737 mov QWORD[24+rdi],r8
1738 sbb r15,r15
1739 lea rdi,[64+rdi]
1740 add rbp,32
1741 jnz NEAR $L$sqr4x_shift_n_add
1742
1743 lea r12,[r10*2+r14]
1744DB 0x67
1745 shr r10,63
1746 lea r13,[r11*2+rcx]
1747 shr r11,63
1748 or r13,r10
1749 mov r10,QWORD[((-16))+rdi]
1750 mov r14,r11
1751 mul rax
1752 neg r15
1753 mov r11,QWORD[((-8))+rdi]
1754 adc r12,rax
1755 mov rax,QWORD[((-8))+rsi]
1756 mov QWORD[((-32))+rdi],r12
1757 adc r13,rdx
1758
1759 lea rbx,[r10*2+r14]
1760 mov QWORD[((-24))+rdi],r13
1761 sbb r15,r15
1762 shr r10,63
1763 lea r8,[r11*2+rcx]
1764 shr r11,63
1765 or r8,r10
1766 mul rax
1767 neg r15
1768 adc rbx,rax
1769 adc r8,rdx
1770 mov QWORD[((-16))+rdi],rbx
1771 mov QWORD[((-8))+rdi],r8
1772DB 102,72,15,126,213
1773__bn_sqr8x_reduction:
1774 xor rax,rax
1775 lea rcx,[rbp*1+r9]
1776 lea rdx,[((48+8))+r9*2+rsp]
1777 mov QWORD[((0+8))+rsp],rcx
1778 lea rdi,[((48+8))+r9*1+rsp]
1779 mov QWORD[((8+8))+rsp],rdx
1780 neg r9
1781 jmp NEAR $L$8x_reduction_loop
1782
1783ALIGN 32
1784$L$8x_reduction_loop:
1785 lea rdi,[r9*1+rdi]
1786DB 0x66
1787 mov rbx,QWORD[rdi]
1788 mov r9,QWORD[8+rdi]
1789 mov r10,QWORD[16+rdi]
1790 mov r11,QWORD[24+rdi]
1791 mov r12,QWORD[32+rdi]
1792 mov r13,QWORD[40+rdi]
1793 mov r14,QWORD[48+rdi]
1794 mov r15,QWORD[56+rdi]
1795 mov QWORD[rdx],rax
1796 lea rdi,[64+rdi]
1797
1798DB 0x67
1799 mov r8,rbx
1800 imul rbx,QWORD[((32+8))+rsp]
1801 mov rax,QWORD[rbp]
1802 mov ecx,8
1803 jmp NEAR $L$8x_reduce
1804
1805ALIGN 32
1806$L$8x_reduce:
1807 mul rbx
1808 mov rax,QWORD[8+rbp]
1809 neg r8
1810 mov r8,rdx
1811 adc r8,0
1812
1813 mul rbx
1814 add r9,rax
1815 mov rax,QWORD[16+rbp]
1816 adc rdx,0
1817 add r8,r9
1818 mov QWORD[((48-8+8))+rcx*8+rsp],rbx
1819 mov r9,rdx
1820 adc r9,0
1821
1822 mul rbx
1823 add r10,rax
1824 mov rax,QWORD[24+rbp]
1825 adc rdx,0
1826 add r9,r10
1827 mov rsi,QWORD[((32+8))+rsp]
1828 mov r10,rdx
1829 adc r10,0
1830
1831 mul rbx
1832 add r11,rax
1833 mov rax,QWORD[32+rbp]
1834 adc rdx,0
1835 imul rsi,r8
1836 add r10,r11
1837 mov r11,rdx
1838 adc r11,0
1839
1840 mul rbx
1841 add r12,rax
1842 mov rax,QWORD[40+rbp]
1843 adc rdx,0
1844 add r11,r12
1845 mov r12,rdx
1846 adc r12,0
1847
1848 mul rbx
1849 add r13,rax
1850 mov rax,QWORD[48+rbp]
1851 adc rdx,0
1852 add r12,r13
1853 mov r13,rdx
1854 adc r13,0
1855
1856 mul rbx
1857 add r14,rax
1858 mov rax,QWORD[56+rbp]
1859 adc rdx,0
1860 add r13,r14
1861 mov r14,rdx
1862 adc r14,0
1863
1864 mul rbx
1865 mov rbx,rsi
1866 add r15,rax
1867 mov rax,QWORD[rbp]
1868 adc rdx,0
1869 add r14,r15
1870 mov r15,rdx
1871 adc r15,0
1872
1873 dec ecx
1874 jnz NEAR $L$8x_reduce
1875
1876 lea rbp,[64+rbp]
1877 xor rax,rax
1878 mov rdx,QWORD[((8+8))+rsp]
1879 cmp rbp,QWORD[((0+8))+rsp]
1880 jae NEAR $L$8x_no_tail
1881
1882DB 0x66
1883 add r8,QWORD[rdi]
1884 adc r9,QWORD[8+rdi]
1885 adc r10,QWORD[16+rdi]
1886 adc r11,QWORD[24+rdi]
1887 adc r12,QWORD[32+rdi]
1888 adc r13,QWORD[40+rdi]
1889 adc r14,QWORD[48+rdi]
1890 adc r15,QWORD[56+rdi]
1891 sbb rsi,rsi
1892
1893 mov rbx,QWORD[((48+56+8))+rsp]
1894 mov ecx,8
1895 mov rax,QWORD[rbp]
1896 jmp NEAR $L$8x_tail
1897
1898ALIGN 32
1899$L$8x_tail:
1900 mul rbx
1901 add r8,rax
1902 mov rax,QWORD[8+rbp]
1903 mov QWORD[rdi],r8
1904 mov r8,rdx
1905 adc r8,0
1906
1907 mul rbx
1908 add r9,rax
1909 mov rax,QWORD[16+rbp]
1910 adc rdx,0
1911 add r8,r9
1912 lea rdi,[8+rdi]
1913 mov r9,rdx
1914 adc r9,0
1915
1916 mul rbx
1917 add r10,rax
1918 mov rax,QWORD[24+rbp]
1919 adc rdx,0
1920 add r9,r10
1921 mov r10,rdx
1922 adc r10,0
1923
1924 mul rbx
1925 add r11,rax
1926 mov rax,QWORD[32+rbp]
1927 adc rdx,0
1928 add r10,r11
1929 mov r11,rdx
1930 adc r11,0
1931
1932 mul rbx
1933 add r12,rax
1934 mov rax,QWORD[40+rbp]
1935 adc rdx,0
1936 add r11,r12
1937 mov r12,rdx
1938 adc r12,0
1939
1940 mul rbx
1941 add r13,rax
1942 mov rax,QWORD[48+rbp]
1943 adc rdx,0
1944 add r12,r13
1945 mov r13,rdx
1946 adc r13,0
1947
1948 mul rbx
1949 add r14,rax
1950 mov rax,QWORD[56+rbp]
1951 adc rdx,0
1952 add r13,r14
1953 mov r14,rdx
1954 adc r14,0
1955
1956 mul rbx
1957 mov rbx,QWORD[((48-16+8))+rcx*8+rsp]
1958 add r15,rax
1959 adc rdx,0
1960 add r14,r15
1961 mov rax,QWORD[rbp]
1962 mov r15,rdx
1963 adc r15,0
1964
1965 dec ecx
1966 jnz NEAR $L$8x_tail
1967
1968 lea rbp,[64+rbp]
1969 mov rdx,QWORD[((8+8))+rsp]
1970 cmp rbp,QWORD[((0+8))+rsp]
1971 jae NEAR $L$8x_tail_done
1972
1973 mov rbx,QWORD[((48+56+8))+rsp]
1974 neg rsi
1975 mov rax,QWORD[rbp]
1976 adc r8,QWORD[rdi]
1977 adc r9,QWORD[8+rdi]
1978 adc r10,QWORD[16+rdi]
1979 adc r11,QWORD[24+rdi]
1980 adc r12,QWORD[32+rdi]
1981 adc r13,QWORD[40+rdi]
1982 adc r14,QWORD[48+rdi]
1983 adc r15,QWORD[56+rdi]
1984 sbb rsi,rsi
1985
1986 mov ecx,8
1987 jmp NEAR $L$8x_tail
1988
1989ALIGN 32
1990$L$8x_tail_done:
1991 xor rax,rax
1992 add r8,QWORD[rdx]
1993 adc r9,0
1994 adc r10,0
1995 adc r11,0
1996 adc r12,0
1997 adc r13,0
1998 adc r14,0
1999 adc r15,0
2000 adc rax,0
2001
2002 neg rsi
2003$L$8x_no_tail:
2004 adc r8,QWORD[rdi]
2005 adc r9,QWORD[8+rdi]
2006 adc r10,QWORD[16+rdi]
2007 adc r11,QWORD[24+rdi]
2008 adc r12,QWORD[32+rdi]
2009 adc r13,QWORD[40+rdi]
2010 adc r14,QWORD[48+rdi]
2011 adc r15,QWORD[56+rdi]
2012 adc rax,0
2013 mov rcx,QWORD[((-8))+rbp]
2014 xor rsi,rsi
2015
2016DB 102,72,15,126,213
2017
2018 mov QWORD[rdi],r8
2019 mov QWORD[8+rdi],r9
2020DB 102,73,15,126,217
2021 mov QWORD[16+rdi],r10
2022 mov QWORD[24+rdi],r11
2023 mov QWORD[32+rdi],r12
2024 mov QWORD[40+rdi],r13
2025 mov QWORD[48+rdi],r14
2026 mov QWORD[56+rdi],r15
2027 lea rdi,[64+rdi]
2028
2029 cmp rdi,rdx
2030 jb NEAR $L$8x_reduction_loop
2031 DB 0F3h,0C3h ;repret
2032
2033
2034
2035ALIGN 32
2036__bn_post4x_internal:
2037
2038 mov r12,QWORD[rbp]
2039 lea rbx,[r9*1+rdi]
2040 mov rcx,r9
2041DB 102,72,15,126,207
2042 neg rax
2043DB 102,72,15,126,206
2044 sar rcx,3+2
2045 dec r12
2046 xor r10,r10
2047 mov r13,QWORD[8+rbp]
2048 mov r14,QWORD[16+rbp]
2049 mov r15,QWORD[24+rbp]
2050 jmp NEAR $L$sqr4x_sub_entry
2051
2052ALIGN 16
2053$L$sqr4x_sub:
2054 mov r12,QWORD[rbp]
2055 mov r13,QWORD[8+rbp]
2056 mov r14,QWORD[16+rbp]
2057 mov r15,QWORD[24+rbp]
2058$L$sqr4x_sub_entry:
2059 lea rbp,[32+rbp]
2060 not r12
2061 not r13
2062 not r14
2063 not r15
2064 and r12,rax
2065 and r13,rax
2066 and r14,rax
2067 and r15,rax
2068
2069 neg r10
2070 adc r12,QWORD[rbx]
2071 adc r13,QWORD[8+rbx]
2072 adc r14,QWORD[16+rbx]
2073 adc r15,QWORD[24+rbx]
2074 mov QWORD[rdi],r12
2075 lea rbx,[32+rbx]
2076 mov QWORD[8+rdi],r13
2077 sbb r10,r10
2078 mov QWORD[16+rdi],r14
2079 mov QWORD[24+rdi],r15
2080 lea rdi,[32+rdi]
2081
2082 inc rcx
2083 jnz NEAR $L$sqr4x_sub
2084
2085 mov r10,r9
2086 neg r9
2087 DB 0F3h,0C3h ;repret
2088
2089
2090global bn_get_bits5
2091
2092ALIGN 16
2093bn_get_bits5:
2094
2095 lea r10,[rcx]
2096 lea r11,[1+rcx]
2097 mov ecx,edx
2098 shr edx,4
2099 and ecx,15
2100 lea eax,[((-8))+rcx]
2101 cmp ecx,11
2102 cmova r10,r11
2103 cmova ecx,eax
2104 movzx eax,WORD[rdx*2+r10]
2105 shr eax,cl
2106 and eax,31
2107 DB 0F3h,0C3h ;repret
2108
2109
2110
2111global bn_scatter5
2112
2113ALIGN 16
2114bn_scatter5:
2115
2116 cmp edx,0
2117 jz NEAR $L$scatter_epilogue
2118 lea r8,[r9*8+r8]
2119$L$scatter:
2120 mov rax,QWORD[rcx]
2121 lea rcx,[8+rcx]
2122 mov QWORD[r8],rax
2123 lea r8,[256+r8]
2124 sub edx,1
2125 jnz NEAR $L$scatter
2126$L$scatter_epilogue:
2127 DB 0F3h,0C3h ;repret
2128
2129
2130
2131global bn_gather5
2132
2133ALIGN 32
2134bn_gather5:
2135$L$SEH_begin_bn_gather5:
2136
2137
2138DB 0x4c,0x8d,0x14,0x24
2139DB 0x48,0x81,0xec,0x08,0x01,0x00,0x00
2140 lea rax,[$L$inc]
2141 and rsp,-16
2142
2143 movd xmm5,r9d
2144 movdqa xmm0,XMMWORD[rax]
2145 movdqa xmm1,XMMWORD[16+rax]
2146 lea r11,[128+r8]
2147 lea rax,[128+rsp]
2148
2149 pshufd xmm5,xmm5,0
2150 movdqa xmm4,xmm1
2151 movdqa xmm2,xmm1
2152 paddd xmm1,xmm0
2153 pcmpeqd xmm0,xmm5
2154 movdqa xmm3,xmm4
2155
2156 paddd xmm2,xmm1
2157 pcmpeqd xmm1,xmm5
2158 movdqa XMMWORD[(-128)+rax],xmm0
2159 movdqa xmm0,xmm4
2160
2161 paddd xmm3,xmm2
2162 pcmpeqd xmm2,xmm5
2163 movdqa XMMWORD[(-112)+rax],xmm1
2164 movdqa xmm1,xmm4
2165
2166 paddd xmm0,xmm3
2167 pcmpeqd xmm3,xmm5
2168 movdqa XMMWORD[(-96)+rax],xmm2
2169 movdqa xmm2,xmm4
2170 paddd xmm1,xmm0
2171 pcmpeqd xmm0,xmm5
2172 movdqa XMMWORD[(-80)+rax],xmm3
2173 movdqa xmm3,xmm4
2174
2175 paddd xmm2,xmm1
2176 pcmpeqd xmm1,xmm5
2177 movdqa XMMWORD[(-64)+rax],xmm0
2178 movdqa xmm0,xmm4
2179
2180 paddd xmm3,xmm2
2181 pcmpeqd xmm2,xmm5
2182 movdqa XMMWORD[(-48)+rax],xmm1
2183 movdqa xmm1,xmm4
2184
2185 paddd xmm0,xmm3
2186 pcmpeqd xmm3,xmm5
2187 movdqa XMMWORD[(-32)+rax],xmm2
2188 movdqa xmm2,xmm4
2189 paddd xmm1,xmm0
2190 pcmpeqd xmm0,xmm5
2191 movdqa XMMWORD[(-16)+rax],xmm3
2192 movdqa xmm3,xmm4
2193
2194 paddd xmm2,xmm1
2195 pcmpeqd xmm1,xmm5
2196 movdqa XMMWORD[rax],xmm0
2197 movdqa xmm0,xmm4
2198
2199 paddd xmm3,xmm2
2200 pcmpeqd xmm2,xmm5
2201 movdqa XMMWORD[16+rax],xmm1
2202 movdqa xmm1,xmm4
2203
2204 paddd xmm0,xmm3
2205 pcmpeqd xmm3,xmm5
2206 movdqa XMMWORD[32+rax],xmm2
2207 movdqa xmm2,xmm4
2208 paddd xmm1,xmm0
2209 pcmpeqd xmm0,xmm5
2210 movdqa XMMWORD[48+rax],xmm3
2211 movdqa xmm3,xmm4
2212
2213 paddd xmm2,xmm1
2214 pcmpeqd xmm1,xmm5
2215 movdqa XMMWORD[64+rax],xmm0
2216 movdqa xmm0,xmm4
2217
2218 paddd xmm3,xmm2
2219 pcmpeqd xmm2,xmm5
2220 movdqa XMMWORD[80+rax],xmm1
2221 movdqa xmm1,xmm4
2222
2223 paddd xmm0,xmm3
2224 pcmpeqd xmm3,xmm5
2225 movdqa XMMWORD[96+rax],xmm2
2226 movdqa xmm2,xmm4
2227 movdqa XMMWORD[112+rax],xmm3
2228 jmp NEAR $L$gather
2229
2230ALIGN 32
2231$L$gather:
2232 pxor xmm4,xmm4
2233 pxor xmm5,xmm5
2234 movdqa xmm0,XMMWORD[((-128))+r11]
2235 movdqa xmm1,XMMWORD[((-112))+r11]
2236 movdqa xmm2,XMMWORD[((-96))+r11]
2237 pand xmm0,XMMWORD[((-128))+rax]
2238 movdqa xmm3,XMMWORD[((-80))+r11]
2239 pand xmm1,XMMWORD[((-112))+rax]
2240 por xmm4,xmm0
2241 pand xmm2,XMMWORD[((-96))+rax]
2242 por xmm5,xmm1
2243 pand xmm3,XMMWORD[((-80))+rax]
2244 por xmm4,xmm2
2245 por xmm5,xmm3
2246 movdqa xmm0,XMMWORD[((-64))+r11]
2247 movdqa xmm1,XMMWORD[((-48))+r11]
2248 movdqa xmm2,XMMWORD[((-32))+r11]
2249 pand xmm0,XMMWORD[((-64))+rax]
2250 movdqa xmm3,XMMWORD[((-16))+r11]
2251 pand xmm1,XMMWORD[((-48))+rax]
2252 por xmm4,xmm0
2253 pand xmm2,XMMWORD[((-32))+rax]
2254 por xmm5,xmm1
2255 pand xmm3,XMMWORD[((-16))+rax]
2256 por xmm4,xmm2
2257 por xmm5,xmm3
2258 movdqa xmm0,XMMWORD[r11]
2259 movdqa xmm1,XMMWORD[16+r11]
2260 movdqa xmm2,XMMWORD[32+r11]
2261 pand xmm0,XMMWORD[rax]
2262 movdqa xmm3,XMMWORD[48+r11]
2263 pand xmm1,XMMWORD[16+rax]
2264 por xmm4,xmm0
2265 pand xmm2,XMMWORD[32+rax]
2266 por xmm5,xmm1
2267 pand xmm3,XMMWORD[48+rax]
2268 por xmm4,xmm2
2269 por xmm5,xmm3
2270 movdqa xmm0,XMMWORD[64+r11]
2271 movdqa xmm1,XMMWORD[80+r11]
2272 movdqa xmm2,XMMWORD[96+r11]
2273 pand xmm0,XMMWORD[64+rax]
2274 movdqa xmm3,XMMWORD[112+r11]
2275 pand xmm1,XMMWORD[80+rax]
2276 por xmm4,xmm0
2277 pand xmm2,XMMWORD[96+rax]
2278 por xmm5,xmm1
2279 pand xmm3,XMMWORD[112+rax]
2280 por xmm4,xmm2
2281 por xmm5,xmm3
2282 por xmm4,xmm5
2283 lea r11,[256+r11]
2284 pshufd xmm0,xmm4,0x4e
2285 por xmm0,xmm4
2286 movq QWORD[rcx],xmm0
2287 lea rcx,[8+rcx]
2288 sub edx,1
2289 jnz NEAR $L$gather
2290
2291 lea rsp,[r10]
2292 DB 0F3h,0C3h ;repret
2293$L$SEH_end_bn_gather5:
2294
2295
2296ALIGN 64
2297$L$inc:
2298 DD 0,0,1,1
2299 DD 2,2,2,2
2300DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
2301DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115
2302DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111
2303DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79
2304DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111
2305DB 112,101,110,115,115,108,46,111,114,103,62,0
2306EXTERN __imp_RtlVirtualUnwind
2307
2308ALIGN 16
2309mul_handler:
2310 push rsi
2311 push rdi
2312 push rbx
2313 push rbp
2314 push r12
2315 push r13
2316 push r14
2317 push r15
2318 pushfq
2319 sub rsp,64
2320
2321 mov rax,QWORD[120+r8]
2322 mov rbx,QWORD[248+r8]
2323
2324 mov rsi,QWORD[8+r9]
2325 mov r11,QWORD[56+r9]
2326
2327 mov r10d,DWORD[r11]
2328 lea r10,[r10*1+rsi]
2329 cmp rbx,r10
2330 jb NEAR $L$common_seh_tail
2331
2332 mov r10d,DWORD[4+r11]
2333 lea r10,[r10*1+rsi]
2334 cmp rbx,r10
2335 jb NEAR $L$common_pop_regs
2336
2337 mov rax,QWORD[152+r8]
2338
2339 mov r10d,DWORD[8+r11]
2340 lea r10,[r10*1+rsi]
2341 cmp rbx,r10
2342 jae NEAR $L$common_seh_tail
2343
2344 lea r10,[$L$mul_epilogue]
2345 cmp rbx,r10
2346 ja NEAR $L$body_40
2347
2348 mov r10,QWORD[192+r8]
2349 mov rax,QWORD[8+r10*8+rax]
2350
2351 jmp NEAR $L$common_pop_regs
2352
2353$L$body_40:
2354 mov rax,QWORD[40+rax]
2355$L$common_pop_regs:
2356 mov rbx,QWORD[((-8))+rax]
2357 mov rbp,QWORD[((-16))+rax]
2358 mov r12,QWORD[((-24))+rax]
2359 mov r13,QWORD[((-32))+rax]
2360 mov r14,QWORD[((-40))+rax]
2361 mov r15,QWORD[((-48))+rax]
2362 mov QWORD[144+r8],rbx
2363 mov QWORD[160+r8],rbp
2364 mov QWORD[216+r8],r12
2365 mov QWORD[224+r8],r13
2366 mov QWORD[232+r8],r14
2367 mov QWORD[240+r8],r15
2368
2369$L$common_seh_tail:
2370 mov rdi,QWORD[8+rax]
2371 mov rsi,QWORD[16+rax]
2372 mov QWORD[152+r8],rax
2373 mov QWORD[168+r8],rsi
2374 mov QWORD[176+r8],rdi
2375
2376 mov rdi,QWORD[40+r9]
2377 mov rsi,r8
2378 mov ecx,154
2379 DD 0xa548f3fc
2380
2381 mov rsi,r9
2382 xor rcx,rcx
2383 mov rdx,QWORD[8+rsi]
2384 mov r8,QWORD[rsi]
2385 mov r9,QWORD[16+rsi]
2386 mov r10,QWORD[40+rsi]
2387 lea r11,[56+rsi]
2388 lea r12,[24+rsi]
2389 mov QWORD[32+rsp],r10
2390 mov QWORD[40+rsp],r11
2391 mov QWORD[48+rsp],r12
2392 mov QWORD[56+rsp],rcx
2393 call QWORD[__imp_RtlVirtualUnwind]
2394
2395 mov eax,1
2396 add rsp,64
2397 popfq
2398 pop r15
2399 pop r14
2400 pop r13
2401 pop r12
2402 pop rbp
2403 pop rbx
2404 pop rdi
2405 pop rsi
2406 DB 0F3h,0C3h ;repret
2407
2408
2409section .pdata rdata align=4
2410ALIGN 4
2411 DD $L$SEH_begin_bn_mul_mont_gather5 wrt ..imagebase
2412 DD $L$SEH_end_bn_mul_mont_gather5 wrt ..imagebase
2413 DD $L$SEH_info_bn_mul_mont_gather5 wrt ..imagebase
2414
2415 DD $L$SEH_begin_bn_mul4x_mont_gather5 wrt ..imagebase
2416 DD $L$SEH_end_bn_mul4x_mont_gather5 wrt ..imagebase
2417 DD $L$SEH_info_bn_mul4x_mont_gather5 wrt ..imagebase
2418
2419 DD $L$SEH_begin_bn_power5 wrt ..imagebase
2420 DD $L$SEH_end_bn_power5 wrt ..imagebase
2421 DD $L$SEH_info_bn_power5 wrt ..imagebase
2422 DD $L$SEH_begin_bn_gather5 wrt ..imagebase
2423 DD $L$SEH_end_bn_gather5 wrt ..imagebase
2424 DD $L$SEH_info_bn_gather5 wrt ..imagebase
2425
2426section .xdata rdata align=8
2427ALIGN 8
2428$L$SEH_info_bn_mul_mont_gather5:
2429DB 9,0,0,0
2430 DD mul_handler wrt ..imagebase
2431 DD $L$mul_body wrt ..imagebase,$L$mul_body wrt ..imagebase,$L$mul_epilogue wrt ..imagebase
2432ALIGN 8
2433$L$SEH_info_bn_mul4x_mont_gather5:
2434DB 9,0,0,0
2435 DD mul_handler wrt ..imagebase
2436 DD $L$mul4x_prologue wrt ..imagebase,$L$mul4x_body wrt ..imagebase,$L$mul4x_epilogue wrt ..imagebase
2437ALIGN 8
2438$L$SEH_info_bn_power5:
2439DB 9,0,0,0
2440 DD mul_handler wrt ..imagebase
2441 DD $L$power5_prologue wrt ..imagebase,$L$power5_body wrt ..imagebase,$L$power5_epilogue wrt ..imagebase
2442ALIGN 8
2443$L$SEH_info_bn_gather5:
2444DB 0x01,0x0b,0x03,0x0a
2445DB 0x0b,0x01,0x21,0x00
2446DB 0x04,0xa3,0x00,0x00
2447ALIGN 8
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette