This commit was generated by cvs2svn to track changes on a CVS vendor
[openssl.git] / crypto / bn / asm / sparc.s
1         .file   "bn_mulw.c"
2 gcc2_compiled.:
3 .section        ".text"
4         .align 4
5         .global bn_mul_add_word
6         .type    bn_mul_add_word,#function
7         .proc   016
8 bn_mul_add_word:
9         !#PROLOGUE# 0
10         save %sp,-112,%sp
11         !#PROLOGUE# 1
12         mov %i0,%o0
13         mov %i1,%o2
14         mov %i2,%g1
15         mov %i3,%o1
16         mov 0,%i4
17         add %o0,12,%g4
18         add %o2,12,%o7
19 .LL2:
20         mov %i4,%i3
21         mov 0,%i2
22         ld [%o0],%g2
23         mov %g2,%i1
24         ld [%o2],%g2
25         mov 0,%i0
26         umul %o1,%g2,%g3
27         rd %y,%g2
28         addcc %g3,%i1,%g3
29         addx %g2,%i0,%g2
30         addcc %g3,%i3,%g3
31         addx %g2,%i2,%g2
32         st %g3,[%o0]
33         mov %g2,%i5
34         mov 0,%i4
35         addcc %g1,-1,%g1
36         be .LL3
37         mov %i5,%i4
38         mov %i4,%i3
39         mov 0,%i2
40         ld [%g4-8],%g2
41         mov %g2,%i1
42         ld [%o7-8],%g2
43         mov 0,%i0
44         umul %o1,%g2,%g3
45         rd %y,%g2
46         addcc %g3,%i1,%g3
47         addx %g2,%i0,%g2
48         addcc %g3,%i3,%g3
49         addx %g2,%i2,%g2
50         st %g3,[%g4-8]
51         mov %g2,%i5
52         mov 0,%i4
53         addcc %g1,-1,%g1
54         be .LL3
55         mov %i5,%i4
56         mov %i4,%i3
57         mov 0,%i2
58         ld [%g4-4],%g2
59         mov %g2,%i1
60         ld [%o7-4],%g2
61         mov 0,%i0
62         umul %o1,%g2,%g3
63         rd %y,%g2
64         addcc %g3,%i1,%g3
65         addx %g2,%i0,%g2
66         addcc %g3,%i3,%g3
67         addx %g2,%i2,%g2
68         st %g3,[%g4-4]
69         mov %g2,%i5
70         mov 0,%i4
71         addcc %g1,-1,%g1
72         be .LL3
73         mov %i5,%i4
74         mov %i4,%i3
75         mov 0,%i2
76         ld [%g4],%g2
77         mov %g2,%i1
78         ld [%o7],%g2
79         mov 0,%i0
80         umul %o1,%g2,%g3
81         rd %y,%g2
82         addcc %g3,%i1,%g3
83         addx %g2,%i0,%g2
84         addcc %g3,%i3,%g3
85         addx %g2,%i2,%g2
86         st %g3,[%g4]
87         mov %g2,%i5
88         mov 0,%i4
89         addcc %g1,-1,%g1
90         be .LL3
91         mov %i5,%i4
92         add %o7,16,%o7
93         add %o2,16,%o2
94         add %g4,16,%g4
95         b .LL2
96         add %o0,16,%o0
97 .LL3:
98         ret
99         restore %g0,%i4,%o0
100 .LLfe1:
101         .size    bn_mul_add_word,.LLfe1-bn_mul_add_word
102         .align 4
103         .global bn_mul_word
104         .type    bn_mul_word,#function
105         .proc   016
106 bn_mul_word:
107         !#PROLOGUE# 0
108         save %sp,-112,%sp
109         !#PROLOGUE# 1
110         mov %i0,%o7
111         mov %i1,%o0
112         mov %i2,%i4
113         mov %i3,%g4
114         mov 0,%i0
115         add %o7,12,%g1
116         add %o0,12,%i5
117 .LL18:
118         mov %i0,%g3
119         mov 0,%g2
120         ld [%o0],%i2
121         umul %g4,%i2,%i3
122         rd %y,%i2
123         addcc %i3,%g3,%i3
124         addx %i2,%g2,%i2
125         st %i3,[%o7]
126         mov %i2,%i1
127         mov 0,%i0
128         addcc %i4,-1,%i4
129         be .LL19
130         mov %i1,%i0
131         mov %i0,%g3
132         mov 0,%g2
133         ld [%i5-8],%i2
134         umul %g4,%i2,%i3
135         rd %y,%i2
136         addcc %i3,%g3,%i3
137         addx %i2,%g2,%i2
138         st %i3,[%g1-8]
139         mov %i2,%i1
140         mov 0,%i0
141         addcc %i4,-1,%i4
142         be .LL19
143         mov %i1,%i0
144         mov %i0,%g3
145         mov 0,%g2
146         ld [%i5-4],%i2
147         umul %g4,%i2,%i3
148         rd %y,%i2
149         addcc %i3,%g3,%i3
150         addx %i2,%g2,%i2
151         st %i3,[%g1-4]
152         mov %i2,%i1
153         mov 0,%i0
154         addcc %i4,-1,%i4
155         be .LL19
156         mov %i1,%i0
157         mov %i0,%g3
158         mov 0,%g2
159         ld [%i5],%i2
160         umul %g4,%i2,%i3
161         rd %y,%i2
162         addcc %i3,%g3,%i3
163         addx %i2,%g2,%i2
164         st %i3,[%g1]
165         mov %i2,%i1
166         mov 0,%i0
167         addcc %i4,-1,%i4
168         be .LL19
169         mov %i1,%i0
170         add %i5,16,%i5
171         add %o0,16,%o0
172         add %g1,16,%g1
173         b .LL18
174         add %o7,16,%o7
175 .LL19:
176         ret
177         restore
178 .LLfe2:
179         .size    bn_mul_word,.LLfe2-bn_mul_word
180         .align 4
181         .global bn_sqr_words
182         .type    bn_sqr_words,#function
183         .proc   020
184 bn_sqr_words:
185         !#PROLOGUE# 0
186         !#PROLOGUE# 1
187         mov %o0,%g4
188         add %g4,28,%o3
189         add %o1,12,%g1
190 .LL34:
191         ld [%o1],%o0
192         addcc %o2,-1,%o2
193         umul %o0,%o0,%o5
194         rd %y,%o4
195         st %o5,[%g4]
196         mov %o4,%g3
197         mov 0,%g2
198         be .LL35
199         st %g3,[%o3-24]
200         ld [%g1-8],%o0
201         addcc %o2,-1,%o2
202         umul %o0,%o0,%o5
203         rd %y,%o4
204         st %o5,[%o3-20]
205         mov %o4,%g3
206         mov 0,%g2
207         be .LL35
208         st %g3,[%o3-16]
209         ld [%g1-4],%o0
210         addcc %o2,-1,%o2
211         umul %o0,%o0,%o5
212         rd %y,%o4
213         st %o5,[%o3-12]
214         mov %o4,%g3
215         mov 0,%g2
216         be .LL35
217         st %g3,[%o3-8]
218         ld [%g1],%o0
219         addcc %o2,-1,%o2
220         umul %o0,%o0,%o5
221         rd %y,%o4
222         st %o5,[%o3-4]
223         mov %o4,%g3
224         mov 0,%g2
225         be .LL35
226         st %g3,[%o3]
227         add %g1,16,%g1
228         add %o1,16,%o1
229         add %o3,32,%o3
230         b .LL34
231         add %g4,32,%g4
232 .LL35:
233         retl
234         nop
235 .LLfe3:
236         .size    bn_sqr_words,.LLfe3-bn_sqr_words
237 .section        ".rodata"
238         .align 8
239 .LLC0:
240         .asciz  "Division would overflow\n"
241 .section        ".text"
242         .align 4
243         .global bn_div64
244         .type    bn_div64,#function
245         .proc   016
246 bn_div64:
247         !#PROLOGUE# 0
248         save %sp,-112,%sp
249         !#PROLOGUE# 1
250         mov 0,%l1
251         cmp %i2,0
252         bne .LL42
253         mov 2,%l0
254         b .LL59
255         mov -1,%i0
256 .LL42:
257         call BN_num_bits_word,0
258         mov %i2,%o0
259         mov %o0,%o2
260         cmp %o2,32
261         be .LL43
262         mov 1,%o0
263         sll %o0,%o2,%o0
264         cmp %i0,%o0
265         bleu .LL60
266         mov 32,%o0
267         sethi %hi(__iob+32),%o0
268         or %o0,%lo(__iob+32),%o0
269         sethi %hi(.LLC0),%o1
270         call fprintf,0
271         or %o1,%lo(.LLC0),%o1
272         call abort,0
273         nop
274 .LL43:
275         mov 32,%o0
276 .LL60:
277         cmp %i0,%i2
278         blu .LL44
279         sub %o0,%o2,%o2
280         sub %i0,%i2,%i0
281 .LL44:
282         cmp %o2,0
283         be .LL45
284         sethi %hi(-65536),%o7
285         sll %i2,%o2,%i2
286         sll %i0,%o2,%o1
287         sub %o0,%o2,%o0
288         srl %i1,%o0,%o0
289         or %o1,%o0,%i0
290         sll %i1,%o2,%i1
291 .LL45:
292         srl %i2,16,%g2
293         sethi %hi(65535),%o0
294         or %o0,%lo(65535),%o1
295         and %i2,%o1,%g3
296         mov %o0,%g4
297         mov %o1,%g1
298 .LL46:
299         srl %i0,16,%o0
300         cmp %o0,%g2
301         be .LL50
302         or %g4,%lo(65535),%o3
303         wr %g0,%g0,%y
304         nop
305         nop
306         nop
307         udiv %i0,%g2,%o3
308 .LL50:
309         and %i1,%o7,%o0
310         srl %o0,16,%o5
311         smul %o3,%g3,%o4
312         smul %o3,%g2,%o2
313 .LL51:
314         sub %i0,%o2,%o1
315         andcc %o1,%o7,%g0
316         bne .LL52
317         sll %o1,16,%o0
318         add %o0,%o5,%o0
319         cmp %o4,%o0
320         bleu .LL52
321         sub %o4,%g3,%o4
322         sub %o2,%g2,%o2
323         b .LL51
324         add %o3,-1,%o3
325 .LL52:
326         smul %o3,%g2,%o2
327         smul %o3,%g3,%o0
328         srl %o0,16,%o1
329         sll %o0,16,%o0
330         and %o0,%o7,%o0
331         cmp %i1,%o0
332         bgeu .LL56
333         add %o2,%o1,%o2
334         add %o2,1,%o2
335 .LL56:
336         cmp %i0,%o2
337         bgeu .LL57
338         sub %i1,%o0,%i1
339         add %i0,%i2,%i0
340         add %o3,-1,%o3
341 .LL57:
342         addcc %l0,-1,%l0
343         be .LL47
344         sub %i0,%o2,%i0
345         sll %o3,16,%l1
346         sll %i0,16,%o0
347         srl %i1,16,%o1
348         or %o0,%o1,%i0
349         and %i1,%g1,%o0
350         b .LL46
351         sll %o0,16,%i1
352 .LL47:
353         or %l1,%o3,%i0
354 .LL59:
355         ret
356         restore
357 .LLfe4:
358         .size    bn_div64,.LLfe4-bn_div64
359         .ident  "GCC: (GNU) 2.7.0"