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