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