1 --- src.orig/arisparc64.d Thu Dec 6 00:06:32 2007
2 +++ src/arisparc64.d Mon Feb 2 15:35:22 2009
5 # extern struct { uint32 lo; uint32 hi; } mulu32_ (uint32 arg1, uint32 arg2);
6 # 2^32*hi+lo := arg1*arg2.
7 -C(mulu32_:) # Input in %o0,%o1, Output in %o0,%g1
8 +C(mulu32_:) # Input in %o0,%o1, Output in %o0,%g3
17 # extern struct { uint32 q; uint32 r; } divu_6432_3232_ (uint32 xhi, uint32 xlo, uint32 y);
18 # x = 2^32*xhi+xlo = q*y+r schreiben. Sei bekannt, dass 0 <= x < 2^32*y .
19 -C(divu_6432_3232_:) # Input in %o0,%o1,%o2, Output in %o0,%g1
20 +C(divu_6432_3232_:) # Input in %o0,%o1,%o2, Output in %o0,%g3
22 udiv %o1,%o2,%o0 # x durch y dividieren, %o0 := q
23 - umul %o0,%o2,%g1 # %g1 := (q*y) mod 2^32
24 - sub %o1,%g1,%g1 # %g1 := (xlo-q*y) mod 2^32 = r
25 + umul %o0,%o2,%g3 # %g3 := (q*y) mod 2^32
26 + sub %o1,%g3,%g3 # %g3 := (xlo-q*y) mod 2^32 = r
32 udiv %o0,%o1,%o2 # dividieren, Quotient nach %o2
33 #if 0 # Who says that %y has some meaningful contents after `udiv' ??
34 - rd %y,%g1 # Rest aus %y
35 + rd %y,%g3 # Rest aus %y
37 - umul %o2,%o1,%g1 # %g1 := (q*y) mod 2^32
38 - sub %o0,%g1,%g1 # %g1 := (x-q*y) mod 2^32 = r
39 + umul %o2,%o1,%g3 # %g3 := (q*y) mod 2^32
40 + sub %o0,%g3,%g3 # %g3 := (x-q*y) mod 2^32 = r
42 - sll %g1,16,%g1 # in die oberen 16 Bit schieben
44 + sll %g3,16,%g3 # in die oberen 16 Bit schieben
52 # extern uintD add_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count);
53 -C(add_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1, Output in %o0
54 +C(add_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3, Output in %o0
56 # srl %o3,0,%o3 # zero-extend %o3 = count
58 - _ mov %g0,%g1 # Carry := 0
59 + _ mov %g0,%g3 # Carry := 0
61 lduw [%o0],%o4 # source1-digit, zero-extend
63 lduw [%o1],%o5 # source2-digit, zero-extend
64 - add %g1,%o4,%g1 # zum Carry addieren
65 - add %g1,%o5,%g1 # zum Carry addieren
66 - st %g1,[%o2] # Digit ablegen
67 + add %g3,%o4,%g3 # zum Carry addieren
68 + add %g3,%o5,%g3 # zum Carry addieren
69 + st %g3,[%o2] # Digit ablegen
72 - _ srlx %g1,32,%g1 # neuer Carry
73 + _ srlx %g3,32,%g3 # neuer Carry
79 # srl %o3,0,%o3 # zero-extend %o3 = count
81 - _ mov %g0,%g1 # Carry := 0
82 + _ mov %g0,%g3 # Carry := 0
85 sllx %o3,2,%o3 # %o3 = 4*count
87 sub %o2,%o3,%o2 # %o2 = &destptr[-count]
88 1: lduw [%o0+%o3],%o4 # source1-digit, zero-extend
89 lduw [%o1+%o3],%o5 # source2-digit, zero-extend
90 - add %g1,%o4,%g1 # zum Carry addieren
91 - add %g1,%o5,%g1 # zum Carry addieren
92 - st %g1,[%o2+%o3] # Digit ablegen
93 + add %g3,%o4,%g3 # zum Carry addieren
94 + add %g3,%o5,%g3 # zum Carry addieren
95 + st %g3,[%o2+%o3] # Digit ablegen
98 - _ srlx %g1,32,%g1 # neuer Carry
99 + _ srlx %g3,32,%g3 # neuer Carry
105 # extern uintD addto_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
106 @@ -831,28 +831,28 @@
109 # extern uintD sub_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count);
110 -C(sub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1, Output in %o0
111 +C(sub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3, Output in %o0
113 # srl %o3,0,%o3 # zero-extend %o3 = count
115 - _ mov %g0,%g1 # Carry := 0
116 + _ mov %g0,%g3 # Carry := 0
118 lduw [%o0],%o4 # source1-digit, zero-extend
120 lduw [%o1],%o5 # source2-digit, zero-extend
121 - add %g1,%o4,%g1 # zum Carry addieren
122 - sub %g1,%o5,%g1 # vom Carry subtrahieren
123 - st %g1,[%o2] # Digit ablegen
124 + add %g3,%o4,%g3 # zum Carry addieren
125 + sub %g3,%o5,%g3 # vom Carry subtrahieren
126 + st %g3,[%o2] # Digit ablegen
129 - _ srax %g1,32,%g1 # neuer Carry
130 + _ srax %g3,32,%g3 # neuer Carry
136 # srl %o3,0,%o3 # zero-extend %o3 = count
138 - _ mov %g0,%g1 # Carry := 0
139 + _ mov %g0,%g3 # Carry := 0
142 sllx %o3,2,%o3 # %o3 = 4*count
143 @@ -861,39 +861,39 @@
144 sub %o2,%o3,%o2 # %o2 = &destptr[-count]
145 1: lduw [%o0+%o3],%o4 # source1-digit, zero-extend
146 lduw [%o1+%o3],%o5 # source2-digit, zero-extend
147 - add %g1,%o4,%g1 # zum Carry addieren
148 - sub %g1,%o5,%g1 # vom Carry subtrahieren
149 - st %g1,[%o2+%o3] # Digit ablegen
150 + add %g3,%o4,%g3 # zum Carry addieren
151 + sub %g3,%o5,%g3 # vom Carry subtrahieren
152 + st %g3,[%o2+%o3] # Digit ablegen
155 - _ srax %g1,32,%g1 # neuer Carry
156 + _ srax %g3,32,%g3 # neuer Carry
162 # extern uintD subx_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count, uintD carry);
163 -C(subx_loop_down:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g1, Output in %o0
164 +C(subx_loop_down:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g3, Output in %o0
166 # srl %o3,0,%o3 # zero-extend %o3 = count
168 - _ sra %o4,0,%g1 # Carry, sign-extend
169 + _ sra %o4,0,%g3 # Carry, sign-extend
171 lduw [%o0],%o4 # source1-digit, zero-extend
173 lduw [%o1],%o5 # source2-digit, zero-extend
174 - add %g1,%o4,%g1 # zum Carry addieren
175 - sub %g1,%o5,%g1 # vom Carry subtrahieren
176 - st %g1,[%o2] # Digit ablegen
177 + add %g3,%o4,%g3 # zum Carry addieren
178 + sub %g3,%o5,%g3 # vom Carry subtrahieren
179 + st %g3,[%o2] # Digit ablegen
182 - _ srax %g1,32,%g1 # neuer Carry
183 + _ srax %g3,32,%g3 # neuer Carry
189 # srl %o3,0,%o3 # zero-extend %o3 = count
191 - _ sra %o4,0,%g1 # Carry, sign-extend
192 + _ sra %o4,0,%g3 # Carry, sign-extend
195 sllx %o3,2,%o3 # %o3 = 4*count
196 @@ -902,14 +902,14 @@
197 sub %o2,%o3,%o2 # %o2 = &destptr[-count]
198 1: lduw [%o0+%o3],%o4 # source1-digit, zero-extend
199 lduw [%o1+%o3],%o5 # source2-digit, zero-extend
200 - add %g1,%o4,%g1 # zum Carry addieren
201 - sub %g1,%o5,%g1 # vom Carry subtrahieren
202 - st %g1,[%o2+%o3] # Digit ablegen
203 + add %g3,%o4,%g3 # zum Carry addieren
204 + sub %g3,%o5,%g3 # vom Carry subtrahieren
205 + st %g3,[%o2+%o3] # Digit ablegen
208 - _ srax %g1,32,%g1 # neuer Carry
209 + _ srax %g3,32,%g3 # neuer Carry
215 # extern uintD subfrom_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
216 @@ -1135,16 +1135,16 @@
219 # extern uintD shiftright_loop_up (uintD* ptr, uintC count, uintC i);
220 -C(shiftright_loop_up:) # Input in %o0,%o1,%o2, verändert %g1, Output in %o0
221 +C(shiftright_loop_up:) # Input in %o0,%o1,%o2, verändert %g3, Output in %o0
223 # srl %o1,0,%o1 # zero-extend %o1 = count
225 _ or %g0,%g0,%o3 # Carry := 0
227 - sub %g1,%o2,%g1 # 32-i
229 + sub %g3,%o2,%g3 # 32-i
230 1: lduw [%o0],%o4 # Digit, zero-extend
232 - sllx %o4,%g1,%o4 # shiften
233 + sllx %o4,%g3,%o4 # shiften
234 or %o3,%o4,%o3 # und mit altem Carry kombinieren
236 st %o4,[%o0] # und ablegen
237 @@ -1157,13 +1157,13 @@
238 # srl %o1,0,%o1 # zero-extend %o1 = count
240 _ or %g0,%g0,%o3 # Carry := 0
241 - sub %g0,%o2,%g1 # 32-i (mod 32)
242 + sub %g0,%o2,%g3 # 32-i (mod 32)
243 1: ld [%o0],%o4 # Digit
245 srl %o4,%o2,%o5 # shiften
246 or %o3,%o5,%o5 # und mit altem Carry kombinieren
247 st %o5,[%o0] # und ablegen
248 - sll %o4,%g1,%o3 # neuer Carry
249 + sll %o4,%g3,%o3 # neuer Carry
253 @@ -1171,14 +1171,14 @@
256 # extern uintD shiftrightsigned_loop_up (uintD* ptr, uintC count, uintC i);
257 -C(shiftrightsigned_loop_up:) # Input in %o0,%o1,%o2, verändert %g1, Output in %o0
258 +C(shiftrightsigned_loop_up:) # Input in %o0,%o1,%o2, verändert %g3, Output in %o0
260 # srl %o1,0,%o1 # zero-extend %o1 = count
262 - sub %g1,%o2,%g1 # 32-i
264 + sub %g3,%o2,%g3 # 32-i
265 ldsw [%o0],%o3 # erstes Digit, sign-extend
267 - sllx %o3,%g1,%o3 # shiften
268 + sllx %o3,%g3,%o3 # shiften
270 st %o4,[%o0] # und ablegen
271 sllx %o3,32,%o3 # neuer Carry
272 @@ -1186,7 +1186,7 @@
274 1: lduw [%o0],%o4 # Digit, zero-extend
276 - sllx %o4,%g1,%o4 # shiften
277 + sllx %o4,%g3,%o4 # shiften
278 or %o3,%o4,%o3 # und mit altem Carry kombinieren
280 st %o4,[%o0] # und ablegen
281 @@ -1198,10 +1198,10 @@
283 # srl %o1,0,%o1 # zero-extend %o1 = count
284 ld [%o0],%o4 # erstes Digit
285 - sub %g0,%o2,%g1 # 32-i (mod 32)
286 + sub %g0,%o2,%g3 # 32-i (mod 32)
287 sra %o4,%o2,%o5 # shiften
288 st %o5,[%o0] # und ablegen
289 - sll %o4,%g1,%o3 # neuer Carry
290 + sll %o4,%g3,%o3 # neuer Carry
294 @@ -1210,7 +1210,7 @@
295 srl %o4,%o2,%o5 # shiften
296 or %o3,%o5,%o5 # und mit altem Carry kombinieren
297 st %o5,[%o0] # und ablegen
298 - sll %o4,%g1,%o3 # neuer Carry
299 + sll %o4,%g3,%o3 # neuer Carry
303 @@ -1218,16 +1218,16 @@
306 # extern uintD shiftrightcopy_loop_up (uintD* sourceptr, uintD* destptr, uintC count, uintC i, uintD carry);
307 -C(shiftrightcopy_loop_up:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g1,%g2, Output in %o0
308 +C(shiftrightcopy_loop_up:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g3,%g2, Output in %o0
310 # srl %o2,0,%o2 # zero-extend %o2 = count
311 - sub %g0,%o3,%g1 # 64-i (mod 64)
312 + sub %g0,%o3,%g3 # 64-i (mod 64)
314 - _ sllx %o4,%g1,%o4 # erster Carry
315 - add %g1,32,%g1 # 32-i
316 + _ sllx %o4,%g3,%o4 # erster Carry
317 + add %g3,32,%g3 # 32-i
318 1: lduw [%o0],%o5 # Digit, zero-extend
320 - sllx %o5,%g1,%o5 # shiften
321 + sllx %o5,%g3,%o5 # shiften
322 or %o4,%o5,%o4 # und mit altem Carry kombinieren
324 st %o5,[%o1] # und ablegen
325 @@ -1239,15 +1239,15 @@
328 # srl %o2,0,%o2 # zero-extend %o2 = count
329 - sub %g0,%o3,%g1 # 32-i (mod 32)
330 + sub %g0,%o3,%g3 # 32-i (mod 32)
332 - _ sll %o4,%g1,%g2 # erster Carry
333 + _ sll %o4,%g3,%g2 # erster Carry
334 1: ld [%o0],%o4 # Digit
336 srl %o4,%o3,%o5 # shiften
337 or %g2,%o5,%o5 # und mit altem Carry kombinieren
338 st %o5,[%o1] # und ablegen
339 - sll %o4,%g1,%g2 # neuer Carry
340 + sll %o4,%g3,%g2 # neuer Carry
344 @@ -1290,58 +1290,58 @@
347 # extern void mulu_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
348 -C(mulu_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1
349 +C(mulu_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3
350 # srl %o3,0,%o3 # zero-extend %o3 = len
353 - ld [%o1],%g1 # nächstes Digit
354 + ld [%o1],%g3 # nächstes Digit
356 - # mit digit multiplizieren: %o0 * %g1 -> %o5|%g1
358 + # mit digit multiplizieren: %o0 * %g3 -> %o5|%g3
361 - addcc %o4,%g1,%g1 # und bisherigen Carry addieren
362 + addcc %o4,%g3,%g3 # und bisherigen Carry addieren
363 addx %g0,%o5,%o4 # High-Digit gibt neuen Carry
366 - _ st %g1,[%o2] # Low-Digit ablegen
367 + _ st %g3,[%o2] # Low-Digit ablegen
369 _ st %o4,[%o2-4] # letzten Carry ablegen
371 # extern uintD muluadd_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
372 -C(muluadd_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1,%g2, Output in %o0
373 +C(muluadd_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3,%g2, Output in %o0
374 # srl %o3,0,%o3 # zero-extend %o3 = len
377 ld [%o1],%o5 # nächstes source-Digit
379 - # mit digit multiplizieren: %o0 * %o5 -> %g2|%g1
381 + # mit digit multiplizieren: %o0 * %o5 -> %g2|%g3
384 ld [%o2],%o5 # nächstes dest-digit
385 - addcc %o4,%g1,%g1 # und bisherigen Carry addieren
386 + addcc %o4,%g3,%g3 # und bisherigen Carry addieren
387 addx %g0,%g2,%o4 # High-Digit gibt neuen Carry
388 - addcc %o5,%g1,%g1 # addieren
389 + addcc %o5,%g3,%g3 # addieren
393 - _ st %g1,[%o2] # Low-Digit ablegen
394 + _ st %g3,[%o2] # Low-Digit ablegen
396 _ srl %o4,0,%o0 # letzter Carry
398 # extern uintD mulusub_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
399 -C(mulusub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1,%g2, Output in %o0
400 +C(mulusub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3,%g2, Output in %o0
401 # srl %o3,0,%o3 # zero-extend %o3 = len
404 ld [%o1],%o5 # nächstes source-Digit
406 - # mit digit multiplizieren: %o0 * %o5 -> %g2|%g1
408 + # mit digit multiplizieren: %o0 * %o5 -> %g2|%g3
411 ld [%o2],%o5 # nächstes dest-digit
412 - addcc %o4,%g1,%g1 # und bisherigen Carry addieren
413 + addcc %o4,%g3,%g3 # und bisherigen Carry addieren
414 addx %g0,%g2,%o4 # High-Digit gibt neuen Carry
415 - subcc %o5,%g1,%o5 # davon das Low-Digit subtrahieren
416 + subcc %o5,%g3,%o5 # davon das Low-Digit subtrahieren
420 @@ -1350,7 +1350,7 @@
421 _ srl %o4,0,%o0 # letzter Carry
423 # extern uintD divu_loop_up (uintD digit, uintD* ptr, uintC len);
424 -C(divu_loop_up:) # Input in %o0,%o1,%o2, verändert %g1, Output in %o0
425 +C(divu_loop_up:) # Input in %o0,%o1,%o2, verändert %g3, Output in %o0
426 # srl %o2,0,%o2 # zero-extend %o2 = len
429 @@ -1360,8 +1360,8 @@
430 or %o3,%o4,%o3 # zusammen
431 udivx %o3,%o0,%o4 # durch digit dividieren
432 st %o4,[%o1] # Quotient ablegen
434 - sub %o3,%g1,%o3 # Rest in den unteren 32 Bit von %o3
436 + sub %o3,%g3,%o3 # Rest in den unteren 32 Bit von %o3
440 @@ -1369,7 +1369,7 @@
441 _ srl %o3,0,%o0 # Rest als Ergebnis
443 # extern uintD divucopy_loop_up (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
444 -C(divucopy_loop_up:) # Input in %o0,%o1,%o2,%o3, verändert %g1, Output in %o0
445 +C(divucopy_loop_up:) # Input in %o0,%o1,%o2,%o3, verändert %g3, Output in %o0
446 # srl %o3,0,%o3 # zero-extend %o3 = len
449 @@ -1380,8 +1380,8 @@
450 or %o4,%o5,%o4 # zusammen
451 udivx %o4,%o0,%o5 # durch digit dividieren
452 st %o5,[%o2] # Quotient ablegen
454 - sub %o4,%g1,%o4 # Rest in den unteren 32 Bit von %o4
456 + sub %o4,%g3,%o4 # Rest in den unteren 32 Bit von %o4