beta-0.89.2
[luatex.git] / source / libs / gmp / gmp-src / mpn / pa32 / udiv.asm
blobaddbf41ef5161d5484ecfbd31e8c91aa901a4669
1 dnl HP-PA __udiv_qrnnd division support, used from longlong.h.
2 dnl This version runs fast on pre-PA7000 CPUs.
4 dnl Copyright 1993, 1994, 2000-2002 Free Software Foundation, Inc.
6 dnl This file is part of the GNU MP Library.
7 dnl
8 dnl The GNU MP Library is free software; you can redistribute it and/or modify
9 dnl it under the terms of either:
10 dnl
11 dnl * the GNU Lesser General Public License as published by the Free
12 dnl Software Foundation; either version 3 of the License, or (at your
13 dnl option) any later version.
14 dnl
15 dnl or
16 dnl
17 dnl * the GNU General Public License as published by the Free Software
18 dnl Foundation; either version 2 of the License, or (at your option) any
19 dnl later version.
20 dnl
21 dnl or both in parallel, as here.
22 dnl
23 dnl The GNU MP Library is distributed in the hope that it will be useful, but
24 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
25 dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
26 dnl for more details.
27 dnl
28 dnl You should have received copies of the GNU General Public License and the
29 dnl GNU Lesser General Public License along with the GNU MP Library. If not,
30 dnl see https://www.gnu.org/licenses/.
32 include(`../config.m4')
34 C INPUT PARAMETERS
35 C rem_ptr gr26
36 C n1 gr25
37 C n0 gr24
38 C d gr23
40 C The code size is a bit excessive. We could merge the last two ds;addc
41 C sequences by simply moving the "bb,< Odd" instruction down. The only
42 C trouble is the FFFFFFFF code that would need some hacking.
44 ASM_START()
45 PROLOGUE(mpn_udiv_qrnnd)
46 comb,< %r23,0,L(largedivisor)
47 sub %r0,%r23,%r1 C clear cy as side-effect
48 ds %r0,%r1,%r0
49 addc %r24,%r24,%r24
50 ds %r25,%r23,%r25
51 addc %r24,%r24,%r24
52 ds %r25,%r23,%r25
53 addc %r24,%r24,%r24
54 ds %r25,%r23,%r25
55 addc %r24,%r24,%r24
56 ds %r25,%r23,%r25
57 addc %r24,%r24,%r24
58 ds %r25,%r23,%r25
59 addc %r24,%r24,%r24
60 ds %r25,%r23,%r25
61 addc %r24,%r24,%r24
62 ds %r25,%r23,%r25
63 addc %r24,%r24,%r24
64 ds %r25,%r23,%r25
65 addc %r24,%r24,%r24
66 ds %r25,%r23,%r25
67 addc %r24,%r24,%r24
68 ds %r25,%r23,%r25
69 addc %r24,%r24,%r24
70 ds %r25,%r23,%r25
71 addc %r24,%r24,%r24
72 ds %r25,%r23,%r25
73 addc %r24,%r24,%r24
74 ds %r25,%r23,%r25
75 addc %r24,%r24,%r24
76 ds %r25,%r23,%r25
77 addc %r24,%r24,%r24
78 ds %r25,%r23,%r25
79 addc %r24,%r24,%r24
80 ds %r25,%r23,%r25
81 addc %r24,%r24,%r24
82 ds %r25,%r23,%r25
83 addc %r24,%r24,%r24
84 ds %r25,%r23,%r25
85 addc %r24,%r24,%r24
86 ds %r25,%r23,%r25
87 addc %r24,%r24,%r24
88 ds %r25,%r23,%r25
89 addc %r24,%r24,%r24
90 ds %r25,%r23,%r25
91 addc %r24,%r24,%r24
92 ds %r25,%r23,%r25
93 addc %r24,%r24,%r24
94 ds %r25,%r23,%r25
95 addc %r24,%r24,%r24
96 ds %r25,%r23,%r25
97 addc %r24,%r24,%r24
98 ds %r25,%r23,%r25
99 addc %r24,%r24,%r24
100 ds %r25,%r23,%r25
101 addc %r24,%r24,%r24
102 ds %r25,%r23,%r25
103 addc %r24,%r24,%r24
104 ds %r25,%r23,%r25
105 addc %r24,%r24,%r24
106 ds %r25,%r23,%r25
107 addc %r24,%r24,%r24
108 ds %r25,%r23,%r25
109 addc %r24,%r24,%r24
110 ds %r25,%r23,%r25
111 addc %r24,%r24,%r28
112 ds %r25,%r23,%r25
113 comclr,>= %r25,%r0,%r0
114 addl %r25,%r23,%r25
115 stws %r25,0(0,%r26)
116 bv 0(%r2)
117 addc %r28,%r28,%r28
119 LDEF(largedivisor)
120 extru %r24,31,1,%r19 C r19 = n0 & 1
121 bb,< %r23,31,L(odd)
122 extru %r23,30,31,%r22 C r22 = d >> 1
123 shd %r25,%r24,1,%r24 C r24 = new n0
124 extru %r25,30,31,%r25 C r25 = new n1
125 sub %r0,%r22,%r21
126 ds %r0,%r21,%r0
127 addc %r24,%r24,%r24
128 ds %r25,%r22,%r25
129 addc %r24,%r24,%r24
130 ds %r25,%r22,%r25
131 addc %r24,%r24,%r24
132 ds %r25,%r22,%r25
133 addc %r24,%r24,%r24
134 ds %r25,%r22,%r25
135 addc %r24,%r24,%r24
136 ds %r25,%r22,%r25
137 addc %r24,%r24,%r24
138 ds %r25,%r22,%r25
139 addc %r24,%r24,%r24
140 ds %r25,%r22,%r25
141 addc %r24,%r24,%r24
142 ds %r25,%r22,%r25
143 addc %r24,%r24,%r24
144 ds %r25,%r22,%r25
145 addc %r24,%r24,%r24
146 ds %r25,%r22,%r25
147 addc %r24,%r24,%r24
148 ds %r25,%r22,%r25
149 addc %r24,%r24,%r24
150 ds %r25,%r22,%r25
151 addc %r24,%r24,%r24
152 ds %r25,%r22,%r25
153 addc %r24,%r24,%r24
154 ds %r25,%r22,%r25
155 addc %r24,%r24,%r24
156 ds %r25,%r22,%r25
157 addc %r24,%r24,%r24
158 ds %r25,%r22,%r25
159 addc %r24,%r24,%r24
160 ds %r25,%r22,%r25
161 addc %r24,%r24,%r24
162 ds %r25,%r22,%r25
163 addc %r24,%r24,%r24
164 ds %r25,%r22,%r25
165 addc %r24,%r24,%r24
166 ds %r25,%r22,%r25
167 addc %r24,%r24,%r24
168 ds %r25,%r22,%r25
169 addc %r24,%r24,%r24
170 ds %r25,%r22,%r25
171 addc %r24,%r24,%r24
172 ds %r25,%r22,%r25
173 addc %r24,%r24,%r24
174 ds %r25,%r22,%r25
175 addc %r24,%r24,%r24
176 ds %r25,%r22,%r25
177 addc %r24,%r24,%r24
178 ds %r25,%r22,%r25
179 addc %r24,%r24,%r24
180 ds %r25,%r22,%r25
181 addc %r24,%r24,%r24
182 ds %r25,%r22,%r25
183 addc %r24,%r24,%r24
184 ds %r25,%r22,%r25
185 addc %r24,%r24,%r24
186 ds %r25,%r22,%r25
187 addc %r24,%r24,%r24
188 ds %r25,%r22,%r25
189 addc %r24,%r24,%r24
190 ds %r25,%r22,%r25
191 comclr,>= %r25,%r0,%r0
192 addl %r25,%r22,%r25
193 sh1addl %r25,%r19,%r25
194 stws %r25,0(0,%r26)
195 bv 0(%r2)
196 addc %r24,%r24,%r28
198 LDEF(odd)
199 addib,sv,n 1,%r22,L(FFFFFFFF) C r22 = (d / 2 + 1)
200 shd %r25,%r24,1,%r24 C r24 = new n0
201 extru %r25,30,31,%r25 C r25 = new n1
202 sub %r0,%r22,%r21
203 ds %r0,%r21,%r0
204 addc %r24,%r24,%r24
205 ds %r25,%r22,%r25
206 addc %r24,%r24,%r24
207 ds %r25,%r22,%r25
208 addc %r24,%r24,%r24
209 ds %r25,%r22,%r25
210 addc %r24,%r24,%r24
211 ds %r25,%r22,%r25
212 addc %r24,%r24,%r24
213 ds %r25,%r22,%r25
214 addc %r24,%r24,%r24
215 ds %r25,%r22,%r25
216 addc %r24,%r24,%r24
217 ds %r25,%r22,%r25
218 addc %r24,%r24,%r24
219 ds %r25,%r22,%r25
220 addc %r24,%r24,%r24
221 ds %r25,%r22,%r25
222 addc %r24,%r24,%r24
223 ds %r25,%r22,%r25
224 addc %r24,%r24,%r24
225 ds %r25,%r22,%r25
226 addc %r24,%r24,%r24
227 ds %r25,%r22,%r25
228 addc %r24,%r24,%r24
229 ds %r25,%r22,%r25
230 addc %r24,%r24,%r24
231 ds %r25,%r22,%r25
232 addc %r24,%r24,%r24
233 ds %r25,%r22,%r25
234 addc %r24,%r24,%r24
235 ds %r25,%r22,%r25
236 addc %r24,%r24,%r24
237 ds %r25,%r22,%r25
238 addc %r24,%r24,%r24
239 ds %r25,%r22,%r25
240 addc %r24,%r24,%r24
241 ds %r25,%r22,%r25
242 addc %r24,%r24,%r24
243 ds %r25,%r22,%r25
244 addc %r24,%r24,%r24
245 ds %r25,%r22,%r25
246 addc %r24,%r24,%r24
247 ds %r25,%r22,%r25
248 addc %r24,%r24,%r24
249 ds %r25,%r22,%r25
250 addc %r24,%r24,%r24
251 ds %r25,%r22,%r25
252 addc %r24,%r24,%r24
253 ds %r25,%r22,%r25
254 addc %r24,%r24,%r24
255 ds %r25,%r22,%r25
256 addc %r24,%r24,%r24
257 ds %r25,%r22,%r25
258 addc %r24,%r24,%r24
259 ds %r25,%r22,%r25
260 addc %r24,%r24,%r24
261 ds %r25,%r22,%r25
262 addc %r24,%r24,%r24
263 ds %r25,%r22,%r25
264 addc %r24,%r24,%r24
265 ds %r25,%r22,%r25
266 addc %r24,%r24,%r24
267 ds %r25,%r22,%r25
268 addc %r24,%r24,%r28
269 comclr,>= %r25,%r0,%r0
270 addl %r25,%r22,%r25
271 sh1addl %r25,%r19,%r25
272 C We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
273 add,nuv %r28,%r25,%r25
274 addl %r25,%r1,%r25
275 addc %r0,%r28,%r28
276 sub,<< %r25,%r23,%r0
277 addl %r25,%r1,%r25
278 stws %r25,0(0,%r26)
279 bv 0(%r2)
280 addc %r0,%r28,%r28
282 C This is just a special case of the code above.
283 C We come here when d == 0xFFFFFFFF
284 LDEF(FFFFFFFF)
285 add,uv %r25,%r24,%r24
286 sub,<< %r24,%r23,%r0
287 ldo 1(%r24),%r24
288 stws %r24,0(0,%r26)
289 bv 0(%r2)
290 addc %r0,%r25,%r28
291 EPILOGUE()