udiv_nfp.asm revision 1.1.1.2 1 1.1 mrg dnl SPARC v7 __udiv_qrnnd division support, used from longlong.h.
2 1.1 mrg dnl This is for v7 CPUs without a floating-point unit.
3 1.1 mrg
4 1.1 mrg dnl Copyright 1993, 1994, 1996, 2000 Free Software Foundation, Inc.
5 1.1 mrg
6 1.1 mrg dnl This file is part of the GNU MP Library.
7 1.1.1.2 mrg dnl
8 1.1 mrg dnl The GNU MP Library is free software; you can redistribute it and/or modify
9 1.1.1.2 mrg dnl it under the terms of either:
10 1.1.1.2 mrg dnl
11 1.1.1.2 mrg dnl * the GNU Lesser General Public License as published by the Free
12 1.1.1.2 mrg dnl Software Foundation; either version 3 of the License, or (at your
13 1.1.1.2 mrg dnl option) any later version.
14 1.1.1.2 mrg dnl
15 1.1.1.2 mrg dnl or
16 1.1.1.2 mrg dnl
17 1.1.1.2 mrg dnl * the GNU General Public License as published by the Free Software
18 1.1.1.2 mrg dnl Foundation; either version 2 of the License, or (at your option) any
19 1.1.1.2 mrg dnl later version.
20 1.1.1.2 mrg dnl
21 1.1.1.2 mrg dnl or both in parallel, as here.
22 1.1.1.2 mrg dnl
23 1.1 mrg dnl The GNU MP Library is distributed in the hope that it will be useful, but
24 1.1 mrg dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
25 1.1.1.2 mrg dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
26 1.1.1.2 mrg dnl for more details.
27 1.1.1.2 mrg dnl
28 1.1.1.2 mrg dnl You should have received copies of the GNU General Public License and the
29 1.1.1.2 mrg dnl GNU Lesser General Public License along with the GNU MP Library. If not,
30 1.1.1.2 mrg dnl see https://www.gnu.org/licenses/.
31 1.1 mrg
32 1.1 mrg
33 1.1 mrg include(`../config.m4')
34 1.1 mrg
35 1.1 mrg C INPUT PARAMETERS
36 1.1 mrg C rem_ptr o0
37 1.1 mrg C n1 o1
38 1.1 mrg C n0 o2
39 1.1 mrg C d o3
40 1.1 mrg
41 1.1 mrg ASM_START()
42 1.1 mrg PROLOGUE(mpn_udiv_qrnnd)
43 1.1 mrg tst %o3
44 1.1 mrg bneg L(largedivisor)
45 1.1 mrg mov 8,%g1
46 1.1 mrg
47 1.1 mrg b L(p1)
48 1.1 mrg addxcc %o2,%o2,%o2
49 1.1 mrg
50 1.1 mrg L(plop):
51 1.1 mrg bcc L(n1)
52 1.1 mrg addxcc %o2,%o2,%o2
53 1.1 mrg L(p1): addx %o1,%o1,%o1
54 1.1 mrg subcc %o1,%o3,%o4
55 1.1 mrg bcc L(n2)
56 1.1 mrg addxcc %o2,%o2,%o2
57 1.1 mrg L(p2): addx %o1,%o1,%o1
58 1.1 mrg subcc %o1,%o3,%o4
59 1.1 mrg bcc L(n3)
60 1.1 mrg addxcc %o2,%o2,%o2
61 1.1 mrg L(p3): addx %o1,%o1,%o1
62 1.1 mrg subcc %o1,%o3,%o4
63 1.1 mrg bcc L(n4)
64 1.1 mrg addxcc %o2,%o2,%o2
65 1.1 mrg L(p4): addx %o1,%o1,%o1
66 1.1 mrg addcc %g1,-1,%g1
67 1.1 mrg bne L(plop)
68 1.1 mrg subcc %o1,%o3,%o4
69 1.1 mrg bcc L(n5)
70 1.1 mrg addxcc %o2,%o2,%o2
71 1.1 mrg L(p5): st %o1,[%o0]
72 1.1 mrg retl
73 1.1 mrg xnor %g0,%o2,%o0
74 1.1 mrg
75 1.1 mrg L(nlop):
76 1.1 mrg bcc L(p1)
77 1.1 mrg addxcc %o2,%o2,%o2
78 1.1 mrg L(n1): addx %o4,%o4,%o4
79 1.1 mrg subcc %o4,%o3,%o1
80 1.1 mrg bcc L(p2)
81 1.1 mrg addxcc %o2,%o2,%o2
82 1.1 mrg L(n2): addx %o4,%o4,%o4
83 1.1 mrg subcc %o4,%o3,%o1
84 1.1 mrg bcc L(p3)
85 1.1 mrg addxcc %o2,%o2,%o2
86 1.1 mrg L(n3): addx %o4,%o4,%o4
87 1.1 mrg subcc %o4,%o3,%o1
88 1.1 mrg bcc L(p4)
89 1.1 mrg addxcc %o2,%o2,%o2
90 1.1 mrg L(n4): addx %o4,%o4,%o4
91 1.1 mrg addcc %g1,-1,%g1
92 1.1 mrg bne L(nlop)
93 1.1 mrg subcc %o4,%o3,%o1
94 1.1 mrg bcc L(p5)
95 1.1 mrg addxcc %o2,%o2,%o2
96 1.1 mrg L(n5): st %o4,[%o0]
97 1.1 mrg retl
98 1.1 mrg xnor %g0,%o2,%o0
99 1.1 mrg
100 1.1 mrg L(largedivisor):
101 1.1 mrg and %o2,1,%o5 C %o5 = n0 & 1
102 1.1 mrg
103 1.1 mrg srl %o2,1,%o2
104 1.1 mrg sll %o1,31,%g2
105 1.1 mrg or %g2,%o2,%o2 C %o2 = lo(n1n0 >> 1)
106 1.1 mrg srl %o1,1,%o1 C %o1 = hi(n1n0 >> 1)
107 1.1 mrg
108 1.1 mrg and %o3,1,%g2
109 1.1 mrg srl %o3,1,%g3 C %g3 = floor(d / 2)
110 1.1 mrg add %g3,%g2,%g3 C %g3 = ceil(d / 2)
111 1.1 mrg
112 1.1 mrg b L(Lp1)
113 1.1 mrg addxcc %o2,%o2,%o2
114 1.1 mrg
115 1.1 mrg L(Lplop):
116 1.1 mrg bcc L(Ln1)
117 1.1 mrg addxcc %o2,%o2,%o2
118 1.1 mrg L(Lp1): addx %o1,%o1,%o1
119 1.1 mrg subcc %o1,%g3,%o4
120 1.1 mrg bcc L(Ln2)
121 1.1 mrg addxcc %o2,%o2,%o2
122 1.1 mrg L(Lp2): addx %o1,%o1,%o1
123 1.1 mrg subcc %o1,%g3,%o4
124 1.1 mrg bcc L(Ln3)
125 1.1 mrg addxcc %o2,%o2,%o2
126 1.1 mrg L(Lp3): addx %o1,%o1,%o1
127 1.1 mrg subcc %o1,%g3,%o4
128 1.1 mrg bcc L(Ln4)
129 1.1 mrg addxcc %o2,%o2,%o2
130 1.1 mrg L(Lp4): addx %o1,%o1,%o1
131 1.1 mrg addcc %g1,-1,%g1
132 1.1 mrg bne L(Lplop)
133 1.1 mrg subcc %o1,%g3,%o4
134 1.1 mrg bcc L(Ln5)
135 1.1 mrg addxcc %o2,%o2,%o2
136 1.1 mrg L(Lp5): add %o1,%o1,%o1 C << 1
137 1.1 mrg tst %g2
138 1.1 mrg bne L(oddp)
139 1.1 mrg add %o5,%o1,%o1
140 1.1 mrg st %o1,[%o0]
141 1.1 mrg retl
142 1.1 mrg xnor %g0,%o2,%o0
143 1.1 mrg
144 1.1 mrg L(Lnlop):
145 1.1 mrg bcc L(Lp1)
146 1.1 mrg addxcc %o2,%o2,%o2
147 1.1 mrg L(Ln1): addx %o4,%o4,%o4
148 1.1 mrg subcc %o4,%g3,%o1
149 1.1 mrg bcc L(Lp2)
150 1.1 mrg addxcc %o2,%o2,%o2
151 1.1 mrg L(Ln2): addx %o4,%o4,%o4
152 1.1 mrg subcc %o4,%g3,%o1
153 1.1 mrg bcc L(Lp3)
154 1.1 mrg addxcc %o2,%o2,%o2
155 1.1 mrg L(Ln3): addx %o4,%o4,%o4
156 1.1 mrg subcc %o4,%g3,%o1
157 1.1 mrg bcc L(Lp4)
158 1.1 mrg addxcc %o2,%o2,%o2
159 1.1 mrg L(Ln4): addx %o4,%o4,%o4
160 1.1 mrg addcc %g1,-1,%g1
161 1.1 mrg bne L(Lnlop)
162 1.1 mrg subcc %o4,%g3,%o1
163 1.1 mrg bcc L(Lp5)
164 1.1 mrg addxcc %o2,%o2,%o2
165 1.1 mrg L(Ln5): add %o4,%o4,%o4 C << 1
166 1.1 mrg tst %g2
167 1.1 mrg bne L(oddn)
168 1.1 mrg add %o5,%o4,%o4
169 1.1 mrg st %o4,[%o0]
170 1.1 mrg retl
171 1.1 mrg xnor %g0,%o2,%o0
172 1.1 mrg
173 1.1 mrg L(oddp):
174 1.1 mrg xnor %g0,%o2,%o2
175 1.1 mrg C q' in %o2. r' in %o1
176 1.1 mrg addcc %o1,%o2,%o1
177 1.1 mrg bcc L(Lp6)
178 1.1 mrg addx %o2,0,%o2
179 1.1 mrg sub %o1,%o3,%o1
180 1.1 mrg L(Lp6): subcc %o1,%o3,%g0
181 1.1 mrg bcs L(Lp7)
182 1.1 mrg subx %o2,-1,%o2
183 1.1 mrg sub %o1,%o3,%o1
184 1.1 mrg L(Lp7): st %o1,[%o0]
185 1.1 mrg retl
186 1.1 mrg mov %o2,%o0
187 1.1 mrg
188 1.1 mrg L(oddn):
189 1.1 mrg xnor %g0,%o2,%o2
190 1.1 mrg C q' in %o2. r' in %o4
191 1.1 mrg addcc %o4,%o2,%o4
192 1.1 mrg bcc L(Ln6)
193 1.1 mrg addx %o2,0,%o2
194 1.1 mrg sub %o4,%o3,%o4
195 1.1 mrg L(Ln6): subcc %o4,%o3,%g0
196 1.1 mrg bcs L(Ln7)
197 1.1 mrg subx %o2,-1,%o2
198 1.1 mrg sub %o4,%o3,%o4
199 1.1 mrg L(Ln7): st %o4,[%o0]
200 1.1 mrg retl
201 1.1 mrg mov %o2,%o0
202 1.1 mrg EPILOGUE(mpn_udiv_qrnnd)
203