OLD | NEW |
| (Empty) |
1 dnl SPARC v9 64-bit mpn_sqr_diagonal. | |
2 | |
3 dnl Copyright 2001, 2002 Free Software Foundation, Inc. | |
4 | |
5 dnl This file is part of the GNU MP Library. | |
6 | |
7 dnl The GNU MP Library is free software; you can redistribute it and/or modify | |
8 dnl it under the terms of the GNU Lesser General Public License as published | |
9 dnl by the Free Software Foundation; either version 3 of the License, or (at | |
10 dnl your option) any later version. | |
11 | |
12 dnl The GNU MP Library is distributed in the hope that it will be useful, but | |
13 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
14 dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public | |
15 dnl License for more details. | |
16 | |
17 dnl You should have received a copy of the GNU Lesser General Public License | |
18 dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. | |
19 | |
20 include(`../config.m4') | |
21 | |
22 C cycles/limb | |
23 C UltraSPARC 1&2: 22 | |
24 C UltraSPARC 3: 36 | |
25 | |
26 C This was generated by the Sun C compiler. It runs at 22 cycles/limb on the | |
27 C UltraSPARC-1/2, three cycles slower than theoretically possible for optimal | |
28 C code using the same algorithm. For 1-3 limbs, a special loop was generated, | |
29 C which causes performance problems in particular for 2 and 3 limbs. | |
30 C Ultimately, this should be replaced by hand-written code in the same software | |
31 C pipeline style as e.g., addmul_1.asm. | |
32 | |
33 ASM_START() | |
34 REGISTER(%g2,#scratch) | |
35 REGISTER(%g3,#scratch) | |
36 PROLOGUE(mpn_sqr_diagonal) | |
37 save %sp, -240, %sp | |
38 | |
39 sethi %hi(0x1ffc00), %o0 | |
40 sethi %hi(0x3ffc00), %o1 | |
41 add %o0, 1023, %o7 | |
42 cmp %i2, 4 | |
43 add %o1, 1023, %o4 | |
44 or %g0, %i1, %g1 | |
45 or %g0, %i0, %o0 | |
46 bl,pn %xcc, .Lsmall | |
47 or %g0, 0, %g2 | |
48 | |
49 ldx [%i1], %o1 | |
50 add %i1, 24, %g1 | |
51 or %g0, 3, %g2 | |
52 srlx %o1, 42, %g3 | |
53 stx %g3, [%sp+2279] | |
54 and %o1, %o7, %o2 | |
55 stx %o2, [%sp+2263] | |
56 srlx %o1, 21, %o1 | |
57 ldd [%sp+2279], %f0 | |
58 and %o1, %o7, %o1 | |
59 stx %o1, [%sp+2271] | |
60 ldx [%i1+8], %o2 | |
61 fxtod %f0, %f12 | |
62 srlx %o2, 21, %o1 | |
63 and %o2, %o7, %g3 | |
64 ldd [%sp+2263], %f2 | |
65 fmuld %f12, %f12, %f10 | |
66 srlx %o2, 42, %o2 | |
67 ldd [%sp+2271], %f0 | |
68 and %o1, %o7, %o1 | |
69 fxtod %f2, %f8 | |
70 stx %o2, [%sp+2279] | |
71 stx %o1, [%sp+2271] | |
72 fxtod %f0, %f0 | |
73 stx %g3, [%sp+2263] | |
74 fdtox %f10, %f14 | |
75 fmuld %f12, %f8, %f6 | |
76 ldx [%i1+16], %o2 | |
77 std %f14, [%sp+2255] | |
78 fmuld %f0, %f0, %f2 | |
79 fmuld %f8, %f8, %f10 | |
80 srlx %o2, 42, %o1 | |
81 faddd %f6, %f6, %f6 | |
82 fmuld %f12, %f0, %f12 | |
83 fmuld %f0, %f8, %f8 | |
84 ldd [%sp+2279], %f0 | |
85 ldd [%sp+2263], %f4 | |
86 fdtox %f10, %f10 | |
87 std %f10, [%sp+2239] | |
88 faddd %f2, %f6, %f6 | |
89 ldd [%sp+2271], %f2 | |
90 fdtox %f12, %f12 | |
91 std %f12, [%sp+2247] | |
92 fdtox %f8, %f8 | |
93 std %f8, [%sp+2231] | |
94 fdtox %f6, %f6 | |
95 std %f6, [%sp+2223] | |
96 | |
97 .Loop: srlx %o2, 21, %g3 | |
98 stx %o1, [%sp+2279] | |
99 add %g2, 1, %g2 | |
100 and %g3, %o7, %o1 | |
101 ldx [%sp+2255], %g4 | |
102 cmp %g2, %i2 | |
103 stx %o1, [%sp+2271] | |
104 add %g1, 8, %g1 | |
105 add %o0, 16, %o0 | |
106 ldx [%sp+2239], %o1 | |
107 fxtod %f0, %f10 | |
108 fxtod %f4, %f14 | |
109 ldx [%sp+2231], %i0 | |
110 ldx [%sp+2223], %g5 | |
111 ldx [%sp+2247], %g3 | |
112 and %o2, %o7, %o2 | |
113 fxtod %f2, %f8 | |
114 fmuld %f10, %f10, %f0 | |
115 stx %o2, [%sp+2263] | |
116 fmuld %f10, %f14, %f6 | |
117 ldx [%g1-8], %o2 | |
118 fmuld %f10, %f8, %f12 | |
119 fdtox %f0, %f2 | |
120 ldd [%sp+2279], %f0 | |
121 fmuld %f8, %f8, %f4 | |
122 faddd %f6, %f6, %f6 | |
123 fmuld %f14, %f14, %f10 | |
124 std %f2, [%sp+2255] | |
125 sllx %g4, 20, %g4 | |
126 ldd [%sp+2271], %f2 | |
127 fmuld %f8, %f14, %f8 | |
128 sllx %i0, 22, %i1 | |
129 fdtox %f12, %f12 | |
130 std %f12, [%sp+2247] | |
131 sllx %g5, 42, %i0 | |
132 add %o1, %i1, %o1 | |
133 faddd %f4, %f6, %f6 | |
134 ldd [%sp+2263], %f4 | |
135 add %o1, %i0, %o1 | |
136 add %g3, %g4, %g3 | |
137 fdtox %f10, %f10 | |
138 std %f10, [%sp+2239] | |
139 srlx %o1, 42, %g4 | |
140 and %g5, %o4, %i0 | |
141 fdtox %f8, %f8 | |
142 std %f8, [%sp+2231] | |
143 srlx %g5, 22, %g5 | |
144 sub %g4, %i0, %g4 | |
145 fdtox %f6, %f6 | |
146 std %f6, [%sp+2223] | |
147 srlx %g4, 63, %g4 | |
148 add %g3, %g5, %g3 | |
149 add %g3, %g4, %g3 | |
150 stx %o1, [%o0-16] | |
151 srlx %o2, 42, %o1 | |
152 bl,pt %xcc, .Loop | |
153 stx %g3, [%o0-8] | |
154 | |
155 stx %o1, [%sp+2279] | |
156 srlx %o2, 21, %o1 | |
157 fxtod %f0, %f16 | |
158 ldx [%sp+2223], %g3 | |
159 fxtod %f4, %f6 | |
160 and %o2, %o7, %o3 | |
161 stx %o3, [%sp+2263] | |
162 fxtod %f2, %f4 | |
163 and %o1, %o7, %o1 | |
164 ldx [%sp+2231], %o2 | |
165 sllx %g3, 42, %g4 | |
166 fmuld %f16, %f16, %f14 | |
167 stx %o1, [%sp+2271] | |
168 fmuld %f16, %f6, %f8 | |
169 add %o0, 48, %o0 | |
170 ldx [%sp+2239], %o1 | |
171 sllx %o2, 22, %o2 | |
172 fmuld %f4, %f4, %f10 | |
173 ldx [%sp+2255], %o3 | |
174 fdtox %f14, %f14 | |
175 fmuld %f4, %f6, %f2 | |
176 std %f14, [%sp+2255] | |
177 faddd %f8, %f8, %f12 | |
178 add %o1, %o2, %o2 | |
179 fmuld %f16, %f4, %f4 | |
180 ldd [%sp+2279], %f0 | |
181 sllx %o3, 20, %g5 | |
182 add %o2, %g4, %o2 | |
183 fmuld %f6, %f6, %f6 | |
184 srlx %o2, 42, %o3 | |
185 and %g3, %o4, %g4 | |
186 srlx %g3, 22, %g3 | |
187 faddd %f10, %f12, %f16 | |
188 ldd [%sp+2271], %f12 | |
189 ldd [%sp+2263], %f8 | |
190 fxtod %f0, %f0 | |
191 sub %o3, %g4, %o3 | |
192 ldx [%sp+2247], %o1 | |
193 srlx %o3, 63, %o3 | |
194 fdtox %f2, %f10 | |
195 fxtod %f8, %f8 | |
196 std %f10, [%sp+2231] | |
197 fdtox %f6, %f6 | |
198 std %f6, [%sp+2239] | |
199 add %o1, %g5, %o1 | |
200 fmuld %f0, %f0, %f2 | |
201 fdtox %f16, %f16 | |
202 std %f16, [%sp+2223] | |
203 add %o1, %g3, %o1 | |
204 fdtox %f4, %f4 | |
205 std %f4, [%sp+2247] | |
206 fmuld %f0, %f8, %f10 | |
207 fxtod %f12, %f12 | |
208 add %o1, %o3, %o1 | |
209 stx %o2, [%o0-48] | |
210 fmuld %f8, %f8, %f6 | |
211 stx %o1, [%o0-40] | |
212 fdtox %f2, %f2 | |
213 ldx [%sp+2231], %o2 | |
214 faddd %f10, %f10, %f10 | |
215 ldx [%sp+2223], %g3 | |
216 fmuld %f12, %f12, %f4 | |
217 fdtox %f6, %f6 | |
218 ldx [%sp+2239], %o1 | |
219 sllx %o2, 22, %o2 | |
220 fmuld %f12, %f8, %f8 | |
221 sllx %g3, 42, %g5 | |
222 ldx [%sp+2255], %o3 | |
223 fmuld %f0, %f12, %f0 | |
224 add %o1, %o2, %o2 | |
225 faddd %f4, %f10, %f4 | |
226 ldx [%sp+2247], %o1 | |
227 add %o2, %g5, %o2 | |
228 and %g3, %o4, %g4 | |
229 fdtox %f8, %f8 | |
230 sllx %o3, 20, %g5 | |
231 std %f8, [%sp+2231] | |
232 fdtox %f0, %f0 | |
233 srlx %o2, 42, %o3 | |
234 add %o1, %g5, %o1 | |
235 fdtox %f4, %f4 | |
236 srlx %g3, 22, %g3 | |
237 sub %o3, %g4, %o3 | |
238 std %f6, [%sp+2239] | |
239 std %f4, [%sp+2223] | |
240 srlx %o3, 63, %o3 | |
241 add %o1, %g3, %o1 | |
242 std %f2, [%sp+2255] | |
243 add %o1, %o3, %o1 | |
244 std %f0, [%sp+2247] | |
245 stx %o2, [%o0-32] | |
246 stx %o1, [%o0-24] | |
247 ldx [%sp+2231], %o2 | |
248 ldx [%sp+2223], %o3 | |
249 ldx [%sp+2239], %o1 | |
250 sllx %o2, 22, %o2 | |
251 sllx %o3, 42, %g5 | |
252 ldx [%sp+2255], %g4 | |
253 and %o3, %o4, %g3 | |
254 add %o1, %o2, %o2 | |
255 ldx [%sp+2247], %o1 | |
256 add %o2, %g5, %o2 | |
257 stx %o2, [%o0-16] | |
258 sllx %g4, 20, %g4 | |
259 srlx %o2, 42, %o2 | |
260 add %o1, %g4, %o1 | |
261 srlx %o3, 22, %o3 | |
262 sub %o2, %g3, %o2 | |
263 srlx %o2, 63, %o2 | |
264 add %o1, %o3, %o1 | |
265 add %o1, %o2, %o1 | |
266 stx %o1, [%o0-8] | |
267 ret | |
268 restore %g0, %g0, %g0 | |
269 .Lsmall: | |
270 ldx [%g1], %o2 | |
271 .Loop0: | |
272 and %o2, %o7, %o1 | |
273 stx %o1, [%sp+2263] | |
274 add %g2, 1, %g2 | |
275 srlx %o2, 21, %o1 | |
276 add %g1, 8, %g1 | |
277 srlx %o2, 42, %o2 | |
278 stx %o2, [%sp+2279] | |
279 and %o1, %o7, %o1 | |
280 ldd [%sp+2263], %f0 | |
281 cmp %g2, %i2 | |
282 stx %o1, [%sp+2271] | |
283 fxtod %f0, %f6 | |
284 ldd [%sp+2279], %f0 | |
285 ldd [%sp+2271], %f4 | |
286 fxtod %f0, %f2 | |
287 fmuld %f6, %f6, %f0 | |
288 fxtod %f4, %f10 | |
289 fmuld %f2, %f6, %f4 | |
290 fdtox %f0, %f0 | |
291 std %f0, [%sp+2239] | |
292 fmuld %f10, %f6, %f8 | |
293 fmuld %f10, %f10, %f0 | |
294 faddd %f4, %f4, %f6 | |
295 fmuld %f2, %f2, %f4 | |
296 fdtox %f8, %f8 | |
297 std %f8, [%sp+2231] | |
298 fmuld %f2, %f10, %f2 | |
299 faddd %f0, %f6, %f0 | |
300 fdtox %f4, %f4 | |
301 std %f4, [%sp+2255] | |
302 fdtox %f2, %f2 | |
303 std %f2, [%sp+2247] | |
304 fdtox %f0, %f0 | |
305 std %f0, [%sp+2223] | |
306 ldx [%sp+2239], %o1 | |
307 ldx [%sp+2255], %g4 | |
308 ldx [%sp+2231], %o2 | |
309 sllx %g4, 20, %g4 | |
310 ldx [%sp+2223], %o3 | |
311 sllx %o2, 22, %o2 | |
312 sllx %o3, 42, %g5 | |
313 add %o1, %o2, %o2 | |
314 ldx [%sp+2247], %o1 | |
315 add %o2, %g5, %o2 | |
316 stx %o2, [%o0] | |
317 and %o3, %o4, %g3 | |
318 srlx %o2, 42, %o2 | |
319 add %o1, %g4, %o1 | |
320 srlx %o3, 22, %o3 | |
321 sub %o2, %g3, %o2 | |
322 srlx %o2, 63, %o2 | |
323 add %o1, %o3, %o1 | |
324 add %o1, %o2, %o1 | |
325 stx %o1, [%o0+8] | |
326 add %o0, 16, %o0 | |
327 bl,a,pt %xcc, .Loop0 | |
328 ldx [%g1], %o2 | |
329 ret | |
330 restore %g0, %g0, %g0 | |
331 EPILOGUE(mpn_sqr_diagonal) | |
OLD | NEW |