Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / openssl / openssl / crypto / bn / asm / x86-mont-mac.S
1 .file   "crypto/bn/asm/x86-mont.s"
2 .text
3 .globl  _bn_mul_mont
4 .align  4
5 _bn_mul_mont:
6 L_bn_mul_mont_begin:
7         pushl   %ebp
8         pushl   %ebx
9         pushl   %esi
10         pushl   %edi
11         xorl    %eax,%eax
12         movl    40(%esp),%edi
13         cmpl    $4,%edi
14         jl      L000just_leave
15         leal    20(%esp),%esi
16         leal    24(%esp),%edx
17         movl    %esp,%ebp
18         addl    $2,%edi
19         negl    %edi
20         leal    -32(%esp,%edi,4),%esp
21         negl    %edi
22         movl    %esp,%eax
23         subl    %edx,%eax
24         andl    $2047,%eax
25         subl    %eax,%esp
26         xorl    %esp,%edx
27         andl    $2048,%edx
28         xorl    $2048,%edx
29         subl    %edx,%esp
30         andl    $-64,%esp
31         movl    (%esi),%eax
32         movl    4(%esi),%ebx
33         movl    8(%esi),%ecx
34         movl    12(%esi),%edx
35         movl    16(%esi),%esi
36         movl    (%esi),%esi
37         movl    %eax,4(%esp)
38         movl    %ebx,8(%esp)
39         movl    %ecx,12(%esp)
40         movl    %edx,16(%esp)
41         movl    %esi,20(%esp)
42         leal    -3(%edi),%ebx
43         movl    %ebp,24(%esp)
44         movl    8(%esp),%esi
45         leal    1(%ebx),%ebp
46         movl    12(%esp),%edi
47         xorl    %ecx,%ecx
48         movl    %esi,%edx
49         andl    $1,%ebp
50         subl    %edi,%edx
51         leal    4(%edi,%ebx,4),%eax
52         orl     %edx,%ebp
53         movl    (%edi),%edi
54         jz      L001bn_sqr_mont
55         movl    %eax,28(%esp)
56         movl    (%esi),%eax
57         xorl    %edx,%edx
58 .align  4,0x90
59 L002mull:
60         movl    %edx,%ebp
61         mull    %edi
62         addl    %eax,%ebp
63         leal    1(%ecx),%ecx
64         adcl    $0,%edx
65         movl    (%esi,%ecx,4),%eax
66         cmpl    %ebx,%ecx
67         movl    %ebp,28(%esp,%ecx,4)
68         jl      L002mull
69         movl    %edx,%ebp
70         mull    %edi
71         movl    20(%esp),%edi
72         addl    %ebp,%eax
73         movl    16(%esp),%esi
74         adcl    $0,%edx
75         imull   32(%esp),%edi
76         movl    %eax,32(%esp,%ebx,4)
77         xorl    %ecx,%ecx
78         movl    %edx,36(%esp,%ebx,4)
79         movl    %ecx,40(%esp,%ebx,4)
80         movl    (%esi),%eax
81         mull    %edi
82         addl    32(%esp),%eax
83         movl    4(%esi),%eax
84         adcl    $0,%edx
85         incl    %ecx
86         jmp     L0032ndmadd
87 .align  4,0x90
88 L0041stmadd:
89         movl    %edx,%ebp
90         mull    %edi
91         addl    32(%esp,%ecx,4),%ebp
92         leal    1(%ecx),%ecx
93         adcl    $0,%edx
94         addl    %eax,%ebp
95         movl    (%esi,%ecx,4),%eax
96         adcl    $0,%edx
97         cmpl    %ebx,%ecx
98         movl    %ebp,28(%esp,%ecx,4)
99         jl      L0041stmadd
100         movl    %edx,%ebp
101         mull    %edi
102         addl    32(%esp,%ebx,4),%eax
103         movl    20(%esp),%edi
104         adcl    $0,%edx
105         movl    16(%esp),%esi
106         addl    %eax,%ebp
107         adcl    $0,%edx
108         imull   32(%esp),%edi
109         xorl    %ecx,%ecx
110         addl    36(%esp,%ebx,4),%edx
111         movl    %ebp,32(%esp,%ebx,4)
112         adcl    $0,%ecx
113         movl    (%esi),%eax
114         movl    %edx,36(%esp,%ebx,4)
115         movl    %ecx,40(%esp,%ebx,4)
116         mull    %edi
117         addl    32(%esp),%eax
118         movl    4(%esi),%eax
119         adcl    $0,%edx
120         movl    $1,%ecx
121 .align  4,0x90
122 L0032ndmadd:
123         movl    %edx,%ebp
124         mull    %edi
125         addl    32(%esp,%ecx,4),%ebp
126         leal    1(%ecx),%ecx
127         adcl    $0,%edx
128         addl    %eax,%ebp
129         movl    (%esi,%ecx,4),%eax
130         adcl    $0,%edx
131         cmpl    %ebx,%ecx
132         movl    %ebp,24(%esp,%ecx,4)
133         jl      L0032ndmadd
134         movl    %edx,%ebp
135         mull    %edi
136         addl    32(%esp,%ebx,4),%ebp
137         adcl    $0,%edx
138         addl    %eax,%ebp
139         adcl    $0,%edx
140         movl    %ebp,28(%esp,%ebx,4)
141         xorl    %eax,%eax
142         movl    12(%esp),%ecx
143         addl    36(%esp,%ebx,4),%edx
144         adcl    40(%esp,%ebx,4),%eax
145         leal    4(%ecx),%ecx
146         movl    %edx,32(%esp,%ebx,4)
147         cmpl    28(%esp),%ecx
148         movl    %eax,36(%esp,%ebx,4)
149         je      L005common_tail
150         movl    (%ecx),%edi
151         movl    8(%esp),%esi
152         movl    %ecx,12(%esp)
153         xorl    %ecx,%ecx
154         xorl    %edx,%edx
155         movl    (%esi),%eax
156         jmp     L0041stmadd
157 .align  4,0x90
158 L001bn_sqr_mont:
159         movl    %ebx,(%esp)
160         movl    %ecx,12(%esp)
161         movl    %edi,%eax
162         mull    %edi
163         movl    %eax,32(%esp)
164         movl    %edx,%ebx
165         shrl    $1,%edx
166         andl    $1,%ebx
167         incl    %ecx
168 .align  4,0x90
169 L006sqr:
170         movl    (%esi,%ecx,4),%eax
171         movl    %edx,%ebp
172         mull    %edi
173         addl    %ebp,%eax
174         leal    1(%ecx),%ecx
175         adcl    $0,%edx
176         leal    (%ebx,%eax,2),%ebp
177         shrl    $31,%eax
178         cmpl    (%esp),%ecx
179         movl    %eax,%ebx
180         movl    %ebp,28(%esp,%ecx,4)
181         jl      L006sqr
182         movl    (%esi,%ecx,4),%eax
183         movl    %edx,%ebp
184         mull    %edi
185         addl    %ebp,%eax
186         movl    20(%esp),%edi
187         adcl    $0,%edx
188         movl    16(%esp),%esi
189         leal    (%ebx,%eax,2),%ebp
190         imull   32(%esp),%edi
191         shrl    $31,%eax
192         movl    %ebp,32(%esp,%ecx,4)
193         leal    (%eax,%edx,2),%ebp
194         movl    (%esi),%eax
195         shrl    $31,%edx
196         movl    %ebp,36(%esp,%ecx,4)
197         movl    %edx,40(%esp,%ecx,4)
198         mull    %edi
199         addl    32(%esp),%eax
200         movl    %ecx,%ebx
201         adcl    $0,%edx
202         movl    4(%esi),%eax
203         movl    $1,%ecx
204 .align  4,0x90
205 L0073rdmadd:
206         movl    %edx,%ebp
207         mull    %edi
208         addl    32(%esp,%ecx,4),%ebp
209         adcl    $0,%edx
210         addl    %eax,%ebp
211         movl    4(%esi,%ecx,4),%eax
212         adcl    $0,%edx
213         movl    %ebp,28(%esp,%ecx,4)
214         movl    %edx,%ebp
215         mull    %edi
216         addl    36(%esp,%ecx,4),%ebp
217         leal    2(%ecx),%ecx
218         adcl    $0,%edx
219         addl    %eax,%ebp
220         movl    (%esi,%ecx,4),%eax
221         adcl    $0,%edx
222         cmpl    %ebx,%ecx
223         movl    %ebp,24(%esp,%ecx,4)
224         jl      L0073rdmadd
225         movl    %edx,%ebp
226         mull    %edi
227         addl    32(%esp,%ebx,4),%ebp
228         adcl    $0,%edx
229         addl    %eax,%ebp
230         adcl    $0,%edx
231         movl    %ebp,28(%esp,%ebx,4)
232         movl    12(%esp),%ecx
233         xorl    %eax,%eax
234         movl    8(%esp),%esi
235         addl    36(%esp,%ebx,4),%edx
236         adcl    40(%esp,%ebx,4),%eax
237         movl    %edx,32(%esp,%ebx,4)
238         cmpl    %ebx,%ecx
239         movl    %eax,36(%esp,%ebx,4)
240         je      L005common_tail
241         movl    4(%esi,%ecx,4),%edi
242         leal    1(%ecx),%ecx
243         movl    %edi,%eax
244         movl    %ecx,12(%esp)
245         mull    %edi
246         addl    32(%esp,%ecx,4),%eax
247         adcl    $0,%edx
248         movl    %eax,32(%esp,%ecx,4)
249         xorl    %ebp,%ebp
250         cmpl    %ebx,%ecx
251         leal    1(%ecx),%ecx
252         je      L008sqrlast
253         movl    %edx,%ebx
254         shrl    $1,%edx
255         andl    $1,%ebx
256 .align  4,0x90
257 L009sqradd:
258         movl    (%esi,%ecx,4),%eax
259         movl    %edx,%ebp
260         mull    %edi
261         addl    %ebp,%eax
262         leal    (%eax,%eax,1),%ebp
263         adcl    $0,%edx
264         shrl    $31,%eax
265         addl    32(%esp,%ecx,4),%ebp
266         leal    1(%ecx),%ecx
267         adcl    $0,%eax
268         addl    %ebx,%ebp
269         adcl    $0,%eax
270         cmpl    (%esp),%ecx
271         movl    %ebp,28(%esp,%ecx,4)
272         movl    %eax,%ebx
273         jle     L009sqradd
274         movl    %edx,%ebp
275         addl    %edx,%edx
276         shrl    $31,%ebp
277         addl    %ebx,%edx
278         adcl    $0,%ebp
279 L008sqrlast:
280         movl    20(%esp),%edi
281         movl    16(%esp),%esi
282         imull   32(%esp),%edi
283         addl    32(%esp,%ecx,4),%edx
284         movl    (%esi),%eax
285         adcl    $0,%ebp
286         movl    %edx,32(%esp,%ecx,4)
287         movl    %ebp,36(%esp,%ecx,4)
288         mull    %edi
289         addl    32(%esp),%eax
290         leal    -1(%ecx),%ebx
291         adcl    $0,%edx
292         movl    $1,%ecx
293         movl    4(%esi),%eax
294         jmp     L0073rdmadd
295 .align  4,0x90
296 L005common_tail:
297         movl    16(%esp),%ebp
298         movl    4(%esp),%edi
299         leal    32(%esp),%esi
300         movl    (%esi),%eax
301         movl    %ebx,%ecx
302         xorl    %edx,%edx
303 .align  4,0x90
304 L010sub:
305         sbbl    (%ebp,%edx,4),%eax
306         movl    %eax,(%edi,%edx,4)
307         decl    %ecx
308         movl    4(%esi,%edx,4),%eax
309         leal    1(%edx),%edx
310         jge     L010sub
311         sbbl    $0,%eax
312         andl    %eax,%esi
313         notl    %eax
314         movl    %edi,%ebp
315         andl    %eax,%ebp
316         orl     %ebp,%esi
317 .align  4,0x90
318 L011copy:
319         movl    (%esi,%ebx,4),%eax
320         movl    %eax,(%edi,%ebx,4)
321         movl    %ecx,32(%esp,%ebx,4)
322         decl    %ebx
323         jge     L011copy
324         movl    24(%esp),%esp
325         movl    $1,%eax
326 L000just_leave:
327         popl    %edi
328         popl    %esi
329         popl    %ebx
330         popl    %ebp
331         ret
332 .byte   77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
333 .byte   112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
334 .byte   54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
335 .byte   32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
336 .byte   111,114,103,62,0