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