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