Annotation of OpenXM_contrib/pari/src/kernel/ppc/kerPPC.s, Revision 1.1.1.1
1.1 maekawa 1: ; $Id: kerPPC.s,v 1.1.1.1 1999/09/16 13:47:57 karim Exp $
2: import hiremainder,overflow
3:
4: toc
5: tc hiremainder[TC], hiremainder
6: tc overflow[TC], overflow
7:
8: export addll[DS],.addll[PR],addllx[DS],.addllx[PR]
9: export subll[DS],.subll[PR],subllx[DS],.subllx[PR]
10: export mulll[DS],.mulll[PR],addmul[DS],.addmul[PR]
11: export divll[DS],.divll[PR],bfffo[DS],.bfffo[PR]
12:
13: toc
14: tc addll[TC], addll[DS]
15: tc addllx[TC], addllx[DS]
16: tc subll[TC], subll[DS]
17: tc subllx[TC], subllx[DS]
18: tc mulll[TC], mulll[DS]
19: tc addmul[TC], addmul[DS]
20: tc divll[TC], divll[DS]
21: tc bfffo[TC], bfffo[DS]
22:
23: csect addll[DS]
24: dc.l .addll[PR]
25: dc.l TOC[tc0]
26: dc.l 0
27:
28: csect .addll[PR]
29: addc r3,r3,r4
30: subfe r5,r5,r5
31: addi r5,r5,1
32: lwz r6,overflow{TC}(RTOC)
33: stw r5,0x0000(r6)
34: blr
35:
36: csect addllx[DS]
37: dc.l .addllx[PR]
38: dc.l TOC[tc0]
39: dc.l 0
40:
41: csect .addllx[PR]
42: addc r3,r3,r4
43: subfe r5,r5,r5
44: lwz r6,overflow{TC}(RTOC)
45: lwz r7,0x0000(r6)
46: addc r3,r7,r3
47: subfe r8,r8,r8
48: addc r5,r8,r5
49: addi r5,r5,2
50: stw r5,0x0000(r6)
51: blr
52:
53: csect subll[DS]
54: dc.l .subll[PR]
55: dc.l TOC[tc0]
56: dc.l 0
57:
58: csect .subll[PR]
59: subfc r3,r4,r3
60: subfe r5,r5,r5
61: neg r5,r5
62: lwz r6,overflow{TC}(RTOC)
63: stw r5,0x0000(r6)
64: blr
65:
66: csect subllx[DS]
67: dc.l .subllx[PR]
68: dc.l TOC[tc0]
69: dc.l 0
70:
71: csect .subllx[PR]
72: subfc r3,r4,r3
73: subfe r5,r5,r5
74: lwz r6,overflow{TC}(RTOC)
75: lwz r7,0x0000(r6)
76: subfc r3,r7,r3
77: subfe r8,r8,r8
78: addc r5,r8,r5
79: neg r5,r5
80: stw r5,0x0000(r6)
81: blr
82:
83: csect mulll[DS]
84: dc.l .mulll[PR]
85: dc.l TOC[tc0]
86: dc.l 0
87:
88: csect .mulll[PR]
89:
90: ; version PowerPC, plus lente
91: ; mulhwu r5,r3,r4
92: ; lwz r6,hiremainder{TC}(RTOC)
93: ; stw r5,0x0000(r6)
94: ; mullw r3,r3,r4
95: ; blr
96: ; version POWER
97: lwz r6,hiremainder{TC}(RTOC)
98: dialect POWER
99: mul r5,r3,r4
100: dialect POWERPC
101: cmpwi r3,0
102: bge @1
103: add r5,r5,r4
104: @1 cmpwi r4,0
105: bge @2
106: add r5,r5,r3
107: @2 stw r5,0x0000(r6)
108: mfspr r3,mq
109: blr
110:
111: csect addmul[DS]
112: dc.l .addmul[PR]
113: dc.l TOC[tc0]
114: dc.l 0
115:
116: csect .addmul[PR]
117: ; version PowerPC, plus lente
118: ; mulhwu r5,r3,r4
119: ; mullw r3,r3,r4
120: ; lwz r6,hiremainder{TC}(RTOC)
121: ; lwz r7,0x0000(r6)
122: ; addc r3,r7,r3
123: ; addze r5,r5
124: ; stw r5,0x0000(r6)
125: ; blr
126: ; version POWER
127: lwz r6,hiremainder{TC}(RTOC)
128: dialect POWER
129: mul r5,r3,r4
130: dialect POWERPC
131: cmpwi r3,0
132: bge @1
133: add r5,r5,r4
134: @1 cmpwi r4,0
135: bge @2
136: add r5,r5,r3
137: @2 lwz r7,0x0000(r6)
138: mfspr r3,mq
139: addc r3,r7,r3
140: addze r5,r5
141: stw r5,0x0000(r6)
142: blr
143:
144: csect divll[DS]
145: dc.l .divll[PR]
146: dc.l TOC[tc0]
147: dc.l 0
148:
149: csect .divll[PR]
150:
151: ; version POWER
152: ; chargement de a puis a1 dans r5, b puis b1 dans r3 et c puis c1 dans r4
153: lwz r6,hiremainder{TC}(RTOC)
154: lwz r5,0x0000(r6)
155:
156: ; etape 1, f est code dans cr5, eb dans r7 et ec dans cr6
157: ; si f = 1, on garde une copie de c dans r10
158: cmpwi 5,r4,0
159: bge 5,@1
160: andi. r7,r4,1
161: mcrf 6,0
162: mr r10,r4
163: srwi r4,r4,1
164: andi. r7,r3,1
165: srwi r3,r3,1
166: rlwimi r3,r5,31,0,0
167: srwi r5,r5,1
168:
169: ; modif
170: cmplw r5,r4
171: bne @1
172: slwi r3,r3,1
173: add r3,r3,r7
174: addc r4,r3,r10
175: subfe. r5,r5,r5
176: li r3,-1
177: beq @5
178: subi r3,r3,1
179: add r4,r10,r4
180: b @5
181:
182: ; etape 2 r3 recoit q et mq recoit r
183: @1 add r8,r5,r5
184: addi r8,r8,1
185: cmplw r4,r8
186: bgt @2
187: bne @3
188: cmpwi r3,0
189: bge @2
190: @3 slwi r9,r4,31
191: srwi r8,r4,1
192: subfc r3,r9,r3
193: subfe r5,r8,r5
194: mtspr mq,r3
195: dialect POWER
196: div r3,r5,r4
197: dialect POWERPC
198: mfspr r4,mq
199: oris r3,r3,0x8000
200: b @4
201: @2 mtspr mq,r3
202: dialect POWER
203: div r3,r5,r4
204: dialect POWERPC
205: mfspr r4,mq
206:
207: ; etape 3 r4 recoit r
208: @4 bge 5,@5
209: slwi r4,r4,1
210: add r4,r4,r7
211: beq 6,@5
212:
213: ; etape 4 modifiee
214: subfc r4,r3,r4
215: subfe. r5,r5,r5
216: beq @5
217: subi r3,r3,1
218: addc r4,r4,r10
219: subfe. r5,r5,r5
220: beq @5
221: subi r3,r3,1
222: addc r4,r4,r10
223:
224: ; retour
225: @5 stw r4,0x0000(r6)
226: blr
227:
228: csect bfffo[DS]
229: dc.l .bfffo[PR]
230: dc.l TOC[tc0]
231: dc.l 0
232:
233: csect .bfffo[PR]
234: cntlzw r3,r3
235: blr
236:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>