Remove building with NOCRYPTO option
[minix.git] / crypto / external / bsd / openssl / lib / libcrypto / arch / i386 / bn-586.S
blob48e51b8039caddbe671d803aea38b71f505c3823
1 #include <machine/asm.h>
2 .text
3 .globl  bn_mul_add_words
4 .type   bn_mul_add_words,@function
5 .align  16
6 bn_mul_add_words:
7 .L_bn_mul_add_words_begin:
8         call    .L000PIC_me_up
9 .L000PIC_me_up:
10         popl    %eax
11         leal    _GLOBAL_OFFSET_TABLE_+[.-.L000PIC_me_up](%eax),%eax
12         movl    OPENSSL_ia32cap_P@GOT(%eax),%eax
13         btl     $26,(%eax)
14         jnc     .L001maw_non_sse2
15         movl    4(%esp),%eax
16         movl    8(%esp),%edx
17         movl    12(%esp),%ecx
18         movd    16(%esp),%mm0
19         pxor    %mm1,%mm1
20         jmp     .L002maw_sse2_entry
21 .align  16
22 .L003maw_sse2_unrolled:
23         movd    (%eax),%mm3
24         paddq   %mm3,%mm1
25         movd    (%edx),%mm2
26         pmuludq %mm0,%mm2
27         movd    4(%edx),%mm4
28         pmuludq %mm0,%mm4
29         movd    8(%edx),%mm6
30         pmuludq %mm0,%mm6
31         movd    12(%edx),%mm7
32         pmuludq %mm0,%mm7
33         paddq   %mm2,%mm1
34         movd    4(%eax),%mm3
35         paddq   %mm4,%mm3
36         movd    8(%eax),%mm5
37         paddq   %mm6,%mm5
38         movd    12(%eax),%mm4
39         paddq   %mm4,%mm7
40         movd    %mm1,(%eax)
41         movd    16(%edx),%mm2
42         pmuludq %mm0,%mm2
43         psrlq   $32,%mm1
44         movd    20(%edx),%mm4
45         pmuludq %mm0,%mm4
46         paddq   %mm3,%mm1
47         movd    24(%edx),%mm6
48         pmuludq %mm0,%mm6
49         movd    %mm1,4(%eax)
50         psrlq   $32,%mm1
51         movd    28(%edx),%mm3
52         addl    $32,%edx
53         pmuludq %mm0,%mm3
54         paddq   %mm5,%mm1
55         movd    16(%eax),%mm5
56         paddq   %mm5,%mm2
57         movd    %mm1,8(%eax)
58         psrlq   $32,%mm1
59         paddq   %mm7,%mm1
60         movd    20(%eax),%mm5
61         paddq   %mm5,%mm4
62         movd    %mm1,12(%eax)
63         psrlq   $32,%mm1
64         paddq   %mm2,%mm1
65         movd    24(%eax),%mm5
66         paddq   %mm5,%mm6
67         movd    %mm1,16(%eax)
68         psrlq   $32,%mm1
69         paddq   %mm4,%mm1
70         movd    28(%eax),%mm5
71         paddq   %mm5,%mm3
72         movd    %mm1,20(%eax)
73         psrlq   $32,%mm1
74         paddq   %mm6,%mm1
75         movd    %mm1,24(%eax)
76         psrlq   $32,%mm1
77         paddq   %mm3,%mm1
78         movd    %mm1,28(%eax)
79         leal    32(%eax),%eax
80         psrlq   $32,%mm1
81         subl    $8,%ecx
82         jz      .L004maw_sse2_exit
83 .L002maw_sse2_entry:
84         testl   $4294967288,%ecx
85         jnz     .L003maw_sse2_unrolled
86 .align  4
87 .L005maw_sse2_loop:
88         movd    (%edx),%mm2
89         movd    (%eax),%mm3
90         pmuludq %mm0,%mm2
91         leal    4(%edx),%edx
92         paddq   %mm3,%mm1
93         paddq   %mm2,%mm1
94         movd    %mm1,(%eax)
95         subl    $1,%ecx
96         psrlq   $32,%mm1
97         leal    4(%eax),%eax
98         jnz     .L005maw_sse2_loop
99 .L004maw_sse2_exit:
100         movd    %mm1,%eax
101         emms
102         ret
103 .align  16
104 .L001maw_non_sse2:
105         pushl   %ebp
106         pushl   %ebx
107         pushl   %esi
108         pushl   %edi
110         xorl    %esi,%esi
111         movl    20(%esp),%edi
112         movl    28(%esp),%ecx
113         movl    24(%esp),%ebx
114         andl    $4294967288,%ecx
115         movl    32(%esp),%ebp
116         pushl   %ecx
117         jz      .L006maw_finish
118 .align  16
119 .L007maw_loop:
121         movl    (%ebx),%eax
122         mull    %ebp
123         addl    %esi,%eax
124         adcl    $0,%edx
125         addl    (%edi),%eax
126         adcl    $0,%edx
127         movl    %eax,(%edi)
128         movl    %edx,%esi
130         movl    4(%ebx),%eax
131         mull    %ebp
132         addl    %esi,%eax
133         adcl    $0,%edx
134         addl    4(%edi),%eax
135         adcl    $0,%edx
136         movl    %eax,4(%edi)
137         movl    %edx,%esi
139         movl    8(%ebx),%eax
140         mull    %ebp
141         addl    %esi,%eax
142         adcl    $0,%edx
143         addl    8(%edi),%eax
144         adcl    $0,%edx
145         movl    %eax,8(%edi)
146         movl    %edx,%esi
148         movl    12(%ebx),%eax
149         mull    %ebp
150         addl    %esi,%eax
151         adcl    $0,%edx
152         addl    12(%edi),%eax
153         adcl    $0,%edx
154         movl    %eax,12(%edi)
155         movl    %edx,%esi
157         movl    16(%ebx),%eax
158         mull    %ebp
159         addl    %esi,%eax
160         adcl    $0,%edx
161         addl    16(%edi),%eax
162         adcl    $0,%edx
163         movl    %eax,16(%edi)
164         movl    %edx,%esi
166         movl    20(%ebx),%eax
167         mull    %ebp
168         addl    %esi,%eax
169         adcl    $0,%edx
170         addl    20(%edi),%eax
171         adcl    $0,%edx
172         movl    %eax,20(%edi)
173         movl    %edx,%esi
175         movl    24(%ebx),%eax
176         mull    %ebp
177         addl    %esi,%eax
178         adcl    $0,%edx
179         addl    24(%edi),%eax
180         adcl    $0,%edx
181         movl    %eax,24(%edi)
182         movl    %edx,%esi
184         movl    28(%ebx),%eax
185         mull    %ebp
186         addl    %esi,%eax
187         adcl    $0,%edx
188         addl    28(%edi),%eax
189         adcl    $0,%edx
190         movl    %eax,28(%edi)
191         movl    %edx,%esi
193         subl    $8,%ecx
194         leal    32(%ebx),%ebx
195         leal    32(%edi),%edi
196         jnz     .L007maw_loop
197 .L006maw_finish:
198         movl    32(%esp),%ecx
199         andl    $7,%ecx
200         jnz     .L008maw_finish2
201         jmp     .L009maw_end
202 .L008maw_finish2:
204         movl    (%ebx),%eax
205         mull    %ebp
206         addl    %esi,%eax
207         adcl    $0,%edx
208         addl    (%edi),%eax
209         adcl    $0,%edx
210         decl    %ecx
211         movl    %eax,(%edi)
212         movl    %edx,%esi
213         jz      .L009maw_end
215         movl    4(%ebx),%eax
216         mull    %ebp
217         addl    %esi,%eax
218         adcl    $0,%edx
219         addl    4(%edi),%eax
220         adcl    $0,%edx
221         decl    %ecx
222         movl    %eax,4(%edi)
223         movl    %edx,%esi
224         jz      .L009maw_end
226         movl    8(%ebx),%eax
227         mull    %ebp
228         addl    %esi,%eax
229         adcl    $0,%edx
230         addl    8(%edi),%eax
231         adcl    $0,%edx
232         decl    %ecx
233         movl    %eax,8(%edi)
234         movl    %edx,%esi
235         jz      .L009maw_end
237         movl    12(%ebx),%eax
238         mull    %ebp
239         addl    %esi,%eax
240         adcl    $0,%edx
241         addl    12(%edi),%eax
242         adcl    $0,%edx
243         decl    %ecx
244         movl    %eax,12(%edi)
245         movl    %edx,%esi
246         jz      .L009maw_end
248         movl    16(%ebx),%eax
249         mull    %ebp
250         addl    %esi,%eax
251         adcl    $0,%edx
252         addl    16(%edi),%eax
253         adcl    $0,%edx
254         decl    %ecx
255         movl    %eax,16(%edi)
256         movl    %edx,%esi
257         jz      .L009maw_end
259         movl    20(%ebx),%eax
260         mull    %ebp
261         addl    %esi,%eax
262         adcl    $0,%edx
263         addl    20(%edi),%eax
264         adcl    $0,%edx
265         decl    %ecx
266         movl    %eax,20(%edi)
267         movl    %edx,%esi
268         jz      .L009maw_end
270         movl    24(%ebx),%eax
271         mull    %ebp
272         addl    %esi,%eax
273         adcl    $0,%edx
274         addl    24(%edi),%eax
275         adcl    $0,%edx
276         movl    %eax,24(%edi)
277         movl    %edx,%esi
278 .L009maw_end:
279         movl    %esi,%eax
280         popl    %ecx
281         popl    %edi
282         popl    %esi
283         popl    %ebx
284         popl    %ebp
285         ret
286 .size   bn_mul_add_words,.-.L_bn_mul_add_words_begin
287 .globl  bn_mul_words
288 .type   bn_mul_words,@function
289 .align  16
290 bn_mul_words:
291 .L_bn_mul_words_begin:
292         call    .L010PIC_me_up
293 .L010PIC_me_up:
294         popl    %eax
295         leal    _GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%eax),%eax
296         movl    OPENSSL_ia32cap_P@GOT(%eax),%eax
297         btl     $26,(%eax)
298         jnc     .L011mw_non_sse2
299         movl    4(%esp),%eax
300         movl    8(%esp),%edx
301         movl    12(%esp),%ecx
302         movd    16(%esp),%mm0
303         pxor    %mm1,%mm1
304 .align  16
305 .L012mw_sse2_loop:
306         movd    (%edx),%mm2
307         pmuludq %mm0,%mm2
308         leal    4(%edx),%edx
309         paddq   %mm2,%mm1
310         movd    %mm1,(%eax)
311         subl    $1,%ecx
312         psrlq   $32,%mm1
313         leal    4(%eax),%eax
314         jnz     .L012mw_sse2_loop
315         movd    %mm1,%eax
316         emms
317         ret
318 .align  16
319 .L011mw_non_sse2:
320         pushl   %ebp
321         pushl   %ebx
322         pushl   %esi
323         pushl   %edi
325         xorl    %esi,%esi
326         movl    20(%esp),%edi
327         movl    24(%esp),%ebx
328         movl    28(%esp),%ebp
329         movl    32(%esp),%ecx
330         andl    $4294967288,%ebp
331         jz      .L013mw_finish
332 .L014mw_loop:
334         movl    (%ebx),%eax
335         mull    %ecx
336         addl    %esi,%eax
337         adcl    $0,%edx
338         movl    %eax,(%edi)
339         movl    %edx,%esi
341         movl    4(%ebx),%eax
342         mull    %ecx
343         addl    %esi,%eax
344         adcl    $0,%edx
345         movl    %eax,4(%edi)
346         movl    %edx,%esi
348         movl    8(%ebx),%eax
349         mull    %ecx
350         addl    %esi,%eax
351         adcl    $0,%edx
352         movl    %eax,8(%edi)
353         movl    %edx,%esi
355         movl    12(%ebx),%eax
356         mull    %ecx
357         addl    %esi,%eax
358         adcl    $0,%edx
359         movl    %eax,12(%edi)
360         movl    %edx,%esi
362         movl    16(%ebx),%eax
363         mull    %ecx
364         addl    %esi,%eax
365         adcl    $0,%edx
366         movl    %eax,16(%edi)
367         movl    %edx,%esi
369         movl    20(%ebx),%eax
370         mull    %ecx
371         addl    %esi,%eax
372         adcl    $0,%edx
373         movl    %eax,20(%edi)
374         movl    %edx,%esi
376         movl    24(%ebx),%eax
377         mull    %ecx
378         addl    %esi,%eax
379         adcl    $0,%edx
380         movl    %eax,24(%edi)
381         movl    %edx,%esi
383         movl    28(%ebx),%eax
384         mull    %ecx
385         addl    %esi,%eax
386         adcl    $0,%edx
387         movl    %eax,28(%edi)
388         movl    %edx,%esi
390         addl    $32,%ebx
391         addl    $32,%edi
392         subl    $8,%ebp
393         jz      .L013mw_finish
394         jmp     .L014mw_loop
395 .L013mw_finish:
396         movl    28(%esp),%ebp
397         andl    $7,%ebp
398         jnz     .L015mw_finish2
399         jmp     .L016mw_end
400 .L015mw_finish2:
402         movl    (%ebx),%eax
403         mull    %ecx
404         addl    %esi,%eax
405         adcl    $0,%edx
406         movl    %eax,(%edi)
407         movl    %edx,%esi
408         decl    %ebp
409         jz      .L016mw_end
411         movl    4(%ebx),%eax
412         mull    %ecx
413         addl    %esi,%eax
414         adcl    $0,%edx
415         movl    %eax,4(%edi)
416         movl    %edx,%esi
417         decl    %ebp
418         jz      .L016mw_end
420         movl    8(%ebx),%eax
421         mull    %ecx
422         addl    %esi,%eax
423         adcl    $0,%edx
424         movl    %eax,8(%edi)
425         movl    %edx,%esi
426         decl    %ebp
427         jz      .L016mw_end
429         movl    12(%ebx),%eax
430         mull    %ecx
431         addl    %esi,%eax
432         adcl    $0,%edx
433         movl    %eax,12(%edi)
434         movl    %edx,%esi
435         decl    %ebp
436         jz      .L016mw_end
438         movl    16(%ebx),%eax
439         mull    %ecx
440         addl    %esi,%eax
441         adcl    $0,%edx
442         movl    %eax,16(%edi)
443         movl    %edx,%esi
444         decl    %ebp
445         jz      .L016mw_end
447         movl    20(%ebx),%eax
448         mull    %ecx
449         addl    %esi,%eax
450         adcl    $0,%edx
451         movl    %eax,20(%edi)
452         movl    %edx,%esi
453         decl    %ebp
454         jz      .L016mw_end
456         movl    24(%ebx),%eax
457         mull    %ecx
458         addl    %esi,%eax
459         adcl    $0,%edx
460         movl    %eax,24(%edi)
461         movl    %edx,%esi
462 .L016mw_end:
463         movl    %esi,%eax
464         popl    %edi
465         popl    %esi
466         popl    %ebx
467         popl    %ebp
468         ret
469 .size   bn_mul_words,.-.L_bn_mul_words_begin
470 .globl  bn_sqr_words
471 .type   bn_sqr_words,@function
472 .align  16
473 bn_sqr_words:
474 .L_bn_sqr_words_begin:
475         call    .L017PIC_me_up
476 .L017PIC_me_up:
477         popl    %eax
478         leal    _GLOBAL_OFFSET_TABLE_+[.-.L017PIC_me_up](%eax),%eax
479         movl    OPENSSL_ia32cap_P@GOT(%eax),%eax
480         btl     $26,(%eax)
481         jnc     .L018sqr_non_sse2
482         movl    4(%esp),%eax
483         movl    8(%esp),%edx
484         movl    12(%esp),%ecx
485 .align  16
486 .L019sqr_sse2_loop:
487         movd    (%edx),%mm0
488         pmuludq %mm0,%mm0
489         leal    4(%edx),%edx
490         movq    %mm0,(%eax)
491         subl    $1,%ecx
492         leal    8(%eax),%eax
493         jnz     .L019sqr_sse2_loop
494         emms
495         ret
496 .align  16
497 .L018sqr_non_sse2:
498         pushl   %ebp
499         pushl   %ebx
500         pushl   %esi
501         pushl   %edi
503         movl    20(%esp),%esi
504         movl    24(%esp),%edi
505         movl    28(%esp),%ebx
506         andl    $4294967288,%ebx
507         jz      .L020sw_finish
508 .L021sw_loop:
510         movl    (%edi),%eax
511         mull    %eax
512         movl    %eax,(%esi)
513         movl    %edx,4(%esi)
515         movl    4(%edi),%eax
516         mull    %eax
517         movl    %eax,8(%esi)
518         movl    %edx,12(%esi)
520         movl    8(%edi),%eax
521         mull    %eax
522         movl    %eax,16(%esi)
523         movl    %edx,20(%esi)
525         movl    12(%edi),%eax
526         mull    %eax
527         movl    %eax,24(%esi)
528         movl    %edx,28(%esi)
530         movl    16(%edi),%eax
531         mull    %eax
532         movl    %eax,32(%esi)
533         movl    %edx,36(%esi)
535         movl    20(%edi),%eax
536         mull    %eax
537         movl    %eax,40(%esi)
538         movl    %edx,44(%esi)
540         movl    24(%edi),%eax
541         mull    %eax
542         movl    %eax,48(%esi)
543         movl    %edx,52(%esi)
545         movl    28(%edi),%eax
546         mull    %eax
547         movl    %eax,56(%esi)
548         movl    %edx,60(%esi)
550         addl    $32,%edi
551         addl    $64,%esi
552         subl    $8,%ebx
553         jnz     .L021sw_loop
554 .L020sw_finish:
555         movl    28(%esp),%ebx
556         andl    $7,%ebx
557         jz      .L022sw_end
559         movl    (%edi),%eax
560         mull    %eax
561         movl    %eax,(%esi)
562         decl    %ebx
563         movl    %edx,4(%esi)
564         jz      .L022sw_end
566         movl    4(%edi),%eax
567         mull    %eax
568         movl    %eax,8(%esi)
569         decl    %ebx
570         movl    %edx,12(%esi)
571         jz      .L022sw_end
573         movl    8(%edi),%eax
574         mull    %eax
575         movl    %eax,16(%esi)
576         decl    %ebx
577         movl    %edx,20(%esi)
578         jz      .L022sw_end
580         movl    12(%edi),%eax
581         mull    %eax
582         movl    %eax,24(%esi)
583         decl    %ebx
584         movl    %edx,28(%esi)
585         jz      .L022sw_end
587         movl    16(%edi),%eax
588         mull    %eax
589         movl    %eax,32(%esi)
590         decl    %ebx
591         movl    %edx,36(%esi)
592         jz      .L022sw_end
594         movl    20(%edi),%eax
595         mull    %eax
596         movl    %eax,40(%esi)
597         decl    %ebx
598         movl    %edx,44(%esi)
599         jz      .L022sw_end
601         movl    24(%edi),%eax
602         mull    %eax
603         movl    %eax,48(%esi)
604         movl    %edx,52(%esi)
605 .L022sw_end:
606         popl    %edi
607         popl    %esi
608         popl    %ebx
609         popl    %ebp
610         ret
611 .size   bn_sqr_words,.-.L_bn_sqr_words_begin
612 .globl  bn_div_words
613 .type   bn_div_words,@function
614 .align  16
615 bn_div_words:
616 .L_bn_div_words_begin:
617         movl    4(%esp),%edx
618         movl    8(%esp),%eax
619         movl    12(%esp),%ecx
620         divl    %ecx
621         ret
622 .size   bn_div_words,.-.L_bn_div_words_begin
623 .globl  bn_add_words
624 .type   bn_add_words,@function
625 .align  16
626 bn_add_words:
627 .L_bn_add_words_begin:
628         pushl   %ebp
629         pushl   %ebx
630         pushl   %esi
631         pushl   %edi
633         movl    20(%esp),%ebx
634         movl    24(%esp),%esi
635         movl    28(%esp),%edi
636         movl    32(%esp),%ebp
637         xorl    %eax,%eax
638         andl    $4294967288,%ebp
639         jz      .L023aw_finish
640 .L024aw_loop:
642         movl    (%esi),%ecx
643         movl    (%edi),%edx
644         addl    %eax,%ecx
645         movl    $0,%eax
646         adcl    %eax,%eax
647         addl    %edx,%ecx
648         adcl    $0,%eax
649         movl    %ecx,(%ebx)
651         movl    4(%esi),%ecx
652         movl    4(%edi),%edx
653         addl    %eax,%ecx
654         movl    $0,%eax
655         adcl    %eax,%eax
656         addl    %edx,%ecx
657         adcl    $0,%eax
658         movl    %ecx,4(%ebx)
660         movl    8(%esi),%ecx
661         movl    8(%edi),%edx
662         addl    %eax,%ecx
663         movl    $0,%eax
664         adcl    %eax,%eax
665         addl    %edx,%ecx
666         adcl    $0,%eax
667         movl    %ecx,8(%ebx)
669         movl    12(%esi),%ecx
670         movl    12(%edi),%edx
671         addl    %eax,%ecx
672         movl    $0,%eax
673         adcl    %eax,%eax
674         addl    %edx,%ecx
675         adcl    $0,%eax
676         movl    %ecx,12(%ebx)
678         movl    16(%esi),%ecx
679         movl    16(%edi),%edx
680         addl    %eax,%ecx
681         movl    $0,%eax
682         adcl    %eax,%eax
683         addl    %edx,%ecx
684         adcl    $0,%eax
685         movl    %ecx,16(%ebx)
687         movl    20(%esi),%ecx
688         movl    20(%edi),%edx
689         addl    %eax,%ecx
690         movl    $0,%eax
691         adcl    %eax,%eax
692         addl    %edx,%ecx
693         adcl    $0,%eax
694         movl    %ecx,20(%ebx)
696         movl    24(%esi),%ecx
697         movl    24(%edi),%edx
698         addl    %eax,%ecx
699         movl    $0,%eax
700         adcl    %eax,%eax
701         addl    %edx,%ecx
702         adcl    $0,%eax
703         movl    %ecx,24(%ebx)
705         movl    28(%esi),%ecx
706         movl    28(%edi),%edx
707         addl    %eax,%ecx
708         movl    $0,%eax
709         adcl    %eax,%eax
710         addl    %edx,%ecx
711         adcl    $0,%eax
712         movl    %ecx,28(%ebx)
714         addl    $32,%esi
715         addl    $32,%edi
716         addl    $32,%ebx
717         subl    $8,%ebp
718         jnz     .L024aw_loop
719 .L023aw_finish:
720         movl    32(%esp),%ebp
721         andl    $7,%ebp
722         jz      .L025aw_end
724         movl    (%esi),%ecx
725         movl    (%edi),%edx
726         addl    %eax,%ecx
727         movl    $0,%eax
728         adcl    %eax,%eax
729         addl    %edx,%ecx
730         adcl    $0,%eax
731         decl    %ebp
732         movl    %ecx,(%ebx)
733         jz      .L025aw_end
735         movl    4(%esi),%ecx
736         movl    4(%edi),%edx
737         addl    %eax,%ecx
738         movl    $0,%eax
739         adcl    %eax,%eax
740         addl    %edx,%ecx
741         adcl    $0,%eax
742         decl    %ebp
743         movl    %ecx,4(%ebx)
744         jz      .L025aw_end
746         movl    8(%esi),%ecx
747         movl    8(%edi),%edx
748         addl    %eax,%ecx
749         movl    $0,%eax
750         adcl    %eax,%eax
751         addl    %edx,%ecx
752         adcl    $0,%eax
753         decl    %ebp
754         movl    %ecx,8(%ebx)
755         jz      .L025aw_end
757         movl    12(%esi),%ecx
758         movl    12(%edi),%edx
759         addl    %eax,%ecx
760         movl    $0,%eax
761         adcl    %eax,%eax
762         addl    %edx,%ecx
763         adcl    $0,%eax
764         decl    %ebp
765         movl    %ecx,12(%ebx)
766         jz      .L025aw_end
768         movl    16(%esi),%ecx
769         movl    16(%edi),%edx
770         addl    %eax,%ecx
771         movl    $0,%eax
772         adcl    %eax,%eax
773         addl    %edx,%ecx
774         adcl    $0,%eax
775         decl    %ebp
776         movl    %ecx,16(%ebx)
777         jz      .L025aw_end
779         movl    20(%esi),%ecx
780         movl    20(%edi),%edx
781         addl    %eax,%ecx
782         movl    $0,%eax
783         adcl    %eax,%eax
784         addl    %edx,%ecx
785         adcl    $0,%eax
786         decl    %ebp
787         movl    %ecx,20(%ebx)
788         jz      .L025aw_end
790         movl    24(%esi),%ecx
791         movl    24(%edi),%edx
792         addl    %eax,%ecx
793         movl    $0,%eax
794         adcl    %eax,%eax
795         addl    %edx,%ecx
796         adcl    $0,%eax
797         movl    %ecx,24(%ebx)
798 .L025aw_end:
799         popl    %edi
800         popl    %esi
801         popl    %ebx
802         popl    %ebp
803         ret
804 .size   bn_add_words,.-.L_bn_add_words_begin
805 .globl  bn_sub_words
806 .type   bn_sub_words,@function
807 .align  16
808 bn_sub_words:
809 .L_bn_sub_words_begin:
810         pushl   %ebp
811         pushl   %ebx
812         pushl   %esi
813         pushl   %edi
815         movl    20(%esp),%ebx
816         movl    24(%esp),%esi
817         movl    28(%esp),%edi
818         movl    32(%esp),%ebp
819         xorl    %eax,%eax
820         andl    $4294967288,%ebp
821         jz      .L026aw_finish
822 .L027aw_loop:
824         movl    (%esi),%ecx
825         movl    (%edi),%edx
826         subl    %eax,%ecx
827         movl    $0,%eax
828         adcl    %eax,%eax
829         subl    %edx,%ecx
830         adcl    $0,%eax
831         movl    %ecx,(%ebx)
833         movl    4(%esi),%ecx
834         movl    4(%edi),%edx
835         subl    %eax,%ecx
836         movl    $0,%eax
837         adcl    %eax,%eax
838         subl    %edx,%ecx
839         adcl    $0,%eax
840         movl    %ecx,4(%ebx)
842         movl    8(%esi),%ecx
843         movl    8(%edi),%edx
844         subl    %eax,%ecx
845         movl    $0,%eax
846         adcl    %eax,%eax
847         subl    %edx,%ecx
848         adcl    $0,%eax
849         movl    %ecx,8(%ebx)
851         movl    12(%esi),%ecx
852         movl    12(%edi),%edx
853         subl    %eax,%ecx
854         movl    $0,%eax
855         adcl    %eax,%eax
856         subl    %edx,%ecx
857         adcl    $0,%eax
858         movl    %ecx,12(%ebx)
860         movl    16(%esi),%ecx
861         movl    16(%edi),%edx
862         subl    %eax,%ecx
863         movl    $0,%eax
864         adcl    %eax,%eax
865         subl    %edx,%ecx
866         adcl    $0,%eax
867         movl    %ecx,16(%ebx)
869         movl    20(%esi),%ecx
870         movl    20(%edi),%edx
871         subl    %eax,%ecx
872         movl    $0,%eax
873         adcl    %eax,%eax
874         subl    %edx,%ecx
875         adcl    $0,%eax
876         movl    %ecx,20(%ebx)
878         movl    24(%esi),%ecx
879         movl    24(%edi),%edx
880         subl    %eax,%ecx
881         movl    $0,%eax
882         adcl    %eax,%eax
883         subl    %edx,%ecx
884         adcl    $0,%eax
885         movl    %ecx,24(%ebx)
887         movl    28(%esi),%ecx
888         movl    28(%edi),%edx
889         subl    %eax,%ecx
890         movl    $0,%eax
891         adcl    %eax,%eax
892         subl    %edx,%ecx
893         adcl    $0,%eax
894         movl    %ecx,28(%ebx)
896         addl    $32,%esi
897         addl    $32,%edi
898         addl    $32,%ebx
899         subl    $8,%ebp
900         jnz     .L027aw_loop
901 .L026aw_finish:
902         movl    32(%esp),%ebp
903         andl    $7,%ebp
904         jz      .L028aw_end
906         movl    (%esi),%ecx
907         movl    (%edi),%edx
908         subl    %eax,%ecx
909         movl    $0,%eax
910         adcl    %eax,%eax
911         subl    %edx,%ecx
912         adcl    $0,%eax
913         decl    %ebp
914         movl    %ecx,(%ebx)
915         jz      .L028aw_end
917         movl    4(%esi),%ecx
918         movl    4(%edi),%edx
919         subl    %eax,%ecx
920         movl    $0,%eax
921         adcl    %eax,%eax
922         subl    %edx,%ecx
923         adcl    $0,%eax
924         decl    %ebp
925         movl    %ecx,4(%ebx)
926         jz      .L028aw_end
928         movl    8(%esi),%ecx
929         movl    8(%edi),%edx
930         subl    %eax,%ecx
931         movl    $0,%eax
932         adcl    %eax,%eax
933         subl    %edx,%ecx
934         adcl    $0,%eax
935         decl    %ebp
936         movl    %ecx,8(%ebx)
937         jz      .L028aw_end
939         movl    12(%esi),%ecx
940         movl    12(%edi),%edx
941         subl    %eax,%ecx
942         movl    $0,%eax
943         adcl    %eax,%eax
944         subl    %edx,%ecx
945         adcl    $0,%eax
946         decl    %ebp
947         movl    %ecx,12(%ebx)
948         jz      .L028aw_end
950         movl    16(%esi),%ecx
951         movl    16(%edi),%edx
952         subl    %eax,%ecx
953         movl    $0,%eax
954         adcl    %eax,%eax
955         subl    %edx,%ecx
956         adcl    $0,%eax
957         decl    %ebp
958         movl    %ecx,16(%ebx)
959         jz      .L028aw_end
961         movl    20(%esi),%ecx
962         movl    20(%edi),%edx
963         subl    %eax,%ecx
964         movl    $0,%eax
965         adcl    %eax,%eax
966         subl    %edx,%ecx
967         adcl    $0,%eax
968         decl    %ebp
969         movl    %ecx,20(%ebx)
970         jz      .L028aw_end
972         movl    24(%esi),%ecx
973         movl    24(%edi),%edx
974         subl    %eax,%ecx
975         movl    $0,%eax
976         adcl    %eax,%eax
977         subl    %edx,%ecx
978         adcl    $0,%eax
979         movl    %ecx,24(%ebx)
980 .L028aw_end:
981         popl    %edi
982         popl    %esi
983         popl    %ebx
984         popl    %ebp
985         ret
986 .size   bn_sub_words,.-.L_bn_sub_words_begin
987 .globl  bn_sub_part_words
988 .type   bn_sub_part_words,@function
989 .align  16
990 bn_sub_part_words:
991 .L_bn_sub_part_words_begin:
992         pushl   %ebp
993         pushl   %ebx
994         pushl   %esi
995         pushl   %edi
997         movl    20(%esp),%ebx
998         movl    24(%esp),%esi
999         movl    28(%esp),%edi
1000         movl    32(%esp),%ebp
1001         xorl    %eax,%eax
1002         andl    $4294967288,%ebp
1003         jz      .L029aw_finish
1004 .L030aw_loop:
1006         movl    (%esi),%ecx
1007         movl    (%edi),%edx
1008         subl    %eax,%ecx
1009         movl    $0,%eax
1010         adcl    %eax,%eax
1011         subl    %edx,%ecx
1012         adcl    $0,%eax
1013         movl    %ecx,(%ebx)
1015         movl    4(%esi),%ecx
1016         movl    4(%edi),%edx
1017         subl    %eax,%ecx
1018         movl    $0,%eax
1019         adcl    %eax,%eax
1020         subl    %edx,%ecx
1021         adcl    $0,%eax
1022         movl    %ecx,4(%ebx)
1024         movl    8(%esi),%ecx
1025         movl    8(%edi),%edx
1026         subl    %eax,%ecx
1027         movl    $0,%eax
1028         adcl    %eax,%eax
1029         subl    %edx,%ecx
1030         adcl    $0,%eax
1031         movl    %ecx,8(%ebx)
1033         movl    12(%esi),%ecx
1034         movl    12(%edi),%edx
1035         subl    %eax,%ecx
1036         movl    $0,%eax
1037         adcl    %eax,%eax
1038         subl    %edx,%ecx
1039         adcl    $0,%eax
1040         movl    %ecx,12(%ebx)
1042         movl    16(%esi),%ecx
1043         movl    16(%edi),%edx
1044         subl    %eax,%ecx
1045         movl    $0,%eax
1046         adcl    %eax,%eax
1047         subl    %edx,%ecx
1048         adcl    $0,%eax
1049         movl    %ecx,16(%ebx)
1051         movl    20(%esi),%ecx
1052         movl    20(%edi),%edx
1053         subl    %eax,%ecx
1054         movl    $0,%eax
1055         adcl    %eax,%eax
1056         subl    %edx,%ecx
1057         adcl    $0,%eax
1058         movl    %ecx,20(%ebx)
1060         movl    24(%esi),%ecx
1061         movl    24(%edi),%edx
1062         subl    %eax,%ecx
1063         movl    $0,%eax
1064         adcl    %eax,%eax
1065         subl    %edx,%ecx
1066         adcl    $0,%eax
1067         movl    %ecx,24(%ebx)
1069         movl    28(%esi),%ecx
1070         movl    28(%edi),%edx
1071         subl    %eax,%ecx
1072         movl    $0,%eax
1073         adcl    %eax,%eax
1074         subl    %edx,%ecx
1075         adcl    $0,%eax
1076         movl    %ecx,28(%ebx)
1078         addl    $32,%esi
1079         addl    $32,%edi
1080         addl    $32,%ebx
1081         subl    $8,%ebp
1082         jnz     .L030aw_loop
1083 .L029aw_finish:
1084         movl    32(%esp),%ebp
1085         andl    $7,%ebp
1086         jz      .L031aw_end
1088         movl    (%esi),%ecx
1089         movl    (%edi),%edx
1090         subl    %eax,%ecx
1091         movl    $0,%eax
1092         adcl    %eax,%eax
1093         subl    %edx,%ecx
1094         adcl    $0,%eax
1095         movl    %ecx,(%ebx)
1096         addl    $4,%esi
1097         addl    $4,%edi
1098         addl    $4,%ebx
1099         decl    %ebp
1100         jz      .L031aw_end
1102         movl    (%esi),%ecx
1103         movl    (%edi),%edx
1104         subl    %eax,%ecx
1105         movl    $0,%eax
1106         adcl    %eax,%eax
1107         subl    %edx,%ecx
1108         adcl    $0,%eax
1109         movl    %ecx,(%ebx)
1110         addl    $4,%esi
1111         addl    $4,%edi
1112         addl    $4,%ebx
1113         decl    %ebp
1114         jz      .L031aw_end
1116         movl    (%esi),%ecx
1117         movl    (%edi),%edx
1118         subl    %eax,%ecx
1119         movl    $0,%eax
1120         adcl    %eax,%eax
1121         subl    %edx,%ecx
1122         adcl    $0,%eax
1123         movl    %ecx,(%ebx)
1124         addl    $4,%esi
1125         addl    $4,%edi
1126         addl    $4,%ebx
1127         decl    %ebp
1128         jz      .L031aw_end
1130         movl    (%esi),%ecx
1131         movl    (%edi),%edx
1132         subl    %eax,%ecx
1133         movl    $0,%eax
1134         adcl    %eax,%eax
1135         subl    %edx,%ecx
1136         adcl    $0,%eax
1137         movl    %ecx,(%ebx)
1138         addl    $4,%esi
1139         addl    $4,%edi
1140         addl    $4,%ebx
1141         decl    %ebp
1142         jz      .L031aw_end
1144         movl    (%esi),%ecx
1145         movl    (%edi),%edx
1146         subl    %eax,%ecx
1147         movl    $0,%eax
1148         adcl    %eax,%eax
1149         subl    %edx,%ecx
1150         adcl    $0,%eax
1151         movl    %ecx,(%ebx)
1152         addl    $4,%esi
1153         addl    $4,%edi
1154         addl    $4,%ebx
1155         decl    %ebp
1156         jz      .L031aw_end
1158         movl    (%esi),%ecx
1159         movl    (%edi),%edx
1160         subl    %eax,%ecx
1161         movl    $0,%eax
1162         adcl    %eax,%eax
1163         subl    %edx,%ecx
1164         adcl    $0,%eax
1165         movl    %ecx,(%ebx)
1166         addl    $4,%esi
1167         addl    $4,%edi
1168         addl    $4,%ebx
1169         decl    %ebp
1170         jz      .L031aw_end
1172         movl    (%esi),%ecx
1173         movl    (%edi),%edx
1174         subl    %eax,%ecx
1175         movl    $0,%eax
1176         adcl    %eax,%eax
1177         subl    %edx,%ecx
1178         adcl    $0,%eax
1179         movl    %ecx,(%ebx)
1180         addl    $4,%esi
1181         addl    $4,%edi
1182         addl    $4,%ebx
1183 .L031aw_end:
1184         cmpl    $0,36(%esp)
1185         je      .L032pw_end
1186         movl    36(%esp),%ebp
1187         cmpl    $0,%ebp
1188         je      .L032pw_end
1189         jge     .L033pw_pos
1191         movl    $0,%edx
1192         subl    %ebp,%edx
1193         movl    %edx,%ebp
1194         andl    $4294967288,%ebp
1195         jz      .L034pw_neg_finish
1196 .L035pw_neg_loop:
1198         movl    $0,%ecx
1199         movl    (%edi),%edx
1200         subl    %eax,%ecx
1201         movl    $0,%eax
1202         adcl    %eax,%eax
1203         subl    %edx,%ecx
1204         adcl    $0,%eax
1205         movl    %ecx,(%ebx)
1207         movl    $0,%ecx
1208         movl    4(%edi),%edx
1209         subl    %eax,%ecx
1210         movl    $0,%eax
1211         adcl    %eax,%eax
1212         subl    %edx,%ecx
1213         adcl    $0,%eax
1214         movl    %ecx,4(%ebx)
1216         movl    $0,%ecx
1217         movl    8(%edi),%edx
1218         subl    %eax,%ecx
1219         movl    $0,%eax
1220         adcl    %eax,%eax
1221         subl    %edx,%ecx
1222         adcl    $0,%eax
1223         movl    %ecx,8(%ebx)
1225         movl    $0,%ecx
1226         movl    12(%edi),%edx
1227         subl    %eax,%ecx
1228         movl    $0,%eax
1229         adcl    %eax,%eax
1230         subl    %edx,%ecx
1231         adcl    $0,%eax
1232         movl    %ecx,12(%ebx)
1234         movl    $0,%ecx
1235         movl    16(%edi),%edx
1236         subl    %eax,%ecx
1237         movl    $0,%eax
1238         adcl    %eax,%eax
1239         subl    %edx,%ecx
1240         adcl    $0,%eax
1241         movl    %ecx,16(%ebx)
1243         movl    $0,%ecx
1244         movl    20(%edi),%edx
1245         subl    %eax,%ecx
1246         movl    $0,%eax
1247         adcl    %eax,%eax
1248         subl    %edx,%ecx
1249         adcl    $0,%eax
1250         movl    %ecx,20(%ebx)
1252         movl    $0,%ecx
1253         movl    24(%edi),%edx
1254         subl    %eax,%ecx
1255         movl    $0,%eax
1256         adcl    %eax,%eax
1257         subl    %edx,%ecx
1258         adcl    $0,%eax
1259         movl    %ecx,24(%ebx)
1261         movl    $0,%ecx
1262         movl    28(%edi),%edx
1263         subl    %eax,%ecx
1264         movl    $0,%eax
1265         adcl    %eax,%eax
1266         subl    %edx,%ecx
1267         adcl    $0,%eax
1268         movl    %ecx,28(%ebx)
1270         addl    $32,%edi
1271         addl    $32,%ebx
1272         subl    $8,%ebp
1273         jnz     .L035pw_neg_loop
1274 .L034pw_neg_finish:
1275         movl    36(%esp),%edx
1276         movl    $0,%ebp
1277         subl    %edx,%ebp
1278         andl    $7,%ebp
1279         jz      .L032pw_end
1281         movl    $0,%ecx
1282         movl    (%edi),%edx
1283         subl    %eax,%ecx
1284         movl    $0,%eax
1285         adcl    %eax,%eax
1286         subl    %edx,%ecx
1287         adcl    $0,%eax
1288         decl    %ebp
1289         movl    %ecx,(%ebx)
1290         jz      .L032pw_end
1292         movl    $0,%ecx
1293         movl    4(%edi),%edx
1294         subl    %eax,%ecx
1295         movl    $0,%eax
1296         adcl    %eax,%eax
1297         subl    %edx,%ecx
1298         adcl    $0,%eax
1299         decl    %ebp
1300         movl    %ecx,4(%ebx)
1301         jz      .L032pw_end
1303         movl    $0,%ecx
1304         movl    8(%edi),%edx
1305         subl    %eax,%ecx
1306         movl    $0,%eax
1307         adcl    %eax,%eax
1308         subl    %edx,%ecx
1309         adcl    $0,%eax
1310         decl    %ebp
1311         movl    %ecx,8(%ebx)
1312         jz      .L032pw_end
1314         movl    $0,%ecx
1315         movl    12(%edi),%edx
1316         subl    %eax,%ecx
1317         movl    $0,%eax
1318         adcl    %eax,%eax
1319         subl    %edx,%ecx
1320         adcl    $0,%eax
1321         decl    %ebp
1322         movl    %ecx,12(%ebx)
1323         jz      .L032pw_end
1325         movl    $0,%ecx
1326         movl    16(%edi),%edx
1327         subl    %eax,%ecx
1328         movl    $0,%eax
1329         adcl    %eax,%eax
1330         subl    %edx,%ecx
1331         adcl    $0,%eax
1332         decl    %ebp
1333         movl    %ecx,16(%ebx)
1334         jz      .L032pw_end
1336         movl    $0,%ecx
1337         movl    20(%edi),%edx
1338         subl    %eax,%ecx
1339         movl    $0,%eax
1340         adcl    %eax,%eax
1341         subl    %edx,%ecx
1342         adcl    $0,%eax
1343         decl    %ebp
1344         movl    %ecx,20(%ebx)
1345         jz      .L032pw_end
1347         movl    $0,%ecx
1348         movl    24(%edi),%edx
1349         subl    %eax,%ecx
1350         movl    $0,%eax
1351         adcl    %eax,%eax
1352         subl    %edx,%ecx
1353         adcl    $0,%eax
1354         movl    %ecx,24(%ebx)
1355         jmp     .L032pw_end
1356 .L033pw_pos:
1357         andl    $4294967288,%ebp
1358         jz      .L036pw_pos_finish
1359 .L037pw_pos_loop:
1361         movl    (%esi),%ecx
1362         subl    %eax,%ecx
1363         movl    %ecx,(%ebx)
1364         jnc     .L038pw_nc0
1366         movl    4(%esi),%ecx
1367         subl    %eax,%ecx
1368         movl    %ecx,4(%ebx)
1369         jnc     .L039pw_nc1
1371         movl    8(%esi),%ecx
1372         subl    %eax,%ecx
1373         movl    %ecx,8(%ebx)
1374         jnc     .L040pw_nc2
1376         movl    12(%esi),%ecx
1377         subl    %eax,%ecx
1378         movl    %ecx,12(%ebx)
1379         jnc     .L041pw_nc3
1381         movl    16(%esi),%ecx
1382         subl    %eax,%ecx
1383         movl    %ecx,16(%ebx)
1384         jnc     .L042pw_nc4
1386         movl    20(%esi),%ecx
1387         subl    %eax,%ecx
1388         movl    %ecx,20(%ebx)
1389         jnc     .L043pw_nc5
1391         movl    24(%esi),%ecx
1392         subl    %eax,%ecx
1393         movl    %ecx,24(%ebx)
1394         jnc     .L044pw_nc6
1396         movl    28(%esi),%ecx
1397         subl    %eax,%ecx
1398         movl    %ecx,28(%ebx)
1399         jnc     .L045pw_nc7
1401         addl    $32,%esi
1402         addl    $32,%ebx
1403         subl    $8,%ebp
1404         jnz     .L037pw_pos_loop
1405 .L036pw_pos_finish:
1406         movl    36(%esp),%ebp
1407         andl    $7,%ebp
1408         jz      .L032pw_end
1410         movl    (%esi),%ecx
1411         subl    %eax,%ecx
1412         movl    %ecx,(%ebx)
1413         jnc     .L046pw_tail_nc0
1414         decl    %ebp
1415         jz      .L032pw_end
1417         movl    4(%esi),%ecx
1418         subl    %eax,%ecx
1419         movl    %ecx,4(%ebx)
1420         jnc     .L047pw_tail_nc1
1421         decl    %ebp
1422         jz      .L032pw_end
1424         movl    8(%esi),%ecx
1425         subl    %eax,%ecx
1426         movl    %ecx,8(%ebx)
1427         jnc     .L048pw_tail_nc2
1428         decl    %ebp
1429         jz      .L032pw_end
1431         movl    12(%esi),%ecx
1432         subl    %eax,%ecx
1433         movl    %ecx,12(%ebx)
1434         jnc     .L049pw_tail_nc3
1435         decl    %ebp
1436         jz      .L032pw_end
1438         movl    16(%esi),%ecx
1439         subl    %eax,%ecx
1440         movl    %ecx,16(%ebx)
1441         jnc     .L050pw_tail_nc4
1442         decl    %ebp
1443         jz      .L032pw_end
1445         movl    20(%esi),%ecx
1446         subl    %eax,%ecx
1447         movl    %ecx,20(%ebx)
1448         jnc     .L051pw_tail_nc5
1449         decl    %ebp
1450         jz      .L032pw_end
1452         movl    24(%esi),%ecx
1453         subl    %eax,%ecx
1454         movl    %ecx,24(%ebx)
1455         jnc     .L052pw_tail_nc6
1456         movl    $1,%eax
1457         jmp     .L032pw_end
1458 .L053pw_nc_loop:
1459         movl    (%esi),%ecx
1460         movl    %ecx,(%ebx)
1461 .L038pw_nc0:
1462         movl    4(%esi),%ecx
1463         movl    %ecx,4(%ebx)
1464 .L039pw_nc1:
1465         movl    8(%esi),%ecx
1466         movl    %ecx,8(%ebx)
1467 .L040pw_nc2:
1468         movl    12(%esi),%ecx
1469         movl    %ecx,12(%ebx)
1470 .L041pw_nc3:
1471         movl    16(%esi),%ecx
1472         movl    %ecx,16(%ebx)
1473 .L042pw_nc4:
1474         movl    20(%esi),%ecx
1475         movl    %ecx,20(%ebx)
1476 .L043pw_nc5:
1477         movl    24(%esi),%ecx
1478         movl    %ecx,24(%ebx)
1479 .L044pw_nc6:
1480         movl    28(%esi),%ecx
1481         movl    %ecx,28(%ebx)
1482 .L045pw_nc7:
1484         addl    $32,%esi
1485         addl    $32,%ebx
1486         subl    $8,%ebp
1487         jnz     .L053pw_nc_loop
1488         movl    36(%esp),%ebp
1489         andl    $7,%ebp
1490         jz      .L054pw_nc_end
1491         movl    (%esi),%ecx
1492         movl    %ecx,(%ebx)
1493 .L046pw_tail_nc0:
1494         decl    %ebp
1495         jz      .L054pw_nc_end
1496         movl    4(%esi),%ecx
1497         movl    %ecx,4(%ebx)
1498 .L047pw_tail_nc1:
1499         decl    %ebp
1500         jz      .L054pw_nc_end
1501         movl    8(%esi),%ecx
1502         movl    %ecx,8(%ebx)
1503 .L048pw_tail_nc2:
1504         decl    %ebp
1505         jz      .L054pw_nc_end
1506         movl    12(%esi),%ecx
1507         movl    %ecx,12(%ebx)
1508 .L049pw_tail_nc3:
1509         decl    %ebp
1510         jz      .L054pw_nc_end
1511         movl    16(%esi),%ecx
1512         movl    %ecx,16(%ebx)
1513 .L050pw_tail_nc4:
1514         decl    %ebp
1515         jz      .L054pw_nc_end
1516         movl    20(%esi),%ecx
1517         movl    %ecx,20(%ebx)
1518 .L051pw_tail_nc5:
1519         decl    %ebp
1520         jz      .L054pw_nc_end
1521         movl    24(%esi),%ecx
1522         movl    %ecx,24(%ebx)
1523 .L052pw_tail_nc6:
1524 .L054pw_nc_end:
1525         movl    $0,%eax
1526 .L032pw_end:
1527         popl    %edi
1528         popl    %esi
1529         popl    %ebx
1530         popl    %ebp
1531         ret
1532 .size   bn_sub_part_words,.-.L_bn_sub_part_words_begin
1533 .comm   OPENSSL_ia32cap_P,8,4