|
|
1.1 root 1: /* This is an assembly language implementation of libgcc1.c for the sparclite
2: processor.
3:
4: These routines are all from the Sparclite User's Guide, slightly edited
5: to match the desired calling convention, and also to optimize them. */
6:
7: #ifdef L_udivsi3
8: .text
9: .align 4
10: .global .udiv
11: .proc 04
12: .udiv:
13: wr %g0,%g0,%y ! Not a delayed write for sparclite
14: tst %g0
15: divscc %o0,%o1,%g1
16: divscc %g1,%o1,%g1
17: divscc %g1,%o1,%g1
18: divscc %g1,%o1,%g1
19: divscc %g1,%o1,%g1
20: divscc %g1,%o1,%g1
21: divscc %g1,%o1,%g1
22: divscc %g1,%o1,%g1
23: divscc %g1,%o1,%g1
24: divscc %g1,%o1,%g1
25: divscc %g1,%o1,%g1
26: divscc %g1,%o1,%g1
27: divscc %g1,%o1,%g1
28: divscc %g1,%o1,%g1
29: divscc %g1,%o1,%g1
30: divscc %g1,%o1,%g1
31: divscc %g1,%o1,%g1
32: divscc %g1,%o1,%g1
33: divscc %g1,%o1,%g1
34: divscc %g1,%o1,%g1
35: divscc %g1,%o1,%g1
36: divscc %g1,%o1,%g1
37: divscc %g1,%o1,%g1
38: divscc %g1,%o1,%g1
39: divscc %g1,%o1,%g1
40: divscc %g1,%o1,%g1
41: divscc %g1,%o1,%g1
42: divscc %g1,%o1,%g1
43: divscc %g1,%o1,%g1
44: divscc %g1,%o1,%g1
45: divscc %g1,%o1,%g1
46: retl
47: divscc %g1,%o1,%o0
48: #endif
49:
50: #ifdef L_umodsi3
51: .text
52: .align 4
53: .global .urem
54: .proc 04
55: .urem:
56: wr %g0,%g0,%y ! Not a delayed write for sparclite
57: tst %g0
58: divscc %o0,%o1,%g1
59: divscc %g1,%o1,%g1
60: divscc %g1,%o1,%g1
61: divscc %g1,%o1,%g1
62: divscc %g1,%o1,%g1
63: divscc %g1,%o1,%g1
64: divscc %g1,%o1,%g1
65: divscc %g1,%o1,%g1
66: divscc %g1,%o1,%g1
67: divscc %g1,%o1,%g1
68: divscc %g1,%o1,%g1
69: divscc %g1,%o1,%g1
70: divscc %g1,%o1,%g1
71: divscc %g1,%o1,%g1
72: divscc %g1,%o1,%g1
73: divscc %g1,%o1,%g1
74: divscc %g1,%o1,%g1
75: divscc %g1,%o1,%g1
76: divscc %g1,%o1,%g1
77: divscc %g1,%o1,%g1
78: divscc %g1,%o1,%g1
79: divscc %g1,%o1,%g1
80: divscc %g1,%o1,%g1
81: divscc %g1,%o1,%g1
82: divscc %g1,%o1,%g1
83: divscc %g1,%o1,%g1
84: divscc %g1,%o1,%g1
85: divscc %g1,%o1,%g1
86: divscc %g1,%o1,%g1
87: divscc %g1,%o1,%g1
88: divscc %g1,%o1,%g1
89: divscc %g1,%o1,%g1
90: bl 1f
91: rd %y,%o0
92: retl
93: nop
94: 1: retl
95: add %o0,%o1,%o0
96: #endif
97:
98: #ifdef L_divsi3
99: .text
100: .align 4
101: .global .div
102: .proc 04
103: ! ??? This routine could be made faster if was optimized, and if it was
104: ! rewritten to only calculate the quotient.
105: .div:
106: wr %g0,%g0,%y ! Not a delayed write for sparclite
107: mov %o1,%o4
108: tst %o1
109: bl,a 1f
110: sub %g0,%o4,%o4
111: 1: tst %o0
112: bl,a 2f
113: mov -1,%y
114: 2: divscc %o0,%o4,%g1
115: divscc %g1,%o4,%g1
116: divscc %g1,%o4,%g1
117: divscc %g1,%o4,%g1
118: divscc %g1,%o4,%g1
119: divscc %g1,%o4,%g1
120: divscc %g1,%o4,%g1
121: divscc %g1,%o4,%g1
122: divscc %g1,%o4,%g1
123: divscc %g1,%o4,%g1
124: divscc %g1,%o4,%g1
125: divscc %g1,%o4,%g1
126: divscc %g1,%o4,%g1
127: divscc %g1,%o4,%g1
128: divscc %g1,%o4,%g1
129: divscc %g1,%o4,%g1
130: divscc %g1,%o4,%g1
131: divscc %g1,%o4,%g1
132: divscc %g1,%o4,%g1
133: divscc %g1,%o4,%g1
134: divscc %g1,%o4,%g1
135: divscc %g1,%o4,%g1
136: divscc %g1,%o4,%g1
137: divscc %g1,%o4,%g1
138: divscc %g1,%o4,%g1
139: divscc %g1,%o4,%g1
140: divscc %g1,%o4,%g1
141: divscc %g1,%o4,%g1
142: divscc %g1,%o4,%g1
143: divscc %g1,%o4,%g1
144: divscc %g1,%o4,%g1
145: divscc %g1,%o4,%g1
146: be 6f
147: mov %y,%o3
148: bg 4f
149: addcc %o3,%o4,%g0
150: be,a 6f
151: mov %g0,%o3
152: tst %o0
153: bl 5f
154: tst %g1
155: ba 5f
156: add %o3,%o4,%o3
157: 4: subcc %o3,%o4,%g0
158: be,a 6f
159: mov %g0,%o3
160: tst %o0
161: bge 5f
162: tst %g1
163: sub %o3,%o4,%o3
164: 5: bl,a 6f
165: add %g1,1,%g1
166: 6: tst %o1
167: bl,a 7f
168: sub %g0,%g1,%g1
169: 7: retl
170: mov %g1,%o0 ! Quotient is in %g1.
171: #endif
172:
173: #ifdef L_modsi3
174: .text
175: .align 4
176: .global .rem
177: .proc 04
178: ! ??? This routine could be made faster if was optimized, and if it was
179: ! rewritten to only calculate the remainder.
180: .rem:
181: wr %g0,%g0,%y ! Not a delayed write for sparclite
182: mov %o1,%o4
183: tst %o1
184: bl,a 1f
185: sub %g0,%o4,%o4
186: 1: tst %o0
187: bl,a 2f
188: mov -1,%y
189: 2: divscc %o0,%o4,%g1
190: divscc %g1,%o4,%g1
191: divscc %g1,%o4,%g1
192: divscc %g1,%o4,%g1
193: divscc %g1,%o4,%g1
194: divscc %g1,%o4,%g1
195: divscc %g1,%o4,%g1
196: divscc %g1,%o4,%g1
197: divscc %g1,%o4,%g1
198: divscc %g1,%o4,%g1
199: divscc %g1,%o4,%g1
200: divscc %g1,%o4,%g1
201: divscc %g1,%o4,%g1
202: divscc %g1,%o4,%g1
203: divscc %g1,%o4,%g1
204: divscc %g1,%o4,%g1
205: divscc %g1,%o4,%g1
206: divscc %g1,%o4,%g1
207: divscc %g1,%o4,%g1
208: divscc %g1,%o4,%g1
209: divscc %g1,%o4,%g1
210: divscc %g1,%o4,%g1
211: divscc %g1,%o4,%g1
212: divscc %g1,%o4,%g1
213: divscc %g1,%o4,%g1
214: divscc %g1,%o4,%g1
215: divscc %g1,%o4,%g1
216: divscc %g1,%o4,%g1
217: divscc %g1,%o4,%g1
218: divscc %g1,%o4,%g1
219: divscc %g1,%o4,%g1
220: divscc %g1,%o4,%g1
221: be 6f
222: mov %y,%o3
223: bg 4f
224: addcc %o3,%o4,%g0
225: be,a 6f
226: mov %g0,%o3
227: tst %o0
228: bl 5f
229: tst %g1
230: ba 5f
231: add %o3,%o4,%o3
232: 4: subcc %o3,%o4,%g0
233: be,a 6f
234: mov %g0,%o3
235: tst %o0
236: bge 5f
237: tst %g1
238: sub %o3,%o4,%o3
239: 5: bl,a 6f
240: add %g1,1,%g1
241: 6: tst %o1
242: bl,a 7f
243: sub %g0,%g1,%g1
244: 7: retl
245: mov %o3,%o0 ! Remainder is in %o3.
246: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.