4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #pragma ident "%Z%%M% %I% %E% SMI"
30 .section ".text",#alloc,#execinstr
31 .file "mont_mulf_asm_v8plus.s"
34 * This file is a result of compiling the mont_mulf.c file to generate an
35 * assembly output and then hand-editing that output to replace the
36 * compiler-generated loop for the 512-bit case (nlen == 16) in the
37 * mont_mulf_noconv routine with a hand-crafted version.
40 * cc -c -xarch=v8plus -KPIC mont_mulf_asm.s
42 * Note, this file does not support sparcv9 (64-bit).
46 .section ".rodata",#alloc
62 .type TwoToMinus16,#object
86 .type TwoToMinus32,#object
89 .section ".text",#alloc,#execinstr
90 /* 000000 0 */ .align 4
92 ! SUBROUTINE conv_d16_to_i32
94 ! OFFSET SOURCE LINE LABEL INSTRUCTION
96 .global conv_d16_to_i32
98 /* 000000 */ save
%sp
,-128,%sp
101 ! 1 !#define RF_INLINE_MACROS
102 ! 3 !static const double TwoTo16
=65536.0;
103 ! 4 !static const double TwoToMinus16
=1.0/65536.0;
104 ! 5 !static const double Zero
=0.0;
105 ! 6 !static const double TwoTo32
=65536.0*65536.0;
106 ! 7 !static const double TwoToMinus32
=1.0/(65536.0*65536.0);
107 ! 9 !#ifdef RF_INLINE_MACROS
108 ! 11 !double upper32
(double
);
109 ! 12 !double lower32
(double
, double
);
110 ! 13 !double mod
(double
, double
, double
);
112 ! 17 !static double upper32
(double x
)
114 ! 19 ! return floor
(x
*TwoToMinus32
);
116 ! 22 !static double lower32
(double x
, double y
)
118 ! 24 ! return x-TwoTo32
*floor
(x
*TwoToMinus32
);
120 ! 27 !static double mod
(double x
, double oneoverm
, double m
)
122 ! 29 ! return x-m
*floor
(x
*oneoverm
);
125 ! 35 !static void cleanup
(double
*dt
, int from
, int tlen
)
128 ! 38 ! double tmp
,tmp1
,x
,x1;
129 ! 40 ! tmp
=tmp1
=Zero;
130 ! 41 ! /* original code **
131 ! 42 ! for(i=2*from;i<2*tlen-2;i++)
134 ! 45 ! dt[i]=lower32(x,Zero)+tmp1;
136 ! 47 ! tmp=upper32(x);
138 ! 49 ! dt[tlen-2]+=tmp1;
139 ! 50 ! dt[tlen-1]+=tmp;
140 ! 51 ! **end original code ***/
141 ! 52 ! /* new code ***/
142 ! 53 ! for
(i
=2*from;i
<2*tlen;i+
=2)
146 ! 57 ! dt
[i
]=lower32
(x
,Zero
)+tmp;
147 ! 58 ! dt
[i+
1]=lower32
(x1
,Zero
)+tmp1;
148 ! 59 ! tmp
=upper32
(x
);
149 ! 60 ! tmp1
=upper32
(x1
);
151 ! 62 ! /** end new code **/
153 ! 66 !void conv_d16_to_i32
(unsigned int
*i32
, double
*d16
, long long
*tmp
, int ilen
)
156 ! 69 !long long
t, t1
, a, b, c
, d;
158 ! 72 ! a=(long long
)d16
[0];
160 /* 0x0004 72 */ ldd
[%i1
],%f0
161 /* 0x0008 67 */ or %g0
,%i1
,%o0
163 ! 73 ! b=(long long
)d16
[1];
164 ! 74 ! for
(i
=0; i
<ilen-
1; i+
+)
166 /* 0x000c 74 */ sub %i3
,1,%g2
167 /* 0x0010 */ cmp %g2
,0
168 /* 0x0014 71 */ or %g0
,0,%o4
169 /* 0x0018 72 */ fdtox
%f0,%f0
170 /* 0x001c */ std %f0,[%sp+
120]
171 /* 0x0020 74 */ or %g0
,0,%o7
172 /* 0x0024 67 */ or %g0
,%i3
,%o1
173 /* 0x0028 */ sub %i3
,2,%o2
174 /* 0x002c 73 */ ldd
[%o0+
8],%f0
175 /* 0x0030 67 */ sethi
%hi
(0xfc00),%o1
176 /* 0x0034 */ add %o2
,1,%g3
177 /* 0x0038 */ add %o1
,1023,%o1
178 /* 0x003c */ or %g0
,%i0
,%o5
179 /* 0x0040 73 */ fdtox
%f0,%f0
180 /* 0x0044 */ std %f0,[%sp+
112]
181 /* 0x0048 */ ldx [%sp+
112],%g1
182 /* 0x004c 72 */ ldx [%sp+
120],%g4
183 /* 0x0050 74 */ ble,pt
%icc
,.L900000117
184 /* 0x0054 */ sethi
%hi
(0xfc00),%g2
185 /* 0x0058 67 */ or %g0
,-1,%g2
186 /* 0x005c 74 */ cmp %g3
,3
187 /* 0x0060 67 */ srl
%g2
,0,%o3
188 /* 0x0064 74 */ bl,pn
%icc
,.L77000134
189 /* 0x0068 */ or %g0
,%o0
,%g2
192 ! 76 ! c
=(long long
)d16
[2*i+
2];
194 /* 0x006c 76 */ ldd
[%o0+
16],%f0
196 ! 77 ! t1+
=a&0xffffffff;
198 ! 79 ! d
=(long long
)d16
[2*i+
3];
199 ! 80 ! t1+
=(b&0xffff)<<16;
200 ! 81 ! t+
=(b>>16)+(t1
>>32);
201 ! 82 ! i32
[i
]=t1
&0xffffffff;
206 /* 0x0070 85 */ add %o0
,16,%g2
207 /* 0x0074 80 */ and %g1
,%o1
,%o0
208 /* 0x0078 */ sllx
%o0
,16,%g3
209 /* 0x007c 77 */ and %g4
,%o3
,%o0
210 /* 0x0080 74 */ add %o0
,%g3
,%o4
211 /* 0x0084 76 */ fdtox
%f0,%f0
212 /* 0x0088 */ std %f0,[%sp+
104]
213 /* 0x008c 82 */ and %o4
,%o3
,%g5
214 /* 0x0090 79 */ ldd
[%g2+
8],%f2
215 /* 0x0094 85 */ add %o5
,4,%o5
216 /* 0x0098 81 */ srax
%o4
,32,%o4
217 /* 0x009c */ stx %o4
,[%sp+
112]
218 /* 0x00a0 79 */ fdtox
%f2,%f0
219 /* 0x00a4 */ std %f0,[%sp+
96]
220 /* 0x00a8 81 */ srax
%g1
,16,%o0
221 /* 0x00ac */ ldx [%sp+
112],%o7
222 /* 0x00b0 78 */ srax
%g4
,32,%o4
223 /* 0x00b4 81 */ add %o0
,%o7
,%g4
224 /* 0x00b8 85 */ or %g0
,1,%o7
225 /* 0x00bc 76 */ ldx [%sp+
104],%g3
226 /* 0x00c0 81 */ add %o4
,%g4
,%o4
227 /* 0x00c4 79 */ ldx [%sp+
96],%g1
228 /* 0x00c8 82 */ st %g5
,[%o5-
4]
229 /* 0x00cc 84 */ or %g0
,%g3
,%g4
231 /* 0x00d0 76 */ ldd
[%g2+
16],%f0
232 /* 0x00d4 85 */ add %o7
,1,%o7
233 /* 0x00d8 */ add %o5
,4,%o5
234 /* 0x00dc */ cmp %o7
,%o2
235 /* 0x00e0 */ add %g2
,16,%g2
236 /* 0x00e4 76 */ fdtox
%f0,%f0
237 /* 0x00e8 */ std %f0,[%sp+
104]
238 /* 0x00ec 79 */ ldd
[%g2+
8],%f0
239 /* 0x00f0 */ fdtox
%f0,%f0
240 /* 0x00f4 */ std %f0,[%sp+
96]
241 /* 0x00f8 80 */ and %g1
,%o1
,%g3
242 /* 0x00fc */ sllx
%g3
,16,%g5
243 /* 0x0100 77 */ and %g4
,%o3
,%g3
244 /* 0x0104 74 */ add %g3
,%g5
,%g3
245 /* 0x0108 81 */ srax
%g1
,16,%g1
246 /* 0x010c 74 */ add %g3
,%o4
,%g3
247 /* 0x0110 81 */ srax
%g3
,32,%o4
248 /* 0x0114 */ stx %o4
,[%sp+
112]
249 /* 0x0118 76 */ ldx [%sp+
104],%g5
250 /* 0x011c 78 */ srax
%g4
,32,%o4
251 /* 0x0120 81 */ ldx [%sp+
112],%g4
252 /* 0x0124 */ add %g1
,%g4
,%g4
253 /* 0x0128 79 */ ldx [%sp+
96],%g1
254 /* 0x012c 81 */ add %o4
,%g4
,%o4
255 /* 0x0130 82 */ and %g3
,%o3
,%g3
256 /* 0x0134 84 */ or %g0
,%g5
,%g4
257 /* 0x0138 85 */ ble,pt
%icc
,.L900000112
258 /* 0x013c */ st %g3
,[%o5-
4]
260 /* 0x0140 85 */ ba .L900000117
261 /* 0x0144 */ sethi
%hi
(0xfc00),%g2
263 /* 0x0148 76 */ ldd
[%g2+
16],%f0
265 /* 0x014c 77 */ and %g4
,%o3
,%o0
266 /* 0x0150 80 */ and %g1
,%o1
,%g3
267 /* 0x0154 76 */ fdtox
%f0,%f0
268 /* 0x0158 77 */ add %o4
,%o0
,%o0
269 /* 0x015c 76 */ std %f0,[%sp+
104]
270 /* 0x0160 85 */ add %o7
,1,%o7
271 /* 0x0164 80 */ sllx
%g3
,16,%o4
272 /* 0x0168 79 */ ldd
[%g2+
24],%f2
273 /* 0x016c 85 */ add %g2
,16,%g2
274 /* 0x0170 80 */ add %o0
,%o4
,%o0
275 /* 0x0174 85 */ cmp %o7
,%o2
276 /* 0x0178 82 */ and %o0
,%o3
,%g3
277 /* 0x017c 79 */ fdtox
%f2,%f0
278 /* 0x0180 */ std %f0,[%sp+
96]
279 /* 0x0184 81 */ srax
%o0
,32,%o0
280 /* 0x0188 */ stx %o0
,[%sp+
112]
281 /* 0x018c 78 */ srax
%g4
,32,%o4
282 /* 0x0190 79 */ ldx [%sp+
96],%o0
283 /* 0x0194 81 */ srax
%g1
,16,%g5
284 /* 0x0198 */ ldx [%sp+
112],%g4
285 /* 0x019c 76 */ ldx [%sp+
104],%g1
286 /* 0x01a0 82 */ st %g3
,[%o5
]
287 /* 0x01a4 81 */ add %g5
,%g4
,%g4
288 /* 0x01a8 85 */ add %o5
,4,%o5
289 /* 0x01ac 81 */ add %o4
,%g4
,%o4
290 /* 0x01b0 84 */ or %g0
,%g1
,%g4
291 /* 0x01b4 85 */ or %g0
,%o0
,%g1
292 /* 0x01b8 */ ble,a,pt
%icc
,.L900000116
293 /* 0x01bc */ ldd
[%g2+
16],%f0
297 ! 87 ! t1+
=a&0xffffffff;
299 ! 89 ! t1+
=(b&0xffff)<<16;
300 ! 90 ! i32
[i
]=t1
&0xffffffff;
302 /* 0x01c0 90 */ sethi
%hi
(0xfc00),%g2
304 /* 0x01c4 90 */ or %g0
,-1,%g3
305 /* 0x01c8 */ add %g2
,1023,%g2
306 /* 0x01cc */ srl
%g3
,0,%g3
307 /* 0x01d0 */ and %g1
,%g2
,%g2
308 /* 0x01d4 */ and %g4
,%g3
,%g4
309 /* 0x01d8 */ sllx
%g2
,16,%g2
310 /* 0x01dc */ add %o4
,%g4
,%g4
311 /* 0x01e0 */ add %g4
,%g2
,%g2
312 /* 0x01e4 */ sll
%o7
,2,%g4
313 /* 0x01e8 */ and %g2
,%g3
,%g2
314 /* 0x01ec */ st %g2
,[%i0+
%g4
]
315 /* 0x01f0 */ ret
! Result
=
316 /* 0x01f4 */ restore
%g0
,%g0
,%g0
317 /* 0x01f8 0 */ .type conv_d16_to_i32,2
318 /* 0x01f8 */ .size conv_d16_to_i32,(.-conv_d16_to_i32)
320 .section ".text",#alloc,#execinstr
321 /* 000000 0 */ .align 8
325 .L_const_seg_900000201:
326 /* 000000 0 */ .word 1127219200,0
327 /* 0x0008 0 */ .align 4
328 /* 0x0008 */ .skip 16
330 ! SUBROUTINE conv_i32_to_d32
332 ! OFFSET SOURCE LINE LABEL INSTRUCTION
334 .global conv_i32_to_d32
336 /* 000000 */ or %g0
,%o7
,%g2
337 /* 0x0004 */ or %g0
,%o1
,%g4
339 /* 0x0008 */ call
.+8
340 /* 0x000c */ sethi
/*X*/%hi
(_GLOBAL_OFFSET_TABLE_-
(.L900000210-.)),%g3
343 ! 94 !void conv_i32_to_d32
(double
*d32
, unsigned int
*i32
, int len
)
346 ! 98 !#pragma pipeloop(0)
347 ! 99 ! for
(i
=0;i
<len;i+
+) d32
[i
]=(double
)(i32
[i
]);
349 /* 0x0010 99 */ or %g0
,0,%o5
350 /* 0x0014 95 */ add %g3
,/*X*/%lo
(_GLOBAL_OFFSET_TABLE_-
(.L900000210-.)),%g3
351 /* 0x0018 */ or %g0
,%o0
,%g5
352 /* 0x001c */ add %g3
,%o7
,%g1
353 /* 0x0020 */ orcc
%g0
,%o2
,%g3
354 /* 0x0024 99 */ ble,pt
%icc
,.L77000140
355 /* 0x0028 */ or %g0
,%g2
,%o7
356 /* 0x002c */ sethi
%hi
(.L_const_seg_900000201),%g2
357 /* 0x0030 */ add %g2
,%lo
(.L_const_seg_900000201),%g2
358 /* 0x0034 */ sub %o2
,1,%g3
359 /* 0x0038 */ ld [%g1+
%g2
],%g2
360 /* 0x003c */ cmp %o2
,9
361 /* 0x0040 */ bl,pn
%icc
,.L77000144
362 /* 0x0044 */ ldd
[%g2
],%f8
363 /* 0x0048 */ add %o1
,16,%g4
364 /* 0x004c */ sub %o2
,5,%g1
365 /* 0x0050 */ ld [%o1
],%f7
366 /* 0x0054 */ or %g0
,4,%o5
367 /* 0x0058 */ ld [%o1+
4],%f5
368 /* 0x005c */ ld [%o1+
8],%f3
369 /* 0x0060 */ fmovs
%f8,%f6
370 /* 0x0064 */ ld [%o1+
12],%f1
372 /* 0x0068 */ ld [%g4
],%f11
373 /* 0x006c */ add %o5
,5,%o5
374 /* 0x0070 */ add %g4
,20,%g4
375 /* 0x0074 */ fsubd
%f6,%f8,%f6
376 /* 0x0078 */ std %f6,[%g5
]
377 /* 0x007c */ cmp %o5
,%g1
378 /* 0x0080 */ add %g5
,40,%g5
379 /* 0x0084 */ fmovs
%f8,%f4
380 /* 0x0088 */ ld [%g4-
16],%f7
381 /* 0x008c */ fsubd
%f4,%f8,%f12
382 /* 0x0090 */ fmovs
%f8,%f2
383 /* 0x0094 */ std %f12,[%g5-
32]
384 /* 0x0098 */ ld [%g4-
12],%f5
385 /* 0x009c */ fsubd
%f2,%f8,%f12
386 /* 0x00a0 */ fmovs
%f8,%f0
387 /* 0x00a4 */ std %f12,[%g5-
24]
388 /* 0x00a8 */ ld [%g4-
8],%f3
389 /* 0x00ac */ fsubd
%f0,%f8,%f12
390 /* 0x00b0 */ fmovs
%f8,%f10
391 /* 0x00b4 */ std %f12,[%g5-
16]
392 /* 0x00b8 */ ld [%g4-
4],%f1
393 /* 0x00bc */ fsubd
%f10,%f8,%f10
394 /* 0x00c0 */ fmovs
%f8,%f6
395 /* 0x00c4 */ ble,pt
%icc
,.L900000205
396 /* 0x00c8 */ std %f10,[%g5-
8]
398 /* 0x00cc */ fmovs
%f8,%f4
399 /* 0x00d0 */ add %g5
,32,%g5
400 /* 0x00d4 */ cmp %o5
,%g3
401 /* 0x00d8 */ fmovs
%f8,%f2
402 /* 0x00dc */ fmovs
%f8,%f0
403 /* 0x00e0 */ fsubd
%f6,%f8,%f6
404 /* 0x00e4 */ std %f6,[%g5-
32]
405 /* 0x00e8 */ fsubd
%f4,%f8,%f4
406 /* 0x00ec */ std %f4,[%g5-
24]
407 /* 0x00f0 */ fsubd
%f2,%f8,%f2
408 /* 0x00f4 */ std %f2,[%g5-
16]
409 /* 0x00f8 */ fsubd
%f0,%f8,%f0
410 /* 0x00fc */ bg
,pn
%icc
,.L77000140
411 /* 0x0100 */ std %f0,[%g5-
8]
413 /* 0x0104 */ ld [%g4
],%f1
415 /* 0x0108 */ ldd
[%g2
],%f8
416 /* 0x010c */ add %o5
,1,%o5
417 /* 0x0110 */ add %g4
,4,%g4
418 /* 0x0114 */ cmp %o5
,%g3
419 /* 0x0118 */ fmovs
%f8,%f0
420 /* 0x011c */ fsubd
%f0,%f8,%f0
421 /* 0x0120 */ std %f0,[%g5
]
422 /* 0x0124 */ add %g5
,8,%g5
423 /* 0x0128 */ ble,a,pt
%icc
,.L900000211
424 /* 0x012c */ ld [%g4
],%f1
426 /* 0x0130 */ retl
! Result
=
428 /* 0x0138 0 */ .type conv_i32_to_d32,2
429 /* 0x0138 */ .size conv_i32_to_d32,(.-conv_i32_to_d32)
431 .section ".text",#alloc,#execinstr
432 /* 000000 0 */ .align 8
436 .L_const_seg_900000301:
437 /* 000000 0 */ .word 1127219200,0
438 /* 0x0008 0 */ .align 4
439 /* 0x0008 */ .skip 16
441 ! SUBROUTINE conv_i32_to_d16
443 ! OFFSET SOURCE LINE LABEL INSTRUCTION
445 .global conv_i32_to_d16
447 /* 000000 */ save
%sp
,-104,%sp
449 /* 0x0004 */ call
.+8
450 /* 0x0008 */ sethi
/*X*/%hi
(_GLOBAL_OFFSET_TABLE_-
(.L900000310-.)),%g3
451 /* 0x000c */ orcc
%g0
,%i2
,%o0
452 /* 0x0010 */ add %g3
,/*X*/%lo
(_GLOBAL_OFFSET_TABLE_-
(.L900000310-.)),%g3
455 ! 103 !void conv_i32_to_d16
(double
*d16
, unsigned int
*i32
, int len
)
458 ! 106 !unsigned int
a;
459 ! 108 !#pragma pipeloop(0)
460 ! 109 ! for
(i
=0;i
<len;i+
+)
462 /* 0x0014 109 */ ble,pt
%icc
,.L77000150
463 /* 0x0018 */ add %g3
,%o7
,%o2
467 ! 112 ! d16
[2*i
]=(double
)(a&0xffff);
468 ! 113 ! d16
[2*i+
1]=(double
)(a>>16);
470 /* 0x001c 113 */ sethi
%hi
(.L_const_seg_900000301),%g2
471 /* 0x0020 109 */ sub %o0
,1,%o5
472 /* 0x0024 113 */ add %g2
,%lo
(.L_const_seg_900000301),%o1
473 /* 0x0028 */ ld [%o2+
%o1
],%o3
474 /* 0x002c 109 */ sethi
%hi
(0xfc00),%o0
475 /* 0x0030 */ add %o5
,1,%g2
476 /* 0x0034 */ or %g0
,0,%g1
477 /* 0x0038 */ cmp %g2
,3
478 /* 0x003c 112 */ ldd
[%o3
],%f0
479 /* 0x0040 */ or %g0
,%i1
,%o7
480 /* 0x0044 */ add %o0
,1023,%o4
481 /* 0x0048 */ or %g0
,%i0
,%g3
482 /* 0x004c 109 */ bl,pn
%icc
,.L77000154
483 /* 0x0050 */ add %o7
,4,%o0
484 /* 0x0054 111 */ ld [%o0-
4],%o1
485 /* 0x0058 0 */ or %g0
,%o0
,%o7
486 /* 0x005c 113 */ or %g0
,1,%g1
487 /* 0x0060 112 */ and %o1
,%o4
,%o0
489 /* 0x0064 112 */ st %o0
,[%sp+
96]
490 /* 0x0068 113 */ add %g1
,1,%g1
491 /* 0x006c */ add %g3
,16,%g3
492 /* 0x0070 */ cmp %g1
,%o5
493 /* 0x0074 */ add %o7
,4,%o7
494 /* 0x0078 112 */ ld [%sp+
96],%f3
495 /* 0x007c */ fmovs
%f0,%f2
496 /* 0x0080 */ fsubd
%f2,%f0,%f2
497 /* 0x0084 113 */ srl
%o1
,16,%o0
498 /* 0x0088 112 */ std %f2,[%g3-
16]
499 /* 0x008c 113 */ st %o0
,[%sp+
92]
500 /* 0x0090 */ ld [%sp+
92],%f3
501 /* 0x0094 111 */ ld [%o7-
4],%o1
502 /* 0x0098 113 */ fmovs
%f0,%f2
503 /* 0x009c */ fsubd
%f2,%f0,%f2
504 /* 0x00a0 112 */ and %o1
,%o4
,%o0
505 /* 0x00a4 113 */ ble,pt
%icc
,.L900000306
506 /* 0x00a8 */ std %f2,[%g3-
8]
508 /* 0x00ac 112 */ st %o0
,[%sp+
96]
509 /* 0x00b0 */ fmovs
%f0,%f2
510 /* 0x00b4 113 */ add %g3
,16,%g3
511 /* 0x00b8 */ srl
%o1
,16,%o0
512 /* 0x00bc 112 */ ld [%sp+
96],%f3
513 /* 0x00c0 */ fsubd
%f2,%f0,%f2
514 /* 0x00c4 */ std %f2,[%g3-
16]
515 /* 0x00c8 113 */ st %o0
,[%sp+
92]
516 /* 0x00cc */ fmovs
%f0,%f2
517 /* 0x00d0 */ ld [%sp+
92],%f3
518 /* 0x00d4 */ fsubd
%f2,%f0,%f0
519 /* 0x00d8 */ std %f0,[%g3-
8]
520 /* 0x00dc */ ret
! Result
=
521 /* 0x00e0 */ restore
%g0
,%g0
,%g0
523 /* 0x00e4 111 */ ld [%o7
],%o0
525 /* 0x00e8 112 */ and %o0
,%o4
,%o1
526 /* 0x00ec */ st %o1
,[%sp+
96]
527 /* 0x00f0 113 */ add %g1
,1,%g1
528 /* 0x00f4 112 */ ldd
[%o3
],%f0
529 /* 0x00f8 113 */ srl
%o0
,16,%o0
530 /* 0x00fc */ add %o7
,4,%o7
531 /* 0x0100 */ cmp %g1
,%o5
532 /* 0x0104 112 */ fmovs
%f0,%f2
533 /* 0x0108 */ ld [%sp+
96],%f3
534 /* 0x010c */ fsubd
%f2,%f0,%f2
535 /* 0x0110 */ std %f2,[%g3
]
536 /* 0x0114 113 */ st %o0
,[%sp+
92]
537 /* 0x0118 */ fmovs
%f0,%f2
538 /* 0x011c */ ld [%sp+
92],%f3
539 /* 0x0120 */ fsubd
%f2,%f0,%f0
540 /* 0x0124 */ std %f0,[%g3+
8]
541 /* 0x0128 */ add %g3
,16,%g3
542 /* 0x012c */ ble,a,pt
%icc
,.L900000311
543 /* 0x0130 */ ld [%o7
],%o0
545 /* 0x0134 */ ret
! Result
=
546 /* 0x0138 */ restore
%g0
,%g0
,%g0
547 /* 0x013c 0 */ .type conv_i32_to_d16,2
548 /* 0x013c */ .size conv_i32_to_d16,(.-conv_i32_to_d16)
550 .section ".text",#alloc,#execinstr
551 /* 000000 0 */ .align 8
555 .L_const_seg_900000401:
556 /* 000000 0 */ .word 1127219200,0
557 /* 0x0008 0 */ .align 4
558 /* 0x0008 */ .skip 16
560 ! SUBROUTINE conv_i32_to_d32_and_d16
562 ! OFFSET SOURCE LINE LABEL INSTRUCTION
564 .global conv_i32_to_d32_and_d16
565 conv_i32_to_d32_and_d16
:
566 /* 000000 */ save
%sp
,-104,%sp
568 /* 0x0004 */ call
.+8
569 /* 0x0008 */ sethi
/*X*/%hi
(_GLOBAL_OFFSET_TABLE_-
(.L900000413-.)),%g4
573 ! 118 !void i16_to_d16_and_d32x4
(const double
* /*1/(2^16)*/,
574 ! 119 ! const double
* /* 2^16*/, const double
* /* 0 */,
575 ! 120 ! double
* /*result16*/, double
* /* result32 */,
576 ! 121 ! float
* /*source - should be */
577 ! 122 ! unsigned int
* converted to float
* */
);
578 ! 126 !void conv_i32_to_d32_and_d16
(double
*d32
, double
*d16
,
579 ! 127 ! unsigned int
*i32
, int len
)
582 ! 130 !unsigned int
a;
583 ! 132 !#pragma pipeloop(0)
584 ! 133 ! for
(i
=0;i
<len-
3;i+
=4)
586 /* 0x000c 133 */ sub %i3
,3,%g2
587 /* 0x0010 */ cmp %g2
,0
588 /* 0x0014 128 */ add %g4
,/*X*/%lo
(_GLOBAL_OFFSET_TABLE_-
(.L900000413-.)),%g4
589 /* 0x0018 */ or %g0
,%i2
,%g5
592 ! 135 ! i16_to_d16_and_d32x4
(&TwoToMinus16
, &TwoTo16
, &Zero
,
593 ! 136 ! &(d16
[2*i
]), &(d32
[i
]), (float
*)(&(i32
[i
])));
595 /* 0x001c 136 */ sethi
%hi
(Zero
),%g2
596 /* 0x0020 128 */ add %g4
,%o7
,%o2
597 /* 0x0024 133 */ or %g0
,0,%g1
598 /* 0x0028 128 */ or %g0
,%i0
,%i4
599 /* 0x002c 136 */ add %g2
,%lo
(Zero
),%g2
600 /* 0x0030 133 */ ble,pt
%icc
,.L900000416
601 /* 0x0034 */ cmp %g1
,%i3
602 /* 0x0038 */ or %g0
,%g5
,%o4
603 /* 0x003c 136 */ ld [%o2+
%g2
],%o1
604 /* 0x0040 133 */ sub %i3
,4,%o3
605 /* 0x0044 */ or %g0
,0,%o7
606 /* 0x0048 */ or %g0
,0,%o5
607 /* 0x004c 136 */ or %g0
,%o4
,%g4
609 /* 0x0050 */ ldd
[%o1
],%f2
610 /* 0x0054 136 */ add %i4
,%o7
,%g2
611 /* 0x0058 */ add %i1
,%o5
,%g3
612 /* 0x005c */ ldd
[%o1-
8],%f0
613 /* 0x0060 */ add %g1
,4,%g1
614 /* 0x0064 */ add %o4
,16,%o4
615 /* 0x0068 */ fmovd
%f2,%f14
616 /* 0x006c */ ld [%g4
],%f15
617 /* 0x0070 */ cmp %g1
,%o3
618 /* 0x0074 */ fmovd
%f2,%f10
619 /* 0x0078 */ ld [%g4+
4],%f11
620 /* 0x007c */ fmovd
%f2,%f6
621 /* 0x0080 */ ld [%g4+
8],%f7
622 /* 0x0084 */ ld [%g4+
12],%f3
623 /* 0x0088 */ fxtod
%f14,%f14
624 /* 0x008c */ fxtod
%f10,%f10
625 /* 0x0090 */ ldd
[%o1-
16],%f16
626 /* 0x0094 */ fxtod
%f6,%f6
627 /* 0x0098 */ std %f14,[%i4+
%o7
]
628 /* 0x009c */ add %o7
,32,%o7
629 /* 0x00a0 */ fxtod
%f2,%f2
630 /* 0x00a4 */ fmuld
%f0,%f14,%f12
631 /* 0x00a8 */ std %f10,[%g2+
8]
632 /* 0x00ac */ fmuld
%f0,%f10,%f8
633 /* 0x00b0 */ std %f6,[%g2+
16]
634 /* 0x00b4 */ fmuld
%f0,%f6,%f4
635 /* 0x00b8 */ std %f2,[%g2+
24]
636 /* 0x00bc */ fmuld
%f0,%f2,%f0
637 /* 0x00c0 */ fdtox
%f12,%f12
638 /* 0x00c4 */ fdtox
%f8,%f8
639 /* 0x00c8 */ fdtox
%f4,%f4
640 /* 0x00cc */ fdtox
%f0,%f0
641 /* 0x00d0 */ fxtod
%f12,%f12
642 /* 0x00d4 */ std %f12,[%g3+
8]
643 /* 0x00d8 */ fxtod
%f8,%f8
644 /* 0x00dc */ std %f8,[%g3+
24]
645 /* 0x00e0 */ fxtod
%f4,%f4
646 /* 0x00e4 */ std %f4,[%g3+
40]
647 /* 0x00e8 */ fxtod
%f0,%f0
648 /* 0x00ec */ fmuld
%f12,%f16,%f12
649 /* 0x00f0 */ std %f0,[%g3+
56]
650 /* 0x00f4 */ fmuld
%f8,%f16,%f8
651 /* 0x00f8 */ fmuld
%f4,%f16,%f4
652 /* 0x00fc */ fmuld
%f0,%f16,%f0
653 /* 0x0100 */ fsubd
%f14,%f12,%f12
654 /* 0x0104 */ std %f12,[%i1+
%o5
]
655 /* 0x0108 */ fsubd
%f10,%f8,%f8
656 /* 0x010c */ std %f8,[%g3+
16]
657 /* 0x0110 */ add %o5
,64,%o5
658 /* 0x0114 */ fsubd
%f6,%f4,%f4
659 /* 0x0118 */ std %f4,[%g3+
32]
660 /* 0x011c */ fsubd
%f2,%f0,%f0
661 /* 0x0120 */ std %f0,[%g3+
48]
662 /* 0x0124 */ ble,pt
%icc
,.L900000415
663 /* 0x0128 */ or %g0
,%o4
,%g4
667 ! 138 ! for
(;i
<len;i+
+)
669 /* 0x012c 138 */ cmp %g1
,%i3
671 /* 0x0130 138 */ bge,pt
%icc
,.L77000164
676 ! 141 ! d32
[i
]=(double
)(i32
[i
]);
677 ! 142 ! d16
[2*i
]=(double
)(a&0xffff);
678 ! 143 ! d16
[2*i+
1]=(double
)(a>>16);
680 /* 0x0138 143 */ sethi
%hi
(.L_const_seg_900000401),%g2
681 /* 0x013c */ add %g2
,%lo
(.L_const_seg_900000401),%o1
682 /* 0x0140 138 */ sethi
%hi
(0xfc00),%o0
683 /* 0x0144 */ ld [%o2+
%o1
],%o2
684 /* 0x0148 */ sll
%g1
,2,%o3
685 /* 0x014c */ sub %i3
,%g1
,%g3
686 /* 0x0150 */ sll
%g1
,3,%g2
687 /* 0x0154 */ add %o0
,1023,%o4
688 /* 0x0158 141 */ ldd
[%o2
],%f0
689 /* 0x015c */ add %g5
,%o3
,%o0
690 /* 0x0160 138 */ cmp %g3
,3
691 /* 0x0164 */ add %i4
,%g2
,%o3
692 /* 0x0168 */ sub %i3
,1,%o1
693 /* 0x016c */ sll
%g1
,4,%g4
694 /* 0x0170 */ bl,pn
%icc
,.L77000161
695 /* 0x0174 */ add %i1
,%g4
,%o5
696 /* 0x0178 141 */ ld [%o0
],%f3
697 /* 0x017c 143 */ add %o3
,8,%o3
698 /* 0x0180 140 */ ld [%o0
],%o7
699 /* 0x0184 143 */ add %o5
,16,%o5
700 /* 0x0188 */ add %g1
,1,%g1
701 /* 0x018c 141 */ fmovs
%f0,%f2
702 /* 0x0190 143 */ add %o0
,4,%o0
703 /* 0x0194 142 */ and %o7
,%o4
,%g2
704 /* 0x0198 141 */ fsubd
%f2,%f0,%f2
705 /* 0x019c */ std %f2,[%o3-
8]
706 /* 0x01a0 143 */ srl
%o7
,16,%o7
707 /* 0x01a4 142 */ st %g2
,[%sp+
96]
708 /* 0x01a8 */ fmovs
%f0,%f2
709 /* 0x01ac */ ld [%sp+
96],%f3
710 /* 0x01b0 */ fsubd
%f2,%f0,%f2
711 /* 0x01b4 */ std %f2,[%o5-
16]
712 /* 0x01b8 143 */ st %o7
,[%sp+
92]
713 /* 0x01bc */ fmovs
%f0,%f2
714 /* 0x01c0 */ ld [%sp+
92],%f3
715 /* 0x01c4 */ fsubd
%f2,%f0,%f2
716 /* 0x01c8 */ std %f2,[%o5-
8]
718 /* 0x01cc 141 */ ld [%o0
],%f3
719 /* 0x01d0 143 */ add %g1
,2,%g1
720 /* 0x01d4 */ add %o5
,32,%o5
721 /* 0x01d8 140 */ ld [%o0
],%o7
722 /* 0x01dc 143 */ cmp %g1
,%o1
723 /* 0x01e0 */ add %o3
,16,%o3
724 /* 0x01e4 141 */ fmovs
%f0,%f2
725 /* 0x01e8 */ fsubd
%f2,%f0,%f2
726 /* 0x01ec */ std %f2,[%o3-
16]
727 /* 0x01f0 142 */ and %o7
,%o4
,%g2
728 /* 0x01f4 */ st %g2
,[%sp+
96]
729 /* 0x01f8 */ ld [%sp+
96],%f3
730 /* 0x01fc */ fmovs
%f0,%f2
731 /* 0x0200 */ fsubd
%f2,%f0,%f2
732 /* 0x0204 143 */ srl
%o7
,16,%o7
733 /* 0x0208 142 */ std %f2,[%o5-
32]
734 /* 0x020c 143 */ st %o7
,[%sp+
92]
735 /* 0x0210 */ ld [%sp+
92],%f3
736 /* 0x0214 */ fmovs
%f0,%f2
737 /* 0x0218 */ fsubd
%f2,%f0,%f2
738 /* 0x021c */ std %f2,[%o5-
24]
739 /* 0x0220 */ add %o0
,4,%o0
740 /* 0x0224 141 */ ld [%o0
],%f3
741 /* 0x0228 140 */ ld [%o0
],%o7
742 /* 0x022c 141 */ fmovs
%f0,%f2
743 /* 0x0230 */ fsubd
%f2,%f0,%f2
744 /* 0x0234 */ std %f2,[%o3-
8]
745 /* 0x0238 142 */ and %o7
,%o4
,%g2
746 /* 0x023c */ st %g2
,[%sp+
96]
747 /* 0x0240 */ ld [%sp+
96],%f3
748 /* 0x0244 */ fmovs
%f0,%f2
749 /* 0x0248 */ fsubd
%f2,%f0,%f2
750 /* 0x024c 143 */ srl
%o7
,16,%o7
751 /* 0x0250 142 */ std %f2,[%o5-
16]
752 /* 0x0254 143 */ st %o7
,[%sp+
92]
753 /* 0x0258 */ ld [%sp+
92],%f3
754 /* 0x025c */ fmovs
%f0,%f2
755 /* 0x0260 */ fsubd
%f2,%f0,%f2
756 /* 0x0264 */ std %f2,[%o5-
8]
757 /* 0x0268 */ bl,pt
%icc
,.L900000409
758 /* 0x026c */ add %o0
,4,%o0
760 /* 0x0270 143 */ cmp %g1
,%i3
761 /* 0x0274 */ bge,pn
%icc
,.L77000164
764 /* 0x027c 141 */ ld [%o0
],%f3
766 /* 0x0280 141 */ ldd
[%o2
],%f0
767 /* 0x0284 143 */ add %g1
,1,%g1
768 /* 0x0288 140 */ ld [%o0
],%o1
769 /* 0x028c 143 */ add %o0
,4,%o0
770 /* 0x0290 */ cmp %g1
,%i3
771 /* 0x0294 141 */ fmovs
%f0,%f2
772 /* 0x0298 142 */ and %o1
,%o4
,%o7
773 /* 0x029c 141 */ fsubd
%f2,%f0,%f2
774 /* 0x02a0 */ std %f2,[%o3
]
775 /* 0x02a4 143 */ srl
%o1
,16,%o1
776 /* 0x02a8 142 */ st %o7
,[%sp+
96]
777 /* 0x02ac 143 */ add %o3
,8,%o3
778 /* 0x02b0 142 */ fmovs
%f0,%f2
779 /* 0x02b4 */ ld [%sp+
96],%f3
780 /* 0x02b8 */ fsubd
%f2,%f0,%f2
781 /* 0x02bc */ std %f2,[%o5
]
782 /* 0x02c0 143 */ st %o1
,[%sp+
92]
783 /* 0x02c4 */ fmovs
%f0,%f2
784 /* 0x02c8 */ ld [%sp+
92],%f3
785 /* 0x02cc */ fsubd
%f2,%f0,%f0
786 /* 0x02d0 */ std %f0,[%o5+
8]
787 /* 0x02d4 */ add %o5
,16,%o5
788 /* 0x02d8 */ bl,a,pt
%icc
,.L900000414
789 /* 0x02dc */ ld [%o0
],%f3
791 /* 0x02e0 */ ret
! Result
=
792 /* 0x02e4 */ restore
%g0
,%g0
,%g0
793 /* 0x02e8 0 */ .type conv_i32_to_d32_and_d16,2
794 /* 0x02e8 */ .size conv_i32_to_d32_and_d16,(.-conv_i32_to_d32_and_d16)
796 .section ".text",#alloc,#execinstr
797 /* 000000 0 */ .align 4
799 ! SUBROUTINE adjust_montf_result
801 ! OFFSET SOURCE LINE LABEL INSTRUCTION
803 .global adjust_montf_result
808 ! 148 !void adjust_montf_result
(unsigned int
*i32
, unsigned int
*nint
, int len
)
810 ! 150 !long long acc;
812 ! 153 ! if
(i32
[len
]>0) i
=-1;
814 /* 000000 153 */ sll
%o2
,2,%g1
815 /* 0x0004 */ or %g0
,-1,%g3
816 /* 0x0008 */ ld [%o0+
%g1
],%g1
817 /* 0x000c */ cmp %g1
,0
818 /* 0x0010 */ bleu
,pn
%icc
,.L77000175
819 /* 0x0014 */ or %g0
,%o1
,%o3
820 /* 0x0018 */ ba .L900000511
821 /* 0x001c */ cmp %g3
,0
826 ! 156 ! for
(i
=len-
1; i
>=0; i-
-)
828 /* 0x0020 156 */ subcc
%o2
,1,%g3
829 /* 0x0024 */ bneg
,pt
%icc
,.L900000511
830 /* 0x0028 */ cmp %g3
,0
831 /* 0x002c */ sll
%g3
,2,%g1
832 /* 0x0030 */ add %o0
,%g1
,%g2
833 /* 0x0034 */ add %o1
,%g1
,%g1
836 ! 158 ! if
(i32
[i
]!=nint
[i
]) break;
838 /* 0x0038 158 */ ld [%g1
],%g5
840 /* 0x003c 158 */ ld [%g2
],%o5
841 /* 0x0040 */ sub %g1
,4,%g1
842 /* 0x0044 */ sub %g2
,4,%g2
843 /* 0x0048 */ cmp %o5
,%g5
844 /* 0x004c */ bne,pn
%icc
,.L77000182
846 /* 0x0054 */ subcc
%g3
,1,%g3
847 /* 0x0058 */ bpos
,a,pt
%icc
,.L900000510
848 /* 0x005c */ ld [%g1
],%g5
853 ! 161 ! if
((i
<0)||
(i32
[i
]>nint
[i
]))
855 /* 0x0060 161 */ cmp %g3
,0
857 /* 0x0064 161 */ bl,pn
%icc
,.L77000198
858 /* 0x0068 */ sll
%g3
,2,%g2
859 /* 0x006c */ ld [%o1+
%g2
],%g1
860 /* 0x0070 */ ld [%o0+
%g2
],%g2
861 /* 0x0074 */ cmp %g2
,%g1
862 /* 0x0078 */ bleu
,pt
%icc
,.L77000191
868 ! 164 ! for
(i
=0;i
<len;i+
+)
870 /* 0x0080 164 */ cmp %o2
,0
871 /* 0x0084 */ ble,pt
%icc
,.L77000191
873 /* 0x008c 161 */ or %g0
,-1,%g2
874 /* 0x0090 */ sub %o2
,1,%g4
875 /* 0x0094 */ srl
%g2
,0,%g3
876 /* 0x0098 163 */ or %g0
,0,%g5
877 /* 0x009c 164 */ or %g0
,0,%o5
878 /* 0x00a0 161 */ or %g0
,%o0
,%o4
879 /* 0x00a4 */ cmp %o2
,3
880 /* 0x00a8 */ add %o1
,4,%g2
881 /* 0x00ac 164 */ bl,pn
%icc
,.L77000199
882 /* 0x00b0 */ add %o0
,8,%g1
885 ! 166 ! acc
=acc+
(unsigned long long
)(i32
[i
])-(unsigned long long
)(nint
[i
]);
887 /* 0x00b4 166 */ ld [%o0
],%o2
888 /* 0x00b8 0 */ or %g0
,%g2
,%o3
889 /* 0x00bc 166 */ ld [%o1
],%o1
890 /* 0x00c0 0 */ or %g0
,%g1
,%o4
892 ! 167 ! i32
[i
]=acc
&0xffffffff;
895 /* 0x00c4 168 */ or %g0
,2,%o5
896 /* 0x00c8 166 */ ld [%o0+
4],%g1
897 /* 0x00cc 164 */ sub %o2
,%o1
,%o2
898 /* 0x00d0 */ or %g0
,%o2
,%g5
899 /* 0x00d4 167 */ and %o2
,%g3
,%o2
900 /* 0x00d8 */ st %o2
,[%o0
]
901 /* 0x00dc 168 */ srax
%g5
,32,%g5
903 /* 0x00e0 166 */ ld [%o3
],%o2
904 /* 0x00e4 168 */ add %o5
,1,%o5
905 /* 0x00e8 */ add %o3
,4,%o3
906 /* 0x00ec */ cmp %o5
,%g4
907 /* 0x00f0 */ add %o4
,4,%o4
908 /* 0x00f4 164 */ sub %g1
,%o2
,%g1
909 /* 0x00f8 */ add %g1
,%g5
,%g5
910 /* 0x00fc 167 */ and %g5
,%g3
,%o2
911 /* 0x0100 166 */ ld [%o4-
4],%g1
912 /* 0x0104 167 */ st %o2
,[%o4-
8]
913 /* 0x0108 168 */ ble,pt
%icc
,.L900000505
914 /* 0x010c */ srax
%g5
,32,%g5
916 /* 0x0110 166 */ ld [%o3
],%g2
917 /* 0x0114 164 */ sub %g1
,%g2
,%g1
918 /* 0x0118 */ add %g1
,%g5
,%g1
919 /* 0x011c 167 */ and %g1
,%g3
,%g2
920 /* 0x0120 */ retl
! Result
=
921 /* 0x0124 */ st %g2
,[%o4-
4]
923 /* 0x0128 166 */ ld [%o4
],%g1
925 /* 0x012c 166 */ ld [%o3
],%g2
926 /* 0x0130 */ add %g5
,%g1
,%g1
927 /* 0x0134 168 */ add %o5
,1,%o5
928 /* 0x0138 */ add %o3
,4,%o3
929 /* 0x013c */ cmp %o5
,%g4
930 /* 0x0140 166 */ sub %g1
,%g2
,%g1
931 /* 0x0144 167 */ and %g1
,%g3
,%g2
932 /* 0x0148 */ st %g2
,[%o4
]
933 /* 0x014c 168 */ add %o4
,4,%o4
934 /* 0x0150 */ srax
%g1
,32,%g5
935 /* 0x0154 */ ble,a,pt
%icc
,.L900000509
936 /* 0x0158 */ ld [%o4
],%g1
938 /* 0x015c */ retl
! Result
=
940 /* 0x0164 0 */ .type adjust_montf_result,2
941 /* 0x0164 */ .size adjust_montf_result,(.-adjust_montf_result)
943 .section ".text",#alloc,#execinstr
944 /* 000000 0 */ .align 4
945 /* 000000 */ .skip 16
947 ! SUBROUTINE mont_mulf_noconv
949 ! OFFSET SOURCE LINE LABEL INSTRUCTION
951 .global mont_mulf_noconv
953 /* 000000 */ save
%sp
,-144,%sp
955 /* 0x0004 */ call
.+8
956 /* 0x0008 */ sethi
/*X*/%hi
(_GLOBAL_OFFSET_TABLE_-
(.L900000644-.)),%g4
961 ! 175 !void cleanup
(double
*dt
, int from
, int tlen
);
963 ! 178 !** the lengths of the input arrays should be at least the following:
964 ! 179 !** result[nlen+1], dm1[nlen], dm2[2*nlen+1], dt[4*nlen+2], dn[nlen], nint[nlen]
965 ! 180 !** all of them should be different from one another
968 ! 183 !void mont_mulf_noconv
(unsigned int
*result
,
969 ! 184 ! double
*dm1
, double
*dm2
, double
*dt
,
970 ! 185 ! double
*dn
, unsigned int
*nint
,
971 ! 186 ! int nlen
, double dn0
)
973 ! 188 ! int i
, j
, jj;
975 ! 190 ! double digit
, m2j
, nextm2j
, a, b;
976 ! 191 ! double
*dptmp
, *pdm1
, *pdm2
, *pdn
, *pdtj
, pdn_0
, pdm1_0;
977 ! 193 ! pdm1
=&(dm1
[0]);
978 ! 194 ! pdm2
=&(dm2
[0]);
979 ! 195 ! pdn
=&(dn
[0]);
980 ! 196 ! pdm2
[2*nlen
]=Zero;
982 /* 0x000c 196 */ sethi
%hi
(Zero
),%g2
983 /* 0x0010 */ ld [%fp+
92],%o0
984 /* 0x0014 187 */ add %g4
,/*X*/%lo
(_GLOBAL_OFFSET_TABLE_-
(.L900000644-.)),%g4
985 /* 0x0018 196 */ add %g2
,%lo
(Zero
),%g2
986 /* 0x001c 187 */ ldd
[%fp+
96],%f2
987 /* 0x0020 */ add %g4
,%o7
,%o3
988 /* 0x0024 */ st %i0
,[%fp+
68]
989 /* 0x0028 */ or %g0
,%i3
,%o1
990 /* 0x002c 196 */ ld [%o3+
%g2
],%g3
991 /* 0x0030 */ sll
%o0
,4,%g2
992 /* 0x0034 187 */ or %g0
,%i1
,%g4
993 /* 0x0038 */ fmovd
%f2,%f16
994 /* 0x003c */ st %i5
,[%fp+
88]
995 /* 0x0040 */ or %g0
,%o1
,%g5
996 /* 0x0044 */ or %g0
,%i2
,%o2
997 /* 0x0048 196 */ ldd
[%g3
],%f0
998 /* 0x004c */ or %g0
,%o0
,%g1
1000 ! 198 ! if
(nlen
!=16)
1002 /* 0x0050 198 */ cmp %o0
,16
1003 /* 0x0054 */ be,pn
%icc
,.L77000289
1004 /* 0x0058 */ std %f0,[%o2+
%g2
]
1007 ! 200 ! for
(i
=0;i
<4*nlen+
2;i+
+) dt
[i
]=Zero;
1009 /* 0x005c 200 */ sll
%o0
,2,%g2
1010 /* 0x0060 187 */ or %g0
,%i4
,%i0
1011 /* 0x0064 196 */ sll
%o0
,1,%o7
1012 /* 0x0068 200 */ add %g2
,2,%o2
1013 /* 0x006c */ cmp %o2
,0
1014 /* 0x0070 196 */ or %g0
,%i2
,%i1
1015 /* 0x0074 200 */ ble,a,pt
%icc
,.L900000658
1016 /* 0x0078 */ ldd
[%g4
],%f0
1018 ! 202 ! a=dt
[0]=pdm1
[0]*pdm2
[0];
1019 ! 203 ! digit
=mod
(lower32
(a,Zero
)*dn0
,TwoToMinus16
,TwoTo16
);
1020 ! 205 ! pdtj
=&(dt
[0]);
1021 ! 206 ! for
(j
=jj
=0;j
<2*nlen;j+
+,jj+
+,pdtj+
+)
1023 ! 208 ! m2j
=pdm2
[j
];
1024 ! 209 ! a=pdtj
[0]+pdn
[0]*digit;
1025 ! 210 ! b=pdtj
[1]+pdm1
[0]*pdm2
[j+
1]+a*TwoToMinus16;
1027 ! 213 !#pragma pipeloop(0)
1028 ! 214 ! for
(i
=1;i
<nlen;i+
+)
1030 ! 216 ! pdtj
[2*i
]+=pdm1
[i
]*m2j+pdn
[i
]*digit;
1032 ! 218 ! if
((jj
==30)) {cleanup
(dt
,j
/2+1,2*nlen+
1); jj
=0;
}
1034 ! 220 ! digit
=mod
(lower32
(b,Zero
)*dn0
,TwoToMinus16
,TwoTo16
);
1039 ! 225 ! a=dt
[0]=pdm1
[0]*pdm2
[0];
1040 ! 227 ! dt
[65]= dt
[64]= dt
[63]= dt
[62]= dt
[61]= dt
[60]=
1041 ! 228 ! dt
[59]= dt
[58]= dt
[57]= dt
[56]= dt
[55]= dt
[54]=
1042 ! 229 ! dt
[53]= dt
[52]= dt
[51]= dt
[50]= dt
[49]= dt
[48]=
1043 ! 230 ! dt
[47]= dt
[46]= dt
[45]= dt
[44]= dt
[43]= dt
[42]=
1044 ! 231 ! dt
[41]= dt
[40]= dt
[39]= dt
[38]= dt
[37]= dt
[36]=
1045 ! 232 ! dt
[35]= dt
[34]= dt
[33]= dt
[32]= dt
[31]= dt
[30]=
1046 ! 233 ! dt
[29]= dt
[28]= dt
[27]= dt
[26]= dt
[25]= dt
[24]=
1047 ! 234 ! dt
[23]= dt
[22]= dt
[21]= dt
[20]= dt
[19]= dt
[18]=
1048 ! 235 ! dt
[17]= dt
[16]= dt
[15]= dt
[14]= dt
[13]= dt
[12]=
1049 ! 236 ! dt
[11]= dt
[10]= dt
[ 9]= dt
[ 8]= dt
[ 7]= dt
[ 6]=
1050 ! 237 ! dt
[ 5]= dt
[ 4]= dt
[ 3]= dt
[ 2]= dt
[ 1]=Zero;
1051 ! 239 ! pdn_0
=pdn
[0];
1052 ! 240 ! pdm1_0
=pdm1
[0];
1053 ! 242 ! digit
=mod
(lower32
(a,Zero
)*dn0
,TwoToMinus16
,TwoTo16
);
1054 ! 243 ! pdtj
=&(dt
[0]);
1055 ! 245 ! for
(j
=0;j
<32;j+
+,pdtj+
+)
1057 ! 248 ! m2j
=pdm2
[j
];
1058 ! 249 ! a=pdtj
[0]+pdn_0
*digit;
1059 ! 250 ! b=pdtj
[1]+pdm1_0
*pdm2
[j+
1]+a*TwoToMinus16;
1061 ! 253 ! /**** this loop will be fully unrolled:
1062 ! 254 ! for(i=1;i<16;i++)
1064 ! 256 ! pdtj[2*i]+=pdm1[i]*m2j+pdn[i]*digit;
1066 ! 258 ! *************************************/
1067 ! 259 ! pdtj
[2]+=pdm1
[1]*m2j+pdn
[1]*digit;
1068 ! 260 ! pdtj
[4]+=pdm1
[2]*m2j+pdn
[2]*digit;
1069 ! 261 ! pdtj
[6]+=pdm1
[3]*m2j+pdn
[3]*digit;
1070 ! 262 ! pdtj
[8]+=pdm1
[4]*m2j+pdn
[4]*digit;
1071 ! 263 ! pdtj
[10]+=pdm1
[5]*m2j+pdn
[5]*digit;
1072 ! 264 ! pdtj
[12]+=pdm1
[6]*m2j+pdn
[6]*digit;
1073 ! 265 ! pdtj
[14]+=pdm1
[7]*m2j+pdn
[7]*digit;
1074 ! 266 ! pdtj
[16]+=pdm1
[8]*m2j+pdn
[8]*digit;
1075 ! 267 ! pdtj
[18]+=pdm1
[9]*m2j+pdn
[9]*digit;
1076 ! 268 ! pdtj
[20]+=pdm1
[10]*m2j+pdn
[10]*digit;
1077 ! 269 ! pdtj
[22]+=pdm1
[11]*m2j+pdn
[11]*digit;
1078 ! 270 ! pdtj
[24]+=pdm1
[12]*m2j+pdn
[12]*digit;
1079 ! 271 ! pdtj
[26]+=pdm1
[13]*m2j+pdn
[13]*digit;
1080 ! 272 ! pdtj
[28]+=pdm1
[14]*m2j+pdn
[14]*digit;
1081 ! 273 ! pdtj
[30]+=pdm1
[15]*m2j+pdn
[15]*digit;
1082 ! 274 ! /* no need for cleenup, cannot overflow */
1083 ! 275 ! digit
=mod
(lower32
(b,Zero
)*dn0
,TwoToMinus16
,TwoTo16
);
1086 ! 279 ! conv_d16_to_i32
(result
,dt+
2*nlen
,(long long
*)dt
,nlen+
1);
1087 ! 281 ! adjust_montf_result
(result
,nint
,nlen
);
1089 /* 0x007c 281 */ add %g2
,2,%o0
1090 /* 0x0080 200 */ add %g2
,1,%o2
1091 /* 0x0084 281 */ cmp %o0
,3
1092 /* 0x0088 */ bl,pn
%icc
,.L77000279
1093 /* 0x008c */ or %g0
,1,%o0
1094 /* 0x0090 */ add %o1
,8,%o1
1095 /* 0x0094 */ or %g0
,1,%o3
1096 /* 0x0098 */ std %f0,[%g5
]
1098 /* 0x009c */ std %f0,[%o1
]
1099 /* 0x00a0 */ add %o3
,2,%o3
1100 /* 0x00a4 */ add %o1
,16,%o1
1101 /* 0x00a8 */ cmp %o3
,%g2
1102 /* 0x00ac */ ble,pt
%icc
,.L900000628
1103 /* 0x00b0 */ std %f0,[%o1-
8]
1105 /* 0x00b4 */ cmp %o3
,%o2
1106 /* 0x00b8 */ bg
,pn
%icc
,.L77000284
1107 /* 0x00bc */ add %o3
,1,%o0
1109 /* 0x00c0 */ std %f0,[%o1
]
1111 /* 0x00c4 */ ldd
[%g3
],%f0
1112 /* 0x00c8 */ cmp %o0
,%o2
1113 /* 0x00cc */ add %o1
,8,%o1
1114 /* 0x00d0 */ add %o0
,1,%o0
1115 /* 0x00d4 */ ble,a,pt
%icc
,.L900000657
1116 /* 0x00d8 */ std %f0,[%o1
]
1118 /* 0x00dc 202 */ ldd
[%g4
],%f0
1120 /* 0x00e0 202 */ ldd
[%i2
],%f2
1121 /* 0x00e4 */ add %o7
,1,%o2
1122 /* 0x00e8 206 */ cmp %o7
,0
1123 /* 0x00ec */ sll
%o2
,1,%o0
1124 /* 0x00f0 */ sub %o7
,1,%o1
1125 /* 0x00f4 202 */ fmuld
%f0,%f2,%f0
1126 /* 0x00f8 */ std %f0,[%g5
]
1127 /* 0x00fc */ sub %g1
,1,%o7
1128 /* 0x0100 */ ldd
[%g3
],%f6
1129 /* 0x0104 0 */ or %g0
,%o7
,%i2
1130 /* 0x0108 */ or %g0
,0,%l0
1131 /* 0x010c */ ldd
[%g3-
8],%f2
1132 /* 0x0110 */ or %g0
,0,%i5
1133 /* 0x0114 */ or %g0
,%o1
,%o5
1134 /* 0x0118 */ fdtox
%f0,%f0
1135 /* 0x011c */ ldd
[%g3-
16],%f4
1136 /* 0x0120 */ or %g0
,%o0
,%o3
1137 /* 0x0124 210 */ add %i1
,8,%o4
1138 /* 0x0128 */ or %g0
,0,%i4
1139 /* 0x012c */ fmovs
%f6,%f0
1140 /* 0x0130 */ fxtod
%f0,%f0
1141 /* 0x0134 203 */ fmuld
%f0,%f16,%f0
1142 /* 0x0138 */ fmuld
%f0,%f2,%f2
1143 /* 0x013c */ fdtox
%f2,%f2
1144 /* 0x0140 */ fxtod
%f2,%f2
1145 /* 0x0144 */ fmuld
%f2,%f4,%f2
1146 /* 0x0148 */ fsubd
%f0,%f2,%f22
1147 /* 0x014c 206 */ ble,pt
%icc
,.L900000651
1148 /* 0x0150 */ sll
%g1
,4,%g2
1149 /* 0x0154 210 */ ldd
[%i0
],%f0
1151 /* 0x0158 210 */ fmuld
%f0,%f22,%f8
1152 /* 0x015c */ ldd
[%g4
],%f0
1153 /* 0x0160 214 */ cmp %g1
,1
1154 /* 0x0164 210 */ ldd
[%o4+
%i4
],%f6
1155 /* 0x0168 */ add %g4
,8,%o0
1156 /* 0x016c 214 */ or %g0
,1,%o1
1157 /* 0x0170 210 */ ldd
[%i3
],%f2
1158 /* 0x0174 */ add %i3
,16,%l1
1159 /* 0x0178 */ fmuld
%f0,%f6,%f6
1160 /* 0x017c */ ldd
[%g3-
8],%f4
1161 /* 0x0180 */ faddd
%f2,%f8,%f2
1162 /* 0x0184 */ ldd
[%i3+
8],%f0
1163 /* 0x0188 208 */ ldd
[%i1+
%i4
],%f20
1164 /* 0x018c 210 */ faddd
%f0,%f6,%f0
1165 /* 0x0190 */ fmuld
%f2,%f4,%f2
1166 /* 0x0194 */ faddd
%f0,%f2,%f18
1167 /* 0x0198 211 */ std %f18,[%i3+
8]
1168 /* 0x019c 214 */ ble,pt
%icc
,.L900000656
1169 /* 0x01a0 */ srl
%i5
,31,%g2
1170 /* 0x01a4 */ cmp %i2
,7
1171 /* 0x01a8 210 */ add %i0
,8,%g2
1172 /* 0x01ac 214 */ bl,pn
%icc
,.L77000281
1173 /* 0x01b0 */ add %g2
,24,%o2
1174 /* 0x01b4 216 */ ldd
[%g4+
8],%f2
1175 /* 0x01b8 */ add %g4
,40,%o0
1176 /* 0x01bc */ ldd
[%g4+
16],%f6
1177 /* 0x01c0 0 */ or %g0
,%o2
,%g2
1178 /* 0x01c4 216 */ add %i3
,48,%l1
1179 /* 0x01c8 */ ldd
[%g2-
24],%f0
1180 /* 0x01cc */ fmuld
%f2,%f20,%f2
1181 /* 0x01d0 214 */ sub %i2
,2,%o2
1182 /* 0x01d4 216 */ ldd
[%g2-
16],%f8
1183 /* 0x01d8 */ fmuld
%f6,%f20,%f10
1184 /* 0x01dc */ or %g0
,5,%o1
1185 /* 0x01e0 */ ldd
[%g4+
24],%f14
1186 /* 0x01e4 */ fmuld
%f0,%f22,%f4
1187 /* 0x01e8 */ ldd
[%i3+
16],%f0
1188 /* 0x01ec */ ldd
[%g2-
8],%f6
1189 /* 0x01f0 */ ldd
[%g4+
32],%f12
1190 /* 0x01f4 */ faddd
%f2,%f4,%f4
1191 /* 0x01f8 */ ldd
[%i3+
32],%f2
1193 /* 0x01fc 216 */ ldd
[%g2
],%f24
1194 /* 0x0200 */ add %o1
,3,%o1
1195 /* 0x0204 */ add %g2
,24,%g2
1196 /* 0x0208 */ fmuld
%f8,%f22,%f8
1197 /* 0x020c */ ldd
[%l1
],%f28
1198 /* 0x0210 */ cmp %o1
,%o2
1199 /* 0x0214 */ add %o0
,24,%o0
1200 /* 0x0218 */ ldd
[%o0-
24],%f26
1201 /* 0x021c */ faddd
%f0,%f4,%f0
1202 /* 0x0220 */ add %l1
,48,%l1
1203 /* 0x0224 */ faddd
%f10,%f8,%f10
1204 /* 0x0228 */ fmuld
%f14,%f20,%f4
1205 /* 0x022c */ std %f0,[%l1-
80]
1206 /* 0x0230 */ ldd
[%g2-
16],%f8
1207 /* 0x0234 */ fmuld
%f6,%f22,%f6
1208 /* 0x0238 */ ldd
[%l1-
32],%f0
1209 /* 0x023c */ ldd
[%o0-
16],%f14
1210 /* 0x0240 */ faddd
%f2,%f10,%f2
1211 /* 0x0244 */ faddd
%f4,%f6,%f10
1212 /* 0x0248 */ fmuld
%f12,%f20,%f4
1213 /* 0x024c */ std %f2,[%l1-
64]
1214 /* 0x0250 */ ldd
[%g2-
8],%f6
1215 /* 0x0254 */ fmuld
%f24,%f22,%f24
1216 /* 0x0258 */ ldd
[%l1-
16],%f2
1217 /* 0x025c */ ldd
[%o0-
8],%f12
1218 /* 0x0260 */ faddd
%f28,%f10,%f10
1219 /* 0x0264 */ std %f10,[%l1-
48]
1220 /* 0x0268 */ fmuld
%f26,%f20,%f10
1221 /* 0x026c */ ble,pt
%icc
,.L900000640
1222 /* 0x0270 */ faddd
%f4,%f24,%f4
1224 /* 0x0274 216 */ fmuld
%f8,%f22,%f28
1225 /* 0x0278 */ ldd
[%g2
],%f24
1226 /* 0x027c */ faddd
%f0,%f4,%f26
1227 /* 0x0280 */ fmuld
%f12,%f20,%f8
1228 /* 0x0284 */ add %l1
,32,%l1
1229 /* 0x0288 */ cmp %o1
,%i2
1230 /* 0x028c */ fmuld
%f14,%f20,%f14
1231 /* 0x0290 */ ldd
[%l1-
32],%f4
1232 /* 0x0294 */ add %g2
,8,%g2
1233 /* 0x0298 */ faddd
%f10,%f28,%f12
1234 /* 0x029c */ fmuld
%f6,%f22,%f6
1235 /* 0x02a0 */ ldd
[%l1-
16],%f0
1236 /* 0x02a4 */ fmuld
%f24,%f22,%f10
1237 /* 0x02a8 */ std %f26,[%l1-
64]
1238 /* 0x02ac */ faddd
%f2,%f12,%f2
1239 /* 0x02b0 */ std %f2,[%l1-
48]
1240 /* 0x02b4 */ faddd
%f14,%f6,%f6
1241 /* 0x02b8 */ faddd
%f8,%f10,%f2
1242 /* 0x02bc */ faddd
%f4,%f6,%f4
1243 /* 0x02c0 */ std %f4,[%l1-
32]
1244 /* 0x02c4 */ faddd
%f0,%f2,%f0
1245 /* 0x02c8 */ bg
,pn
%icc
,.L77000213
1246 /* 0x02cc */ std %f0,[%l1-
16]
1248 /* 0x02d0 216 */ ldd
[%o0
],%f0
1250 /* 0x02d4 216 */ ldd
[%g2
],%f4
1251 /* 0x02d8 */ fmuld
%f0,%f20,%f2
1252 /* 0x02dc */ add %o1
,1,%o1
1253 /* 0x02e0 */ ldd
[%l1
],%f0
1254 /* 0x02e4 */ add %o0
,8,%o0
1255 /* 0x02e8 */ add %g2
,8,%g2
1256 /* 0x02ec */ fmuld
%f4,%f22,%f4
1257 /* 0x02f0 */ cmp %o1
,%i2
1258 /* 0x02f4 */ faddd
%f2,%f4,%f2
1259 /* 0x02f8 */ faddd
%f0,%f2,%f0
1260 /* 0x02fc */ std %f0,[%l1
]
1261 /* 0x0300 */ add %l1
,16,%l1
1262 /* 0x0304 */ ble,a,pt
%icc
,.L900000655
1263 /* 0x0308 */ ldd
[%o0
],%f0
1265 /* 0x030c */ srl
%i5
,31,%g2
1267 /* 0x0310 218 */ cmp %l0
,30
1268 /* 0x0314 */ bne,a,pt
%icc
,.L900000654
1269 /* 0x0318 */ fdtox
%f18,%f0
1270 /* 0x031c */ add %i5
,%g2
,%g2
1271 /* 0x0320 */ sub %o3
,1,%o2
1272 /* 0x0324 */ sra %g2
,1,%o0
1273 /* 0x0328 216 */ ldd
[%g3
],%f0
1274 /* 0x032c */ add %o0
,1,%g2
1275 /* 0x0330 */ sll
%g2
,1,%o0
1276 /* 0x0334 */ fmovd
%f0,%f2
1277 /* 0x0338 */ sll
%g2
,4,%o1
1278 /* 0x033c */ cmp %o0
,%o3
1279 /* 0x0340 */ bge,pt
%icc
,.L77000215
1280 /* 0x0344 */ or %g0
,0,%l0
1281 /* 0x0348 218 */ add %g5
,%o1
,%o1
1282 /* 0x034c 216 */ ldd
[%o1
],%f6
1284 /* 0x0350 */ fdtox
%f6,%f10
1285 /* 0x0354 */ ldd
[%o1+
8],%f4
1286 /* 0x0358 */ add %o0
,2,%o0
1287 /* 0x035c */ ldd
[%g3
],%f12
1288 /* 0x0360 */ fdtox
%f6,%f6
1289 /* 0x0364 */ cmp %o0
,%o2
1290 /* 0x0368 */ fdtox
%f4,%f8
1291 /* 0x036c */ fdtox
%f4,%f4
1292 /* 0x0370 */ fmovs
%f12,%f10
1293 /* 0x0374 */ fmovs
%f12,%f8
1294 /* 0x0378 */ fxtod
%f10,%f10
1295 /* 0x037c */ fxtod
%f8,%f8
1296 /* 0x0380 */ faddd
%f10,%f2,%f2
1297 /* 0x0384 */ std %f2,[%o1
]
1298 /* 0x0388 */ faddd
%f8,%f0,%f0
1299 /* 0x038c */ std %f0,[%o1+
8]
1300 /* 0x0390 */ add %o1
,16,%o1
1301 /* 0x0394 */ fitod
%f6,%f2
1302 /* 0x0398 */ fitod
%f4,%f0
1303 /* 0x039c */ ble,a,pt
%icc
,.L900000653
1304 /* 0x03a0 */ ldd
[%o1
],%f6
1306 /* 0x03a4 */ or %g0
,0,%l0
1308 /* 0x03a8 */ fdtox
%f18,%f0
1310 /* 0x03ac */ ldd
[%g3
],%f6
1311 /* 0x03b0 220 */ add %i5
,1,%i5
1312 /* 0x03b4 */ add %i4
,8,%i4
1313 /* 0x03b8 */ ldd
[%g3-
8],%f2
1314 /* 0x03bc */ add %l0
,1,%l0
1315 /* 0x03c0 */ add %i3
,8,%i3
1316 /* 0x03c4 */ fmovs
%f6,%f0
1317 /* 0x03c8 */ ldd
[%g3-
16],%f4
1318 /* 0x03cc */ cmp %i5
,%o5
1319 /* 0x03d0 */ fxtod
%f0,%f0
1320 /* 0x03d4 */ fmuld
%f0,%f16,%f0
1321 /* 0x03d8 */ fmuld
%f0,%f2,%f2
1322 /* 0x03dc */ fdtox
%f2,%f2
1323 /* 0x03e0 */ fxtod
%f2,%f2
1324 /* 0x03e4 */ fmuld
%f2,%f4,%f2
1325 /* 0x03e8 */ fsubd
%f0,%f2,%f22
1326 /* 0x03ec */ ble,a,pt
%icc
,.L900000652
1327 /* 0x03f0 */ ldd
[%i0
],%f0
1329 /* 0x03f4 220 */ ba .L900000651
1330 /* 0x03f8 */ sll
%g1
,4,%g2
1332 /* 0x03fc 225 */ ldd
[%o2
],%f6
1333 /* 0x0400 243 */ or %g0
,%o1
,%o4
1334 /* 0x0404 245 */ or %g0
,0,%o3
1335 /* 0x0408 225 */ ldd
[%g4
],%f4
1336 /* 0x040c 237 */ std %f0,[%o1+
8]
1337 /* 0x0410 */ std %f0,[%o1+
16]
1338 /* 0x0414 225 */ fmuld
%f4,%f6,%f4
1339 /* 0x0418 */ std %f4,[%o1
]
1340 /* 0x041c 237 */ std %f0,[%o1+
24]
1341 /* 0x0420 */ std %f0,[%o1+
32]
1342 /* 0x0424 */ fdtox
%f4,%f4
1343 /* 0x0428 */ std %f0,[%o1+
40]
1344 /* 0x042c */ std %f0,[%o1+
48]
1345 /* 0x0430 */ std %f0,[%o1+
56]
1346 /* 0x0434 */ std %f0,[%o1+
64]
1347 /* 0x0438 */ std %f0,[%o1+
72]
1348 /* 0x043c */ std %f0,[%o1+
80]
1349 /* 0x0440 */ std %f0,[%o1+
88]
1350 /* 0x0444 */ std %f0,[%o1+
96]
1351 /* 0x0448 */ std %f0,[%o1+
104]
1352 /* 0x044c */ std %f0,[%o1+
112]
1353 /* 0x0450 */ std %f0,[%o1+
120]
1354 /* 0x0454 */ std %f0,[%o1+
128]
1355 /* 0x0458 */ std %f0,[%o1+
136]
1356 /* 0x045c */ std %f0,[%o1+
144]
1357 /* 0x0460 */ std %f0,[%o1+
152]
1358 /* 0x0464 */ std %f0,[%o1+
160]
1359 /* 0x0468 */ std %f0,[%o1+
168]
1360 /* 0x046c */ fmovs
%f0,%f4
1361 /* 0x0470 */ std %f0,[%o1+
176]
1362 /* 0x0474 245 */ or %g0
,0,%o0
1363 /* 0x0478 237 */ std %f0,[%o1+
184]
1364 /* 0x047c */ fxtod
%f4,%f4
1365 /* 0x0480 */ std %f0,[%o1+
192]
1366 /* 0x0484 */ std %f0,[%o1+
200]
1367 /* 0x0488 */ std %f0,[%o1+
208]
1368 /* 0x048c 242 */ fmuld
%f4,%f2,%f2
1369 /* 0x0490 237 */ std %f0,[%o1+
216]
1370 /* 0x0494 */ std %f0,[%o1+
224]
1371 /* 0x0498 */ std %f0,[%o1+
232]
1372 /* 0x049c */ std %f0,[%o1+
240]
1373 /* 0x04a0 */ std %f0,[%o1+
248]
1374 /* 0x04a4 */ std %f0,[%o1+
256]
1375 /* 0x04a8 */ std %f0,[%o1+
264]
1376 /* 0x04ac */ std %f0,[%o1+
272]
1377 /* 0x04b0 */ std %f0,[%o1+
280]
1378 /* 0x04b4 */ std %f0,[%o1+
288]
1379 /* 0x04b8 */ std %f0,[%o1+
296]
1380 /* 0x04bc */ std %f0,[%o1+
304]
1381 /* 0x04c0 */ std %f0,[%o1+
312]
1382 /* 0x04c4 */ std %f0,[%o1+
320]
1383 /* 0x04c8 */ std %f0,[%o1+
328]
1384 /* 0x04cc */ std %f0,[%o1+
336]
1385 /* 0x04d0 */ std %f0,[%o1+
344]
1386 /* 0x04d4 */ std %f0,[%o1+
352]
1387 /* 0x04d8 */ std %f0,[%o1+
360]
1388 /* 0x04dc */ std %f0,[%o1+
368]
1389 /* 0x04e0 */ std %f0,[%o1+
376]
1390 /* 0x04e4 */ std %f0,[%o1+
384]
1391 /* 0x04e8 */ std %f0,[%o1+
392]
1392 /* 0x04ec */ std %f0,[%o1+
400]
1393 /* 0x04f0 */ std %f0,[%o1+
408]
1394 /* 0x04f4 */ std %f0,[%o1+
416]
1395 /* 0x04f8 */ std %f0,[%o1+
424]
1396 /* 0x04fc */ std %f0,[%o1+
432]
1397 /* 0x0500 */ std %f0,[%o1+
440]
1398 /* 0x0504 */ std %f0,[%o1+
448]
1399 /* 0x0508 */ std %f0,[%o1+
456]
1400 /* 0x050c */ std %f0,[%o1+
464]
1401 /* 0x0510 */ std %f0,[%o1+
472]
1402 /* 0x0514 */ std %f0,[%o1+
480]
1403 /* 0x0518 */ std %f0,[%o1+
488]
1404 /* 0x051c */ std %f0,[%o1+
496]
1405 /* 0x0520 */ std %f0,[%o1+
504]
1406 /* 0x0524 */ std %f0,[%o1+
512]
1407 /* 0x0528 */ std %f0,[%o1+
520]
1408 /* 0x052c */ ldd
[%g3-
8],%f0
1409 /* 0x0530 */ ldd
[%g3-
16],%f8
1410 /* 0x0534 */ fmuld
%f2,%f0,%f6
1411 /* 0x0538 239 */ ldd
[%i4
],%f4
1412 /* 0x053c 240 */ ldd
[%g4
],%f0
1413 /* 0x0540 */ fdtox
%f6,%f6
1414 /* 0x0544 */ fxtod
%f6,%f6
1415 /* 0x0548 */ fmuld
%f6,%f8,%f6
1416 /* 0x054c */ fsubd
%f2,%f6,%f2
1417 /* 0x0550 250 */ fmuld
%f4,%f2,%f12
1449 fmuld
%f26,%f24,%f20
1455 fmuld
%f32
,%f24,%f32
1463 fmuld
%f42
,%f24,%f42
1466 faddd
%f20,%f22,%f20
1473 faddd
%f32
,%f36
,%f32
1477 fmuld
%f30,%f24,%f48
1480 faddd
%f20,%f22,%f20
1484 faddd
%f42
,%f44
,%f42
1485 fmuld
%f52
,%f24,%f52
1492 faddd
%f32
,%f36
,%f32
1495 faddd
%f48
,%f50
,%f48
1498 faddd
%f52
,%f56
,%f52
1502 fmuld
%f20,%f24,%f20
1505 faddd
%f42
,%f44
,%f42
1509 faddd
%f48
,%f50
,%f48
1510 fmuld
%f34
,%f24,%f32
1513 faddd
%f52
,%f56
,%f52
1520 faddd
%f20,%f22,%f20
1525 faddd
%f32
,%f36
,%f32
1526 fmuld
%f42
,%f24,%f42
1535 fmuld
%f40
,%f24,%f48
1538 faddd
%f20,%f22,%f20
1543 fmuld
%f52
,%f24,%f52
1546 faddd
%f42
,%f44
,%f42
1550 faddd
%f32
,%f36
,%f32
1553 faddd
%f48
,%f50
,%f48
1554 fmuld
%f46
,%f24,%f20
1560 faddd
%f52
,%f56
,%f52
1564 faddd
%f42
,%f44
,%f42
1567 faddd
%f48
,%f50
,%f48
1568 fmuld
%f54
,%f24,%f32
1574 faddd
%f52
,%f56
,%f56
! yes
, tmp52
!
1578 faddd
%f20,%f22,%f20
1581 fmuld
%f58
,%f24,%f52
1585 fmuld
%f42
,%f24,%f42
1587 std %f56
,[%o4+
64] ! yes
, tmp52
!
1588 faddd
%f32
,%f36
,%f32
1592 fmuld
%f48
,%f24,%f48
1602 faddd
%f42
,%f44
,%f42
1604 ldd
[%o4+
160-8],%f44
1605 faddd
%f20,%f22,%f20
1608 faddd
%f48
,%f50
,%f48
1610 ldd
[%o4+
192-8],%f50
1611 faddd
%f52
,%f56
,%f52
1614 ldd
[%o4+
224-8],%f56
1615 faddd
%f32
,%f36
,%f32
1617 std %f32
,[%o4+
128-8]
1618 faddd
%f42
,%f44
,%f42
1621 std %f42
,[%o4+
160-8]
1622 faddd
%f48
,%f50
,%f48
1625 std %f48
,[%o4+
192-8]
1628 faddd
%f52
,%f56
,%f52
1629 ble,pt
%icc
,.L99999999
1630 std %f52
,[%o4+
224-8]
1636 /* 0x07a8 279 */ sll
%g1
,4,%g2
1638 /* 0x07ac 279 */ ldd
[%g5+
%g2
],%f0
1639 /* 0x07b0 */ add %g5
,%g2
,%i1
1640 /* 0x07b4 */ or %g0
,0,%o4
1641 /* 0x07b8 206 */ ld [%fp+
68],%o0
1642 /* 0x07bc 279 */ or %g0
,0,%i0
1643 /* 0x07c0 */ cmp %g1
,0
1644 /* 0x07c4 */ fdtox
%f0,%f0
1645 /* 0x07c8 */ std %f0,[%sp+
120]
1646 /* 0x07cc 275 */ sethi
%hi
(0xfc00),%o1
1647 /* 0x07d0 206 */ or %g0
,%o0
,%o3
1648 /* 0x07d4 275 */ sub %g1
,1,%g4
1649 /* 0x07d8 279 */ ldd
[%i1+
8],%f0
1650 /* 0x07dc */ or %g0
,%o0
,%g5
1651 /* 0x07e0 */ add %o1
,1023,%o1
1652 /* 0x07e4 */ fdtox
%f0,%f0
1653 /* 0x07e8 */ std %f0,[%sp+
112]
1654 /* 0x07ec */ ldx [%sp+
112],%o5
1655 /* 0x07f0 */ ldx [%sp+
120],%o7
1656 /* 0x07f4 */ ble,pt
%icc
,.L900000649
1657 /* 0x07f8 */ sethi
%hi
(0xfc00),%g2
1658 /* 0x07fc 275 */ or %g0
,-1,%g2
1659 /* 0x0800 279 */ cmp %g1
,3
1660 /* 0x0804 275 */ srl
%g2
,0,%o2
1661 /* 0x0808 279 */ bl,pn
%icc
,.L77000286
1662 /* 0x080c */ or %g0
,%i1
,%g2
1663 /* 0x0810 */ ldd
[%i1+
16],%f0
1664 /* 0x0814 */ and %o5
,%o1
,%o0
1665 /* 0x0818 */ add %i1
,16,%g2
1666 /* 0x081c */ sllx
%o0
,16,%g3
1667 /* 0x0820 */ and %o7
,%o2
,%o0
1668 /* 0x0824 */ fdtox
%f0,%f0
1669 /* 0x0828 */ std %f0,[%sp+
104]
1670 /* 0x082c */ add %o0
,%g3
,%o4
1671 /* 0x0830 */ ldd
[%i1+
24],%f2
1672 /* 0x0834 */ srax
%o5
,16,%o0
1673 /* 0x0838 */ add %o3
,4,%g5
1674 /* 0x083c */ stx %o0
,[%sp+
128]
1675 /* 0x0840 */ and %o4
,%o2
,%o0
1676 /* 0x0844 */ or %g0
,1,%i0
1677 /* 0x0848 */ stx %o0
,[%sp+
112]
1678 /* 0x084c */ srax
%o4
,32,%o0
1679 /* 0x0850 */ fdtox
%f2,%f0
1680 /* 0x0854 */ stx %o0
,[%sp+
136]
1681 /* 0x0858 */ srax
%o7
,32,%o4
1682 /* 0x085c */ std %f0,[%sp+
96]
1683 /* 0x0860 */ ldx [%sp+
136],%o7
1684 /* 0x0864 */ ldx [%sp+
128],%o0
1685 /* 0x0868 */ ldx [%sp+
104],%g3
1686 /* 0x086c */ add %o0
,%o7
,%o0
1687 /* 0x0870 */ ldx [%sp+
112],%o7
1688 /* 0x0874 */ add %o4
,%o0
,%o4
1689 /* 0x0878 */ ldx [%sp+
96],%o5
1690 /* 0x087c */ st %o7
,[%o3
]
1691 /* 0x0880 */ or %g0
,%g3
,%o7
1693 /* 0x0884 */ ldd
[%g2+
16],%f0
1694 /* 0x0888 */ add %i0
,1,%i0
1695 /* 0x088c */ add %g5
,4,%g5
1696 /* 0x0890 */ cmp %i0
,%g4
1697 /* 0x0894 */ add %g2
,16,%g2
1698 /* 0x0898 */ fdtox
%f0,%f0
1699 /* 0x089c */ std %f0,[%sp+
104]
1700 /* 0x08a0 */ ldd
[%g2+
8],%f0
1701 /* 0x08a4 */ fdtox
%f0,%f0
1702 /* 0x08a8 */ std %f0,[%sp+
96]
1703 /* 0x08ac */ and %o5
,%o1
,%g3
1704 /* 0x08b0 */ sllx
%g3
,16,%g3
1705 /* 0x08b4 */ stx %g3
,[%sp+
120]
1706 /* 0x08b8 */ and %o7
,%o2
,%g3
1707 /* 0x08bc */ stx %o7
,[%sp+
128]
1708 /* 0x08c0 */ ldx [%sp+
120],%o7
1709 /* 0x08c4 */ add %g3
,%o7
,%g3
1710 /* 0x08c8 */ ldx [%sp+
128],%o7
1711 /* 0x08cc */ srax
%o5
,16,%o5
1712 /* 0x08d0 */ add %g3
,%o4
,%g3
1713 /* 0x08d4 */ srax
%g3
,32,%o4
1714 /* 0x08d8 */ stx %o4
,[%sp+
112]
1715 /* 0x08dc */ srax
%o7
,32,%o4
1716 /* 0x08e0 */ ldx [%sp+
112],%o7
1717 /* 0x08e4 */ add %o5
,%o7
,%o7
1718 /* 0x08e8 */ ldx [%sp+
96],%o5
1719 /* 0x08ec */ add %o4
,%o7
,%o4
1720 /* 0x08f0 */ and %g3
,%o2
,%g3
1721 /* 0x08f4 */ ldx [%sp+
104],%o7
1722 /* 0x08f8 */ ble,pt
%icc
,.L900000632
1723 /* 0x08fc */ st %g3
,[%g5-
4]
1725 /* 0x0900 */ ba .L900000649
1726 /* 0x0904 */ sethi
%hi
(0xfc00),%g2
1728 /* 0x0908 */ ldd
[%g2+
16],%f0
1730 /* 0x090c */ and %o7
,%o2
,%o0
1731 /* 0x0910 */ and %o5
,%o1
,%g3
1732 /* 0x0914 */ fdtox
%f0,%f0
1733 /* 0x0918 */ add %o4
,%o0
,%o0
1734 /* 0x091c */ std %f0,[%sp+
104]
1735 /* 0x0920 */ add %i0
,1,%i0
1736 /* 0x0924 */ sllx
%g3
,16,%o4
1737 /* 0x0928 */ ldd
[%g2+
24],%f2
1738 /* 0x092c */ add %g2
,16,%g2
1739 /* 0x0930 */ add %o0
,%o4
,%o4
1740 /* 0x0934 */ cmp %i0
,%g4
1741 /* 0x0938 */ srax
%o5
,16,%o0
1742 /* 0x093c */ stx %o0
,[%sp+
112]
1743 /* 0x0940 */ and %o4
,%o2
,%g3
1744 /* 0x0944 */ srax
%o4
,32,%o5
1745 /* 0x0948 */ fdtox
%f2,%f0
1746 /* 0x094c */ std %f0,[%sp+
96]
1747 /* 0x0950 */ srax
%o7
,32,%o4
1748 /* 0x0954 */ ldx [%sp+
112],%o7
1749 /* 0x0958 */ add %o7
,%o5
,%o7
1750 /* 0x095c */ ldx [%sp+
104],%o5
1751 /* 0x0960 */ add %o4
,%o7
,%o4
1752 /* 0x0964 */ ldx [%sp+
96],%o0
1753 /* 0x0968 */ st %g3
,[%g5
]
1754 /* 0x096c */ or %g0
,%o5
,%o7
1755 /* 0x0970 */ add %g5
,4,%g5
1756 /* 0x0974 */ or %g0
,%o0
,%o5
1757 /* 0x0978 */ ble,a,pt
%icc
,.L900000648
1758 /* 0x097c */ ldd
[%g2+
16],%f0
1760 /* 0x0980 */ sethi
%hi
(0xfc00),%g2
1762 /* 0x0984 */ or %g0
,-1,%o0
1763 /* 0x0988 */ add %g2
,1023,%g2
1764 /* 0x098c */ ld [%fp+
88],%o1
1765 /* 0x0990 */ srl
%o0
,0,%g3
1766 /* 0x0994 */ and %o5
,%g2
,%g2
1767 /* 0x0998 */ and %o7
,%g3
,%g4
1768 /* 0x099c */ sllx
%g2
,16,%g2
1769 /* 0x09a0 */ add %o4
,%g4
,%g4
1770 /* 0x09a4 */ add %g4
,%g2
,%g2
1771 /* 0x09a8 */ sll
%i0
,2,%g4
1772 /* 0x09ac */ and %g2
,%g3
,%g2
1773 /* 0x09b0 */ st %g2
,[%o3+
%g4
]
1774 /* 0x09b4 281 */ sll
%g1
,2,%g2
1775 /* 0x09b8 */ ld [%o3+
%g2
],%g2
1776 /* 0x09bc */ cmp %g2
,0
1777 /* 0x09c0 */ bleu
,pn
%icc
,.L77000241
1778 /* 0x09c4 */ or %g0
,-1,%o5
1779 /* 0x09c8 */ ba .L900000647
1780 /* 0x09cc */ cmp %o5
,0
1782 /* 0x09d0 */ subcc
%g1
,1,%o5
1783 /* 0x09d4 */ bneg
,pt
%icc
,.L900000647
1784 /* 0x09d8 */ cmp %o5
,0
1785 /* 0x09dc */ sll
%o5
,2,%g2
1786 /* 0x09e0 */ add %o1
,%g2
,%o0
1787 /* 0x09e4 */ add %o3
,%g2
,%o4
1788 /* 0x09e8 */ ld [%o0
],%g2
1790 /* 0x09ec */ ld [%o4
],%g3
1791 /* 0x09f0 */ sub %o0
,4,%o0
1792 /* 0x09f4 */ sub %o4
,4,%o4
1793 /* 0x09f8 */ cmp %g3
,%g2
1794 /* 0x09fc */ bne,pn
%icc
,.L77000244
1796 /* 0x0a04 */ subcc
%o5
,1,%o5
1797 /* 0x0a08 */ bpos
,a,pt
%icc
,.L900000646
1798 /* 0x0a0c */ ld [%o0
],%g2
1800 /* 0x0a10 */ cmp %o5
,0
1802 /* 0x0a14 */ bl,pn
%icc
,.L77000287
1803 /* 0x0a18 */ sll
%o5
,2,%g2
1804 /* 0x0a1c */ ld [%o1+
%g2
],%g3
1805 /* 0x0a20 */ ld [%o3+
%g2
],%g2
1806 /* 0x0a24 */ cmp %g2
,%g3
1807 /* 0x0a28 */ bleu
,pt
%icc
,.L77000224
1810 /* 0x0a30 */ cmp %g1
,0
1811 /* 0x0a34 */ ble,pt
%icc
,.L77000224
1813 /* 0x0a3c 281 */ sub %g1
,1,%o7
1814 /* 0x0a40 */ or %g0
,-1,%g2
1815 /* 0x0a44 */ srl
%g2
,0,%o4
1816 /* 0x0a48 */ add %o7
,1,%o0
1817 /* 0x0a4c */ or %g0
,%o1
,%o2
1818 /* 0x0a50 279 */ or %g0
,0,%o5
1819 /* 0x0a54 */ or %g0
,0,%g1
1820 /* 0x0a58 */ cmp %o0
,3
1821 /* 0x0a5c */ add %o1
,4,%o0
1822 /* 0x0a60 */ bl,pn
%icc
,.L77000288
1823 /* 0x0a64 */ add %o3
,8,%o1
1824 /* 0x0a68 */ ld [%o0-
4],%g3
1825 /* 0x0a6c 0 */ or %g0
,%o1
,%o3
1826 /* 0x0a70 */ or %g0
,%o0
,%o2
1827 /* 0x0a74 279 */ ld [%o1-
8],%g2
1828 /* 0x0a78 */ or %g0
,2,%g1
1829 /* 0x0a7c */ ld [%o3-
4],%o0
1830 /* 0x0a80 */ sub %g2
,%g3
,%g2
1831 /* 0x0a84 */ or %g0
,%g2
,%o5
1832 /* 0x0a88 */ and %g2
,%o4
,%g2
1833 /* 0x0a8c */ st %g2
,[%o3-
8]
1834 /* 0x0a90 */ srax
%o5
,32,%o5
1836 /* 0x0a94 */ ld [%o2
],%g2
1837 /* 0x0a98 */ add %g1
,1,%g1
1838 /* 0x0a9c */ add %o2
,4,%o2
1839 /* 0x0aa0 */ cmp %g1
,%o7
1840 /* 0x0aa4 */ add %o3
,4,%o3
1841 /* 0x0aa8 */ sub %o0
,%g2
,%o0
1842 /* 0x0aac */ add %o0
,%o5
,%o5
1843 /* 0x0ab0 */ and %o5
,%o4
,%g2
1844 /* 0x0ab4 */ ld [%o3-
4],%o0
1845 /* 0x0ab8 */ st %g2
,[%o3-
8]
1846 /* 0x0abc */ ble,pt
%icc
,.L900000636
1847 /* 0x0ac0 */ srax
%o5
,32,%o5
1849 /* 0x0ac4 */ ld [%o2
],%o1
1850 /* 0x0ac8 */ sub %o0
,%o1
,%o0
1851 /* 0x0acc */ add %o0
,%o5
,%o0
1852 /* 0x0ad0 */ and %o0
,%o4
,%o1
1853 /* 0x0ad4 */ st %o1
,[%o3-
4]
1854 /* 0x0ad8 */ ret
! Result
=
1855 /* 0x0adc */ restore
%g0
,%g0
,%g0
1857 /* 0x0ae0 */ ld [%o3
],%o0
1859 /* 0x0ae4 */ ld [%o2
],%o1
1860 /* 0x0ae8 */ add %o5
,%o0
,%o0
1861 /* 0x0aec */ add %g1
,1,%g1
1862 /* 0x0af0 */ add %o2
,4,%o2
1863 /* 0x0af4 */ cmp %g1
,%o7
1864 /* 0x0af8 */ sub %o0
,%o1
,%o0
1865 /* 0x0afc */ and %o0
,%o4
,%o1
1866 /* 0x0b00 */ st %o1
,[%o3
]
1867 /* 0x0b04 */ add %o3
,4,%o3
1868 /* 0x0b08 */ srax
%o0
,32,%o5
1869 /* 0x0b0c */ ble,a,pt
%icc
,.L900000645
1870 /* 0x0b10 */ ld [%o3
],%o0
1872 /* 0x0b14 */ ret
! Result
=
1873 /* 0x0b18 */ restore
%g0
,%g0
,%g0
1874 /* 0x0b1c 0 */ .type mont_mulf_noconv,2
1875 /* 0x0b1c */ .size mont_mulf_noconv,(.-mont_mulf_noconv)
1877 ! Begin Disassembling Stabs
1878 .xstabs ".stab.index","Xa ; O ; P ; V=3.1 ; R=WorkShop Compilers 5.0 99/02/25 C 5.0 patch 107289-01",60,0,0,0 ! (/tmp/acompAAAhNaOly:1)
1879 .xstabs ".stab.index","/home/ferenc/venus/userland/rsa; /usr/dist/pkgs/devpro,v5.0/5.x-sparc/SC5.0/bin/cc -fast -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -xchip=ultra2 -KPIC -Wc,-Qrm-Qd -Wc,-Qrm-Qf -Wc,-assembly -V -c proba.il -o mont_mulf.o mont_mulf.c -W0,-xp",52,0,0,0 ! (/tmp/acompAAAhNaOly:2)
1880 ! End Disassembling Stabs
1882 ! Begin Disassembling Ident
1883 .ident "cg: WorkShop Compilers 5.0 99/04/15 Compiler Common 5.0 Patch 107357-02" ! (NO SOURCE LINE)
1884 .ident "acomp: WorkShop Compilers 5.0 99/02/25 C 5.0 patch 107289-01" ! (/tmp/acompAAAhNaOly:31)
1885 ! End Disassembling Ident