libcrypto: Enable library to be loaded in non-executable stack
[dragonfly.git] / secure / lib / libcrypto / asm / modexp512-x86_64.s
1 .text   
2
3 .type   MULADD_128x512,@function
4 .align  16
5 MULADD_128x512:
6         movq    0(%rsi),%rax
7         mulq    %rbp
8         addq    %rax,%r8
9         adcq    $0,%rdx
10         movq    %r8,0(%rcx)
11         movq    %rdx,%rbx
12
13         movq    8(%rsi),%rax
14         mulq    %rbp
15         addq    %rax,%r9
16         adcq    $0,%rdx
17         addq    %rbx,%r9
18         adcq    $0,%rdx
19         movq    %rdx,%rbx
20
21         movq    16(%rsi),%rax
22         mulq    %rbp
23         addq    %rax,%r10
24         adcq    $0,%rdx
25         addq    %rbx,%r10
26         adcq    $0,%rdx
27         movq    %rdx,%rbx
28
29         movq    24(%rsi),%rax
30         mulq    %rbp
31         addq    %rax,%r11
32         adcq    $0,%rdx
33         addq    %rbx,%r11
34         adcq    $0,%rdx
35         movq    %rdx,%rbx
36
37         movq    32(%rsi),%rax
38         mulq    %rbp
39         addq    %rax,%r12
40         adcq    $0,%rdx
41         addq    %rbx,%r12
42         adcq    $0,%rdx
43         movq    %rdx,%rbx
44
45         movq    40(%rsi),%rax
46         mulq    %rbp
47         addq    %rax,%r13
48         adcq    $0,%rdx
49         addq    %rbx,%r13
50         adcq    $0,%rdx
51         movq    %rdx,%rbx
52
53         movq    48(%rsi),%rax
54         mulq    %rbp
55         addq    %rax,%r14
56         adcq    $0,%rdx
57         addq    %rbx,%r14
58         adcq    $0,%rdx
59         movq    %rdx,%rbx
60
61         movq    56(%rsi),%rax
62         mulq    %rbp
63         addq    %rax,%r15
64         adcq    $0,%rdx
65         addq    %rbx,%r15
66         adcq    $0,%rdx
67         movq    %rdx,%r8
68         movq    8(%rdi),%rbp
69         movq    0(%rsi),%rax
70         mulq    %rbp
71         addq    %rax,%r9
72         adcq    $0,%rdx
73         movq    %r9,8(%rcx)
74         movq    %rdx,%rbx
75
76         movq    8(%rsi),%rax
77         mulq    %rbp
78         addq    %rax,%r10
79         adcq    $0,%rdx
80         addq    %rbx,%r10
81         adcq    $0,%rdx
82         movq    %rdx,%rbx
83
84         movq    16(%rsi),%rax
85         mulq    %rbp
86         addq    %rax,%r11
87         adcq    $0,%rdx
88         addq    %rbx,%r11
89         adcq    $0,%rdx
90         movq    %rdx,%rbx
91
92         movq    24(%rsi),%rax
93         mulq    %rbp
94         addq    %rax,%r12
95         adcq    $0,%rdx
96         addq    %rbx,%r12
97         adcq    $0,%rdx
98         movq    %rdx,%rbx
99
100         movq    32(%rsi),%rax
101         mulq    %rbp
102         addq    %rax,%r13
103         adcq    $0,%rdx
104         addq    %rbx,%r13
105         adcq    $0,%rdx
106         movq    %rdx,%rbx
107
108         movq    40(%rsi),%rax
109         mulq    %rbp
110         addq    %rax,%r14
111         adcq    $0,%rdx
112         addq    %rbx,%r14
113         adcq    $0,%rdx
114         movq    %rdx,%rbx
115
116         movq    48(%rsi),%rax
117         mulq    %rbp
118         addq    %rax,%r15
119         adcq    $0,%rdx
120         addq    %rbx,%r15
121         adcq    $0,%rdx
122         movq    %rdx,%rbx
123
124         movq    56(%rsi),%rax
125         mulq    %rbp
126         addq    %rax,%r8
127         adcq    $0,%rdx
128         addq    %rbx,%r8
129         adcq    $0,%rdx
130         movq    %rdx,%r9
131         .byte   0xf3,0xc3
132 .size   MULADD_128x512,.-MULADD_128x512
133 .type   mont_reduce,@function
134 .align  16
135 mont_reduce:
136         leaq    192(%rsp),%rdi
137         movq    32(%rsp),%rsi
138         addq    $576,%rsi
139         leaq    520(%rsp),%rcx
140
141         movq    96(%rcx),%rbp
142         movq    0(%rsi),%rax
143         mulq    %rbp
144         movq    (%rcx),%r8
145         addq    %rax,%r8
146         adcq    $0,%rdx
147         movq    %r8,0(%rdi)
148         movq    %rdx,%rbx
149
150         movq    8(%rsi),%rax
151         mulq    %rbp
152         movq    8(%rcx),%r9
153         addq    %rax,%r9
154         adcq    $0,%rdx
155         addq    %rbx,%r9
156         adcq    $0,%rdx
157         movq    %rdx,%rbx
158
159         movq    16(%rsi),%rax
160         mulq    %rbp
161         movq    16(%rcx),%r10
162         addq    %rax,%r10
163         adcq    $0,%rdx
164         addq    %rbx,%r10
165         adcq    $0,%rdx
166         movq    %rdx,%rbx
167
168         movq    24(%rsi),%rax
169         mulq    %rbp
170         movq    24(%rcx),%r11
171         addq    %rax,%r11
172         adcq    $0,%rdx
173         addq    %rbx,%r11
174         adcq    $0,%rdx
175         movq    %rdx,%rbx
176
177         movq    32(%rsi),%rax
178         mulq    %rbp
179         movq    32(%rcx),%r12
180         addq    %rax,%r12
181         adcq    $0,%rdx
182         addq    %rbx,%r12
183         adcq    $0,%rdx
184         movq    %rdx,%rbx
185
186         movq    40(%rsi),%rax
187         mulq    %rbp
188         movq    40(%rcx),%r13
189         addq    %rax,%r13
190         adcq    $0,%rdx
191         addq    %rbx,%r13
192         adcq    $0,%rdx
193         movq    %rdx,%rbx
194
195         movq    48(%rsi),%rax
196         mulq    %rbp
197         movq    48(%rcx),%r14
198         addq    %rax,%r14
199         adcq    $0,%rdx
200         addq    %rbx,%r14
201         adcq    $0,%rdx
202         movq    %rdx,%rbx
203
204         movq    56(%rsi),%rax
205         mulq    %rbp
206         movq    56(%rcx),%r15
207         addq    %rax,%r15
208         adcq    $0,%rdx
209         addq    %rbx,%r15
210         adcq    $0,%rdx
211         movq    %rdx,%r8
212         movq    104(%rcx),%rbp
213         movq    0(%rsi),%rax
214         mulq    %rbp
215         addq    %rax,%r9
216         adcq    $0,%rdx
217         movq    %r9,8(%rdi)
218         movq    %rdx,%rbx
219
220         movq    8(%rsi),%rax
221         mulq    %rbp
222         addq    %rax,%r10
223         adcq    $0,%rdx
224         addq    %rbx,%r10
225         adcq    $0,%rdx
226         movq    %rdx,%rbx
227
228         movq    16(%rsi),%rax
229         mulq    %rbp
230         addq    %rax,%r11
231         adcq    $0,%rdx
232         addq    %rbx,%r11
233         adcq    $0,%rdx
234         movq    %rdx,%rbx
235
236         movq    24(%rsi),%rax
237         mulq    %rbp
238         addq    %rax,%r12
239         adcq    $0,%rdx
240         addq    %rbx,%r12
241         adcq    $0,%rdx
242         movq    %rdx,%rbx
243
244         movq    32(%rsi),%rax
245         mulq    %rbp
246         addq    %rax,%r13
247         adcq    $0,%rdx
248         addq    %rbx,%r13
249         adcq    $0,%rdx
250         movq    %rdx,%rbx
251
252         movq    40(%rsi),%rax
253         mulq    %rbp
254         addq    %rax,%r14
255         adcq    $0,%rdx
256         addq    %rbx,%r14
257         adcq    $0,%rdx
258         movq    %rdx,%rbx
259
260         movq    48(%rsi),%rax
261         mulq    %rbp
262         addq    %rax,%r15
263         adcq    $0,%rdx
264         addq    %rbx,%r15
265         adcq    $0,%rdx
266         movq    %rdx,%rbx
267
268         movq    56(%rsi),%rax
269         mulq    %rbp
270         addq    %rax,%r8
271         adcq    $0,%rdx
272         addq    %rbx,%r8
273         adcq    $0,%rdx
274         movq    %rdx,%r9
275         movq    112(%rcx),%rbp
276         movq    0(%rsi),%rax
277         mulq    %rbp
278         addq    %rax,%r10
279         adcq    $0,%rdx
280         movq    %r10,16(%rdi)
281         movq    %rdx,%rbx
282
283         movq    8(%rsi),%rax
284         mulq    %rbp
285         addq    %rax,%r11
286         adcq    $0,%rdx
287         addq    %rbx,%r11
288         adcq    $0,%rdx
289         movq    %rdx,%rbx
290
291         movq    16(%rsi),%rax
292         mulq    %rbp
293         addq    %rax,%r12
294         adcq    $0,%rdx
295         addq    %rbx,%r12
296         adcq    $0,%rdx
297         movq    %rdx,%rbx
298
299         movq    24(%rsi),%rax
300         mulq    %rbp
301         addq    %rax,%r13
302         adcq    $0,%rdx
303         addq    %rbx,%r13
304         adcq    $0,%rdx
305         movq    %rdx,%rbx
306
307         movq    32(%rsi),%rax
308         mulq    %rbp
309         addq    %rax,%r14
310         adcq    $0,%rdx
311         addq    %rbx,%r14
312         adcq    $0,%rdx
313         movq    %rdx,%rbx
314
315         movq    40(%rsi),%rax
316         mulq    %rbp
317         addq    %rax,%r15
318         adcq    $0,%rdx
319         addq    %rbx,%r15
320         adcq    $0,%rdx
321         movq    %rdx,%rbx
322
323         movq    48(%rsi),%rax
324         mulq    %rbp
325         addq    %rax,%r8
326         adcq    $0,%rdx
327         addq    %rbx,%r8
328         adcq    $0,%rdx
329         movq    %rdx,%rbx
330
331         movq    56(%rsi),%rax
332         mulq    %rbp
333         addq    %rax,%r9
334         adcq    $0,%rdx
335         addq    %rbx,%r9
336         adcq    $0,%rdx
337         movq    %rdx,%r10
338         movq    120(%rcx),%rbp
339         movq    0(%rsi),%rax
340         mulq    %rbp
341         addq    %rax,%r11
342         adcq    $0,%rdx
343         movq    %r11,24(%rdi)
344         movq    %rdx,%rbx
345
346         movq    8(%rsi),%rax
347         mulq    %rbp
348         addq    %rax,%r12
349         adcq    $0,%rdx
350         addq    %rbx,%r12
351         adcq    $0,%rdx
352         movq    %rdx,%rbx
353
354         movq    16(%rsi),%rax
355         mulq    %rbp
356         addq    %rax,%r13
357         adcq    $0,%rdx
358         addq    %rbx,%r13
359         adcq    $0,%rdx
360         movq    %rdx,%rbx
361
362         movq    24(%rsi),%rax
363         mulq    %rbp
364         addq    %rax,%r14
365         adcq    $0,%rdx
366         addq    %rbx,%r14
367         adcq    $0,%rdx
368         movq    %rdx,%rbx
369
370         movq    32(%rsi),%rax
371         mulq    %rbp
372         addq    %rax,%r15
373         adcq    $0,%rdx
374         addq    %rbx,%r15
375         adcq    $0,%rdx
376         movq    %rdx,%rbx
377
378         movq    40(%rsi),%rax
379         mulq    %rbp
380         addq    %rax,%r8
381         adcq    $0,%rdx
382         addq    %rbx,%r8
383         adcq    $0,%rdx
384         movq    %rdx,%rbx
385
386         movq    48(%rsi),%rax
387         mulq    %rbp
388         addq    %rax,%r9
389         adcq    $0,%rdx
390         addq    %rbx,%r9
391         adcq    $0,%rdx
392         movq    %rdx,%rbx
393
394         movq    56(%rsi),%rax
395         mulq    %rbp
396         addq    %rax,%r10
397         adcq    $0,%rdx
398         addq    %rbx,%r10
399         adcq    $0,%rdx
400         movq    %rdx,%r11
401         xorq    %rax,%rax
402
403         addq    64(%rcx),%r8
404         adcq    72(%rcx),%r9
405         adcq    80(%rcx),%r10
406         adcq    88(%rcx),%r11
407         adcq    $0,%rax
408
409
410
411
412         movq    %r8,64(%rdi)
413         movq    %r9,72(%rdi)
414         movq    %r10,%rbp
415         movq    %r11,88(%rdi)
416
417         movq    %rax,384(%rsp)
418
419         movq    0(%rdi),%r8
420         movq    8(%rdi),%r9
421         movq    16(%rdi),%r10
422         movq    24(%rdi),%r11
423
424
425
426
427
428
429
430
431         addq    $80,%rdi
432
433         addq    $64,%rsi
434         leaq    296(%rsp),%rcx
435
436         call    MULADD_128x512                  
437
438         movq    384(%rsp),%rax
439
440
441         addq    -16(%rdi),%r8
442         adcq    -8(%rdi),%r9
443         movq    %r8,64(%rcx)
444         movq    %r9,72(%rcx)
445
446         adcq    %rax,%rax
447         movq    %rax,384(%rsp)
448
449         leaq    192(%rsp),%rdi
450         addq    $64,%rsi
451
452
453
454
455
456         movq    (%rsi),%r8
457         movq    8(%rsi),%rbx
458
459         movq    (%rcx),%rax
460         mulq    %r8
461         movq    %rax,%rbp
462         movq    %rdx,%r9
463
464         movq    8(%rcx),%rax
465         mulq    %r8
466         addq    %rax,%r9
467
468         movq    (%rcx),%rax
469         mulq    %rbx
470         addq    %rax,%r9
471
472         movq    %r9,8(%rdi)
473
474
475         subq    $192,%rsi
476
477         movq    (%rcx),%r8
478         movq    8(%rcx),%r9
479
480         call    MULADD_128x512                  
481
482
483
484
485         movq    0(%rsi),%rax
486         movq    8(%rsi),%rbx
487         movq    16(%rsi),%rdi
488         movq    24(%rsi),%rdx
489
490
491         movq    384(%rsp),%rbp
492
493         addq    64(%rcx),%r8
494         adcq    72(%rcx),%r9
495
496
497         adcq    %rbp,%rbp
498
499
500
501         shlq    $3,%rbp
502         movq    32(%rsp),%rcx
503         addq    %rcx,%rbp
504
505
506         xorq    %rsi,%rsi
507
508         addq    0(%rbp),%r10
509         adcq    64(%rbp),%r11
510         adcq    128(%rbp),%r12
511         adcq    192(%rbp),%r13
512         adcq    256(%rbp),%r14
513         adcq    320(%rbp),%r15
514         adcq    384(%rbp),%r8
515         adcq    448(%rbp),%r9
516
517
518
519         sbbq    $0,%rsi
520
521
522         andq    %rsi,%rax
523         andq    %rsi,%rbx
524         andq    %rsi,%rdi
525         andq    %rsi,%rdx
526
527         movq    $1,%rbp
528         subq    %rax,%r10
529         sbbq    %rbx,%r11
530         sbbq    %rdi,%r12
531         sbbq    %rdx,%r13
532
533
534
535
536         sbbq    $0,%rbp
537
538
539
540         addq    $512,%rcx
541         movq    32(%rcx),%rax
542         movq    40(%rcx),%rbx
543         movq    48(%rcx),%rdi
544         movq    56(%rcx),%rdx
545
546
547
548         andq    %rsi,%rax
549         andq    %rsi,%rbx
550         andq    %rsi,%rdi
551         andq    %rsi,%rdx
552
553
554
555         subq    $1,%rbp
556
557         sbbq    %rax,%r14
558         sbbq    %rbx,%r15
559         sbbq    %rdi,%r8
560         sbbq    %rdx,%r9
561
562
563
564         movq    144(%rsp),%rsi
565         movq    %r10,0(%rsi)
566         movq    %r11,8(%rsi)
567         movq    %r12,16(%rsi)
568         movq    %r13,24(%rsi)
569         movq    %r14,32(%rsi)
570         movq    %r15,40(%rsi)
571         movq    %r8,48(%rsi)
572         movq    %r9,56(%rsi)
573
574         .byte   0xf3,0xc3
575 .size   mont_reduce,.-mont_reduce
576 .type   mont_mul_a3b,@function
577 .align  16
578 mont_mul_a3b:
579
580
581
582
583         movq    0(%rdi),%rbp
584
585         movq    %r10,%rax
586         mulq    %rbp
587         movq    %rax,520(%rsp)
588         movq    %rdx,%r10
589         movq    %r11,%rax
590         mulq    %rbp
591         addq    %rax,%r10
592         adcq    $0,%rdx
593         movq    %rdx,%r11
594         movq    %r12,%rax
595         mulq    %rbp
596         addq    %rax,%r11
597         adcq    $0,%rdx
598         movq    %rdx,%r12
599         movq    %r13,%rax
600         mulq    %rbp
601         addq    %rax,%r12
602         adcq    $0,%rdx
603         movq    %rdx,%r13
604         movq    %r14,%rax
605         mulq    %rbp
606         addq    %rax,%r13
607         adcq    $0,%rdx
608         movq    %rdx,%r14
609         movq    %r15,%rax
610         mulq    %rbp
611         addq    %rax,%r14
612         adcq    $0,%rdx
613         movq    %rdx,%r15
614         movq    %r8,%rax
615         mulq    %rbp
616         addq    %rax,%r15
617         adcq    $0,%rdx
618         movq    %rdx,%r8
619         movq    %r9,%rax
620         mulq    %rbp
621         addq    %rax,%r8
622         adcq    $0,%rdx
623         movq    %rdx,%r9
624         movq    8(%rdi),%rbp
625         movq    0(%rsi),%rax
626         mulq    %rbp
627         addq    %rax,%r10
628         adcq    $0,%rdx
629         movq    %r10,528(%rsp)
630         movq    %rdx,%rbx
631
632         movq    8(%rsi),%rax
633         mulq    %rbp
634         addq    %rax,%r11
635         adcq    $0,%rdx
636         addq    %rbx,%r11
637         adcq    $0,%rdx
638         movq    %rdx,%rbx
639
640         movq    16(%rsi),%rax
641         mulq    %rbp
642         addq    %rax,%r12
643         adcq    $0,%rdx
644         addq    %rbx,%r12
645         adcq    $0,%rdx
646         movq    %rdx,%rbx
647
648         movq    24(%rsi),%rax
649         mulq    %rbp
650         addq    %rax,%r13
651         adcq    $0,%rdx
652         addq    %rbx,%r13
653         adcq    $0,%rdx
654         movq    %rdx,%rbx
655
656         movq    32(%rsi),%rax
657         mulq    %rbp
658         addq    %rax,%r14
659         adcq    $0,%rdx
660         addq    %rbx,%r14
661         adcq    $0,%rdx
662         movq    %rdx,%rbx
663
664         movq    40(%rsi),%rax
665         mulq    %rbp
666         addq    %rax,%r15
667         adcq    $0,%rdx
668         addq    %rbx,%r15
669         adcq    $0,%rdx
670         movq    %rdx,%rbx
671
672         movq    48(%rsi),%rax
673         mulq    %rbp
674         addq    %rax,%r8
675         adcq    $0,%rdx
676         addq    %rbx,%r8
677         adcq    $0,%rdx
678         movq    %rdx,%rbx
679
680         movq    56(%rsi),%rax
681         mulq    %rbp
682         addq    %rax,%r9
683         adcq    $0,%rdx
684         addq    %rbx,%r9
685         adcq    $0,%rdx
686         movq    %rdx,%r10
687         movq    16(%rdi),%rbp
688         movq    0(%rsi),%rax
689         mulq    %rbp
690         addq    %rax,%r11
691         adcq    $0,%rdx
692         movq    %r11,536(%rsp)
693         movq    %rdx,%rbx
694
695         movq    8(%rsi),%rax
696         mulq    %rbp
697         addq    %rax,%r12
698         adcq    $0,%rdx
699         addq    %rbx,%r12
700         adcq    $0,%rdx
701         movq    %rdx,%rbx
702
703         movq    16(%rsi),%rax
704         mulq    %rbp
705         addq    %rax,%r13
706         adcq    $0,%rdx
707         addq    %rbx,%r13
708         adcq    $0,%rdx
709         movq    %rdx,%rbx
710
711         movq    24(%rsi),%rax
712         mulq    %rbp
713         addq    %rax,%r14
714         adcq    $0,%rdx
715         addq    %rbx,%r14
716         adcq    $0,%rdx
717         movq    %rdx,%rbx
718
719         movq    32(%rsi),%rax
720         mulq    %rbp
721         addq    %rax,%r15
722         adcq    $0,%rdx
723         addq    %rbx,%r15
724         adcq    $0,%rdx
725         movq    %rdx,%rbx
726
727         movq    40(%rsi),%rax
728         mulq    %rbp
729         addq    %rax,%r8
730         adcq    $0,%rdx
731         addq    %rbx,%r8
732         adcq    $0,%rdx
733         movq    %rdx,%rbx
734
735         movq    48(%rsi),%rax
736         mulq    %rbp
737         addq    %rax,%r9
738         adcq    $0,%rdx
739         addq    %rbx,%r9
740         adcq    $0,%rdx
741         movq    %rdx,%rbx
742
743         movq    56(%rsi),%rax
744         mulq    %rbp
745         addq    %rax,%r10
746         adcq    $0,%rdx
747         addq    %rbx,%r10
748         adcq    $0,%rdx
749         movq    %rdx,%r11
750         movq    24(%rdi),%rbp
751         movq    0(%rsi),%rax
752         mulq    %rbp
753         addq    %rax,%r12
754         adcq    $0,%rdx
755         movq    %r12,544(%rsp)
756         movq    %rdx,%rbx
757
758         movq    8(%rsi),%rax
759         mulq    %rbp
760         addq    %rax,%r13
761         adcq    $0,%rdx
762         addq    %rbx,%r13
763         adcq    $0,%rdx
764         movq    %rdx,%rbx
765
766         movq    16(%rsi),%rax
767         mulq    %rbp
768         addq    %rax,%r14
769         adcq    $0,%rdx
770         addq    %rbx,%r14
771         adcq    $0,%rdx
772         movq    %rdx,%rbx
773
774         movq    24(%rsi),%rax
775         mulq    %rbp
776         addq    %rax,%r15
777         adcq    $0,%rdx
778         addq    %rbx,%r15
779         adcq    $0,%rdx
780         movq    %rdx,%rbx
781
782         movq    32(%rsi),%rax
783         mulq    %rbp
784         addq    %rax,%r8
785         adcq    $0,%rdx
786         addq    %rbx,%r8
787         adcq    $0,%rdx
788         movq    %rdx,%rbx
789
790         movq    40(%rsi),%rax
791         mulq    %rbp
792         addq    %rax,%r9
793         adcq    $0,%rdx
794         addq    %rbx,%r9
795         adcq    $0,%rdx
796         movq    %rdx,%rbx
797
798         movq    48(%rsi),%rax
799         mulq    %rbp
800         addq    %rax,%r10
801         adcq    $0,%rdx
802         addq    %rbx,%r10
803         adcq    $0,%rdx
804         movq    %rdx,%rbx
805
806         movq    56(%rsi),%rax
807         mulq    %rbp
808         addq    %rax,%r11
809         adcq    $0,%rdx
810         addq    %rbx,%r11
811         adcq    $0,%rdx
812         movq    %rdx,%r12
813         movq    32(%rdi),%rbp
814         movq    0(%rsi),%rax
815         mulq    %rbp
816         addq    %rax,%r13
817         adcq    $0,%rdx
818         movq    %r13,552(%rsp)
819         movq    %rdx,%rbx
820
821         movq    8(%rsi),%rax
822         mulq    %rbp
823         addq    %rax,%r14
824         adcq    $0,%rdx
825         addq    %rbx,%r14
826         adcq    $0,%rdx
827         movq    %rdx,%rbx
828
829         movq    16(%rsi),%rax
830         mulq    %rbp
831         addq    %rax,%r15
832         adcq    $0,%rdx
833         addq    %rbx,%r15
834         adcq    $0,%rdx
835         movq    %rdx,%rbx
836
837         movq    24(%rsi),%rax
838         mulq    %rbp
839         addq    %rax,%r8
840         adcq    $0,%rdx
841         addq    %rbx,%r8
842         adcq    $0,%rdx
843         movq    %rdx,%rbx
844
845         movq    32(%rsi),%rax
846         mulq    %rbp
847         addq    %rax,%r9
848         adcq    $0,%rdx
849         addq    %rbx,%r9
850         adcq    $0,%rdx
851         movq    %rdx,%rbx
852
853         movq    40(%rsi),%rax
854         mulq    %rbp
855         addq    %rax,%r10
856         adcq    $0,%rdx
857         addq    %rbx,%r10
858         adcq    $0,%rdx
859         movq    %rdx,%rbx
860
861         movq    48(%rsi),%rax
862         mulq    %rbp
863         addq    %rax,%r11
864         adcq    $0,%rdx
865         addq    %rbx,%r11
866         adcq    $0,%rdx
867         movq    %rdx,%rbx
868
869         movq    56(%rsi),%rax
870         mulq    %rbp
871         addq    %rax,%r12
872         adcq    $0,%rdx
873         addq    %rbx,%r12
874         adcq    $0,%rdx
875         movq    %rdx,%r13
876         movq    40(%rdi),%rbp
877         movq    0(%rsi),%rax
878         mulq    %rbp
879         addq    %rax,%r14
880         adcq    $0,%rdx
881         movq    %r14,560(%rsp)
882         movq    %rdx,%rbx
883
884         movq    8(%rsi),%rax
885         mulq    %rbp
886         addq    %rax,%r15
887         adcq    $0,%rdx
888         addq    %rbx,%r15
889         adcq    $0,%rdx
890         movq    %rdx,%rbx
891
892         movq    16(%rsi),%rax
893         mulq    %rbp
894         addq    %rax,%r8
895         adcq    $0,%rdx
896         addq    %rbx,%r8
897         adcq    $0,%rdx
898         movq    %rdx,%rbx
899
900         movq    24(%rsi),%rax
901         mulq    %rbp
902         addq    %rax,%r9
903         adcq    $0,%rdx
904         addq    %rbx,%r9
905         adcq    $0,%rdx
906         movq    %rdx,%rbx
907
908         movq    32(%rsi),%rax
909         mulq    %rbp
910         addq    %rax,%r10
911         adcq    $0,%rdx
912         addq    %rbx,%r10
913         adcq    $0,%rdx
914         movq    %rdx,%rbx
915
916         movq    40(%rsi),%rax
917         mulq    %rbp
918         addq    %rax,%r11
919         adcq    $0,%rdx
920         addq    %rbx,%r11
921         adcq    $0,%rdx
922         movq    %rdx,%rbx
923
924         movq    48(%rsi),%rax
925         mulq    %rbp
926         addq    %rax,%r12
927         adcq    $0,%rdx
928         addq    %rbx,%r12
929         adcq    $0,%rdx
930         movq    %rdx,%rbx
931
932         movq    56(%rsi),%rax
933         mulq    %rbp
934         addq    %rax,%r13
935         adcq    $0,%rdx
936         addq    %rbx,%r13
937         adcq    $0,%rdx
938         movq    %rdx,%r14
939         movq    48(%rdi),%rbp
940         movq    0(%rsi),%rax
941         mulq    %rbp
942         addq    %rax,%r15
943         adcq    $0,%rdx
944         movq    %r15,568(%rsp)
945         movq    %rdx,%rbx
946
947         movq    8(%rsi),%rax
948         mulq    %rbp
949         addq    %rax,%r8
950         adcq    $0,%rdx
951         addq    %rbx,%r8
952         adcq    $0,%rdx
953         movq    %rdx,%rbx
954
955         movq    16(%rsi),%rax
956         mulq    %rbp
957         addq    %rax,%r9
958         adcq    $0,%rdx
959         addq    %rbx,%r9
960         adcq    $0,%rdx
961         movq    %rdx,%rbx
962
963         movq    24(%rsi),%rax
964         mulq    %rbp
965         addq    %rax,%r10
966         adcq    $0,%rdx
967         addq    %rbx,%r10
968         adcq    $0,%rdx
969         movq    %rdx,%rbx
970
971         movq    32(%rsi),%rax
972         mulq    %rbp
973         addq    %rax,%r11
974         adcq    $0,%rdx
975         addq    %rbx,%r11
976         adcq    $0,%rdx
977         movq    %rdx,%rbx
978
979         movq    40(%rsi),%rax
980         mulq    %rbp
981         addq    %rax,%r12
982         adcq    $0,%rdx
983         addq    %rbx,%r12
984         adcq    $0,%rdx
985         movq    %rdx,%rbx
986
987         movq    48(%rsi),%rax
988         mulq    %rbp
989         addq    %rax,%r13
990         adcq    $0,%rdx
991         addq    %rbx,%r13
992         adcq    $0,%rdx
993         movq    %rdx,%rbx
994
995         movq    56(%rsi),%rax
996         mulq    %rbp
997         addq    %rax,%r14
998         adcq    $0,%rdx
999         addq    %rbx,%r14
1000         adcq    $0,%rdx
1001         movq    %rdx,%r15
1002         movq    56(%rdi),%rbp
1003         movq    0(%rsi),%rax
1004         mulq    %rbp
1005         addq    %rax,%r8
1006         adcq    $0,%rdx
1007         movq    %r8,576(%rsp)
1008         movq    %rdx,%rbx
1009
1010         movq    8(%rsi),%rax
1011         mulq    %rbp
1012         addq    %rax,%r9
1013         adcq    $0,%rdx
1014         addq    %rbx,%r9
1015         adcq    $0,%rdx
1016         movq    %rdx,%rbx
1017
1018         movq    16(%rsi),%rax
1019         mulq    %rbp
1020         addq    %rax,%r10
1021         adcq    $0,%rdx
1022         addq    %rbx,%r10
1023         adcq    $0,%rdx
1024         movq    %rdx,%rbx
1025
1026         movq    24(%rsi),%rax
1027         mulq    %rbp
1028         addq    %rax,%r11
1029         adcq    $0,%rdx
1030         addq    %rbx,%r11
1031         adcq    $0,%rdx
1032         movq    %rdx,%rbx
1033
1034         movq    32(%rsi),%rax
1035         mulq    %rbp
1036         addq    %rax,%r12
1037         adcq    $0,%rdx
1038         addq    %rbx,%r12
1039         adcq    $0,%rdx
1040         movq    %rdx,%rbx
1041
1042         movq    40(%rsi),%rax
1043         mulq    %rbp
1044         addq    %rax,%r13
1045         adcq    $0,%rdx
1046         addq    %rbx,%r13
1047         adcq    $0,%rdx
1048         movq    %rdx,%rbx
1049
1050         movq    48(%rsi),%rax
1051         mulq    %rbp
1052         addq    %rax,%r14
1053         adcq    $0,%rdx
1054         addq    %rbx,%r14
1055         adcq    $0,%rdx
1056         movq    %rdx,%rbx
1057
1058         movq    56(%rsi),%rax
1059         mulq    %rbp
1060         addq    %rax,%r15
1061         adcq    $0,%rdx
1062         addq    %rbx,%r15
1063         adcq    $0,%rdx
1064         movq    %rdx,%r8
1065         movq    %r9,584(%rsp)
1066         movq    %r10,592(%rsp)
1067         movq    %r11,600(%rsp)
1068         movq    %r12,608(%rsp)
1069         movq    %r13,616(%rsp)
1070         movq    %r14,624(%rsp)
1071         movq    %r15,632(%rsp)
1072         movq    %r8,640(%rsp)
1073
1074
1075
1076
1077
1078         jmp     mont_reduce
1079
1080
1081 .size   mont_mul_a3b,.-mont_mul_a3b
1082 .type   sqr_reduce,@function
1083 .align  16
1084 sqr_reduce:
1085         movq    16(%rsp),%rcx
1086
1087
1088
1089         movq    %r10,%rbx
1090
1091         movq    %r11,%rax
1092         mulq    %rbx
1093         movq    %rax,528(%rsp)
1094         movq    %rdx,%r10
1095         movq    %r12,%rax
1096         mulq    %rbx
1097         addq    %rax,%r10
1098         adcq    $0,%rdx
1099         movq    %rdx,%r11
1100         movq    %r13,%rax
1101         mulq    %rbx
1102         addq    %rax,%r11
1103         adcq    $0,%rdx
1104         movq    %rdx,%r12
1105         movq    %r14,%rax
1106         mulq    %rbx
1107         addq    %rax,%r12
1108         adcq    $0,%rdx
1109         movq    %rdx,%r13
1110         movq    %r15,%rax
1111         mulq    %rbx
1112         addq    %rax,%r13
1113         adcq    $0,%rdx
1114         movq    %rdx,%r14
1115         movq    %r8,%rax
1116         mulq    %rbx
1117         addq    %rax,%r14
1118         adcq    $0,%rdx
1119         movq    %rdx,%r15
1120         movq    %r9,%rax
1121         mulq    %rbx
1122         addq    %rax,%r15
1123         adcq    $0,%rdx
1124         movq    %rdx,%rsi
1125
1126         movq    %r10,536(%rsp)
1127
1128
1129
1130
1131
1132         movq    8(%rcx),%rbx
1133
1134         movq    16(%rcx),%rax
1135         mulq    %rbx
1136         addq    %rax,%r11
1137         adcq    $0,%rdx
1138         movq    %r11,544(%rsp)
1139
1140         movq    %rdx,%r10
1141         movq    24(%rcx),%rax
1142         mulq    %rbx
1143         addq    %rax,%r12
1144         adcq    $0,%rdx
1145         addq    %r10,%r12
1146         adcq    $0,%rdx
1147         movq    %r12,552(%rsp)
1148
1149         movq    %rdx,%r10
1150         movq    32(%rcx),%rax
1151         mulq    %rbx
1152         addq    %rax,%r13
1153         adcq    $0,%rdx
1154         addq    %r10,%r13
1155         adcq    $0,%rdx
1156
1157         movq    %rdx,%r10
1158         movq    40(%rcx),%rax
1159         mulq    %rbx
1160         addq    %rax,%r14
1161         adcq    $0,%rdx
1162         addq    %r10,%r14
1163         adcq    $0,%rdx
1164
1165         movq    %rdx,%r10
1166         movq    %r8,%rax
1167         mulq    %rbx
1168         addq    %rax,%r15
1169         adcq    $0,%rdx
1170         addq    %r10,%r15
1171         adcq    $0,%rdx
1172
1173         movq    %rdx,%r10
1174         movq    %r9,%rax
1175         mulq    %rbx
1176         addq    %rax,%rsi
1177         adcq    $0,%rdx
1178         addq    %r10,%rsi
1179         adcq    $0,%rdx
1180
1181         movq    %rdx,%r11
1182
1183
1184
1185
1186         movq    16(%rcx),%rbx
1187
1188         movq    24(%rcx),%rax
1189         mulq    %rbx
1190         addq    %rax,%r13
1191         adcq    $0,%rdx
1192         movq    %r13,560(%rsp)
1193
1194         movq    %rdx,%r10
1195         movq    32(%rcx),%rax
1196         mulq    %rbx
1197         addq    %rax,%r14
1198         adcq    $0,%rdx
1199         addq    %r10,%r14
1200         adcq    $0,%rdx
1201         movq    %r14,568(%rsp)
1202
1203         movq    %rdx,%r10
1204         movq    40(%rcx),%rax
1205         mulq    %rbx
1206         addq    %rax,%r15
1207         adcq    $0,%rdx
1208         addq    %r10,%r15
1209         adcq    $0,%rdx
1210
1211         movq    %rdx,%r10
1212         movq    %r8,%rax
1213         mulq    %rbx
1214         addq    %rax,%rsi
1215         adcq    $0,%rdx
1216         addq    %r10,%rsi
1217         adcq    $0,%rdx
1218
1219         movq    %rdx,%r10
1220         movq    %r9,%rax
1221         mulq    %rbx
1222         addq    %rax,%r11
1223         adcq    $0,%rdx
1224         addq    %r10,%r11
1225         adcq    $0,%rdx
1226
1227         movq    %rdx,%r12
1228
1229
1230
1231
1232
1233         movq    24(%rcx),%rbx
1234
1235         movq    32(%rcx),%rax
1236         mulq    %rbx
1237         addq    %rax,%r15
1238         adcq    $0,%rdx
1239         movq    %r15,576(%rsp)
1240
1241         movq    %rdx,%r10
1242         movq    40(%rcx),%rax
1243         mulq    %rbx
1244         addq    %rax,%rsi
1245         adcq    $0,%rdx
1246         addq    %r10,%rsi
1247         adcq    $0,%rdx
1248         movq    %rsi,584(%rsp)
1249
1250         movq    %rdx,%r10
1251         movq    %r8,%rax
1252         mulq    %rbx
1253         addq    %rax,%r11
1254         adcq    $0,%rdx
1255         addq    %r10,%r11
1256         adcq    $0,%rdx
1257
1258         movq    %rdx,%r10
1259         movq    %r9,%rax
1260         mulq    %rbx
1261         addq    %rax,%r12
1262         adcq    $0,%rdx
1263         addq    %r10,%r12
1264         adcq    $0,%rdx
1265
1266         movq    %rdx,%r15
1267
1268
1269
1270
1271         movq    32(%rcx),%rbx
1272
1273         movq    40(%rcx),%rax
1274         mulq    %rbx
1275         addq    %rax,%r11
1276         adcq    $0,%rdx
1277         movq    %r11,592(%rsp)
1278
1279         movq    %rdx,%r10
1280         movq    %r8,%rax
1281         mulq    %rbx
1282         addq    %rax,%r12
1283         adcq    $0,%rdx
1284         addq    %r10,%r12
1285         adcq    $0,%rdx
1286         movq    %r12,600(%rsp)
1287
1288         movq    %rdx,%r10
1289         movq    %r9,%rax
1290         mulq    %rbx
1291         addq    %rax,%r15
1292         adcq    $0,%rdx
1293         addq    %r10,%r15
1294         adcq    $0,%rdx
1295
1296         movq    %rdx,%r11
1297
1298
1299
1300
1301         movq    40(%rcx),%rbx
1302
1303         movq    %r8,%rax
1304         mulq    %rbx
1305         addq    %rax,%r15
1306         adcq    $0,%rdx
1307         movq    %r15,608(%rsp)
1308
1309         movq    %rdx,%r10
1310         movq    %r9,%rax
1311         mulq    %rbx
1312         addq    %rax,%r11
1313         adcq    $0,%rdx
1314         addq    %r10,%r11
1315         adcq    $0,%rdx
1316         movq    %r11,616(%rsp)
1317
1318         movq    %rdx,%r12
1319
1320
1321
1322
1323         movq    %r8,%rbx
1324
1325         movq    %r9,%rax
1326         mulq    %rbx
1327         addq    %rax,%r12
1328         adcq    $0,%rdx
1329         movq    %r12,624(%rsp)
1330
1331         movq    %rdx,632(%rsp)
1332
1333
1334         movq    528(%rsp),%r10
1335         movq    536(%rsp),%r11
1336         movq    544(%rsp),%r12
1337         movq    552(%rsp),%r13
1338         movq    560(%rsp),%r14
1339         movq    568(%rsp),%r15
1340
1341         movq    24(%rcx),%rax
1342         mulq    %rax
1343         movq    %rax,%rdi
1344         movq    %rdx,%r8
1345
1346         addq    %r10,%r10
1347         adcq    %r11,%r11
1348         adcq    %r12,%r12
1349         adcq    %r13,%r13
1350         adcq    %r14,%r14
1351         adcq    %r15,%r15
1352         adcq    $0,%r8
1353
1354         movq    0(%rcx),%rax
1355         mulq    %rax
1356         movq    %rax,520(%rsp)
1357         movq    %rdx,%rbx
1358
1359         movq    8(%rcx),%rax
1360         mulq    %rax
1361
1362         addq    %rbx,%r10
1363         adcq    %rax,%r11
1364         adcq    $0,%rdx
1365
1366         movq    %rdx,%rbx
1367         movq    %r10,528(%rsp)
1368         movq    %r11,536(%rsp)
1369
1370         movq    16(%rcx),%rax
1371         mulq    %rax
1372
1373         addq    %rbx,%r12
1374         adcq    %rax,%r13
1375         adcq    $0,%rdx
1376
1377         movq    %rdx,%rbx
1378
1379         movq    %r12,544(%rsp)
1380         movq    %r13,552(%rsp)
1381
1382         xorq    %rbp,%rbp
1383         addq    %rbx,%r14
1384         adcq    %rdi,%r15
1385         adcq    $0,%rbp
1386
1387         movq    %r14,560(%rsp)
1388         movq    %r15,568(%rsp)
1389
1390
1391
1392
1393         movq    576(%rsp),%r10
1394         movq    584(%rsp),%r11
1395         movq    592(%rsp),%r12
1396         movq    600(%rsp),%r13
1397         movq    608(%rsp),%r14
1398         movq    616(%rsp),%r15
1399         movq    624(%rsp),%rdi
1400         movq    632(%rsp),%rsi
1401
1402         movq    %r9,%rax
1403         mulq    %rax
1404         movq    %rax,%r9
1405         movq    %rdx,%rbx
1406
1407         addq    %r10,%r10
1408         adcq    %r11,%r11
1409         adcq    %r12,%r12
1410         adcq    %r13,%r13
1411         adcq    %r14,%r14
1412         adcq    %r15,%r15
1413         adcq    %rdi,%rdi
1414         adcq    %rsi,%rsi
1415         adcq    $0,%rbx
1416
1417         addq    %rbp,%r10
1418
1419         movq    32(%rcx),%rax
1420         mulq    %rax
1421
1422         addq    %r8,%r10
1423         adcq    %rax,%r11
1424         adcq    $0,%rdx
1425
1426         movq    %rdx,%rbp
1427
1428         movq    %r10,576(%rsp)
1429         movq    %r11,584(%rsp)
1430
1431         movq    40(%rcx),%rax
1432         mulq    %rax
1433
1434         addq    %rbp,%r12
1435         adcq    %rax,%r13
1436         adcq    $0,%rdx
1437
1438         movq    %rdx,%rbp
1439
1440         movq    %r12,592(%rsp)
1441         movq    %r13,600(%rsp)
1442
1443         movq    48(%rcx),%rax
1444         mulq    %rax
1445
1446         addq    %rbp,%r14
1447         adcq    %rax,%r15
1448         adcq    $0,%rdx
1449
1450         movq    %r14,608(%rsp)
1451         movq    %r15,616(%rsp)
1452
1453         addq    %rdx,%rdi
1454         adcq    %r9,%rsi
1455         adcq    $0,%rbx
1456
1457         movq    %rdi,624(%rsp)
1458         movq    %rsi,632(%rsp)
1459         movq    %rbx,640(%rsp)
1460
1461         jmp     mont_reduce
1462
1463
1464 .size   sqr_reduce,.-sqr_reduce
1465 .globl  mod_exp_512
1466 .type   mod_exp_512,@function
1467 mod_exp_512:
1468         pushq   %rbp
1469         pushq   %rbx
1470         pushq   %r12
1471         pushq   %r13
1472         pushq   %r14
1473         pushq   %r15
1474
1475
1476         movq    %rsp,%r8
1477         subq    $2688,%rsp
1478         andq    $-64,%rsp
1479
1480
1481         movq    %r8,0(%rsp)
1482         movq    %rdi,8(%rsp)
1483         movq    %rsi,16(%rsp)
1484         movq    %rcx,24(%rsp)
1485 .Lbody:
1486
1487
1488
1489         pxor    %xmm4,%xmm4
1490         movdqu  0(%rsi),%xmm0
1491         movdqu  16(%rsi),%xmm1
1492         movdqu  32(%rsi),%xmm2
1493         movdqu  48(%rsi),%xmm3
1494         movdqa  %xmm4,512(%rsp)
1495         movdqa  %xmm4,528(%rsp)
1496         movdqa  %xmm4,608(%rsp)
1497         movdqa  %xmm4,624(%rsp)
1498         movdqa  %xmm0,544(%rsp)
1499         movdqa  %xmm1,560(%rsp)
1500         movdqa  %xmm2,576(%rsp)
1501         movdqa  %xmm3,592(%rsp)
1502
1503
1504         movdqu  0(%rdx),%xmm0
1505         movdqu  16(%rdx),%xmm1
1506         movdqu  32(%rdx),%xmm2
1507         movdqu  48(%rdx),%xmm3
1508
1509         leaq    384(%rsp),%rbx
1510         movq    %rbx,136(%rsp)
1511         call    mont_reduce
1512
1513
1514         leaq    448(%rsp),%rcx
1515         xorq    %rax,%rax
1516         movq    %rax,0(%rcx)
1517         movq    %rax,8(%rcx)
1518         movq    %rax,24(%rcx)
1519         movq    %rax,32(%rcx)
1520         movq    %rax,40(%rcx)
1521         movq    %rax,48(%rcx)
1522         movq    %rax,56(%rcx)
1523         movq    %rax,128(%rsp)
1524         movq    $1,16(%rcx)
1525
1526         leaq    640(%rsp),%rbp
1527         movq    %rcx,%rsi
1528         movq    %rbp,%rdi
1529         movq    $8,%rax
1530 loop_0:
1531         movq    (%rcx),%rbx
1532         movw    %bx,(%rdi)
1533         shrq    $16,%rbx
1534         movw    %bx,64(%rdi)
1535         shrq    $16,%rbx
1536         movw    %bx,128(%rdi)
1537         shrq    $16,%rbx
1538         movw    %bx,192(%rdi)
1539         leaq    8(%rcx),%rcx
1540         leaq    256(%rdi),%rdi
1541         decq    %rax
1542         jnz     loop_0
1543         movq    $31,%rax
1544         movq    %rax,32(%rsp)
1545         movq    %rbp,40(%rsp)
1546
1547         movq    %rsi,136(%rsp)
1548         movq    0(%rsi),%r10
1549         movq    8(%rsi),%r11
1550         movq    16(%rsi),%r12
1551         movq    24(%rsi),%r13
1552         movq    32(%rsi),%r14
1553         movq    40(%rsi),%r15
1554         movq    48(%rsi),%r8
1555         movq    56(%rsi),%r9
1556 init_loop:
1557         leaq    384(%rsp),%rdi
1558         call    mont_mul_a3b
1559         leaq    448(%rsp),%rsi
1560         movq    40(%rsp),%rbp
1561         addq    $2,%rbp
1562         movq    %rbp,40(%rsp)
1563         movq    %rsi,%rcx
1564         movq    $8,%rax
1565 loop_1:
1566         movq    (%rcx),%rbx
1567         movw    %bx,(%rbp)
1568         shrq    $16,%rbx
1569         movw    %bx,64(%rbp)
1570         shrq    $16,%rbx
1571         movw    %bx,128(%rbp)
1572         shrq    $16,%rbx
1573         movw    %bx,192(%rbp)
1574         leaq    8(%rcx),%rcx
1575         leaq    256(%rbp),%rbp
1576         decq    %rax
1577         jnz     loop_1
1578         movq    32(%rsp),%rax
1579         subq    $1,%rax
1580         movq    %rax,32(%rsp)
1581         jne     init_loop
1582
1583
1584
1585         movdqa  %xmm0,64(%rsp)
1586         movdqa  %xmm1,80(%rsp)
1587         movdqa  %xmm2,96(%rsp)
1588         movdqa  %xmm3,112(%rsp)
1589
1590
1591
1592
1593
1594         movl    126(%rsp),%eax
1595         movq    %rax,%rdx
1596         shrq    $11,%rax
1597         andl    $2047,%edx
1598         movl    %edx,126(%rsp)
1599         leaq    640(%rsp,%rax,2),%rsi
1600         movq    8(%rsp),%rdx
1601         movq    $4,%rbp
1602 loop_2:
1603         movzwq  192(%rsi),%rbx
1604         movzwq  448(%rsi),%rax
1605         shlq    $16,%rbx
1606         shlq    $16,%rax
1607         movw    128(%rsi),%bx
1608         movw    384(%rsi),%ax
1609         shlq    $16,%rbx
1610         shlq    $16,%rax
1611         movw    64(%rsi),%bx
1612         movw    320(%rsi),%ax
1613         shlq    $16,%rbx
1614         shlq    $16,%rax
1615         movw    0(%rsi),%bx
1616         movw    256(%rsi),%ax
1617         movq    %rbx,0(%rdx)
1618         movq    %rax,8(%rdx)
1619         leaq    512(%rsi),%rsi
1620         leaq    16(%rdx),%rdx
1621         subq    $1,%rbp
1622         jnz     loop_2
1623         movq    $505,48(%rsp)
1624
1625         movq    8(%rsp),%rcx
1626         movq    %rcx,136(%rsp)
1627         movq    0(%rcx),%r10
1628         movq    8(%rcx),%r11
1629         movq    16(%rcx),%r12
1630         movq    24(%rcx),%r13
1631         movq    32(%rcx),%r14
1632         movq    40(%rcx),%r15
1633         movq    48(%rcx),%r8
1634         movq    56(%rcx),%r9
1635         jmp     sqr_2
1636
1637 main_loop_a3b:
1638         call    sqr_reduce
1639         call    sqr_reduce
1640         call    sqr_reduce
1641 sqr_2:
1642         call    sqr_reduce
1643         call    sqr_reduce
1644
1645
1646
1647         movq    48(%rsp),%rcx
1648         movq    %rcx,%rax
1649         shrq    $4,%rax
1650         movl    64(%rsp,%rax,2),%edx
1651         andq    $15,%rcx
1652         shrq    %cl,%rdx
1653         andq    $31,%rdx
1654
1655         leaq    640(%rsp,%rdx,2),%rsi
1656         leaq    448(%rsp),%rdx
1657         movq    %rdx,%rdi
1658         movq    $4,%rbp
1659 loop_3:
1660         movzwq  192(%rsi),%rbx
1661         movzwq  448(%rsi),%rax
1662         shlq    $16,%rbx
1663         shlq    $16,%rax
1664         movw    128(%rsi),%bx
1665         movw    384(%rsi),%ax
1666         shlq    $16,%rbx
1667         shlq    $16,%rax
1668         movw    64(%rsi),%bx
1669         movw    320(%rsi),%ax
1670         shlq    $16,%rbx
1671         shlq    $16,%rax
1672         movw    0(%rsi),%bx
1673         movw    256(%rsi),%ax
1674         movq    %rbx,0(%rdx)
1675         movq    %rax,8(%rdx)
1676         leaq    512(%rsi),%rsi
1677         leaq    16(%rdx),%rdx
1678         subq    $1,%rbp
1679         jnz     loop_3
1680         movq    8(%rsp),%rsi
1681         call    mont_mul_a3b
1682
1683
1684
1685         movq    48(%rsp),%rcx
1686         subq    $5,%rcx
1687         movq    %rcx,48(%rsp)
1688         jge     main_loop_a3b
1689
1690
1691
1692 end_main_loop_a3b:
1693
1694
1695         movq    8(%rsp),%rdx
1696         pxor    %xmm4,%xmm4
1697         movdqu  0(%rdx),%xmm0
1698         movdqu  16(%rdx),%xmm1
1699         movdqu  32(%rdx),%xmm2
1700         movdqu  48(%rdx),%xmm3
1701         movdqa  %xmm4,576(%rsp)
1702         movdqa  %xmm4,592(%rsp)
1703         movdqa  %xmm4,608(%rsp)
1704         movdqa  %xmm4,624(%rsp)
1705         movdqa  %xmm0,512(%rsp)
1706         movdqa  %xmm1,528(%rsp)
1707         movdqa  %xmm2,544(%rsp)
1708         movdqa  %xmm3,560(%rsp)
1709         call    mont_reduce
1710
1711
1712
1713         movq    8(%rsp),%rax
1714         movq    0(%rax),%r8
1715         movq    8(%rax),%r9
1716         movq    16(%rax),%r10
1717         movq    24(%rax),%r11
1718         movq    32(%rax),%r12
1719         movq    40(%rax),%r13
1720         movq    48(%rax),%r14
1721         movq    56(%rax),%r15
1722
1723
1724         movq    24(%rsp),%rbx
1725         addq    $512,%rbx
1726
1727         subq    0(%rbx),%r8
1728         sbbq    8(%rbx),%r9
1729         sbbq    16(%rbx),%r10
1730         sbbq    24(%rbx),%r11
1731         sbbq    32(%rbx),%r12
1732         sbbq    40(%rbx),%r13
1733         sbbq    48(%rbx),%r14
1734         sbbq    56(%rbx),%r15
1735
1736
1737         movq    0(%rax),%rsi
1738         movq    8(%rax),%rdi
1739         movq    16(%rax),%rcx
1740         movq    24(%rax),%rdx
1741         cmovncq %r8,%rsi
1742         cmovncq %r9,%rdi
1743         cmovncq %r10,%rcx
1744         cmovncq %r11,%rdx
1745         movq    %rsi,0(%rax)
1746         movq    %rdi,8(%rax)
1747         movq    %rcx,16(%rax)
1748         movq    %rdx,24(%rax)
1749
1750         movq    32(%rax),%rsi
1751         movq    40(%rax),%rdi
1752         movq    48(%rax),%rcx
1753         movq    56(%rax),%rdx
1754         cmovncq %r12,%rsi
1755         cmovncq %r13,%rdi
1756         cmovncq %r14,%rcx
1757         cmovncq %r15,%rdx
1758         movq    %rsi,32(%rax)
1759         movq    %rdi,40(%rax)
1760         movq    %rcx,48(%rax)
1761         movq    %rdx,56(%rax)
1762
1763         movq    0(%rsp),%rsi
1764         movq    0(%rsi),%r15
1765         movq    8(%rsi),%r14
1766         movq    16(%rsi),%r13
1767         movq    24(%rsi),%r12
1768         movq    32(%rsi),%rbx
1769         movq    40(%rsi),%rbp
1770         leaq    48(%rsi),%rsp
1771 .Lepilogue:
1772         .byte   0xf3,0xc3
1773 .size   mod_exp_512, . - mod_exp_512
1774 .section .note.GNU-stack,"",%progbits