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