]> www.ginac.de Git - cln.git/blob - src/polynomial/elem/cl_asm_sparc_GF2.cc
Initial revision
[cln.git] / src / polynomial / elem / cl_asm_sparc_GF2.cc
1 // Externe Routinen
2 // Prozessor: SPARC
3 // Compiler: GNU-C oder SUN-C
4 // Parameter-Übergabe: in Registern %o0-%o5.
5 // Einstellungen: intCsize=32, intDsize=32.
6
7 #ifdef ASM_UNDERSCORE /* SunOS 4 */
8   #if defined(__STDC__) || defined (__cplusplus)
9     #define C(entrypoint) _##entrypoint
10   #else
11     #define C(entrypoint) _/**/entrypoint
12   #endif
13 #else /* SunOS 5 = Solaris 2 */
14   #define C(entrypoint) entrypoint
15 #endif
16
17 // When this file is compiled into a shared library, ELF linkers need to
18 // know which symbols are functions.
19 #if defined(__NetBSD__) || defined(__OpenBSD__)
20   #define DECLARE_FUNCTION(name) .type C(name),@function
21 #elif defined(__svr4__) || defined(__ELF__)
22   // Some preprocessors keep the backslash in place, some don't.
23   // Some complain about the # being not in front of an ANSI C macro.
24   // Therefore we use a dollar, which will be sed-converted to # later.
25   #define DECLARE_FUNCTION(name) .type C(name),$function
26 #else
27   #define DECLARE_FUNCTION(name)
28 #endif
29
30   // Indikatoren für Anweisungen (Instruktionen) in Delay-Slots
31   // (diese werden VOR der vorigen Instruktion ausgeführt):
32   #define _             // Instruktion, die stets ausgeführt wird
33   #define __            // Instruktion, die nur im Sprung-Fall ausgeführt wird
34   // Abkürzungen für Anweisungen:
35   #define ret   jmp %i7+8    // return from subroutine
36   #define retl  jmp %o7+8    // return from leaf subroutine (no save/restore)
37
38         .seg "text"
39
40         .global C(gf2_mul16),C(gf2_mul32)
41
42 // extern uint32 gf2_mul16 (uint16 x, uint16 y);
43         DECLARE_FUNCTION(gf2_mul16)
44 C(gf2_mul16:) // Input in %o0,%o1, Output in %o0
45         sll %o0,16,%o0
46         sll %o1,16,%o1
47         srl %o1,16,%o1
48         // 16-bit multiply of x and y
49         // input %o1 = factor1, %o0 = 2^16*factor2, output %o0
50         addcc %o0,%o0,%o0
51         bcs Lb01
52        _ addcc %o0,%o0,%o0
53 La01:   bcs Lb02
54        _ addcc %o0,%o0,%o0
55 La02:   bcs Lb03
56        _ addcc %o0,%o0,%o0
57 La03:   bcs Lb04
58        _ addcc %o0,%o0,%o0
59 La04:   bcs Lb05
60        _ addcc %o0,%o0,%o0
61 La05:   bcs Lb06
62        _ addcc %o0,%o0,%o0
63 La06:   bcs Lb07
64        _ addcc %o0,%o0,%o0
65 La07:   bcs Lb08
66        _ addcc %o0,%o0,%o0
67 La08:   bcs Lb09
68        _ addcc %o0,%o0,%o0
69 La09:   bcs Lb10
70        _ addcc %o0,%o0,%o0
71 La10:   bcs Lb11
72        _ addcc %o0,%o0,%o0
73 La11:   bcs Lb12
74        _ addcc %o0,%o0,%o0
75 La12:   bcs Lb13
76        _ addcc %o0,%o0,%o0
77 La13:   bcs Lb14
78        _ addcc %o0,%o0,%o0
79 La14:   bcs Lb15
80        _ addcc %o0,%o0,%o0
81 La15:   bcs Lb16
82        _ add %o0,%o0,%o0
83 La16:   retl
84        _ nop
85 Lb01:   xor %o0,%o1,%o0
86         bcc La02
87        _ addcc %o0,%o0,%o0
88 Lb02:   xor %o0,%o1,%o0
89         bcc La03
90        _ addcc %o0,%o0,%o0
91 Lb03:   xor %o0,%o1,%o0
92         bcc La04
93        _ addcc %o0,%o0,%o0
94 Lb04:   xor %o0,%o1,%o0
95         bcc La05
96        _ addcc %o0,%o0,%o0
97 Lb05:   xor %o0,%o1,%o0
98         bcc La06
99        _ addcc %o0,%o0,%o0
100 Lb06:   xor %o0,%o1,%o0
101         bcc La07
102        _ addcc %o0,%o0,%o0
103 Lb07:   xor %o0,%o1,%o0
104         bcc La08
105        _ addcc %o0,%o0,%o0
106 Lb08:   xor %o0,%o1,%o0
107         bcc La09
108        _ addcc %o0,%o0,%o0
109 Lb09:   xor %o0,%o1,%o0
110         bcc La10
111        _ addcc %o0,%o0,%o0
112 Lb10:   xor %o0,%o1,%o0
113         bcc La11
114        _ addcc %o0,%o0,%o0
115 Lb11:   xor %o0,%o1,%o0
116         bcc La12
117        _ addcc %o0,%o0,%o0
118 Lb12:   xor %o0,%o1,%o0
119         bcc La13
120        _ addcc %o0,%o0,%o0
121 Lb13:   xor %o0,%o1,%o0
122         bcc La14
123        _ addcc %o0,%o0,%o0
124 Lb14:   xor %o0,%o1,%o0
125         bcc La15
126        _ addcc %o0,%o0,%o0
127 Lb15:   xor %o0,%o1,%o0
128         bcc La16
129        _ add %o0,%o0,%o0
130 Lb16:   retl
131        _ xor %o0,%o1,%o0
132
133 // extern uint32 gf2_mul32 (uint32 x, uint32 y, uint32* plo);
134         DECLARE_FUNCTION(gf2_mul32)
135 C(gf2_mul32:) // Input in %o0,%o1,%o2, Output in [%o2],%o0
136 #if 0
137         sll %o0,16,%o4
138         srl %o4,16,%o4          // %o4 = low16(x)
139         sll %o1,16,%o5          // %o5 = 2^16*low16(y)
140         srl %o0,16,%o0          // %o0 = high16(x)
141         srl %o1,16,%o1
142         sll %o1,16,%o1          // %o1 = 2^16*high16(y)
143         xor %o1,%o5,%o3         // %o3 = 2^16*(high16(y)+low16(y))
144         // 16-bit multiply of low16(x) and low16(y)
145         // input %o4 = factor1, %o5 = 2^16*factor2, output %o5
146         addcc %o5,%o5,%o5
147         bcs Ld01
148        _ addcc %o5,%o5,%o5
149 Lc01:   bcs Ld02
150        _ addcc %o5,%o5,%o5
151 Lc02:   bcs Ld03
152        _ addcc %o5,%o5,%o5
153 Lc03:   bcs Ld04
154        _ addcc %o5,%o5,%o5
155 Lc04:   bcs Ld05
156        _ addcc %o5,%o5,%o5
157 Lc05:   bcs Ld06
158        _ addcc %o5,%o5,%o5
159 Lc06:   bcs Ld07
160        _ addcc %o5,%o5,%o5
161 Lc07:   bcs Ld08
162        _ addcc %o5,%o5,%o5
163 Lc08:   bcs Ld09
164        _ addcc %o5,%o5,%o5
165 Lc09:   bcs Ld10
166        _ addcc %o5,%o5,%o5
167 Lc10:   bcs Ld11
168        _ addcc %o5,%o5,%o5
169 Lc11:   bcs Ld12
170        _ addcc %o5,%o5,%o5
171 Lc12:   bcs Ld13
172        _ addcc %o5,%o5,%o5
173 Lc13:   bcs Ld14
174        _ addcc %o5,%o5,%o5
175 Lc14:   bcs Ld15
176        _ addcc %o5,%o5,%o5
177 Lc15:   bcs Ld16
178        _ add %o5,%o5,%o5
179 Lc16:   b Ld17
180        _ nop
181 Ld01:   xor %o5,%o4,%o5
182         bcc Lc02
183        _ addcc %o5,%o5,%o5
184 Ld02:   xor %o5,%o4,%o5
185         bcc Lc03
186        _ addcc %o5,%o5,%o5
187 Ld03:   xor %o5,%o4,%o5
188         bcc Lc04
189        _ addcc %o5,%o5,%o5
190 Ld04:   xor %o5,%o4,%o5
191         bcc Lc05
192        _ addcc %o5,%o5,%o5
193 Ld05:   xor %o5,%o4,%o5
194         bcc Lc06
195        _ addcc %o5,%o5,%o5
196 Ld06:   xor %o5,%o4,%o5
197         bcc Lc07
198        _ addcc %o5,%o5,%o5
199 Ld07:   xor %o5,%o4,%o5
200         bcc Lc08
201        _ addcc %o5,%o5,%o5
202 Ld08:   xor %o5,%o4,%o5
203         bcc Lc09
204        _ addcc %o5,%o5,%o5
205 Ld09:   xor %o5,%o4,%o5
206         bcc Lc10
207        _ addcc %o5,%o5,%o5
208 Ld10:   xor %o5,%o4,%o5
209         bcc Lc11
210        _ addcc %o5,%o5,%o5
211 Ld11:   xor %o5,%o4,%o5
212         bcc Lc12
213        _ addcc %o5,%o5,%o5
214 Ld12:   xor %o5,%o4,%o5
215         bcc Lc13
216        _ addcc %o5,%o5,%o5
217 Ld13:   xor %o5,%o4,%o5
218         bcc Lc14
219        _ addcc %o5,%o5,%o5
220 Ld14:   xor %o5,%o4,%o5
221         bcc Lc15
222        _ addcc %o5,%o5,%o5
223 Ld15:   xor %o5,%o4,%o5
224         bcc Ld17
225        _ add %o5,%o5,%o5
226 Ld16:   xor %o5,%o4,%o5
227 Ld17:                           // %o5 = low16(x)*low16(y)
228         // 16-bit multiply of high16(x) and high16(y)
229         // input %o0 = factor1, %o1 = 2^16*factor2, output %o1
230         addcc %o1,%o1,%o1
231         bcs Lf01
232        _ addcc %o1,%o1,%o1
233 Le01:   bcs Lf02
234        _ addcc %o1,%o1,%o1
235 Le02:   bcs Lf03
236        _ addcc %o1,%o1,%o1
237 Le03:   bcs Lf04
238        _ addcc %o1,%o1,%o1
239 Le04:   bcs Lf05
240        _ addcc %o1,%o1,%o1
241 Le05:   bcs Lf06
242        _ addcc %o1,%o1,%o1
243 Le06:   bcs Lf07
244        _ addcc %o1,%o1,%o1
245 Le07:   bcs Lf08
246        _ addcc %o1,%o1,%o1
247 Le08:   bcs Lf09
248        _ addcc %o1,%o1,%o1
249 Le09:   bcs Lf10
250        _ addcc %o1,%o1,%o1
251 Le10:   bcs Lf11
252        _ addcc %o1,%o1,%o1
253 Le11:   bcs Lf12
254        _ addcc %o1,%o1,%o1
255 Le12:   bcs Lf13
256        _ addcc %o1,%o1,%o1
257 Le13:   bcs Lf14
258        _ addcc %o1,%o1,%o1
259 Le14:   bcs Lf15
260        _ addcc %o1,%o1,%o1
261 Le15:   bcs Lf16
262        _ add %o1,%o1,%o1
263 Le16:   b Lf17
264        _ nop
265 Lf01:   xor %o1,%o0,%o1
266         bcc Le02
267        _ addcc %o1,%o1,%o1
268 Lf02:   xor %o1,%o0,%o1
269         bcc Le03
270        _ addcc %o1,%o1,%o1
271 Lf03:   xor %o1,%o0,%o1
272         bcc Le04
273        _ addcc %o1,%o1,%o1
274 Lf04:   xor %o1,%o0,%o1
275         bcc Le05
276        _ addcc %o1,%o1,%o1
277 Lf05:   xor %o1,%o0,%o1
278         bcc Le06
279        _ addcc %o1,%o1,%o1
280 Lf06:   xor %o1,%o0,%o1
281         bcc Le07
282        _ addcc %o1,%o1,%o1
283 Lf07:   xor %o1,%o0,%o1
284         bcc Le08
285        _ addcc %o1,%o1,%o1
286 Lf08:   xor %o1,%o0,%o1
287         bcc Le09
288        _ addcc %o1,%o1,%o1
289 Lf09:   xor %o1,%o0,%o1
290         bcc Le10
291        _ addcc %o1,%o1,%o1
292 Lf10:   xor %o1,%o0,%o1
293         bcc Le11
294        _ addcc %o1,%o1,%o1
295 Lf11:   xor %o1,%o0,%o1
296         bcc Le12
297        _ addcc %o1,%o1,%o1
298 Lf12:   xor %o1,%o0,%o1
299         bcc Le13
300        _ addcc %o1,%o1,%o1
301 Lf13:   xor %o1,%o0,%o1
302         bcc Le14
303        _ addcc %o1,%o1,%o1
304 Lf14:   xor %o1,%o0,%o1
305         bcc Le15
306        _ addcc %o1,%o1,%o1
307 Lf15:   xor %o1,%o0,%o1
308         bcc Lf17
309        _ add %o1,%o1,%o1
310 Lf16:   xor %o1,%o0,%o1
311 Lf17:                           // %o1 = high16(x)*high16(y)
312         xor %o0,%o4,%o4         // %o4 = high16(x)+low16(x)
313         // 16-bit multiply of high16(x)+low16(x) and high16(y)+low16(y)
314         // input %o4 = factor1, %o3 = 2^16*factor2, output %o3
315         addcc %o3,%o3,%o3
316         bcs Lh01
317        _ addcc %o3,%o3,%o3
318 Lg01:   bcs Lh02
319        _ addcc %o3,%o3,%o3
320 Lg02:   bcs Lh03
321        _ addcc %o3,%o3,%o3
322 Lg03:   bcs Lh04
323        _ addcc %o3,%o3,%o3
324 Lg04:   bcs Lh05
325        _ addcc %o3,%o3,%o3
326 Lg05:   bcs Lh06
327        _ addcc %o3,%o3,%o3
328 Lg06:   bcs Lh07
329        _ addcc %o3,%o3,%o3
330 Lg07:   bcs Lh08
331        _ addcc %o3,%o3,%o3
332 Lg08:   bcs Lh09
333        _ addcc %o3,%o3,%o3
334 Lg09:   bcs Lh10
335        _ addcc %o3,%o3,%o3
336 Lg10:   bcs Lh11
337        _ addcc %o3,%o3,%o3
338 Lg11:   bcs Lh12
339        _ addcc %o3,%o3,%o3
340 Lg12:   bcs Lh13
341        _ addcc %o3,%o3,%o3
342 Lg13:   bcs Lh14
343        _ addcc %o3,%o3,%o3
344 Lg14:   bcs Lh15
345        _ addcc %o3,%o3,%o3
346 Lg15:   bcs Lh16
347        _ add %o3,%o3,%o3
348 Lg16:   b Lh17
349        _ nop
350 Lh01:   xor %o3,%o4,%o3
351         bcc Lg02
352        _ addcc %o3,%o3,%o3
353 Lh02:   xor %o3,%o4,%o3
354         bcc Lg03
355        _ addcc %o3,%o3,%o3
356 Lh03:   xor %o3,%o4,%o3
357         bcc Lg04
358        _ addcc %o3,%o3,%o3
359 Lh04:   xor %o3,%o4,%o3
360         bcc Lg05
361        _ addcc %o3,%o3,%o3
362 Lh05:   xor %o3,%o4,%o3
363         bcc Lg06
364        _ addcc %o3,%o3,%o3
365 Lh06:   xor %o3,%o4,%o3
366         bcc Lg07
367        _ addcc %o3,%o3,%o3
368 Lh07:   xor %o3,%o4,%o3
369         bcc Lg08
370        _ addcc %o3,%o3,%o3
371 Lh08:   xor %o3,%o4,%o3
372         bcc Lg09
373        _ addcc %o3,%o3,%o3
374 Lh09:   xor %o3,%o4,%o3
375         bcc Lg10
376        _ addcc %o3,%o3,%o3
377 Lh10:   xor %o3,%o4,%o3
378         bcc Lg11
379        _ addcc %o3,%o3,%o3
380 Lh11:   xor %o3,%o4,%o3
381         bcc Lg12
382        _ addcc %o3,%o3,%o3
383 Lh12:   xor %o3,%o4,%o3
384         bcc Lg13
385        _ addcc %o3,%o3,%o3
386 Lh13:   xor %o3,%o4,%o3
387         bcc Lg14
388        _ addcc %o3,%o3,%o3
389 Lh14:   xor %o3,%o4,%o3
390         bcc Lg15
391        _ addcc %o3,%o3,%o3
392 Lh15:   xor %o3,%o4,%o3
393         bcc Lh17
394        _ add %o3,%o3,%o3
395 Lh16:   xor %o3,%o4,%o3
396 Lh17:                           // %o3 = (high16(x)+low16(x))*(high16(y)+low16(y))
397         // Now %o5 = low16(x)*low16(y)
398         //     %o1 = high16(x)*high16(y)
399         //     %o3 = (high16(x)+low16(x))*(high16(y)+low16(y))
400         // The result is   x*y = 2^32*%o1 + 2^16*(%o3+%o1+%o5) + %o5
401         xor %o3,%o1,%o3
402         xor %o3,%o5,%o3
403         // The result is   x*y = 2^32*%o1 + 2^16*%o3 + %o5
404         srl %o3,16,%o0
405         xor %o0,%o1,%o0         // high 32 bits in %o0
406         sll %o3,16,%o1
407         xor %o1,%o5,%o1         // low 32 bits in %o1
408         retl
409        _ st %o1,[%o2]
410 #else
411         mov 0,%o3
412         // 32-bit multiply of x and y
413         // input %o1 = factor1, %o0|%o3 = 2^32*factor2, output %o0|%o3
414         addcc %o0,%o0,%o0
415         bcs Ld01
416        _ addcc %o3,%o3,%o3
417 Lc01:   addxcc %o0,%o0,%o0
418         bcs Ld02
419        _ addcc %o3,%o3,%o3
420 Lc02:   addxcc %o0,%o0,%o0
421         bcs Ld03
422        _ addcc %o3,%o3,%o3
423 Lc03:   addxcc %o0,%o0,%o0
424         bcs Ld04
425        _ addcc %o3,%o3,%o3
426 Lc04:   addxcc %o0,%o0,%o0
427         bcs Ld05
428        _ addcc %o3,%o3,%o3
429 Lc05:   addxcc %o0,%o0,%o0
430         bcs Ld06
431        _ addcc %o3,%o3,%o3
432 Lc06:   addxcc %o0,%o0,%o0
433         bcs Ld07
434        _ addcc %o3,%o3,%o3
435 Lc07:   addxcc %o0,%o0,%o0
436         bcs Ld08
437        _ addcc %o3,%o3,%o3
438 Lc08:   addxcc %o0,%o0,%o0
439         bcs Ld09
440        _ addcc %o3,%o3,%o3
441 Lc09:   addxcc %o0,%o0,%o0
442         bcs Ld10
443        _ addcc %o3,%o3,%o3
444 Lc10:   addxcc %o0,%o0,%o0
445         bcs Ld11
446        _ addcc %o3,%o3,%o3
447 Lc11:   addxcc %o0,%o0,%o0
448         bcs Ld12
449        _ addcc %o3,%o3,%o3
450 Lc12:   addxcc %o0,%o0,%o0
451         bcs Ld13
452        _ addcc %o3,%o3,%o3
453 Lc13:   addxcc %o0,%o0,%o0
454         bcs Ld14
455        _ addcc %o3,%o3,%o3
456 Lc14:   addxcc %o0,%o0,%o0
457         bcs Ld15
458        _ addcc %o3,%o3,%o3
459 Lc15:   addxcc %o0,%o0,%o0
460         bcs Ld16
461        _ addcc %o3,%o3,%o3
462 Lc16:   addxcc %o0,%o0,%o0
463         bcs Ld17
464        _ addcc %o3,%o3,%o3
465 Lc17:   addxcc %o0,%o0,%o0
466         bcs Ld18
467        _ addcc %o3,%o3,%o3
468 Lc18:   addxcc %o0,%o0,%o0
469         bcs Ld19
470        _ addcc %o3,%o3,%o3
471 Lc19:   addxcc %o0,%o0,%o0
472         bcs Ld20
473        _ addcc %o3,%o3,%o3
474 Lc20:   addxcc %o0,%o0,%o0
475         bcs Ld21
476        _ addcc %o3,%o3,%o3
477 Lc21:   addxcc %o0,%o0,%o0
478         bcs Ld22
479        _ addcc %o3,%o3,%o3
480 Lc22:   addxcc %o0,%o0,%o0
481         bcs Ld23
482        _ addcc %o3,%o3,%o3
483 Lc23:   addxcc %o0,%o0,%o0
484         bcs Ld24
485        _ addcc %o3,%o3,%o3
486 Lc24:   addxcc %o0,%o0,%o0
487         bcs Ld25
488        _ addcc %o3,%o3,%o3
489 Lc25:   addxcc %o0,%o0,%o0
490         bcs Ld26
491        _ addcc %o3,%o3,%o3
492 Lc26:   addxcc %o0,%o0,%o0
493         bcs Ld27
494        _ addcc %o3,%o3,%o3
495 Lc27:   addxcc %o0,%o0,%o0
496         bcs Ld28
497        _ addcc %o3,%o3,%o3
498 Lc28:   addxcc %o0,%o0,%o0
499         bcs Ld29
500        _ addcc %o3,%o3,%o3
501 Lc29:   addxcc %o0,%o0,%o0
502         bcs Ld30
503        _ addcc %o3,%o3,%o3
504 Lc30:   addxcc %o0,%o0,%o0
505         bcs Ld31
506        _ addcc %o3,%o3,%o3
507 Lc31:   addxcc %o0,%o0,%o0
508         bcs Ld32
509        _ addcc %o3,%o3,%o3
510 Lc32:   b Ld34
511        _ addx %o0,%o0,%o0
512 Ld01:   addxcc %o0,%o0,%o0
513         xor %o3,%o1,%o3
514         bcc Lc02
515        _ addcc %o3,%o3,%o3
516 Ld02:   addxcc %o0,%o0,%o0
517         xor %o3,%o1,%o3
518         bcc Lc03
519        _ addcc %o3,%o3,%o3
520 Ld03:   addxcc %o0,%o0,%o0
521         xor %o3,%o1,%o3
522         bcc Lc04
523        _ addcc %o3,%o3,%o3
524 Ld04:   addxcc %o0,%o0,%o0
525         xor %o3,%o1,%o3
526         bcc Lc05
527        _ addcc %o3,%o3,%o3
528 Ld05:   addxcc %o0,%o0,%o0
529         xor %o3,%o1,%o3
530         bcc Lc06
531        _ addcc %o3,%o3,%o3
532 Ld06:   addxcc %o0,%o0,%o0
533         xor %o3,%o1,%o3
534         bcc Lc07
535        _ addcc %o3,%o3,%o3
536 Ld07:   addxcc %o0,%o0,%o0
537         xor %o3,%o1,%o3
538         bcc Lc08
539        _ addcc %o3,%o3,%o3
540 Ld08:   addxcc %o0,%o0,%o0
541         xor %o3,%o1,%o3
542         bcc Lc09
543        _ addcc %o3,%o3,%o3
544 Ld09:   addxcc %o0,%o0,%o0
545         xor %o3,%o1,%o3
546         bcc Lc10
547        _ addcc %o3,%o3,%o3
548 Ld10:   addxcc %o0,%o0,%o0
549         xor %o3,%o1,%o3
550         bcc Lc11
551        _ addcc %o3,%o3,%o3
552 Ld11:   addxcc %o0,%o0,%o0
553         xor %o3,%o1,%o3
554         bcc Lc12
555        _ addcc %o3,%o3,%o3
556 Ld12:   addxcc %o0,%o0,%o0
557         xor %o3,%o1,%o3
558         bcc Lc13
559        _ addcc %o3,%o3,%o3
560 Ld13:   addxcc %o0,%o0,%o0
561         xor %o3,%o1,%o3
562         bcc Lc14
563        _ addcc %o3,%o3,%o3
564 Ld14:   addxcc %o0,%o0,%o0
565         xor %o3,%o1,%o3
566         bcc Lc15
567        _ addcc %o3,%o3,%o3
568 Ld15:   addxcc %o0,%o0,%o0
569         xor %o3,%o1,%o3
570         bcc Lc16
571        _ addcc %o3,%o3,%o3
572 Ld16:   addxcc %o0,%o0,%o0
573         xor %o3,%o1,%o3
574         bcc Lc17
575        _ addcc %o3,%o3,%o3
576 Ld17:   addxcc %o0,%o0,%o0
577         xor %o3,%o1,%o3
578         bcc Lc18
579        _ addcc %o3,%o3,%o3
580 Ld18:   addxcc %o0,%o0,%o0
581         xor %o3,%o1,%o3
582         bcc Lc19
583        _ addcc %o3,%o3,%o3
584 Ld19:   addxcc %o0,%o0,%o0
585         xor %o3,%o1,%o3
586         bcc Lc20
587        _ addcc %o3,%o3,%o3
588 Ld20:   addxcc %o0,%o0,%o0
589         xor %o3,%o1,%o3
590         bcc Lc21
591        _ addcc %o3,%o3,%o3
592 Ld21:   addxcc %o0,%o0,%o0
593         xor %o3,%o1,%o3
594         bcc Lc22
595        _ addcc %o3,%o3,%o3
596 Ld22:   addxcc %o0,%o0,%o0
597         xor %o3,%o1,%o3
598         bcc Lc23
599        _ addcc %o3,%o3,%o3
600 Ld23:   addxcc %o0,%o0,%o0
601         xor %o3,%o1,%o3
602         bcc Lc24
603        _ addcc %o3,%o3,%o3
604 Ld24:   addxcc %o0,%o0,%o0
605         xor %o3,%o1,%o3
606         bcc Lc25
607        _ addcc %o3,%o3,%o3
608 Ld25:   addxcc %o0,%o0,%o0
609         xor %o3,%o1,%o3
610         bcc Lc26
611        _ addcc %o3,%o3,%o3
612 Ld26:   addxcc %o0,%o0,%o0
613         xor %o3,%o1,%o3
614         bcc Lc27
615        _ addcc %o3,%o3,%o3
616 Ld27:   addxcc %o0,%o0,%o0
617         xor %o3,%o1,%o3
618         bcc Lc28
619        _ addcc %o3,%o3,%o3
620 Ld28:   addxcc %o0,%o0,%o0
621         xor %o3,%o1,%o3
622         bcc Lc29
623        _ addcc %o3,%o3,%o3
624 Ld29:   addxcc %o0,%o0,%o0
625         xor %o3,%o1,%o3
626         bcc Lc30
627        _ addcc %o3,%o3,%o3
628 Ld30:   addxcc %o0,%o0,%o0
629         xor %o3,%o1,%o3
630         bcc Lc31
631        _ addcc %o3,%o3,%o3
632 Ld31:   addxcc %o0,%o0,%o0
633         xor %o3,%o1,%o3
634         bcc Ld33
635        _ addcc %o3,%o3,%o3
636 Ld32:   xor %o3,%o1,%o3
637 Ld33:   addx %o0,%o0,%o0
638 Ld34:   // Now x*y = 2^32*%o0+%o3
639         retl
640        _ st %o3,[%o2]
641 #endif
642