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