Annotation of OpenXM_contrib/pari/src/kernel/sparcv7/level0.S, Revision 1.1.1.1
1.1 maekawa 1: /* $Id: level0.S,v 1.1.1.1 1999/09/16 13:47:58 karim Exp $ */
2: #if defined(NO_UNDERSCORE) || defined(linux)
3: # define C(entrypoint) entrypoint
4: #elif defined(sun) || defined(NeXT)
5: # ifdef __STDC__
6: # define C(entrypoint) _##entrypoint
7: # else
8: # define C(entrypoint) _/**/entrypoint
9: # endif
10: #endif
11: #if defined(sun) || defined(linux)
12: # define GLOBL .global
13: #elif defined(NeXT)
14: # define GLOBL .globl
15: #endif
16:
17: #if defined(sun) || defined(linux)
18: .seg "text"
19: #elif defined(NeXT)
20: .text
21: .align 2
22: #endif
23: GLOBL C(addll),C(subll),C(addllx),C(subllx),C(shiftl),C(shiftlr),C(bfffo)
24: GLOBL C(mulll),C(overflow),C(hiremainder),C(addmul),C(divll)
25:
26: C(addll): sethi %hi(C(overflow)),%o3
27: addcc %o0,%o1,%o0
28: addx %g0,%g0,%o2
29: retl
30: st %o2,[%o3+%lo(C(overflow))]
31: C(subll): sethi %hi(C(overflow)),%o3
32: subcc %o0,%o1,%o0
33: addx %g0,%g0,%o2
34: retl
35: st %o2,[%o3+%lo(C(overflow))]
36: C(addllx): sethi %hi(C(overflow)),%o3
37: ld [%o3+%lo(C(overflow))],%o2
38: subcc %g0,%o2,%g0
39: addxcc %o0,%o1,%o0
40: addx %g0,%g0,%o2
41: retl
42: st %o2,[%o3+%lo(C(overflow))]
43: C(subllx): sethi %hi(C(overflow)),%o3
44: ld [%o3+%lo(C(overflow))],%o2
45: subcc %g0,%o2,%g0
46: subxcc %o0,%o1,%o0
47: addx %g0,%g0,%o2
48: retl
49: st %o2,[%o3+%lo(C(overflow))]
50: C(shiftl): sethi %hi(C(hiremainder)),%o3
51: neg %o1,%o4
52: srl %o0,%o4,%o2
53: st %o2,[%o3+%lo(C(hiremainder))]
54: retl
55: sll %o0,%o1,%o0
56: C(shiftlr): sethi %hi(C(hiremainder)),%o3
57: neg %o1,%o4
58: sll %o0,%o4,%o2
59: st %o2,[%o3+%lo(C(hiremainder))]
60: retl
61: srl %o0,%o1,%o0
62: C(bfffo): sethi %hi(0xffff0000),%o1
63: andcc %o1,%o0,%g0
64: bnz,a 1f
65: clr %o2
66: sll %o0,16,%o0
67: mov 16,%o2
68: 1: sethi %hi(0xff000000),%o1
69: andcc %o1,%o0,%g0
70: bnz 2f
71: sethi %hi(0xf0000000),%o1
72: sll %o0,8,%o0
73: add %o2,8,%o2
74: 2: andcc %o1,%o0,%g0
75: bnz,a 3f
76: srl %o0,28,%o0
77: add %o2,4,%o2
78: srl %o0,24,%o0
79: 3: set C(tabshi),%o3
80: sll %o0,2,%o0
81: ld [%o3+%o0],%o1
82: retl
83: add %o2,%o1,%o0
84: C(mulll): sethi %hi(C(hiremainder)),%o3
85: or %o0,%o1,%o4
86: mov %o0,%y
87: andncc %o4,0xfff,%g0
88: be 2f
89: andcc %g0,%g0,%o4
90: mulscc %o4,%o1,%o4
91: mulscc %o4,%o1,%o4
92: mulscc %o4,%o1,%o4
93: mulscc %o4,%o1,%o4
94: mulscc %o4,%o1,%o4
95: mulscc %o4,%o1,%o4
96: mulscc %o4,%o1,%o4
97: mulscc %o4,%o1,%o4
98: mulscc %o4,%o1,%o4
99: mulscc %o4,%o1,%o4
100: mulscc %o4,%o1,%o4
101: mulscc %o4,%o1,%o4
102: mulscc %o4,%o1,%o4
103: mulscc %o4,%o1,%o4
104: mulscc %o4,%o1,%o4
105: mulscc %o4,%o1,%o4
106: mulscc %o4,%o1,%o4
107: mulscc %o4,%o1,%o4
108: mulscc %o4,%o1,%o4
109: mulscc %o4,%o1,%o4
110: mulscc %o4,%o1,%o4
111: mulscc %o4,%o1,%o4
112: mulscc %o4,%o1,%o4
113: mulscc %o4,%o1,%o4
114: mulscc %o4,%o1,%o4
115: mulscc %o4,%o1,%o4
116: mulscc %o4,%o1,%o4
117: mulscc %o4,%o1,%o4
118: mulscc %o4,%o1,%o4
119: mulscc %o4,%o1,%o4
120: mulscc %o4,%o1,%o4
121: mulscc %o4,%o1,%o4
122: mulscc %o4,%g0,%o4
123: tst %o1
124: bl,a 1f
125: add %o4,%o0,%o4
126: 1: st %o4,[%o3+%lo(C(hiremainder))]
127: retl
128: rd %y,%o0
129: 2: clr [%o3+%lo(C(hiremainder))]
130: mulscc %o4,%o1,%o4
131: mulscc %o4,%o1,%o4
132: mulscc %o4,%o1,%o4
133: mulscc %o4,%o1,%o4
134: mulscc %o4,%o1,%o4
135: mulscc %o4,%o1,%o4
136: mulscc %o4,%o1,%o4
137: mulscc %o4,%o1,%o4
138: mulscc %o4,%o1,%o4
139: mulscc %o4,%o1,%o4
140: mulscc %o4,%o1,%o4
141: mulscc %o4,%o1,%o4
142: mulscc %o4,%g0,%o4
143: rd %y,%o5
144: sll %o4,12,%o4
145: srl %o5,20,%o5
146: retl
147: or %o5,%o4,%o0
148:
149: C(addmul): sethi %hi(C(hiremainder)),%o3
150: ld [%o3+%lo(C(hiremainder))],%o2
151: or %o0,%o1,%o4
152: mov %o0,%y
153: andncc %o4,0xfff,%g0
154: be 2f
155: andcc %g0,%g0,%o4
156: mulscc %o4,%o1,%o4
157: mulscc %o4,%o1,%o4
158: mulscc %o4,%o1,%o4
159: mulscc %o4,%o1,%o4
160: mulscc %o4,%o1,%o4
161: mulscc %o4,%o1,%o4
162: mulscc %o4,%o1,%o4
163: mulscc %o4,%o1,%o4
164: mulscc %o4,%o1,%o4
165: mulscc %o4,%o1,%o4
166: mulscc %o4,%o1,%o4
167: mulscc %o4,%o1,%o4
168: mulscc %o4,%o1,%o4
169: mulscc %o4,%o1,%o4
170: mulscc %o4,%o1,%o4
171: mulscc %o4,%o1,%o4
172: mulscc %o4,%o1,%o4
173: mulscc %o4,%o1,%o4
174: mulscc %o4,%o1,%o4
175: mulscc %o4,%o1,%o4
176: mulscc %o4,%o1,%o4
177: mulscc %o4,%o1,%o4
178: mulscc %o4,%o1,%o4
179: mulscc %o4,%o1,%o4
180: mulscc %o4,%o1,%o4
181: mulscc %o4,%o1,%o4
182: mulscc %o4,%o1,%o4
183: mulscc %o4,%o1,%o4
184: mulscc %o4,%o1,%o4
185: mulscc %o4,%o1,%o4
186: mulscc %o4,%o1,%o4
187: mulscc %o4,%o1,%o4
188: mulscc %o4,%g0,%o4
189: tst %o1
190: bl,a 1f
191: add %o4,%o0,%o4
192: 1: rd %y,%o0
193: addcc %o0,%o2,%o0
194: addx %g0,%o4,%o4
195: retl
196: st %o4,[%o3+%lo(C(hiremainder))]
197: 2: mulscc %o4,%o1,%o4
198: mulscc %o4,%o1,%o4
199: mulscc %o4,%o1,%o4
200: mulscc %o4,%o1,%o4
201: mulscc %o4,%o1,%o4
202: mulscc %o4,%o1,%o4
203: mulscc %o4,%o1,%o4
204: mulscc %o4,%o1,%o4
205: mulscc %o4,%o1,%o4
206: mulscc %o4,%o1,%o4
207: mulscc %o4,%o1,%o4
208: mulscc %o4,%o1,%o4
209: mulscc %o4,%g0,%o4
210: rd %y,%o5
211: sll %o4,12,%o4
212: srl %o5,20,%o5
213: or %o5,%o4,%o0
214: addcc %o0,%o2,%o0
215: addx %g0,%g0,%o4
216: retl
217: st %o4,[%o3+%lo(C(hiremainder))]
218:
219: #define SS0(label) \
220: addx %o2,%o2,%o2;\
221: subcc %o2,%o1,%o3;\
222: bcc label;\
223: addxcc %o0,%o0,%o0
224:
225: #define SS1(label) \
226: addx %o3,%o3,%o3;\
227: subcc %o3,%o1,%o2;\
228: bcc label;\
229: addxcc %o0,%o0,%o0
230:
231: C(divll): sethi %hi(C(hiremainder)),%o4
232: ld [%o4+%lo(C(hiremainder))],%o2
233: subcc %o2,%o1,%g0
234: blu 1f
235: addcc %o1,%o1,%g0
236: mov 0x2f,%o0
237: call C(err),1
238: nop
239: 1: bcc Lsmalldiv
240: andcc %o1,1,%g0
241: be Levendiv
242: srl %o1,1,%o1
243: add %o1,1,%o1
244: subcc %o2,%o1,%o3
245: bcc Lb01
246: addxcc %o0,%o0,%o0
247: La01: SS0(Lb02)
248: La02: SS0(Lb03)
249: La03: SS0(Lb04)
250: La04: SS0(Lb05)
251: La05: SS0(Lb06)
252: La06: SS0(Lb07)
253: La07: SS0(Lb08)
254: La08: SS0(Lb09)
255: La09: SS0(Lb10)
256: La10: SS0(Lb11)
257: La11: SS0(Lb12)
258: La12: SS0(Lb13)
259: La13: SS0(Lb14)
260: La14: SS0(Lb15)
261: La15: SS0(Lb16)
262: La16: SS0(Lb17)
263: La17: SS0(Lb18)
264: La18: SS0(Lb19)
265: La19: SS0(Lb20)
266: La20: SS0(Lb21)
267: La21: SS0(Lb22)
268: La22: SS0(Lb23)
269: La23: SS0(Lb24)
270: La24: SS0(Lb25)
271: La25: SS0(Lb26)
272: La26: SS0(Lb27)
273: La27: SS0(Lb28)
274: La28: SS0(Lb29)
275: La29: SS0(Lb30)
276: La30: SS0(Lb31)
277: La31: SS0(Lb32)
278: La32: addx %o2,%o2,%o2
279: xor %o0,-1,%o0
280: add %o1,%o1,%o1
281: sub %o1,1,%o1
282: addcc %o0,%o2,%o2
283: bcc 1f
284: subcc %o2,%o1,%o3
285: subcc %o3,%o1,%o2
286: bcs 2f
287: add %o0,1,%o0
288: add %o0,1,%o0
289: 3: retl
290: st %o2,[%o4+%lo(C(hiremainder))]
291: 1: bcs 3b
292: nop
293: add %o0,1,%o0
294: 2: retl
295: st %o3,[%o4+%lo(C(hiremainder))]
296:
297: Lb01: SS1(La02)
298: Lb02: SS1(La03)
299: Lb03: SS1(La04)
300: Lb04: SS1(La05)
301: Lb05: SS1(La06)
302: Lb06: SS1(La07)
303: Lb07: SS1(La08)
304: Lb08: SS1(La09)
305: Lb09: SS1(La10)
306: Lb10: SS1(La11)
307: Lb11: SS1(La12)
308: Lb12: SS1(La13)
309: Lb13: SS1(La14)
310: Lb14: SS1(La15)
311: Lb15: SS1(La16)
312: Lb16: SS1(La17)
313: Lb17: SS1(La18)
314: Lb18: SS1(La19)
315: Lb19: SS1(La20)
316: Lb20: SS1(La21)
317: Lb21: SS1(La22)
318: Lb22: SS1(La23)
319: Lb23: SS1(La24)
320: Lb24: SS1(La25)
321: Lb25: SS1(La26)
322: Lb26: SS1(La27)
323: Lb27: SS1(La28)
324: Lb28: SS1(La29)
325: Lb29: SS1(La30)
326: Lb30: SS1(La31)
327: Lb31: SS1(La32)
328: Lb32: addx %o3,%o3,%o2
329: xor %o0,-1,%o0
330: add %o1,%o1,%o1
331: sub %o1,1,%o1
332: addcc %o0,%o2,%o2
333: bcc 1f
334: subcc %o2,%o1,%o3
335: subcc %o3,%o1,%o2
336: bcs 2f
337: add %o0,1,%o0
338: add %o0,1,%o0
339: 3: retl
340: st %o2,[%o4+%lo(C(hiremainder))]
341: 1: bcs 3b
342: nop
343: add %o0,1,%o0
344: 2: retl
345: st %o3,[%o4+%lo(C(hiremainder))]
346:
347: Lsmalldiv:
348: addcc %o0,%o0,%o0
349: Lc00: SS0(Ld01)
350: Lc01: SS0(Ld02)
351: Lc02: SS0(Ld03)
352: Lc03: SS0(Ld04)
353: Lc04: SS0(Ld05)
354: Lc05: SS0(Ld06)
355: Lc06: SS0(Ld07)
356: Lc07: SS0(Ld08)
357: Lc08: SS0(Ld09)
358: Lc09: SS0(Ld10)
359: Lc10: SS0(Ld11)
360: Lc11: SS0(Ld12)
361: Lc12: SS0(Ld13)
362: Lc13: SS0(Ld14)
363: Lc14: SS0(Ld15)
364: Lc15: SS0(Ld16)
365: Lc16: SS0(Ld17)
366: Lc17: SS0(Ld18)
367: Lc18: SS0(Ld19)
368: Lc19: SS0(Ld20)
369: Lc20: SS0(Ld21)
370: Lc21: SS0(Ld22)
371: Lc22: SS0(Ld23)
372: Lc23: SS0(Ld24)
373: Lc24: SS0(Ld25)
374: Lc25: SS0(Ld26)
375: Lc26: SS0(Ld27)
376: Lc27: SS0(Ld28)
377: Lc28: SS0(Ld29)
378: Lc29: SS0(Ld30)
379: Lc30: SS0(Ld31)
380: Lc31: SS0(Ld32)
381: Lc32: xor %o0,-1,%o0
382: retl
383: st %o2,[%o4+%lo(C(hiremainder))]
384:
385: Ld01: SS1(Lc02)
386: Ld02: SS1(Lc03)
387: Ld03: SS1(Lc04)
388: Ld04: SS1(Lc05)
389: Ld05: SS1(Lc06)
390: Ld06: SS1(Lc07)
391: Ld07: SS1(Lc08)
392: Ld08: SS1(Lc09)
393: Ld09: SS1(Lc10)
394: Ld10: SS1(Lc11)
395: Ld11: SS1(Lc12)
396: Ld12: SS1(Lc13)
397: Ld13: SS1(Lc14)
398: Ld14: SS1(Lc15)
399: Ld15: SS1(Lc16)
400: Ld16: SS1(Lc17)
401: Ld17: SS1(Lc18)
402: Ld18: SS1(Lc19)
403: Ld19: SS1(Lc20)
404: Ld20: SS1(Lc21)
405: Ld21: SS1(Lc22)
406: Ld22: SS1(Lc23)
407: Ld23: SS1(Lc24)
408: Ld24: SS1(Lc25)
409: Ld25: SS1(Lc26)
410: Ld26: SS1(Lc27)
411: Ld27: SS1(Lc28)
412: Ld28: SS1(Lc29)
413: Ld29: SS1(Lc30)
414: Ld30: SS1(Lc31)
415: Ld31: SS1(Lc32)
416: Ld32: xor %o0,-1,%o0
417: retl
418: st %o3,[%o4+%lo(C(hiremainder))]
419:
420:
421: Levendiv:
422: subcc %o2,%o1,%o3
423: bcc Lf01
424: addxcc %o0,%o0,%o0
425: Le01: SS0(Lf02)
426: Le02: SS0(Lf03)
427: Le03: SS0(Lf04)
428: Le04: SS0(Lf05)
429: Le05: SS0(Lf06)
430: Le06: SS0(Lf07)
431: Le07: SS0(Lf08)
432: Le08: SS0(Lf09)
433: Le09: SS0(Lf10)
434: Le10: SS0(Lf11)
435: Le11: SS0(Lf12)
436: Le12: SS0(Lf13)
437: Le13: SS0(Lf14)
438: Le14: SS0(Lf15)
439: Le15: SS0(Lf16)
440: Le16: SS0(Lf17)
441: Le17: SS0(Lf18)
442: Le18: SS0(Lf19)
443: Le19: SS0(Lf20)
444: Le20: SS0(Lf21)
445: Le21: SS0(Lf22)
446: Le22: SS0(Lf23)
447: Le23: SS0(Lf24)
448: Le24: SS0(Lf25)
449: Le25: SS0(Lf26)
450: Le26: SS0(Lf27)
451: Le27: SS0(Lf28)
452: Le28: SS0(Lf29)
453: Le29: SS0(Lf30)
454: Le30: SS0(Lf31)
455: Le31: SS0(Lf32)
456: Le32: addx %o2,%o2,%o2
457: xor %o0,-1,%o0
458: retl
459: st %o2,[%o4+%lo(C(hiremainder))]
460:
461: Lf01: SS1(Le02)
462: Lf02: SS1(Le03)
463: Lf03: SS1(Le04)
464: Lf04: SS1(Le05)
465: Lf05: SS1(Le06)
466: Lf06: SS1(Le07)
467: Lf07: SS1(Le08)
468: Lf08: SS1(Le09)
469: Lf09: SS1(Le10)
470: Lf10: SS1(Le11)
471: Lf11: SS1(Le12)
472: Lf12: SS1(Le13)
473: Lf13: SS1(Le14)
474: Lf14: SS1(Le15)
475: Lf15: SS1(Le16)
476: Lf16: SS1(Le17)
477: Lf17: SS1(Le18)
478: Lf18: SS1(Le19)
479: Lf19: SS1(Le20)
480: Lf20: SS1(Le21)
481: Lf21: SS1(Le22)
482: Lf22: SS1(Le23)
483: Lf23: SS1(Le24)
484: Lf24: SS1(Le25)
485: Lf25: SS1(Le26)
486: Lf26: SS1(Le27)
487: Lf27: SS1(Le28)
488: Lf28: SS1(Le29)
489: Lf29: SS1(Le30)
490: Lf30: SS1(Le31)
491: Lf31: SS1(Le32)
492: Lf32: addx %o3,%o3,%o3
493: xor %o0,-1,%o0
494: retl
495: st %o3,[%o4+%lo(C(hiremainder))]
496:
497: .seg "data"
498: .align 4
499: C(tabshi): .word 4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0
500:
501: .seg "bss"
502: .align 4
503: C(hiremainder): .skip 4
504: C(overflow): .skip 4
505:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>