Roll BoringSSL.
[chromium-blink-merge.git] / third_party / boringssl / mac-x86_64 / crypto / bn / x86_64-mont5.S
blob2e8f469c14d61054dff5a7f9dce606211c2b5cd5
1 #if defined(__x86_64__)
2 .text   
6 .globl  _bn_mul_mont_gather5
7 .private_extern _bn_mul_mont_gather5
9 .p2align        6
10 _bn_mul_mont_gather5:
11         testl   $7,%r9d
12         jnz     L$mul_enter
13         jmp     L$mul4x_enter
15 .p2align        4
16 L$mul_enter:
17         movl    %r9d,%r9d
18         movq    %rsp,%rax
19         movl    8(%rsp),%r10d
20         pushq   %rbx
21         pushq   %rbp
22         pushq   %r12
23         pushq   %r13
24         pushq   %r14
25         pushq   %r15
26         leaq    2(%r9),%r11
27         negq    %r11
28         leaq    (%rsp,%r11,8),%rsp
29         andq    $-1024,%rsp
31         movq    %rax,8(%rsp,%r9,8)
32 L$mul_body:
33         movq    %rdx,%r12
34         movq    %r10,%r11
35         shrq    $3,%r10
36         andq    $7,%r11
37         notq    %r10
38         leaq    L$magic_masks(%rip),%rax
39         andq    $3,%r10
40         leaq    96(%r12,%r11,8),%r12
41         movq    0(%rax,%r10,8),%xmm4
42         movq    8(%rax,%r10,8),%xmm5
43         movq    16(%rax,%r10,8),%xmm6
44         movq    24(%rax,%r10,8),%xmm7
46         movq    -96(%r12),%xmm0
47         movq    -32(%r12),%xmm1
48         pand    %xmm4,%xmm0
49         movq    32(%r12),%xmm2
50         pand    %xmm5,%xmm1
51         movq    96(%r12),%xmm3
52         pand    %xmm6,%xmm2
53         por     %xmm1,%xmm0
54         pand    %xmm7,%xmm3
55         por     %xmm2,%xmm0
56         leaq    256(%r12),%r12
57         por     %xmm3,%xmm0
59 .byte   102,72,15,126,195
61         movq    (%r8),%r8
62         movq    (%rsi),%rax
64         xorq    %r14,%r14
65         xorq    %r15,%r15
67         movq    -96(%r12),%xmm0
68         movq    -32(%r12),%xmm1
69         pand    %xmm4,%xmm0
70         movq    32(%r12),%xmm2
71         pand    %xmm5,%xmm1
73         movq    %r8,%rbp
74         mulq    %rbx
75         movq    %rax,%r10
76         movq    (%rcx),%rax
78         movq    96(%r12),%xmm3
79         pand    %xmm6,%xmm2
80         por     %xmm1,%xmm0
81         pand    %xmm7,%xmm3
83         imulq   %r10,%rbp
84         movq    %rdx,%r11
86         por     %xmm2,%xmm0
87         leaq    256(%r12),%r12
88         por     %xmm3,%xmm0
90         mulq    %rbp
91         addq    %rax,%r10
92         movq    8(%rsi),%rax
93         adcq    $0,%rdx
94         movq    %rdx,%r13
96         leaq    1(%r15),%r15
97         jmp     L$1st_enter
99 .p2align        4
100 L$1st:
101         addq    %rax,%r13
102         movq    (%rsi,%r15,8),%rax
103         adcq    $0,%rdx
104         addq    %r11,%r13
105         movq    %r10,%r11
106         adcq    $0,%rdx
107         movq    %r13,-16(%rsp,%r15,8)
108         movq    %rdx,%r13
110 L$1st_enter:
111         mulq    %rbx
112         addq    %rax,%r11
113         movq    (%rcx,%r15,8),%rax
114         adcq    $0,%rdx
115         leaq    1(%r15),%r15
116         movq    %rdx,%r10
118         mulq    %rbp
119         cmpq    %r9,%r15
120         jne     L$1st
122 .byte   102,72,15,126,195
124         addq    %rax,%r13
125         movq    (%rsi),%rax
126         adcq    $0,%rdx
127         addq    %r11,%r13
128         adcq    $0,%rdx
129         movq    %r13,-16(%rsp,%r15,8)
130         movq    %rdx,%r13
131         movq    %r10,%r11
133         xorq    %rdx,%rdx
134         addq    %r11,%r13
135         adcq    $0,%rdx
136         movq    %r13,-8(%rsp,%r9,8)
137         movq    %rdx,(%rsp,%r9,8)
139         leaq    1(%r14),%r14
140         jmp     L$outer
141 .p2align        4
142 L$outer:
143         xorq    %r15,%r15
144         movq    %r8,%rbp
145         movq    (%rsp),%r10
147         movq    -96(%r12),%xmm0
148         movq    -32(%r12),%xmm1
149         pand    %xmm4,%xmm0
150         movq    32(%r12),%xmm2
151         pand    %xmm5,%xmm1
153         mulq    %rbx
154         addq    %rax,%r10
155         movq    (%rcx),%rax
156         adcq    $0,%rdx
158         movq    96(%r12),%xmm3
159         pand    %xmm6,%xmm2
160         por     %xmm1,%xmm0
161         pand    %xmm7,%xmm3
163         imulq   %r10,%rbp
164         movq    %rdx,%r11
166         por     %xmm2,%xmm0
167         leaq    256(%r12),%r12
168         por     %xmm3,%xmm0
170         mulq    %rbp
171         addq    %rax,%r10
172         movq    8(%rsi),%rax
173         adcq    $0,%rdx
174         movq    8(%rsp),%r10
175         movq    %rdx,%r13
177         leaq    1(%r15),%r15
178         jmp     L$inner_enter
180 .p2align        4
181 L$inner:
182         addq    %rax,%r13
183         movq    (%rsi,%r15,8),%rax
184         adcq    $0,%rdx
185         addq    %r10,%r13
186         movq    (%rsp,%r15,8),%r10
187         adcq    $0,%rdx
188         movq    %r13,-16(%rsp,%r15,8)
189         movq    %rdx,%r13
191 L$inner_enter:
192         mulq    %rbx
193         addq    %rax,%r11
194         movq    (%rcx,%r15,8),%rax
195         adcq    $0,%rdx
196         addq    %r11,%r10
197         movq    %rdx,%r11
198         adcq    $0,%r11
199         leaq    1(%r15),%r15
201         mulq    %rbp
202         cmpq    %r9,%r15
203         jne     L$inner
205 .byte   102,72,15,126,195
207         addq    %rax,%r13
208         movq    (%rsi),%rax
209         adcq    $0,%rdx
210         addq    %r10,%r13
211         movq    (%rsp,%r15,8),%r10
212         adcq    $0,%rdx
213         movq    %r13,-16(%rsp,%r15,8)
214         movq    %rdx,%r13
216         xorq    %rdx,%rdx
217         addq    %r11,%r13
218         adcq    $0,%rdx
219         addq    %r10,%r13
220         adcq    $0,%rdx
221         movq    %r13,-8(%rsp,%r9,8)
222         movq    %rdx,(%rsp,%r9,8)
224         leaq    1(%r14),%r14
225         cmpq    %r9,%r14
226         jb      L$outer
228         xorq    %r14,%r14
229         movq    (%rsp),%rax
230         leaq    (%rsp),%rsi
231         movq    %r9,%r15
232         jmp     L$sub
233 .p2align        4
234 L$sub:  sbbq    (%rcx,%r14,8),%rax
235         movq    %rax,(%rdi,%r14,8)
236         movq    8(%rsi,%r14,8),%rax
237         leaq    1(%r14),%r14
238         decq    %r15
239         jnz     L$sub
241         sbbq    $0,%rax
242         xorq    %r14,%r14
243         movq    %r9,%r15
244 .p2align        4
245 L$copy:
246         movq    (%rsp,%r14,8),%rsi
247         movq    (%rdi,%r14,8),%rcx
248         xorq    %rcx,%rsi
249         andq    %rax,%rsi
250         xorq    %rcx,%rsi
251         movq    %r14,(%rsp,%r14,8)
252         movq    %rsi,(%rdi,%r14,8)
253         leaq    1(%r14),%r14
254         subq    $1,%r15
255         jnz     L$copy
257         movq    8(%rsp,%r9,8),%rsi
258         movq    $1,%rax
259         movq    -48(%rsi),%r15
260         movq    -40(%rsi),%r14
261         movq    -32(%rsi),%r13
262         movq    -24(%rsi),%r12
263         movq    -16(%rsi),%rbp
264         movq    -8(%rsi),%rbx
265         leaq    (%rsi),%rsp
266 L$mul_epilogue:
267         .byte   0xf3,0xc3
270 .p2align        5
271 bn_mul4x_mont_gather5:
272 L$mul4x_enter:
273 .byte   0x67
274         movq    %rsp,%rax
275         pushq   %rbx
276         pushq   %rbp
277         pushq   %r12
278         pushq   %r13
279         pushq   %r14
280         pushq   %r15
281 .byte   0x67
282         movl    %r9d,%r10d
283         shll    $3,%r9d
284         shll    $3+2,%r10d
285         negq    %r9
294         leaq    -64(%rsp,%r9,2),%r11
295         subq    %rsi,%r11
296         andq    $4095,%r11
297         cmpq    %r11,%r10
298         jb      L$mul4xsp_alt
299         subq    %r11,%rsp
300         leaq    -64(%rsp,%r9,2),%rsp
301         jmp     L$mul4xsp_done
303 .p2align        5
304 L$mul4xsp_alt:
305         leaq    4096-64(,%r9,2),%r10
306         leaq    -64(%rsp,%r9,2),%rsp
307         subq    %r10,%r11
308         movq    $0,%r10
309         cmovcq  %r10,%r11
310         subq    %r11,%rsp
311 L$mul4xsp_done:
312         andq    $-64,%rsp
313         negq    %r9
315         movq    %rax,40(%rsp)
316 L$mul4x_body:
318         call    mul4x_internal
320         movq    40(%rsp),%rsi
321         movq    $1,%rax
322         movq    -48(%rsi),%r15
323         movq    -40(%rsi),%r14
324         movq    -32(%rsi),%r13
325         movq    -24(%rsi),%r12
326         movq    -16(%rsi),%rbp
327         movq    -8(%rsi),%rbx
328         leaq    (%rsi),%rsp
329 L$mul4x_epilogue:
330         .byte   0xf3,0xc3
334 .p2align        5
335 mul4x_internal:
336         shlq    $5,%r9
337         movl    8(%rax),%r10d
338         leaq    256(%rdx,%r9,1),%r13
339         shrq    $5,%r9
340         movq    %r10,%r11
341         shrq    $3,%r10
342         andq    $7,%r11
343         notq    %r10
344         leaq    L$magic_masks(%rip),%rax
345         andq    $3,%r10
346         leaq    96(%rdx,%r11,8),%r12
347         movq    0(%rax,%r10,8),%xmm4
348         movq    8(%rax,%r10,8),%xmm5
349         addq    $7,%r11
350         movq    16(%rax,%r10,8),%xmm6
351         movq    24(%rax,%r10,8),%xmm7
352         andq    $7,%r11
354         movq    -96(%r12),%xmm0
355         leaq    256(%r12),%r14
356         movq    -32(%r12),%xmm1
357         pand    %xmm4,%xmm0
358         movq    32(%r12),%xmm2
359         pand    %xmm5,%xmm1
360         movq    96(%r12),%xmm3
361         pand    %xmm6,%xmm2
362 .byte   0x67
363         por     %xmm1,%xmm0
364         movq    -96(%r14),%xmm1
365 .byte   0x67
366         pand    %xmm7,%xmm3
367 .byte   0x67
368         por     %xmm2,%xmm0
369         movq    -32(%r14),%xmm2
370 .byte   0x67
371         pand    %xmm4,%xmm1
372 .byte   0x67
373         por     %xmm3,%xmm0
374         movq    32(%r14),%xmm3
376 .byte   102,72,15,126,195
377         movq    96(%r14),%xmm0
378         movq    %r13,16+8(%rsp)
379         movq    %rdi,56+8(%rsp)
381         movq    (%r8),%r8
382         movq    (%rsi),%rax
383         leaq    (%rsi,%r9,1),%rsi
384         negq    %r9
386         movq    %r8,%rbp
387         mulq    %rbx
388         movq    %rax,%r10
389         movq    (%rcx),%rax
391         pand    %xmm5,%xmm2
392         pand    %xmm6,%xmm3
393         por     %xmm2,%xmm1
395         imulq   %r10,%rbp
403         leaq    64+8(%rsp,%r11,8),%r14
404         movq    %rdx,%r11
406         pand    %xmm7,%xmm0
407         por     %xmm3,%xmm1
408         leaq    512(%r12),%r12
409         por     %xmm1,%xmm0
411         mulq    %rbp
412         addq    %rax,%r10
413         movq    8(%rsi,%r9,1),%rax
414         adcq    $0,%rdx
415         movq    %rdx,%rdi
417         mulq    %rbx
418         addq    %rax,%r11
419         movq    16(%rcx),%rax
420         adcq    $0,%rdx
421         movq    %rdx,%r10
423         mulq    %rbp
424         addq    %rax,%rdi
425         movq    16(%rsi,%r9,1),%rax
426         adcq    $0,%rdx
427         addq    %r11,%rdi
428         leaq    32(%r9),%r15
429         leaq    64(%rcx),%rcx
430         adcq    $0,%rdx
431         movq    %rdi,(%r14)
432         movq    %rdx,%r13
433         jmp     L$1st4x
435 .p2align        5
436 L$1st4x:
437         mulq    %rbx
438         addq    %rax,%r10
439         movq    -32(%rcx),%rax
440         leaq    32(%r14),%r14
441         adcq    $0,%rdx
442         movq    %rdx,%r11
444         mulq    %rbp
445         addq    %rax,%r13
446         movq    -8(%rsi,%r15,1),%rax
447         adcq    $0,%rdx
448         addq    %r10,%r13
449         adcq    $0,%rdx
450         movq    %r13,-24(%r14)
451         movq    %rdx,%rdi
453         mulq    %rbx
454         addq    %rax,%r11
455         movq    -16(%rcx),%rax
456         adcq    $0,%rdx
457         movq    %rdx,%r10
459         mulq    %rbp
460         addq    %rax,%rdi
461         movq    (%rsi,%r15,1),%rax
462         adcq    $0,%rdx
463         addq    %r11,%rdi
464         adcq    $0,%rdx
465         movq    %rdi,-16(%r14)
466         movq    %rdx,%r13
468         mulq    %rbx
469         addq    %rax,%r10
470         movq    0(%rcx),%rax
471         adcq    $0,%rdx
472         movq    %rdx,%r11
474         mulq    %rbp
475         addq    %rax,%r13
476         movq    8(%rsi,%r15,1),%rax
477         adcq    $0,%rdx
478         addq    %r10,%r13
479         adcq    $0,%rdx
480         movq    %r13,-8(%r14)
481         movq    %rdx,%rdi
483         mulq    %rbx
484         addq    %rax,%r11
485         movq    16(%rcx),%rax
486         adcq    $0,%rdx
487         movq    %rdx,%r10
489         mulq    %rbp
490         addq    %rax,%rdi
491         movq    16(%rsi,%r15,1),%rax
492         adcq    $0,%rdx
493         addq    %r11,%rdi
494         leaq    64(%rcx),%rcx
495         adcq    $0,%rdx
496         movq    %rdi,(%r14)
497         movq    %rdx,%r13
499         addq    $32,%r15
500         jnz     L$1st4x
502         mulq    %rbx
503         addq    %rax,%r10
504         movq    -32(%rcx),%rax
505         leaq    32(%r14),%r14
506         adcq    $0,%rdx
507         movq    %rdx,%r11
509         mulq    %rbp
510         addq    %rax,%r13
511         movq    -8(%rsi),%rax
512         adcq    $0,%rdx
513         addq    %r10,%r13
514         adcq    $0,%rdx
515         movq    %r13,-24(%r14)
516         movq    %rdx,%rdi
518         mulq    %rbx
519         addq    %rax,%r11
520         movq    -16(%rcx),%rax
521         adcq    $0,%rdx
522         movq    %rdx,%r10
524         mulq    %rbp
525         addq    %rax,%rdi
526         movq    (%rsi,%r9,1),%rax
527         adcq    $0,%rdx
528         addq    %r11,%rdi
529         adcq    $0,%rdx
530         movq    %rdi,-16(%r14)
531         movq    %rdx,%r13
533 .byte   102,72,15,126,195
534         leaq    (%rcx,%r9,2),%rcx
536         xorq    %rdi,%rdi
537         addq    %r10,%r13
538         adcq    $0,%rdi
539         movq    %r13,-8(%r14)
541         jmp     L$outer4x
543 .p2align        5
544 L$outer4x:
545         movq    (%r14,%r9,1),%r10
546         movq    %r8,%rbp
547         mulq    %rbx
548         addq    %rax,%r10
549         movq    (%rcx),%rax
550         adcq    $0,%rdx
552         movq    -96(%r12),%xmm0
553         movq    -32(%r12),%xmm1
554         pand    %xmm4,%xmm0
555         movq    32(%r12),%xmm2
556         pand    %xmm5,%xmm1
557         movq    96(%r12),%xmm3
559         imulq   %r10,%rbp
560 .byte   0x67
561         movq    %rdx,%r11
562         movq    %rdi,(%r14)
564         pand    %xmm6,%xmm2
565         por     %xmm1,%xmm0
566         pand    %xmm7,%xmm3
567         por     %xmm2,%xmm0
568         leaq    (%r14,%r9,1),%r14
569         leaq    256(%r12),%r12
570         por     %xmm3,%xmm0
572         mulq    %rbp
573         addq    %rax,%r10
574         movq    8(%rsi,%r9,1),%rax
575         adcq    $0,%rdx
576         movq    %rdx,%rdi
578         mulq    %rbx
579         addq    %rax,%r11
580         movq    16(%rcx),%rax
581         adcq    $0,%rdx
582         addq    8(%r14),%r11
583         adcq    $0,%rdx
584         movq    %rdx,%r10
586         mulq    %rbp
587         addq    %rax,%rdi
588         movq    16(%rsi,%r9,1),%rax
589         adcq    $0,%rdx
590         addq    %r11,%rdi
591         leaq    32(%r9),%r15
592         leaq    64(%rcx),%rcx
593         adcq    $0,%rdx
594         movq    %rdx,%r13
595         jmp     L$inner4x
597 .p2align        5
598 L$inner4x:
599         mulq    %rbx
600         addq    %rax,%r10
601         movq    -32(%rcx),%rax
602         adcq    $0,%rdx
603         addq    16(%r14),%r10
604         leaq    32(%r14),%r14
605         adcq    $0,%rdx
606         movq    %rdx,%r11
608         mulq    %rbp
609         addq    %rax,%r13
610         movq    -8(%rsi,%r15,1),%rax
611         adcq    $0,%rdx
612         addq    %r10,%r13
613         adcq    $0,%rdx
614         movq    %rdi,-32(%r14)
615         movq    %rdx,%rdi
617         mulq    %rbx
618         addq    %rax,%r11
619         movq    -16(%rcx),%rax
620         adcq    $0,%rdx
621         addq    -8(%r14),%r11
622         adcq    $0,%rdx
623         movq    %rdx,%r10
625         mulq    %rbp
626         addq    %rax,%rdi
627         movq    (%rsi,%r15,1),%rax
628         adcq    $0,%rdx
629         addq    %r11,%rdi
630         adcq    $0,%rdx
631         movq    %r13,-24(%r14)
632         movq    %rdx,%r13
634         mulq    %rbx
635         addq    %rax,%r10
636         movq    0(%rcx),%rax
637         adcq    $0,%rdx
638         addq    (%r14),%r10
639         adcq    $0,%rdx
640         movq    %rdx,%r11
642         mulq    %rbp
643         addq    %rax,%r13
644         movq    8(%rsi,%r15,1),%rax
645         adcq    $0,%rdx
646         addq    %r10,%r13
647         adcq    $0,%rdx
648         movq    %rdi,-16(%r14)
649         movq    %rdx,%rdi
651         mulq    %rbx
652         addq    %rax,%r11
653         movq    16(%rcx),%rax
654         adcq    $0,%rdx
655         addq    8(%r14),%r11
656         adcq    $0,%rdx
657         movq    %rdx,%r10
659         mulq    %rbp
660         addq    %rax,%rdi
661         movq    16(%rsi,%r15,1),%rax
662         adcq    $0,%rdx
663         addq    %r11,%rdi
664         leaq    64(%rcx),%rcx
665         adcq    $0,%rdx
666         movq    %r13,-8(%r14)
667         movq    %rdx,%r13
669         addq    $32,%r15
670         jnz     L$inner4x
672         mulq    %rbx
673         addq    %rax,%r10
674         movq    -32(%rcx),%rax
675         adcq    $0,%rdx
676         addq    16(%r14),%r10
677         leaq    32(%r14),%r14
678         adcq    $0,%rdx
679         movq    %rdx,%r11
681         mulq    %rbp
682         addq    %rax,%r13
683         movq    -8(%rsi),%rax
684         adcq    $0,%rdx
685         addq    %r10,%r13
686         adcq    $0,%rdx
687         movq    %rdi,-32(%r14)
688         movq    %rdx,%rdi
690         mulq    %rbx
691         addq    %rax,%r11
692         movq    %rbp,%rax
693         movq    -16(%rcx),%rbp
694         adcq    $0,%rdx
695         addq    -8(%r14),%r11
696         adcq    $0,%rdx
697         movq    %rdx,%r10
699         mulq    %rbp
700         addq    %rax,%rdi
701         movq    (%rsi,%r9,1),%rax
702         adcq    $0,%rdx
703         addq    %r11,%rdi
704         adcq    $0,%rdx
705         movq    %r13,-24(%r14)
706         movq    %rdx,%r13
708 .byte   102,72,15,126,195
709         movq    %rdi,-16(%r14)
710         leaq    (%rcx,%r9,2),%rcx
712         xorq    %rdi,%rdi
713         addq    %r10,%r13
714         adcq    $0,%rdi
715         addq    (%r14),%r13
716         adcq    $0,%rdi
717         movq    %r13,-8(%r14)
719         cmpq    16+8(%rsp),%r12
720         jb      L$outer4x
721         subq    %r13,%rbp
722         adcq    %r15,%r15
723         orq     %r15,%rdi
724         xorq    $1,%rdi
725         leaq    (%r14,%r9,1),%rbx
726         leaq    (%rcx,%rdi,8),%rbp
727         movq    %r9,%rcx
728         sarq    $3+2,%rcx
729         movq    56+8(%rsp),%rdi
730         jmp     L$sqr4x_sub
732 .globl  _bn_power5
733 .private_extern _bn_power5
735 .p2align        5
736 _bn_power5:
737         movq    %rsp,%rax
738         pushq   %rbx
739         pushq   %rbp
740         pushq   %r12
741         pushq   %r13
742         pushq   %r14
743         pushq   %r15
744         movl    %r9d,%r10d
745         shll    $3,%r9d
746         shll    $3+2,%r10d
747         negq    %r9
748         movq    (%r8),%r8
756         leaq    -64(%rsp,%r9,2),%r11
757         subq    %rsi,%r11
758         andq    $4095,%r11
759         cmpq    %r11,%r10
760         jb      L$pwr_sp_alt
761         subq    %r11,%rsp
762         leaq    -64(%rsp,%r9,2),%rsp
763         jmp     L$pwr_sp_done
765 .p2align        5
766 L$pwr_sp_alt:
767         leaq    4096-64(,%r9,2),%r10
768         leaq    -64(%rsp,%r9,2),%rsp
769         subq    %r10,%r11
770         movq    $0,%r10
771         cmovcq  %r10,%r11
772         subq    %r11,%rsp
773 L$pwr_sp_done:
774         andq    $-64,%rsp
775         movq    %r9,%r10
776         negq    %r9
787         movq    %r8,32(%rsp)
788         movq    %rax,40(%rsp)
789 L$power5_body:
790 .byte   102,72,15,110,207
791 .byte   102,72,15,110,209
792 .byte   102,73,15,110,218
793 .byte   102,72,15,110,226
795         call    __bn_sqr8x_internal
796         call    __bn_sqr8x_internal
797         call    __bn_sqr8x_internal
798         call    __bn_sqr8x_internal
799         call    __bn_sqr8x_internal
801 .byte   102,72,15,126,209
802 .byte   102,72,15,126,226
803         movq    %rsi,%rdi
804         movq    40(%rsp),%rax
805         leaq    32(%rsp),%r8
807         call    mul4x_internal
809         movq    40(%rsp),%rsi
810         movq    $1,%rax
811         movq    -48(%rsi),%r15
812         movq    -40(%rsi),%r14
813         movq    -32(%rsi),%r13
814         movq    -24(%rsi),%r12
815         movq    -16(%rsi),%rbp
816         movq    -8(%rsi),%rbx
817         leaq    (%rsi),%rsp
818 L$power5_epilogue:
819         .byte   0xf3,0xc3
822 .globl  _bn_sqr8x_internal
823 .private_extern _bn_sqr8x_internal
824 .private_extern _bn_sqr8x_internal
826 .p2align        5
827 _bn_sqr8x_internal:
828 __bn_sqr8x_internal:
902         leaq    32(%r10),%rbp
903         leaq    (%rsi,%r9,1),%rsi
905         movq    %r9,%rcx
908         movq    -32(%rsi,%rbp,1),%r14
909         leaq    48+8(%rsp,%r9,2),%rdi
910         movq    -24(%rsi,%rbp,1),%rax
911         leaq    -32(%rdi,%rbp,1),%rdi
912         movq    -16(%rsi,%rbp,1),%rbx
913         movq    %rax,%r15
915         mulq    %r14
916         movq    %rax,%r10
917         movq    %rbx,%rax
918         movq    %rdx,%r11
919         movq    %r10,-24(%rdi,%rbp,1)
921         mulq    %r14
922         addq    %rax,%r11
923         movq    %rbx,%rax
924         adcq    $0,%rdx
925         movq    %r11,-16(%rdi,%rbp,1)
926         movq    %rdx,%r10
929         movq    -8(%rsi,%rbp,1),%rbx
930         mulq    %r15
931         movq    %rax,%r12
932         movq    %rbx,%rax
933         movq    %rdx,%r13
935         leaq    (%rbp),%rcx
936         mulq    %r14
937         addq    %rax,%r10
938         movq    %rbx,%rax
939         movq    %rdx,%r11
940         adcq    $0,%r11
941         addq    %r12,%r10
942         adcq    $0,%r11
943         movq    %r10,-8(%rdi,%rcx,1)
944         jmp     L$sqr4x_1st
946 .p2align        5
947 L$sqr4x_1st:
948         movq    (%rsi,%rcx,1),%rbx
949         mulq    %r15
950         addq    %rax,%r13
951         movq    %rbx,%rax
952         movq    %rdx,%r12
953         adcq    $0,%r12
955         mulq    %r14
956         addq    %rax,%r11
957         movq    %rbx,%rax
958         movq    8(%rsi,%rcx,1),%rbx
959         movq    %rdx,%r10
960         adcq    $0,%r10
961         addq    %r13,%r11
962         adcq    $0,%r10
965         mulq    %r15
966         addq    %rax,%r12
967         movq    %rbx,%rax
968         movq    %r11,(%rdi,%rcx,1)
969         movq    %rdx,%r13
970         adcq    $0,%r13
972         mulq    %r14
973         addq    %rax,%r10
974         movq    %rbx,%rax
975         movq    16(%rsi,%rcx,1),%rbx
976         movq    %rdx,%r11
977         adcq    $0,%r11
978         addq    %r12,%r10
979         adcq    $0,%r11
981         mulq    %r15
982         addq    %rax,%r13
983         movq    %rbx,%rax
984         movq    %r10,8(%rdi,%rcx,1)
985         movq    %rdx,%r12
986         adcq    $0,%r12
988         mulq    %r14
989         addq    %rax,%r11
990         movq    %rbx,%rax
991         movq    24(%rsi,%rcx,1),%rbx
992         movq    %rdx,%r10
993         adcq    $0,%r10
994         addq    %r13,%r11
995         adcq    $0,%r10
998         mulq    %r15
999         addq    %rax,%r12
1000         movq    %rbx,%rax
1001         movq    %r11,16(%rdi,%rcx,1)
1002         movq    %rdx,%r13
1003         adcq    $0,%r13
1004         leaq    32(%rcx),%rcx
1006         mulq    %r14
1007         addq    %rax,%r10
1008         movq    %rbx,%rax
1009         movq    %rdx,%r11
1010         adcq    $0,%r11
1011         addq    %r12,%r10
1012         adcq    $0,%r11
1013         movq    %r10,-8(%rdi,%rcx,1)
1015         cmpq    $0,%rcx
1016         jne     L$sqr4x_1st
1018         mulq    %r15
1019         addq    %rax,%r13
1020         leaq    16(%rbp),%rbp
1021         adcq    $0,%rdx
1022         addq    %r11,%r13
1023         adcq    $0,%rdx
1025         movq    %r13,(%rdi)
1026         movq    %rdx,%r12
1027         movq    %rdx,8(%rdi)
1028         jmp     L$sqr4x_outer
1030 .p2align        5
1031 L$sqr4x_outer:
1032         movq    -32(%rsi,%rbp,1),%r14
1033         leaq    48+8(%rsp,%r9,2),%rdi
1034         movq    -24(%rsi,%rbp,1),%rax
1035         leaq    -32(%rdi,%rbp,1),%rdi
1036         movq    -16(%rsi,%rbp,1),%rbx
1037         movq    %rax,%r15
1039         mulq    %r14
1040         movq    -24(%rdi,%rbp,1),%r10
1041         addq    %rax,%r10
1042         movq    %rbx,%rax
1043         adcq    $0,%rdx
1044         movq    %r10,-24(%rdi,%rbp,1)
1045         movq    %rdx,%r11
1047         mulq    %r14
1048         addq    %rax,%r11
1049         movq    %rbx,%rax
1050         adcq    $0,%rdx
1051         addq    -16(%rdi,%rbp,1),%r11
1052         movq    %rdx,%r10
1053         adcq    $0,%r10
1054         movq    %r11,-16(%rdi,%rbp,1)
1056         xorq    %r12,%r12
1058         movq    -8(%rsi,%rbp,1),%rbx
1059         mulq    %r15
1060         addq    %rax,%r12
1061         movq    %rbx,%rax
1062         adcq    $0,%rdx
1063         addq    -8(%rdi,%rbp,1),%r12
1064         movq    %rdx,%r13
1065         adcq    $0,%r13
1067         mulq    %r14
1068         addq    %rax,%r10
1069         movq    %rbx,%rax
1070         adcq    $0,%rdx
1071         addq    %r12,%r10
1072         movq    %rdx,%r11
1073         adcq    $0,%r11
1074         movq    %r10,-8(%rdi,%rbp,1)
1076         leaq    (%rbp),%rcx
1077         jmp     L$sqr4x_inner
1079 .p2align        5
1080 L$sqr4x_inner:
1081         movq    (%rsi,%rcx,1),%rbx
1082         mulq    %r15
1083         addq    %rax,%r13
1084         movq    %rbx,%rax
1085         movq    %rdx,%r12
1086         adcq    $0,%r12
1087         addq    (%rdi,%rcx,1),%r13
1088         adcq    $0,%r12
1090 .byte   0x67
1091         mulq    %r14
1092         addq    %rax,%r11
1093         movq    %rbx,%rax
1094         movq    8(%rsi,%rcx,1),%rbx
1095         movq    %rdx,%r10
1096         adcq    $0,%r10
1097         addq    %r13,%r11
1098         adcq    $0,%r10
1100         mulq    %r15
1101         addq    %rax,%r12
1102         movq    %r11,(%rdi,%rcx,1)
1103         movq    %rbx,%rax
1104         movq    %rdx,%r13
1105         adcq    $0,%r13
1106         addq    8(%rdi,%rcx,1),%r12
1107         leaq    16(%rcx),%rcx
1108         adcq    $0,%r13
1110         mulq    %r14
1111         addq    %rax,%r10
1112         movq    %rbx,%rax
1113         adcq    $0,%rdx
1114         addq    %r12,%r10
1115         movq    %rdx,%r11
1116         adcq    $0,%r11
1117         movq    %r10,-8(%rdi,%rcx,1)
1119         cmpq    $0,%rcx
1120         jne     L$sqr4x_inner
1122 .byte   0x67
1123         mulq    %r15
1124         addq    %rax,%r13
1125         adcq    $0,%rdx
1126         addq    %r11,%r13
1127         adcq    $0,%rdx
1129         movq    %r13,(%rdi)
1130         movq    %rdx,%r12
1131         movq    %rdx,8(%rdi)
1133         addq    $16,%rbp
1134         jnz     L$sqr4x_outer
1137         movq    -32(%rsi),%r14
1138         leaq    48+8(%rsp,%r9,2),%rdi
1139         movq    -24(%rsi),%rax
1140         leaq    -32(%rdi,%rbp,1),%rdi
1141         movq    -16(%rsi),%rbx
1142         movq    %rax,%r15
1144         mulq    %r14
1145         addq    %rax,%r10
1146         movq    %rbx,%rax
1147         movq    %rdx,%r11
1148         adcq    $0,%r11
1150         mulq    %r14
1151         addq    %rax,%r11
1152         movq    %rbx,%rax
1153         movq    %r10,-24(%rdi)
1154         movq    %rdx,%r10
1155         adcq    $0,%r10
1156         addq    %r13,%r11
1157         movq    -8(%rsi),%rbx
1158         adcq    $0,%r10
1160         mulq    %r15
1161         addq    %rax,%r12
1162         movq    %rbx,%rax
1163         movq    %r11,-16(%rdi)
1164         movq    %rdx,%r13
1165         adcq    $0,%r13
1167         mulq    %r14
1168         addq    %rax,%r10
1169         movq    %rbx,%rax
1170         movq    %rdx,%r11
1171         adcq    $0,%r11
1172         addq    %r12,%r10
1173         adcq    $0,%r11
1174         movq    %r10,-8(%rdi)
1176         mulq    %r15
1177         addq    %rax,%r13
1178         movq    -16(%rsi),%rax
1179         adcq    $0,%rdx
1180         addq    %r11,%r13
1181         adcq    $0,%rdx
1183         movq    %r13,(%rdi)
1184         movq    %rdx,%r12
1185         movq    %rdx,8(%rdi)
1187         mulq    %rbx
1188         addq    $16,%rbp
1189         xorq    %r14,%r14
1190         subq    %r9,%rbp
1191         xorq    %r15,%r15
1193         addq    %r12,%rax
1194         adcq    $0,%rdx
1195         movq    %rax,8(%rdi)
1196         movq    %rdx,16(%rdi)
1197         movq    %r15,24(%rdi)
1199         movq    -16(%rsi,%rbp,1),%rax
1200         leaq    48+8(%rsp),%rdi
1201         xorq    %r10,%r10
1202         movq    8(%rdi),%r11
1204         leaq    (%r14,%r10,2),%r12
1205         shrq    $63,%r10
1206         leaq    (%rcx,%r11,2),%r13
1207         shrq    $63,%r11
1208         orq     %r10,%r13
1209         movq    16(%rdi),%r10
1210         movq    %r11,%r14
1211         mulq    %rax
1212         negq    %r15
1213         movq    24(%rdi),%r11
1214         adcq    %rax,%r12
1215         movq    -8(%rsi,%rbp,1),%rax
1216         movq    %r12,(%rdi)
1217         adcq    %rdx,%r13
1219         leaq    (%r14,%r10,2),%rbx
1220         movq    %r13,8(%rdi)
1221         sbbq    %r15,%r15
1222         shrq    $63,%r10
1223         leaq    (%rcx,%r11,2),%r8
1224         shrq    $63,%r11
1225         orq     %r10,%r8
1226         movq    32(%rdi),%r10
1227         movq    %r11,%r14
1228         mulq    %rax
1229         negq    %r15
1230         movq    40(%rdi),%r11
1231         adcq    %rax,%rbx
1232         movq    0(%rsi,%rbp,1),%rax
1233         movq    %rbx,16(%rdi)
1234         adcq    %rdx,%r8
1235         leaq    16(%rbp),%rbp
1236         movq    %r8,24(%rdi)
1237         sbbq    %r15,%r15
1238         leaq    64(%rdi),%rdi
1239         jmp     L$sqr4x_shift_n_add
1241 .p2align        5
1242 L$sqr4x_shift_n_add:
1243         leaq    (%r14,%r10,2),%r12
1244         shrq    $63,%r10
1245         leaq    (%rcx,%r11,2),%r13
1246         shrq    $63,%r11
1247         orq     %r10,%r13
1248         movq    -16(%rdi),%r10
1249         movq    %r11,%r14
1250         mulq    %rax
1251         negq    %r15
1252         movq    -8(%rdi),%r11
1253         adcq    %rax,%r12
1254         movq    -8(%rsi,%rbp,1),%rax
1255         movq    %r12,-32(%rdi)
1256         adcq    %rdx,%r13
1258         leaq    (%r14,%r10,2),%rbx
1259         movq    %r13,-24(%rdi)
1260         sbbq    %r15,%r15
1261         shrq    $63,%r10
1262         leaq    (%rcx,%r11,2),%r8
1263         shrq    $63,%r11
1264         orq     %r10,%r8
1265         movq    0(%rdi),%r10
1266         movq    %r11,%r14
1267         mulq    %rax
1268         negq    %r15
1269         movq    8(%rdi),%r11
1270         adcq    %rax,%rbx
1271         movq    0(%rsi,%rbp,1),%rax
1272         movq    %rbx,-16(%rdi)
1273         adcq    %rdx,%r8
1275         leaq    (%r14,%r10,2),%r12
1276         movq    %r8,-8(%rdi)
1277         sbbq    %r15,%r15
1278         shrq    $63,%r10
1279         leaq    (%rcx,%r11,2),%r13
1280         shrq    $63,%r11
1281         orq     %r10,%r13
1282         movq    16(%rdi),%r10
1283         movq    %r11,%r14
1284         mulq    %rax
1285         negq    %r15
1286         movq    24(%rdi),%r11
1287         adcq    %rax,%r12
1288         movq    8(%rsi,%rbp,1),%rax
1289         movq    %r12,0(%rdi)
1290         adcq    %rdx,%r13
1292         leaq    (%r14,%r10,2),%rbx
1293         movq    %r13,8(%rdi)
1294         sbbq    %r15,%r15
1295         shrq    $63,%r10
1296         leaq    (%rcx,%r11,2),%r8
1297         shrq    $63,%r11
1298         orq     %r10,%r8
1299         movq    32(%rdi),%r10
1300         movq    %r11,%r14
1301         mulq    %rax
1302         negq    %r15
1303         movq    40(%rdi),%r11
1304         adcq    %rax,%rbx
1305         movq    16(%rsi,%rbp,1),%rax
1306         movq    %rbx,16(%rdi)
1307         adcq    %rdx,%r8
1308         movq    %r8,24(%rdi)
1309         sbbq    %r15,%r15
1310         leaq    64(%rdi),%rdi
1311         addq    $32,%rbp
1312         jnz     L$sqr4x_shift_n_add
1314         leaq    (%r14,%r10,2),%r12
1315 .byte   0x67
1316         shrq    $63,%r10
1317         leaq    (%rcx,%r11,2),%r13
1318         shrq    $63,%r11
1319         orq     %r10,%r13
1320         movq    -16(%rdi),%r10
1321         movq    %r11,%r14
1322         mulq    %rax
1323         negq    %r15
1324         movq    -8(%rdi),%r11
1325         adcq    %rax,%r12
1326         movq    -8(%rsi),%rax
1327         movq    %r12,-32(%rdi)
1328         adcq    %rdx,%r13
1330         leaq    (%r14,%r10,2),%rbx
1331         movq    %r13,-24(%rdi)
1332         sbbq    %r15,%r15
1333         shrq    $63,%r10
1334         leaq    (%rcx,%r11,2),%r8
1335         shrq    $63,%r11
1336         orq     %r10,%r8
1337         mulq    %rax
1338         negq    %r15
1339         adcq    %rax,%rbx
1340         adcq    %rdx,%r8
1341         movq    %rbx,-16(%rdi)
1342         movq    %r8,-8(%rdi)
1343 .byte   102,72,15,126,213
1344 sqr8x_reduction:
1345         xorq    %rax,%rax
1346         leaq    (%rbp,%r9,2),%rcx
1347         leaq    48+8(%rsp,%r9,2),%rdx
1348         movq    %rcx,0+8(%rsp)
1349         leaq    48+8(%rsp,%r9,1),%rdi
1350         movq    %rdx,8+8(%rsp)
1351         negq    %r9
1352         jmp     L$8x_reduction_loop
1354 .p2align        5
1355 L$8x_reduction_loop:
1356         leaq    (%rdi,%r9,1),%rdi
1357 .byte   0x66
1358         movq    0(%rdi),%rbx
1359         movq    8(%rdi),%r9
1360         movq    16(%rdi),%r10
1361         movq    24(%rdi),%r11
1362         movq    32(%rdi),%r12
1363         movq    40(%rdi),%r13
1364         movq    48(%rdi),%r14
1365         movq    56(%rdi),%r15
1366         movq    %rax,(%rdx)
1367         leaq    64(%rdi),%rdi
1369 .byte   0x67
1370         movq    %rbx,%r8
1371         imulq   32+8(%rsp),%rbx
1372         movq    0(%rbp),%rax
1373         movl    $8,%ecx
1374         jmp     L$8x_reduce
1376 .p2align        5
1377 L$8x_reduce:
1378         mulq    %rbx
1379         movq    16(%rbp),%rax
1380         negq    %r8
1381         movq    %rdx,%r8
1382         adcq    $0,%r8
1384         mulq    %rbx
1385         addq    %rax,%r9
1386         movq    32(%rbp),%rax
1387         adcq    $0,%rdx
1388         addq    %r9,%r8
1389         movq    %rbx,48-8+8(%rsp,%rcx,8)
1390         movq    %rdx,%r9
1391         adcq    $0,%r9
1393         mulq    %rbx
1394         addq    %rax,%r10
1395         movq    48(%rbp),%rax
1396         adcq    $0,%rdx
1397         addq    %r10,%r9
1398         movq    32+8(%rsp),%rsi
1399         movq    %rdx,%r10
1400         adcq    $0,%r10
1402         mulq    %rbx
1403         addq    %rax,%r11
1404         movq    64(%rbp),%rax
1405         adcq    $0,%rdx
1406         imulq   %r8,%rsi
1407         addq    %r11,%r10
1408         movq    %rdx,%r11
1409         adcq    $0,%r11
1411         mulq    %rbx
1412         addq    %rax,%r12
1413         movq    80(%rbp),%rax
1414         adcq    $0,%rdx
1415         addq    %r12,%r11
1416         movq    %rdx,%r12
1417         adcq    $0,%r12
1419         mulq    %rbx
1420         addq    %rax,%r13
1421         movq    96(%rbp),%rax
1422         adcq    $0,%rdx
1423         addq    %r13,%r12
1424         movq    %rdx,%r13
1425         adcq    $0,%r13
1427         mulq    %rbx
1428         addq    %rax,%r14
1429         movq    112(%rbp),%rax
1430         adcq    $0,%rdx
1431         addq    %r14,%r13
1432         movq    %rdx,%r14
1433         adcq    $0,%r14
1435         mulq    %rbx
1436         movq    %rsi,%rbx
1437         addq    %rax,%r15
1438         movq    0(%rbp),%rax
1439         adcq    $0,%rdx
1440         addq    %r15,%r14
1441         movq    %rdx,%r15
1442         adcq    $0,%r15
1444         decl    %ecx
1445         jnz     L$8x_reduce
1447         leaq    128(%rbp),%rbp
1448         xorq    %rax,%rax
1449         movq    8+8(%rsp),%rdx
1450         cmpq    0+8(%rsp),%rbp
1451         jae     L$8x_no_tail
1453 .byte   0x66
1454         addq    0(%rdi),%r8
1455         adcq    8(%rdi),%r9
1456         adcq    16(%rdi),%r10
1457         adcq    24(%rdi),%r11
1458         adcq    32(%rdi),%r12
1459         adcq    40(%rdi),%r13
1460         adcq    48(%rdi),%r14
1461         adcq    56(%rdi),%r15
1462         sbbq    %rsi,%rsi
1464         movq    48+56+8(%rsp),%rbx
1465         movl    $8,%ecx
1466         movq    0(%rbp),%rax
1467         jmp     L$8x_tail
1469 .p2align        5
1470 L$8x_tail:
1471         mulq    %rbx
1472         addq    %rax,%r8
1473         movq    16(%rbp),%rax
1474         movq    %r8,(%rdi)
1475         movq    %rdx,%r8
1476         adcq    $0,%r8
1478         mulq    %rbx
1479         addq    %rax,%r9
1480         movq    32(%rbp),%rax
1481         adcq    $0,%rdx
1482         addq    %r9,%r8
1483         leaq    8(%rdi),%rdi
1484         movq    %rdx,%r9
1485         adcq    $0,%r9
1487         mulq    %rbx
1488         addq    %rax,%r10
1489         movq    48(%rbp),%rax
1490         adcq    $0,%rdx
1491         addq    %r10,%r9
1492         movq    %rdx,%r10
1493         adcq    $0,%r10
1495         mulq    %rbx
1496         addq    %rax,%r11
1497         movq    64(%rbp),%rax
1498         adcq    $0,%rdx
1499         addq    %r11,%r10
1500         movq    %rdx,%r11
1501         adcq    $0,%r11
1503         mulq    %rbx
1504         addq    %rax,%r12
1505         movq    80(%rbp),%rax
1506         adcq    $0,%rdx
1507         addq    %r12,%r11
1508         movq    %rdx,%r12
1509         adcq    $0,%r12
1511         mulq    %rbx
1512         addq    %rax,%r13
1513         movq    96(%rbp),%rax
1514         adcq    $0,%rdx
1515         addq    %r13,%r12
1516         movq    %rdx,%r13
1517         adcq    $0,%r13
1519         mulq    %rbx
1520         addq    %rax,%r14
1521         movq    112(%rbp),%rax
1522         adcq    $0,%rdx
1523         addq    %r14,%r13
1524         movq    %rdx,%r14
1525         adcq    $0,%r14
1527         mulq    %rbx
1528         movq    48-16+8(%rsp,%rcx,8),%rbx
1529         addq    %rax,%r15
1530         adcq    $0,%rdx
1531         addq    %r15,%r14
1532         movq    0(%rbp),%rax
1533         movq    %rdx,%r15
1534         adcq    $0,%r15
1536         decl    %ecx
1537         jnz     L$8x_tail
1539         leaq    128(%rbp),%rbp
1540         movq    8+8(%rsp),%rdx
1541         cmpq    0+8(%rsp),%rbp
1542         jae     L$8x_tail_done
1544         movq    48+56+8(%rsp),%rbx
1545         negq    %rsi
1546         movq    0(%rbp),%rax
1547         adcq    0(%rdi),%r8
1548         adcq    8(%rdi),%r9
1549         adcq    16(%rdi),%r10
1550         adcq    24(%rdi),%r11
1551         adcq    32(%rdi),%r12
1552         adcq    40(%rdi),%r13
1553         adcq    48(%rdi),%r14
1554         adcq    56(%rdi),%r15
1555         sbbq    %rsi,%rsi
1557         movl    $8,%ecx
1558         jmp     L$8x_tail
1560 .p2align        5
1561 L$8x_tail_done:
1562         addq    (%rdx),%r8
1563         xorq    %rax,%rax
1565         negq    %rsi
1566 L$8x_no_tail:
1567         adcq    0(%rdi),%r8
1568         adcq    8(%rdi),%r9
1569         adcq    16(%rdi),%r10
1570         adcq    24(%rdi),%r11
1571         adcq    32(%rdi),%r12
1572         adcq    40(%rdi),%r13
1573         adcq    48(%rdi),%r14
1574         adcq    56(%rdi),%r15
1575         adcq    $0,%rax
1576         movq    -16(%rbp),%rcx
1577         xorq    %rsi,%rsi
1579 .byte   102,72,15,126,213
1581         movq    %r8,0(%rdi)
1582         movq    %r9,8(%rdi)
1583 .byte   102,73,15,126,217
1584         movq    %r10,16(%rdi)
1585         movq    %r11,24(%rdi)
1586         movq    %r12,32(%rdi)
1587         movq    %r13,40(%rdi)
1588         movq    %r14,48(%rdi)
1589         movq    %r15,56(%rdi)
1590         leaq    64(%rdi),%rdi
1592         cmpq    %rdx,%rdi
1593         jb      L$8x_reduction_loop
1595         subq    %r15,%rcx
1596         leaq    (%rdi,%r9,1),%rbx
1597         adcq    %rsi,%rsi
1598         movq    %r9,%rcx
1599         orq     %rsi,%rax
1600 .byte   102,72,15,126,207
1601         xorq    $1,%rax
1602 .byte   102,72,15,126,206
1603         leaq    (%rbp,%rax,8),%rbp
1604         sarq    $3+2,%rcx
1605         jmp     L$sqr4x_sub
1607 .p2align        5
1608 L$sqr4x_sub:
1609 .byte   0x66
1610         movq    0(%rbx),%r12
1611         movq    8(%rbx),%r13
1612         sbbq    0(%rbp),%r12
1613         movq    16(%rbx),%r14
1614         sbbq    16(%rbp),%r13
1615         movq    24(%rbx),%r15
1616         leaq    32(%rbx),%rbx
1617         sbbq    32(%rbp),%r14
1618         movq    %r12,0(%rdi)
1619         sbbq    48(%rbp),%r15
1620         leaq    64(%rbp),%rbp
1621         movq    %r13,8(%rdi)
1622         movq    %r14,16(%rdi)
1623         movq    %r15,24(%rdi)
1624         leaq    32(%rdi),%rdi
1626         incq    %rcx
1627         jnz     L$sqr4x_sub
1628         movq    %r9,%r10
1629         negq    %r9
1630         .byte   0xf3,0xc3
1632 .globl  _bn_from_montgomery
1633 .private_extern _bn_from_montgomery
1635 .p2align        5
1636 _bn_from_montgomery:
1637         testl   $7,%r9d
1638         jz      bn_from_mont8x
1639         xorl    %eax,%eax
1640         .byte   0xf3,0xc3
1644 .p2align        5
1645 bn_from_mont8x:
1646 .byte   0x67
1647         movq    %rsp,%rax
1648         pushq   %rbx
1649         pushq   %rbp
1650         pushq   %r12
1651         pushq   %r13
1652         pushq   %r14
1653         pushq   %r15
1654 .byte   0x67
1655         movl    %r9d,%r10d
1656         shll    $3,%r9d
1657         shll    $3+2,%r10d
1658         negq    %r9
1659         movq    (%r8),%r8
1667         leaq    -64(%rsp,%r9,2),%r11
1668         subq    %rsi,%r11
1669         andq    $4095,%r11
1670         cmpq    %r11,%r10
1671         jb      L$from_sp_alt
1672         subq    %r11,%rsp
1673         leaq    -64(%rsp,%r9,2),%rsp
1674         jmp     L$from_sp_done
1676 .p2align        5
1677 L$from_sp_alt:
1678         leaq    4096-64(,%r9,2),%r10
1679         leaq    -64(%rsp,%r9,2),%rsp
1680         subq    %r10,%r11
1681         movq    $0,%r10
1682         cmovcq  %r10,%r11
1683         subq    %r11,%rsp
1684 L$from_sp_done:
1685         andq    $-64,%rsp
1686         movq    %r9,%r10
1687         negq    %r9
1698         movq    %r8,32(%rsp)
1699         movq    %rax,40(%rsp)
1700 L$from_body:
1701         movq    %r9,%r11
1702         leaq    48(%rsp),%rax
1703         pxor    %xmm0,%xmm0
1704         jmp     L$mul_by_1
1706 .p2align        5
1707 L$mul_by_1:
1708         movdqu  (%rsi),%xmm1
1709         movdqu  16(%rsi),%xmm2
1710         movdqu  32(%rsi),%xmm3
1711         movdqa  %xmm0,(%rax,%r9,1)
1712         movdqu  48(%rsi),%xmm4
1713         movdqa  %xmm0,16(%rax,%r9,1)
1714 .byte   0x48,0x8d,0xb6,0x40,0x00,0x00,0x00
1715         movdqa  %xmm1,(%rax)
1716         movdqa  %xmm0,32(%rax,%r9,1)
1717         movdqa  %xmm2,16(%rax)
1718         movdqa  %xmm0,48(%rax,%r9,1)
1719         movdqa  %xmm3,32(%rax)
1720         movdqa  %xmm4,48(%rax)
1721         leaq    64(%rax),%rax
1722         subq    $64,%r11
1723         jnz     L$mul_by_1
1725 .byte   102,72,15,110,207
1726 .byte   102,72,15,110,209
1727 .byte   0x67
1728         movq    %rcx,%rbp
1729 .byte   102,73,15,110,218
1730         call    sqr8x_reduction
1732         pxor    %xmm0,%xmm0
1733         leaq    48(%rsp),%rax
1734         movq    40(%rsp),%rsi
1735         jmp     L$from_mont_zero
1737 .p2align        5
1738 L$from_mont_zero:
1739         movdqa  %xmm0,0(%rax)
1740         movdqa  %xmm0,16(%rax)
1741         movdqa  %xmm0,32(%rax)
1742         movdqa  %xmm0,48(%rax)
1743         leaq    64(%rax),%rax
1744         subq    $32,%r9
1745         jnz     L$from_mont_zero
1747         movq    $1,%rax
1748         movq    -48(%rsi),%r15
1749         movq    -40(%rsi),%r14
1750         movq    -32(%rsi),%r13
1751         movq    -24(%rsi),%r12
1752         movq    -16(%rsi),%rbp
1753         movq    -8(%rsi),%rbx
1754         leaq    (%rsi),%rsp
1755 L$from_epilogue:
1756         .byte   0xf3,0xc3
1758 .globl  _bn_scatter5
1759 .private_extern _bn_scatter5
1761 .p2align        4
1762 _bn_scatter5:
1763         cmpl    $0,%esi
1764         jz      L$scatter_epilogue
1765         leaq    (%rdx,%rcx,8),%rdx
1766 L$scatter:
1767         movq    (%rdi),%rax
1768         leaq    8(%rdi),%rdi
1769         movq    %rax,(%rdx)
1770         leaq    256(%rdx),%rdx
1771         subl    $1,%esi
1772         jnz     L$scatter
1773 L$scatter_epilogue:
1774         .byte   0xf3,0xc3
1777 .globl  _bn_gather5
1778 .private_extern _bn_gather5
1780 .p2align        4
1781 _bn_gather5:
1782         movl    %ecx,%r11d
1783         shrl    $3,%ecx
1784         andq    $7,%r11
1785         notl    %ecx
1786         leaq    L$magic_masks(%rip),%rax
1787         andl    $3,%ecx
1788         leaq    128(%rdx,%r11,8),%rdx
1789         movq    0(%rax,%rcx,8),%xmm4
1790         movq    8(%rax,%rcx,8),%xmm5
1791         movq    16(%rax,%rcx,8),%xmm6
1792         movq    24(%rax,%rcx,8),%xmm7
1793         jmp     L$gather
1794 .p2align        4
1795 L$gather:
1796         movq    -128(%rdx),%xmm0
1797         movq    -64(%rdx),%xmm1
1798         pand    %xmm4,%xmm0
1799         movq    0(%rdx),%xmm2
1800         pand    %xmm5,%xmm1
1801         movq    64(%rdx),%xmm3
1802         pand    %xmm6,%xmm2
1803         por     %xmm1,%xmm0
1804         pand    %xmm7,%xmm3
1805 .byte   0x67,0x67
1806         por     %xmm2,%xmm0
1807         leaq    256(%rdx),%rdx
1808         por     %xmm3,%xmm0
1810         movq    %xmm0,(%rdi)
1811         leaq    8(%rdi),%rdi
1812         subl    $1,%esi
1813         jnz     L$gather
1814         .byte   0xf3,0xc3
1815 L$SEH_end_bn_gather5:
1817 .p2align        6
1818 L$magic_masks:
1819 .long   0,0, 0,0, 0,0, -1,-1
1820 .long   0,0, 0,0, 0,0,  0,0
1821 .byte   77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115,99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1822 #endif