Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / linux-x86_64 / crypto / bn / rsaz-x86_64.S
1 #if defined(__x86_64__)
2 .text   
3
4
5
6 .globl  rsaz_512_sqr
7 .hidden rsaz_512_sqr
8 .type   rsaz_512_sqr,@function
9 .align  32
10 rsaz_512_sqr:
11         pushq   %rbx
12         pushq   %rbp
13         pushq   %r12
14         pushq   %r13
15         pushq   %r14
16         pushq   %r15
17
18         subq    $128+24,%rsp
19 .Lsqr_body:
20         movq    %rdx,%rbp
21         movq    (%rsi),%rdx
22         movq    8(%rsi),%rax
23         movq    %rcx,128(%rsp)
24         jmp     .Loop_sqr
25
26 .align  32
27 .Loop_sqr:
28         movl    %r8d,128+8(%rsp)
29
30         movq    %rdx,%rbx
31         mulq    %rdx
32         movq    %rax,%r8
33         movq    16(%rsi),%rax
34         movq    %rdx,%r9
35
36         mulq    %rbx
37         addq    %rax,%r9
38         movq    24(%rsi),%rax
39         movq    %rdx,%r10
40         adcq    $0,%r10
41
42         mulq    %rbx
43         addq    %rax,%r10
44         movq    32(%rsi),%rax
45         movq    %rdx,%r11
46         adcq    $0,%r11
47
48         mulq    %rbx
49         addq    %rax,%r11
50         movq    40(%rsi),%rax
51         movq    %rdx,%r12
52         adcq    $0,%r12
53
54         mulq    %rbx
55         addq    %rax,%r12
56         movq    48(%rsi),%rax
57         movq    %rdx,%r13
58         adcq    $0,%r13
59
60         mulq    %rbx
61         addq    %rax,%r13
62         movq    56(%rsi),%rax
63         movq    %rdx,%r14
64         adcq    $0,%r14
65
66         mulq    %rbx
67         addq    %rax,%r14
68         movq    %rbx,%rax
69         movq    %rdx,%r15
70         adcq    $0,%r15
71
72         addq    %r8,%r8
73         movq    %r9,%rcx
74         adcq    %r9,%r9
75
76         mulq    %rax
77         movq    %rax,(%rsp)
78         addq    %rdx,%r8
79         adcq    $0,%r9
80
81         movq    %r8,8(%rsp)
82         shrq    $63,%rcx
83
84
85         movq    8(%rsi),%r8
86         movq    16(%rsi),%rax
87         mulq    %r8
88         addq    %rax,%r10
89         movq    24(%rsi),%rax
90         movq    %rdx,%rbx
91         adcq    $0,%rbx
92
93         mulq    %r8
94         addq    %rax,%r11
95         movq    32(%rsi),%rax
96         adcq    $0,%rdx
97         addq    %rbx,%r11
98         movq    %rdx,%rbx
99         adcq    $0,%rbx
100
101         mulq    %r8
102         addq    %rax,%r12
103         movq    40(%rsi),%rax
104         adcq    $0,%rdx
105         addq    %rbx,%r12
106         movq    %rdx,%rbx
107         adcq    $0,%rbx
108
109         mulq    %r8
110         addq    %rax,%r13
111         movq    48(%rsi),%rax
112         adcq    $0,%rdx
113         addq    %rbx,%r13
114         movq    %rdx,%rbx
115         adcq    $0,%rbx
116
117         mulq    %r8
118         addq    %rax,%r14
119         movq    56(%rsi),%rax
120         adcq    $0,%rdx
121         addq    %rbx,%r14
122         movq    %rdx,%rbx
123         adcq    $0,%rbx
124
125         mulq    %r8
126         addq    %rax,%r15
127         movq    %r8,%rax
128         adcq    $0,%rdx
129         addq    %rbx,%r15
130         movq    %rdx,%r8
131         movq    %r10,%rdx
132         adcq    $0,%r8
133
134         addq    %rdx,%rdx
135         leaq    (%rcx,%r10,2),%r10
136         movq    %r11,%rbx
137         adcq    %r11,%r11
138
139         mulq    %rax
140         addq    %rax,%r9
141         adcq    %rdx,%r10
142         adcq    $0,%r11
143
144         movq    %r9,16(%rsp)
145         movq    %r10,24(%rsp)
146         shrq    $63,%rbx
147
148
149         movq    16(%rsi),%r9
150         movq    24(%rsi),%rax
151         mulq    %r9
152         addq    %rax,%r12
153         movq    32(%rsi),%rax
154         movq    %rdx,%rcx
155         adcq    $0,%rcx
156
157         mulq    %r9
158         addq    %rax,%r13
159         movq    40(%rsi),%rax
160         adcq    $0,%rdx
161         addq    %rcx,%r13
162         movq    %rdx,%rcx
163         adcq    $0,%rcx
164
165         mulq    %r9
166         addq    %rax,%r14
167         movq    48(%rsi),%rax
168         adcq    $0,%rdx
169         addq    %rcx,%r14
170         movq    %rdx,%rcx
171         adcq    $0,%rcx
172
173         mulq    %r9
174         movq    %r12,%r10
175         leaq    (%rbx,%r12,2),%r12
176         addq    %rax,%r15
177         movq    56(%rsi),%rax
178         adcq    $0,%rdx
179         addq    %rcx,%r15
180         movq    %rdx,%rcx
181         adcq    $0,%rcx
182
183         mulq    %r9
184         shrq    $63,%r10
185         addq    %rax,%r8
186         movq    %r9,%rax
187         adcq    $0,%rdx
188         addq    %rcx,%r8
189         movq    %rdx,%r9
190         adcq    $0,%r9
191
192         movq    %r13,%rcx
193         leaq    (%r10,%r13,2),%r13
194
195         mulq    %rax
196         addq    %rax,%r11
197         adcq    %rdx,%r12
198         adcq    $0,%r13
199
200         movq    %r11,32(%rsp)
201         movq    %r12,40(%rsp)
202         shrq    $63,%rcx
203
204
205         movq    24(%rsi),%r10
206         movq    32(%rsi),%rax
207         mulq    %r10
208         addq    %rax,%r14
209         movq    40(%rsi),%rax
210         movq    %rdx,%rbx
211         adcq    $0,%rbx
212
213         mulq    %r10
214         addq    %rax,%r15
215         movq    48(%rsi),%rax
216         adcq    $0,%rdx
217         addq    %rbx,%r15
218         movq    %rdx,%rbx
219         adcq    $0,%rbx
220
221         mulq    %r10
222         movq    %r14,%r12
223         leaq    (%rcx,%r14,2),%r14
224         addq    %rax,%r8
225         movq    56(%rsi),%rax
226         adcq    $0,%rdx
227         addq    %rbx,%r8
228         movq    %rdx,%rbx
229         adcq    $0,%rbx
230
231         mulq    %r10
232         shrq    $63,%r12
233         addq    %rax,%r9
234         movq    %r10,%rax
235         adcq    $0,%rdx
236         addq    %rbx,%r9
237         movq    %rdx,%r10
238         adcq    $0,%r10
239
240         movq    %r15,%rbx
241         leaq    (%r12,%r15,2),%r15
242
243         mulq    %rax
244         addq    %rax,%r13
245         adcq    %rdx,%r14
246         adcq    $0,%r15
247
248         movq    %r13,48(%rsp)
249         movq    %r14,56(%rsp)
250         shrq    $63,%rbx
251
252
253         movq    32(%rsi),%r11
254         movq    40(%rsi),%rax
255         mulq    %r11
256         addq    %rax,%r8
257         movq    48(%rsi),%rax
258         movq    %rdx,%rcx
259         adcq    $0,%rcx
260
261         mulq    %r11
262         addq    %rax,%r9
263         movq    56(%rsi),%rax
264         adcq    $0,%rdx
265         movq    %r8,%r12
266         leaq    (%rbx,%r8,2),%r8
267         addq    %rcx,%r9
268         movq    %rdx,%rcx
269         adcq    $0,%rcx
270
271         mulq    %r11
272         shrq    $63,%r12
273         addq    %rax,%r10
274         movq    %r11,%rax
275         adcq    $0,%rdx
276         addq    %rcx,%r10
277         movq    %rdx,%r11
278         adcq    $0,%r11
279
280         movq    %r9,%rcx
281         leaq    (%r12,%r9,2),%r9
282
283         mulq    %rax
284         addq    %rax,%r15
285         adcq    %rdx,%r8
286         adcq    $0,%r9
287
288         movq    %r15,64(%rsp)
289         movq    %r8,72(%rsp)
290         shrq    $63,%rcx
291
292
293         movq    40(%rsi),%r12
294         movq    48(%rsi),%rax
295         mulq    %r12
296         addq    %rax,%r10
297         movq    56(%rsi),%rax
298         movq    %rdx,%rbx
299         adcq    $0,%rbx
300
301         mulq    %r12
302         addq    %rax,%r11
303         movq    %r12,%rax
304         movq    %r10,%r15
305         leaq    (%rcx,%r10,2),%r10
306         adcq    $0,%rdx
307         shrq    $63,%r15
308         addq    %rbx,%r11
309         movq    %rdx,%r12
310         adcq    $0,%r12
311
312         movq    %r11,%rbx
313         leaq    (%r15,%r11,2),%r11
314
315         mulq    %rax
316         addq    %rax,%r9
317         adcq    %rdx,%r10
318         adcq    $0,%r11
319
320         movq    %r9,80(%rsp)
321         movq    %r10,88(%rsp)
322
323
324         movq    48(%rsi),%r13
325         movq    56(%rsi),%rax
326         mulq    %r13
327         addq    %rax,%r12
328         movq    %r13,%rax
329         movq    %rdx,%r13
330         adcq    $0,%r13
331
332         xorq    %r14,%r14
333         shlq    $1,%rbx
334         adcq    %r12,%r12
335         adcq    %r13,%r13
336         adcq    %r14,%r14
337
338         mulq    %rax
339         addq    %rax,%r11
340         adcq    %rdx,%r12
341         adcq    $0,%r13
342
343         movq    %r11,96(%rsp)
344         movq    %r12,104(%rsp)
345
346
347         movq    56(%rsi),%rax
348         mulq    %rax
349         addq    %rax,%r13
350         adcq    $0,%rdx
351
352         addq    %rdx,%r14
353
354         movq    %r13,112(%rsp)
355         movq    %r14,120(%rsp)
356
357         movq    (%rsp),%r8
358         movq    8(%rsp),%r9
359         movq    16(%rsp),%r10
360         movq    24(%rsp),%r11
361         movq    32(%rsp),%r12
362         movq    40(%rsp),%r13
363         movq    48(%rsp),%r14
364         movq    56(%rsp),%r15
365
366         call    __rsaz_512_reduce
367
368         addq    64(%rsp),%r8
369         adcq    72(%rsp),%r9
370         adcq    80(%rsp),%r10
371         adcq    88(%rsp),%r11
372         adcq    96(%rsp),%r12
373         adcq    104(%rsp),%r13
374         adcq    112(%rsp),%r14
375         adcq    120(%rsp),%r15
376         sbbq    %rcx,%rcx
377
378         call    __rsaz_512_subtract
379
380         movq    %r8,%rdx
381         movq    %r9,%rax
382         movl    128+8(%rsp),%r8d
383         movq    %rdi,%rsi
384
385         decl    %r8d
386         jnz     .Loop_sqr
387
388         leaq    128+24+48(%rsp),%rax
389         movq    -48(%rax),%r15
390         movq    -40(%rax),%r14
391         movq    -32(%rax),%r13
392         movq    -24(%rax),%r12
393         movq    -16(%rax),%rbp
394         movq    -8(%rax),%rbx
395         leaq    (%rax),%rsp
396 .Lsqr_epilogue:
397         .byte   0xf3,0xc3
398 .size   rsaz_512_sqr,.-rsaz_512_sqr
399 .globl  rsaz_512_mul
400 .hidden rsaz_512_mul
401 .type   rsaz_512_mul,@function
402 .align  32
403 rsaz_512_mul:
404         pushq   %rbx
405         pushq   %rbp
406         pushq   %r12
407         pushq   %r13
408         pushq   %r14
409         pushq   %r15
410
411         subq    $128+24,%rsp
412 .Lmul_body:
413 .byte   102,72,15,110,199
414 .byte   102,72,15,110,201
415         movq    %r8,128(%rsp)
416         movq    (%rdx),%rbx
417         movq    %rdx,%rbp
418         call    __rsaz_512_mul
419
420 .byte   102,72,15,126,199
421 .byte   102,72,15,126,205
422
423         movq    (%rsp),%r8
424         movq    8(%rsp),%r9
425         movq    16(%rsp),%r10
426         movq    24(%rsp),%r11
427         movq    32(%rsp),%r12
428         movq    40(%rsp),%r13
429         movq    48(%rsp),%r14
430         movq    56(%rsp),%r15
431
432         call    __rsaz_512_reduce
433         addq    64(%rsp),%r8
434         adcq    72(%rsp),%r9
435         adcq    80(%rsp),%r10
436         adcq    88(%rsp),%r11
437         adcq    96(%rsp),%r12
438         adcq    104(%rsp),%r13
439         adcq    112(%rsp),%r14
440         adcq    120(%rsp),%r15
441         sbbq    %rcx,%rcx
442
443         call    __rsaz_512_subtract
444
445         leaq    128+24+48(%rsp),%rax
446         movq    -48(%rax),%r15
447         movq    -40(%rax),%r14
448         movq    -32(%rax),%r13
449         movq    -24(%rax),%r12
450         movq    -16(%rax),%rbp
451         movq    -8(%rax),%rbx
452         leaq    (%rax),%rsp
453 .Lmul_epilogue:
454         .byte   0xf3,0xc3
455 .size   rsaz_512_mul,.-rsaz_512_mul
456 .globl  rsaz_512_mul_gather4
457 .hidden rsaz_512_mul_gather4
458 .type   rsaz_512_mul_gather4,@function
459 .align  32
460 rsaz_512_mul_gather4:
461         pushq   %rbx
462         pushq   %rbp
463         pushq   %r12
464         pushq   %r13
465         pushq   %r14
466         pushq   %r15
467
468         movl    %r9d,%r9d
469         subq    $128+24,%rsp
470 .Lmul_gather4_body:
471         movl    64(%rdx,%r9,4),%eax
472 .byte   102,72,15,110,199
473         movl    (%rdx,%r9,4),%ebx
474 .byte   102,72,15,110,201
475         movq    %r8,128(%rsp)
476
477         shlq    $32,%rax
478         orq     %rax,%rbx
479         movq    (%rsi),%rax
480         movq    8(%rsi),%rcx
481         leaq    128(%rdx,%r9,4),%rbp
482         mulq    %rbx
483         movq    %rax,(%rsp)
484         movq    %rcx,%rax
485         movq    %rdx,%r8
486
487         mulq    %rbx
488         movd    (%rbp),%xmm4
489         addq    %rax,%r8
490         movq    16(%rsi),%rax
491         movq    %rdx,%r9
492         adcq    $0,%r9
493
494         mulq    %rbx
495         movd    64(%rbp),%xmm5
496         addq    %rax,%r9
497         movq    24(%rsi),%rax
498         movq    %rdx,%r10
499         adcq    $0,%r10
500
501         mulq    %rbx
502         pslldq  $4,%xmm5
503         addq    %rax,%r10
504         movq    32(%rsi),%rax
505         movq    %rdx,%r11
506         adcq    $0,%r11
507
508         mulq    %rbx
509         por     %xmm5,%xmm4
510         addq    %rax,%r11
511         movq    40(%rsi),%rax
512         movq    %rdx,%r12
513         adcq    $0,%r12
514
515         mulq    %rbx
516         addq    %rax,%r12
517         movq    48(%rsi),%rax
518         movq    %rdx,%r13
519         adcq    $0,%r13
520
521         mulq    %rbx
522         leaq    128(%rbp),%rbp
523         addq    %rax,%r13
524         movq    56(%rsi),%rax
525         movq    %rdx,%r14
526         adcq    $0,%r14
527
528         mulq    %rbx
529 .byte   102,72,15,126,227
530         addq    %rax,%r14
531         movq    (%rsi),%rax
532         movq    %rdx,%r15
533         adcq    $0,%r15
534
535         leaq    8(%rsp),%rdi
536         movl    $7,%ecx
537         jmp     .Loop_mul_gather
538
539 .align  32
540 .Loop_mul_gather:
541         mulq    %rbx
542         addq    %rax,%r8
543         movq    8(%rsi),%rax
544         movq    %r8,(%rdi)
545         movq    %rdx,%r8
546         adcq    $0,%r8
547
548         mulq    %rbx
549         movd    (%rbp),%xmm4
550         addq    %rax,%r9
551         movq    16(%rsi),%rax
552         adcq    $0,%rdx
553         addq    %r9,%r8
554         movq    %rdx,%r9
555         adcq    $0,%r9
556
557         mulq    %rbx
558         movd    64(%rbp),%xmm5
559         addq    %rax,%r10
560         movq    24(%rsi),%rax
561         adcq    $0,%rdx
562         addq    %r10,%r9
563         movq    %rdx,%r10
564         adcq    $0,%r10
565
566         mulq    %rbx
567         pslldq  $4,%xmm5
568         addq    %rax,%r11
569         movq    32(%rsi),%rax
570         adcq    $0,%rdx
571         addq    %r11,%r10
572         movq    %rdx,%r11
573         adcq    $0,%r11
574
575         mulq    %rbx
576         por     %xmm5,%xmm4
577         addq    %rax,%r12
578         movq    40(%rsi),%rax
579         adcq    $0,%rdx
580         addq    %r12,%r11
581         movq    %rdx,%r12
582         adcq    $0,%r12
583
584         mulq    %rbx
585         addq    %rax,%r13
586         movq    48(%rsi),%rax
587         adcq    $0,%rdx
588         addq    %r13,%r12
589         movq    %rdx,%r13
590         adcq    $0,%r13
591
592         mulq    %rbx
593         addq    %rax,%r14
594         movq    56(%rsi),%rax
595         adcq    $0,%rdx
596         addq    %r14,%r13
597         movq    %rdx,%r14
598         adcq    $0,%r14
599
600         mulq    %rbx
601 .byte   102,72,15,126,227
602         addq    %rax,%r15
603         movq    (%rsi),%rax
604         adcq    $0,%rdx
605         addq    %r15,%r14
606         movq    %rdx,%r15
607         adcq    $0,%r15
608
609         leaq    128(%rbp),%rbp
610         leaq    8(%rdi),%rdi
611
612         decl    %ecx
613         jnz     .Loop_mul_gather
614
615         movq    %r8,(%rdi)
616         movq    %r9,8(%rdi)
617         movq    %r10,16(%rdi)
618         movq    %r11,24(%rdi)
619         movq    %r12,32(%rdi)
620         movq    %r13,40(%rdi)
621         movq    %r14,48(%rdi)
622         movq    %r15,56(%rdi)
623
624 .byte   102,72,15,126,199
625 .byte   102,72,15,126,205
626
627         movq    (%rsp),%r8
628         movq    8(%rsp),%r9
629         movq    16(%rsp),%r10
630         movq    24(%rsp),%r11
631         movq    32(%rsp),%r12
632         movq    40(%rsp),%r13
633         movq    48(%rsp),%r14
634         movq    56(%rsp),%r15
635
636         call    __rsaz_512_reduce
637         addq    64(%rsp),%r8
638         adcq    72(%rsp),%r9
639         adcq    80(%rsp),%r10
640         adcq    88(%rsp),%r11
641         adcq    96(%rsp),%r12
642         adcq    104(%rsp),%r13
643         adcq    112(%rsp),%r14
644         adcq    120(%rsp),%r15
645         sbbq    %rcx,%rcx
646
647         call    __rsaz_512_subtract
648
649         leaq    128+24+48(%rsp),%rax
650         movq    -48(%rax),%r15
651         movq    -40(%rax),%r14
652         movq    -32(%rax),%r13
653         movq    -24(%rax),%r12
654         movq    -16(%rax),%rbp
655         movq    -8(%rax),%rbx
656         leaq    (%rax),%rsp
657 .Lmul_gather4_epilogue:
658         .byte   0xf3,0xc3
659 .size   rsaz_512_mul_gather4,.-rsaz_512_mul_gather4
660 .globl  rsaz_512_mul_scatter4
661 .hidden rsaz_512_mul_scatter4
662 .type   rsaz_512_mul_scatter4,@function
663 .align  32
664 rsaz_512_mul_scatter4:
665         pushq   %rbx
666         pushq   %rbp
667         pushq   %r12
668         pushq   %r13
669         pushq   %r14
670         pushq   %r15
671
672         movl    %r9d,%r9d
673         subq    $128+24,%rsp
674 .Lmul_scatter4_body:
675         leaq    (%r8,%r9,4),%r8
676 .byte   102,72,15,110,199
677 .byte   102,72,15,110,202
678 .byte   102,73,15,110,208
679         movq    %rcx,128(%rsp)
680
681         movq    %rdi,%rbp
682         movq    (%rdi),%rbx
683         call    __rsaz_512_mul
684
685 .byte   102,72,15,126,199
686 .byte   102,72,15,126,205
687
688         movq    (%rsp),%r8
689         movq    8(%rsp),%r9
690         movq    16(%rsp),%r10
691         movq    24(%rsp),%r11
692         movq    32(%rsp),%r12
693         movq    40(%rsp),%r13
694         movq    48(%rsp),%r14
695         movq    56(%rsp),%r15
696
697         call    __rsaz_512_reduce
698         addq    64(%rsp),%r8
699         adcq    72(%rsp),%r9
700         adcq    80(%rsp),%r10
701         adcq    88(%rsp),%r11
702         adcq    96(%rsp),%r12
703         adcq    104(%rsp),%r13
704         adcq    112(%rsp),%r14
705         adcq    120(%rsp),%r15
706 .byte   102,72,15,126,214
707         sbbq    %rcx,%rcx
708
709         call    __rsaz_512_subtract
710
711         movl    %r8d,0(%rsi)
712         shrq    $32,%r8
713         movl    %r9d,128(%rsi)
714         shrq    $32,%r9
715         movl    %r10d,256(%rsi)
716         shrq    $32,%r10
717         movl    %r11d,384(%rsi)
718         shrq    $32,%r11
719         movl    %r12d,512(%rsi)
720         shrq    $32,%r12
721         movl    %r13d,640(%rsi)
722         shrq    $32,%r13
723         movl    %r14d,768(%rsi)
724         shrq    $32,%r14
725         movl    %r15d,896(%rsi)
726         shrq    $32,%r15
727         movl    %r8d,64(%rsi)
728         movl    %r9d,192(%rsi)
729         movl    %r10d,320(%rsi)
730         movl    %r11d,448(%rsi)
731         movl    %r12d,576(%rsi)
732         movl    %r13d,704(%rsi)
733         movl    %r14d,832(%rsi)
734         movl    %r15d,960(%rsi)
735
736         leaq    128+24+48(%rsp),%rax
737         movq    -48(%rax),%r15
738         movq    -40(%rax),%r14
739         movq    -32(%rax),%r13
740         movq    -24(%rax),%r12
741         movq    -16(%rax),%rbp
742         movq    -8(%rax),%rbx
743         leaq    (%rax),%rsp
744 .Lmul_scatter4_epilogue:
745         .byte   0xf3,0xc3
746 .size   rsaz_512_mul_scatter4,.-rsaz_512_mul_scatter4
747 .globl  rsaz_512_mul_by_one
748 .hidden rsaz_512_mul_by_one
749 .type   rsaz_512_mul_by_one,@function
750 .align  32
751 rsaz_512_mul_by_one:
752         pushq   %rbx
753         pushq   %rbp
754         pushq   %r12
755         pushq   %r13
756         pushq   %r14
757         pushq   %r15
758
759         subq    $128+24,%rsp
760 .Lmul_by_one_body:
761         movq    %rdx,%rbp
762         movq    %rcx,128(%rsp)
763
764         movq    (%rsi),%r8
765         pxor    %xmm0,%xmm0
766         movq    8(%rsi),%r9
767         movq    16(%rsi),%r10
768         movq    24(%rsi),%r11
769         movq    32(%rsi),%r12
770         movq    40(%rsi),%r13
771         movq    48(%rsi),%r14
772         movq    56(%rsi),%r15
773
774         movdqa  %xmm0,(%rsp)
775         movdqa  %xmm0,16(%rsp)
776         movdqa  %xmm0,32(%rsp)
777         movdqa  %xmm0,48(%rsp)
778         movdqa  %xmm0,64(%rsp)
779         movdqa  %xmm0,80(%rsp)
780         movdqa  %xmm0,96(%rsp)
781         call    __rsaz_512_reduce
782         movq    %r8,(%rdi)
783         movq    %r9,8(%rdi)
784         movq    %r10,16(%rdi)
785         movq    %r11,24(%rdi)
786         movq    %r12,32(%rdi)
787         movq    %r13,40(%rdi)
788         movq    %r14,48(%rdi)
789         movq    %r15,56(%rdi)
790
791         leaq    128+24+48(%rsp),%rax
792         movq    -48(%rax),%r15
793         movq    -40(%rax),%r14
794         movq    -32(%rax),%r13
795         movq    -24(%rax),%r12
796         movq    -16(%rax),%rbp
797         movq    -8(%rax),%rbx
798         leaq    (%rax),%rsp
799 .Lmul_by_one_epilogue:
800         .byte   0xf3,0xc3
801 .size   rsaz_512_mul_by_one,.-rsaz_512_mul_by_one
802 .type   __rsaz_512_reduce,@function
803 .align  32
804 __rsaz_512_reduce:
805         movq    %r8,%rbx
806         imulq   128+8(%rsp),%rbx
807         movq    0(%rbp),%rax
808         movl    $8,%ecx
809         jmp     .Lreduction_loop
810
811 .align  32
812 .Lreduction_loop:
813         mulq    %rbx
814         movq    8(%rbp),%rax
815         negq    %r8
816         movq    %rdx,%r8
817         adcq    $0,%r8
818
819         mulq    %rbx
820         addq    %rax,%r9
821         movq    16(%rbp),%rax
822         adcq    $0,%rdx
823         addq    %r9,%r8
824         movq    %rdx,%r9
825         adcq    $0,%r9
826
827         mulq    %rbx
828         addq    %rax,%r10
829         movq    24(%rbp),%rax
830         adcq    $0,%rdx
831         addq    %r10,%r9
832         movq    %rdx,%r10
833         adcq    $0,%r10
834
835         mulq    %rbx
836         addq    %rax,%r11
837         movq    32(%rbp),%rax
838         adcq    $0,%rdx
839         addq    %r11,%r10
840         movq    128+8(%rsp),%rsi
841
842
843         adcq    $0,%rdx
844         movq    %rdx,%r11
845
846         mulq    %rbx
847         addq    %rax,%r12
848         movq    40(%rbp),%rax
849         adcq    $0,%rdx
850         imulq   %r8,%rsi
851         addq    %r12,%r11
852         movq    %rdx,%r12
853         adcq    $0,%r12
854
855         mulq    %rbx
856         addq    %rax,%r13
857         movq    48(%rbp),%rax
858         adcq    $0,%rdx
859         addq    %r13,%r12
860         movq    %rdx,%r13
861         adcq    $0,%r13
862
863         mulq    %rbx
864         addq    %rax,%r14
865         movq    56(%rbp),%rax
866         adcq    $0,%rdx
867         addq    %r14,%r13
868         movq    %rdx,%r14
869         adcq    $0,%r14
870
871         mulq    %rbx
872         movq    %rsi,%rbx
873         addq    %rax,%r15
874         movq    0(%rbp),%rax
875         adcq    $0,%rdx
876         addq    %r15,%r14
877         movq    %rdx,%r15
878         adcq    $0,%r15
879
880         decl    %ecx
881         jne     .Lreduction_loop
882
883         .byte   0xf3,0xc3
884 .size   __rsaz_512_reduce,.-__rsaz_512_reduce
885 .type   __rsaz_512_subtract,@function
886 .align  32
887 __rsaz_512_subtract:
888         movq    %r8,(%rdi)
889         movq    %r9,8(%rdi)
890         movq    %r10,16(%rdi)
891         movq    %r11,24(%rdi)
892         movq    %r12,32(%rdi)
893         movq    %r13,40(%rdi)
894         movq    %r14,48(%rdi)
895         movq    %r15,56(%rdi)
896
897         movq    0(%rbp),%r8
898         movq    8(%rbp),%r9
899         negq    %r8
900         notq    %r9
901         andq    %rcx,%r8
902         movq    16(%rbp),%r10
903         andq    %rcx,%r9
904         notq    %r10
905         movq    24(%rbp),%r11
906         andq    %rcx,%r10
907         notq    %r11
908         movq    32(%rbp),%r12
909         andq    %rcx,%r11
910         notq    %r12
911         movq    40(%rbp),%r13
912         andq    %rcx,%r12
913         notq    %r13
914         movq    48(%rbp),%r14
915         andq    %rcx,%r13
916         notq    %r14
917         movq    56(%rbp),%r15
918         andq    %rcx,%r14
919         notq    %r15
920         andq    %rcx,%r15
921
922         addq    (%rdi),%r8
923         adcq    8(%rdi),%r9
924         adcq    16(%rdi),%r10
925         adcq    24(%rdi),%r11
926         adcq    32(%rdi),%r12
927         adcq    40(%rdi),%r13
928         adcq    48(%rdi),%r14
929         adcq    56(%rdi),%r15
930
931         movq    %r8,(%rdi)
932         movq    %r9,8(%rdi)
933         movq    %r10,16(%rdi)
934         movq    %r11,24(%rdi)
935         movq    %r12,32(%rdi)
936         movq    %r13,40(%rdi)
937         movq    %r14,48(%rdi)
938         movq    %r15,56(%rdi)
939
940         .byte   0xf3,0xc3
941 .size   __rsaz_512_subtract,.-__rsaz_512_subtract
942 .type   __rsaz_512_mul,@function
943 .align  32
944 __rsaz_512_mul:
945         leaq    8(%rsp),%rdi
946
947         movq    (%rsi),%rax
948         mulq    %rbx
949         movq    %rax,(%rdi)
950         movq    8(%rsi),%rax
951         movq    %rdx,%r8
952
953         mulq    %rbx
954         addq    %rax,%r8
955         movq    16(%rsi),%rax
956         movq    %rdx,%r9
957         adcq    $0,%r9
958
959         mulq    %rbx
960         addq    %rax,%r9
961         movq    24(%rsi),%rax
962         movq    %rdx,%r10
963         adcq    $0,%r10
964
965         mulq    %rbx
966         addq    %rax,%r10
967         movq    32(%rsi),%rax
968         movq    %rdx,%r11
969         adcq    $0,%r11
970
971         mulq    %rbx
972         addq    %rax,%r11
973         movq    40(%rsi),%rax
974         movq    %rdx,%r12
975         adcq    $0,%r12
976
977         mulq    %rbx
978         addq    %rax,%r12
979         movq    48(%rsi),%rax
980         movq    %rdx,%r13
981         adcq    $0,%r13
982
983         mulq    %rbx
984         addq    %rax,%r13
985         movq    56(%rsi),%rax
986         movq    %rdx,%r14
987         adcq    $0,%r14
988
989         mulq    %rbx
990         addq    %rax,%r14
991         movq    (%rsi),%rax
992         movq    %rdx,%r15
993         adcq    $0,%r15
994
995         leaq    8(%rbp),%rbp
996         leaq    8(%rdi),%rdi
997
998         movl    $7,%ecx
999         jmp     .Loop_mul
1000
1001 .align  32
1002 .Loop_mul:
1003         movq    (%rbp),%rbx
1004         mulq    %rbx
1005         addq    %rax,%r8
1006         movq    8(%rsi),%rax
1007         movq    %r8,(%rdi)
1008         movq    %rdx,%r8
1009         adcq    $0,%r8
1010
1011         mulq    %rbx
1012         addq    %rax,%r9
1013         movq    16(%rsi),%rax
1014         adcq    $0,%rdx
1015         addq    %r9,%r8
1016         movq    %rdx,%r9
1017         adcq    $0,%r9
1018
1019         mulq    %rbx
1020         addq    %rax,%r10
1021         movq    24(%rsi),%rax
1022         adcq    $0,%rdx
1023         addq    %r10,%r9
1024         movq    %rdx,%r10
1025         adcq    $0,%r10
1026
1027         mulq    %rbx
1028         addq    %rax,%r11
1029         movq    32(%rsi),%rax
1030         adcq    $0,%rdx
1031         addq    %r11,%r10
1032         movq    %rdx,%r11
1033         adcq    $0,%r11
1034
1035         mulq    %rbx
1036         addq    %rax,%r12
1037         movq    40(%rsi),%rax
1038         adcq    $0,%rdx
1039         addq    %r12,%r11
1040         movq    %rdx,%r12
1041         adcq    $0,%r12
1042
1043         mulq    %rbx
1044         addq    %rax,%r13
1045         movq    48(%rsi),%rax
1046         adcq    $0,%rdx
1047         addq    %r13,%r12
1048         movq    %rdx,%r13
1049         adcq    $0,%r13
1050
1051         mulq    %rbx
1052         addq    %rax,%r14
1053         movq    56(%rsi),%rax
1054         adcq    $0,%rdx
1055         addq    %r14,%r13
1056         movq    %rdx,%r14
1057         leaq    8(%rbp),%rbp
1058         adcq    $0,%r14
1059
1060         mulq    %rbx
1061         addq    %rax,%r15
1062         movq    (%rsi),%rax
1063         adcq    $0,%rdx
1064         addq    %r15,%r14
1065         movq    %rdx,%r15
1066         adcq    $0,%r15
1067
1068         leaq    8(%rdi),%rdi
1069
1070         decl    %ecx
1071         jnz     .Loop_mul
1072
1073         movq    %r8,(%rdi)
1074         movq    %r9,8(%rdi)
1075         movq    %r10,16(%rdi)
1076         movq    %r11,24(%rdi)
1077         movq    %r12,32(%rdi)
1078         movq    %r13,40(%rdi)
1079         movq    %r14,48(%rdi)
1080         movq    %r15,56(%rdi)
1081
1082         .byte   0xf3,0xc3
1083 .size   __rsaz_512_mul,.-__rsaz_512_mul
1084 .globl  rsaz_512_scatter4
1085 .hidden rsaz_512_scatter4
1086 .type   rsaz_512_scatter4,@function
1087 .align  16
1088 rsaz_512_scatter4:
1089         leaq    (%rdi,%rdx,4),%rdi
1090         movl    $8,%r9d
1091         jmp     .Loop_scatter
1092 .align  16
1093 .Loop_scatter:
1094         movq    (%rsi),%rax
1095         leaq    8(%rsi),%rsi
1096         movl    %eax,(%rdi)
1097         shrq    $32,%rax
1098         movl    %eax,64(%rdi)
1099         leaq    128(%rdi),%rdi
1100         decl    %r9d
1101         jnz     .Loop_scatter
1102         .byte   0xf3,0xc3
1103 .size   rsaz_512_scatter4,.-rsaz_512_scatter4
1104
1105 .globl  rsaz_512_gather4
1106 .hidden rsaz_512_gather4
1107 .type   rsaz_512_gather4,@function
1108 .align  16
1109 rsaz_512_gather4:
1110         leaq    (%rsi,%rdx,4),%rsi
1111         movl    $8,%r9d
1112         jmp     .Loop_gather
1113 .align  16
1114 .Loop_gather:
1115         movl    (%rsi),%eax
1116         movl    64(%rsi),%r8d
1117         leaq    128(%rsi),%rsi
1118         shlq    $32,%r8
1119         orq     %r8,%rax
1120         movq    %rax,(%rdi)
1121         leaq    8(%rdi),%rdi
1122         decl    %r9d
1123         jnz     .Loop_gather
1124         .byte   0xf3,0xc3
1125 .size   rsaz_512_gather4,.-rsaz_512_gather4
1126 #endif