1*5d9d9091SRichard Lowe/*
2*5d9d9091SRichard Lowe * CDDL HEADER START
3*5d9d9091SRichard Lowe *
4*5d9d9091SRichard Lowe * The contents of this file are subject to the terms of the
5*5d9d9091SRichard Lowe * Common Development and Distribution License (the "License").
6*5d9d9091SRichard Lowe * You may not use this file except in compliance with the License.
7*5d9d9091SRichard Lowe *
8*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing.
10*5d9d9091SRichard Lowe * See the License for the specific language governing permissions
11*5d9d9091SRichard Lowe * and limitations under the License.
12*5d9d9091SRichard Lowe *
13*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each
14*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the
16*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying
17*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner]
18*5d9d9091SRichard Lowe *
19*5d9d9091SRichard Lowe * CDDL HEADER END
20*5d9d9091SRichard Lowe */
21*5d9d9091SRichard Lowe/*
22*5d9d9091SRichard Lowe * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*5d9d9091SRichard Lowe * Use is subject to license terms.
24*5d9d9091SRichard Lowe */
25*5d9d9091SRichard Lowe
26*5d9d9091SRichard Lowe/*
27*5d9d9091SRichard Lowe * This file is mostly a result of compiling the mont_mulf.c file to generate an
28*5d9d9091SRichard Lowe * assembly output and then hand-editing that output to replace the
29*5d9d9091SRichard Lowe * compiler-generated loop for the 512-bit case (nlen == 16) in the
30*5d9d9091SRichard Lowe * mont_mulf_noconv routine with a hand-crafted version. This file also
31*5d9d9091SRichard Lowe * has big_savefp() and big_restorefp() routines added by hand.
32*5d9d9091SRichard Lowe */
33*5d9d9091SRichard Lowe
34*5d9d9091SRichard Lowe#include <sys/asm_linkage.h>
35*5d9d9091SRichard Lowe#include <sys/trap.h>
36*5d9d9091SRichard Lowe#include <sys/stack.h>
37*5d9d9091SRichard Lowe#include <sys/privregs.h>
38*5d9d9091SRichard Lowe#include <sys/regset.h>
39*5d9d9091SRichard Lowe#include <sys/vis.h>
40*5d9d9091SRichard Lowe#include <sys/machthread.h>
41*5d9d9091SRichard Lowe#include <sys/machtrap.h>
42*5d9d9091SRichard Lowe#include <sys/machsig.h>
43*5d9d9091SRichard Lowe
44*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
45*5d9d9091SRichard Lowe	.file	"mont_mulf.s"
46*5d9d9091SRichard Lowe
47*5d9d9091SRichard Lowe	.section	".bss",#alloc,#write
48*5d9d9091SRichard LoweBbss.bss:
49*5d9d9091SRichard Lowe
50*5d9d9091SRichard Lowe	.section	".data",#alloc,#write
51*5d9d9091SRichard LoweDdata.data:
52*5d9d9091SRichard Lowe
53*5d9d9091SRichard Lowe	.section	".rodata",#alloc
54*5d9d9091SRichard Lowe!
55*5d9d9091SRichard Lowe! CONSTANT POOL
56*5d9d9091SRichard Lowe!
57*5d9d9091SRichard LoweDrodata.rodata:
58*5d9d9091SRichard Lowe	.global	TwoTo16
59*5d9d9091SRichard Lowe	.align	8
60*5d9d9091SRichard Lowe!
61*5d9d9091SRichard Lowe! CONSTANT POOL
62*5d9d9091SRichard Lowe!
63*5d9d9091SRichard Lowe	.global TwoTo16
64*5d9d9091SRichard LoweTwoTo16:
65*5d9d9091SRichard Lowe	.word	1089470464
66*5d9d9091SRichard Lowe	.word	0
67*5d9d9091SRichard Lowe	.type	TwoTo16,#object
68*5d9d9091SRichard Lowe	.size	TwoTo16,8
69*5d9d9091SRichard Lowe	.global	TwoToMinus16
70*5d9d9091SRichard Lowe!
71*5d9d9091SRichard Lowe! CONSTANT POOL
72*5d9d9091SRichard Lowe!
73*5d9d9091SRichard Lowe	.global TwoToMinus16
74*5d9d9091SRichard LoweTwoToMinus16:
75*5d9d9091SRichard Lowe	.word	1055916032
76*5d9d9091SRichard Lowe	.word	0
77*5d9d9091SRichard Lowe	.type	TwoToMinus16,#object
78*5d9d9091SRichard Lowe	.size	TwoToMinus16,8
79*5d9d9091SRichard Lowe	.global	Zero
80*5d9d9091SRichard Lowe!
81*5d9d9091SRichard Lowe! CONSTANT POOL
82*5d9d9091SRichard Lowe!
83*5d9d9091SRichard Lowe	.global Zero
84*5d9d9091SRichard LoweZero:
85*5d9d9091SRichard Lowe	.word	0
86*5d9d9091SRichard Lowe	.word	0
87*5d9d9091SRichard Lowe	.type	Zero,#object
88*5d9d9091SRichard Lowe	.size	Zero,8
89*5d9d9091SRichard Lowe	.global	TwoTo32
90*5d9d9091SRichard Lowe!
91*5d9d9091SRichard Lowe! CONSTANT POOL
92*5d9d9091SRichard Lowe!
93*5d9d9091SRichard Lowe	.global TwoTo32
94*5d9d9091SRichard LoweTwoTo32:
95*5d9d9091SRichard Lowe	.word	1106247680
96*5d9d9091SRichard Lowe	.word	0
97*5d9d9091SRichard Lowe	.type	TwoTo32,#object
98*5d9d9091SRichard Lowe	.size	TwoTo32,8
99*5d9d9091SRichard Lowe	.global	TwoToMinus32
100*5d9d9091SRichard Lowe!
101*5d9d9091SRichard Lowe! CONSTANT POOL
102*5d9d9091SRichard Lowe!
103*5d9d9091SRichard Lowe	.global TwoToMinus32
104*5d9d9091SRichard LoweTwoToMinus32:
105*5d9d9091SRichard Lowe	.word	1039138816
106*5d9d9091SRichard Lowe	.word	0
107*5d9d9091SRichard Lowe	.type	TwoToMinus32,#object
108*5d9d9091SRichard Lowe	.size	TwoToMinus32,8
109*5d9d9091SRichard Lowe
110*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
111*5d9d9091SRichard Lowe/* 000000	   0 */		.register	%g3,#scratch
112*5d9d9091SRichard Lowe/* 000000	     */		.register	%g2,#scratch
113*5d9d9091SRichard Lowe/* 000000	   0 */		.align	32
114*5d9d9091SRichard Lowe! FILE mont_mulf.c
115*5d9d9091SRichard Lowe
116*5d9d9091SRichard Lowe!    1		      !/*
117*5d9d9091SRichard Lowe!    2		      ! * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
118*5d9d9091SRichard Lowe!    3		      ! * Use is subject to license terms.
119*5d9d9091SRichard Lowe!    4		      ! */
120*5d9d9091SRichard Lowe!    6		      !#pragma ident	"@(#)mont_mulf.c	1.2	01/09/24 SMI"
121*5d9d9091SRichard Lowe!    9		      !/*
122*5d9d9091SRichard Lowe!   10		      ! * If compiled without -DRF_INLINE_MACROS then needs -lm at link time
123*5d9d9091SRichard Lowe!   11		      ! * If compiled with -DRF_INLINE_MACROS then needs conv.il at compile time
124*5d9d9091SRichard Lowe!   12		      ! * (i.e. cc <compileer_flags> -DRF_INLINE_MACROS conv.il mont_mulf.c )
125*5d9d9091SRichard Lowe!   13		      ! */
126*5d9d9091SRichard Lowe!   15		      !#include <sys/types.h>
127*5d9d9091SRichard Lowe!   16		      !#include <math.h>
128*5d9d9091SRichard Lowe!   18		      !static const double TwoTo16 = 65536.0;
129*5d9d9091SRichard Lowe!   19		      !static const double TwoToMinus16 = 1.0/65536.0;
130*5d9d9091SRichard Lowe!   20		      !static const double Zero = 0.0;
131*5d9d9091SRichard Lowe!   21		      !static const double TwoTo32 = 65536.0 * 65536.0;
132*5d9d9091SRichard Lowe!   22		      !static const double TwoToMinus32 = 1.0 / (65536.0 * 65536.0);
133*5d9d9091SRichard Lowe!   24		      !#ifdef RF_INLINE_MACROS
134*5d9d9091SRichard Lowe!   26		      !double upper32(double);
135*5d9d9091SRichard Lowe!   27		      !double lower32(double, double);
136*5d9d9091SRichard Lowe!   28		      !double mod(double, double, double);
137*5d9d9091SRichard Lowe!   30		      !#else
138*5d9d9091SRichard Lowe!   32		      !static double
139*5d9d9091SRichard Lowe!   33		      !upper32(double x)
140*5d9d9091SRichard Lowe!   34		      !{
141*5d9d9091SRichard Lowe!   35		      !	return (floor(x * TwoToMinus32));
142*5d9d9091SRichard Lowe!   36		      !}
143*5d9d9091SRichard Lowe!   39		      !/* ARGSUSED */
144*5d9d9091SRichard Lowe!   40		      !static double
145*5d9d9091SRichard Lowe!   41		      !lower32(double x, double y)
146*5d9d9091SRichard Lowe!   42		      !{
147*5d9d9091SRichard Lowe!   43		      !	return (x - TwoTo32 * floor(x * TwoToMinus32));
148*5d9d9091SRichard Lowe!   44		      !}
149*5d9d9091SRichard Lowe!   46		      !static double
150*5d9d9091SRichard Lowe!   47		      !mod(double x, double oneoverm, double m)
151*5d9d9091SRichard Lowe!   48		      !{
152*5d9d9091SRichard Lowe!   49		      !	return (x - m * floor(x * oneoverm));
153*5d9d9091SRichard Lowe!   50		      !}
154*5d9d9091SRichard Lowe!   52		      !#endif
155*5d9d9091SRichard Lowe!   55		      !static void
156*5d9d9091SRichard Lowe!   56		      !cleanup(double *dt, int from, int tlen)
157*5d9d9091SRichard Lowe!   57		      !{
158*5d9d9091SRichard Lowe
159*5d9d9091SRichard Lowe!
160*5d9d9091SRichard Lowe! SUBROUTINE cleanup
161*5d9d9091SRichard Lowe!
162*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
163*5d9d9091SRichard Lowe
164*5d9d9091SRichard Lowe                       cleanup:
165*5d9d9091SRichard Lowe/* 000000	  57 */		sra	%o1,0,%o4
166*5d9d9091SRichard Lowe/* 0x0004	     */		sra	%o2,0,%o5
167*5d9d9091SRichard Lowe
168*5d9d9091SRichard Lowe!   58		      !	int i;
169*5d9d9091SRichard Lowe!   59		      !	double tmp, tmp1, x, x1;
170*5d9d9091SRichard Lowe!   61		      !	tmp = tmp1 = Zero;
171*5d9d9091SRichard Lowe
172*5d9d9091SRichard Lowe/* 0x0008	  61 */		sll	%o5,1,%g5
173*5d9d9091SRichard Lowe
174*5d9d9091SRichard Lowe!   63		      !	for (i = 2 * from; i < 2 * tlen; i += 2) {
175*5d9d9091SRichard Lowe
176*5d9d9091SRichard Lowe/* 0x000c	  63 */		sll	%o4,1,%g3
177*5d9d9091SRichard Lowe/* 0x0010	     */		cmp	%g3,%g5
178*5d9d9091SRichard Lowe/* 0x0014	     */		bge,pn	%icc,.L77000188
179*5d9d9091SRichard Lowe/* 0x0018	   0 */		sethi	%hi(Zero),%o3
180*5d9d9091SRichard Lowe                       .L77000197:
181*5d9d9091SRichard Lowe/* 0x001c	  63 */		ldd	[%o3+%lo(Zero)],%f8
182*5d9d9091SRichard Lowe/* 0x0020	     */		sra	%g3,0,%o1
183*5d9d9091SRichard Lowe/* 0x0024	     */		sub	%g5,1,%g2
184*5d9d9091SRichard Lowe/* 0x0028	     */		sllx	%o1,3,%g4
185*5d9d9091SRichard Lowe
186*5d9d9091SRichard Lowe!   64		      !		x = dt[i];
187*5d9d9091SRichard Lowe
188*5d9d9091SRichard Lowe/* 0x002c	  64 */		ldd	[%g4+%o0],%f10
189*5d9d9091SRichard Lowe/* 0x0030	  63 */		add	%g4,%o0,%g1
190*5d9d9091SRichard Lowe/* 0x0034	     */		fmovd	%f8,%f18
191*5d9d9091SRichard Lowe/* 0x0038	     */		fmovd	%f8,%f16
192*5d9d9091SRichard Lowe
193*5d9d9091SRichard Lowe!   65		      !		x1 = dt[i + 1];
194*5d9d9091SRichard Lowe!   66		      !		dt[i] = lower32(x, Zero) + tmp;
195*5d9d9091SRichard Lowe
196*5d9d9091SRichard Lowe                       .L900000110:
197*5d9d9091SRichard Lowe/* 0x003c	  66 */		fdtox	%f10,%f0
198*5d9d9091SRichard Lowe/* 0x0040	  65 */		ldd	[%g1+8],%f12
199*5d9d9091SRichard Lowe
200*5d9d9091SRichard Lowe!   67		      !		dt[i + 1] = lower32(x1, Zero) + tmp1;
201*5d9d9091SRichard Lowe!   68		      !		tmp = upper32(x);
202*5d9d9091SRichard Lowe!   69		      !		tmp1 = upper32(x1);
203*5d9d9091SRichard Lowe
204*5d9d9091SRichard Lowe/* 0x0044	  69 */		add	%g3,2,%g3
205*5d9d9091SRichard Lowe/* 0x0048	     */		cmp	%g3,%g2
206*5d9d9091SRichard Lowe/* 0x004c	  67 */		fdtox	%f12,%f2
207*5d9d9091SRichard Lowe/* 0x0050	  68 */		fmovd	%f0,%f4
208*5d9d9091SRichard Lowe/* 0x0054	  66 */		fmovs	%f8,%f0
209*5d9d9091SRichard Lowe/* 0x0058	  67 */		fmovs	%f8,%f2
210*5d9d9091SRichard Lowe/* 0x005c	  66 */		fxtod	%f0,%f0
211*5d9d9091SRichard Lowe/* 0x0060	  67 */		fxtod	%f2,%f2
212*5d9d9091SRichard Lowe/* 0x0064	  69 */		fdtox	%f12,%f6
213*5d9d9091SRichard Lowe/* 0x0068	  66 */		faddd	%f0,%f18,%f10
214*5d9d9091SRichard Lowe/* 0x006c	     */		std	%f10,[%g1]
215*5d9d9091SRichard Lowe/* 0x0070	  67 */		faddd	%f2,%f16,%f14
216*5d9d9091SRichard Lowe/* 0x0074	     */		std	%f14,[%g1+8]
217*5d9d9091SRichard Lowe/* 0x0078	  68 */		fitod	%f4,%f18
218*5d9d9091SRichard Lowe/* 0x007c	  69 */		add	%g1,16,%g1
219*5d9d9091SRichard Lowe/* 0x0080	     */		fitod	%f6,%f16
220*5d9d9091SRichard Lowe/* 0x0084	     */		ble,a,pt	%icc,.L900000110
221*5d9d9091SRichard Lowe/* 0x0088	  64 */		ldd	[%g1],%f10
222*5d9d9091SRichard Lowe                       .L77000188:
223*5d9d9091SRichard Lowe/* 0x008c	  69 */		retl	! Result =
224*5d9d9091SRichard Lowe/* 0x0090	     */		nop
225*5d9d9091SRichard Lowe/* 0x0094	   0 */		.type	cleanup,2
226*5d9d9091SRichard Lowe/* 0x0094	   0 */		.size	cleanup,(.-cleanup)
227*5d9d9091SRichard Lowe
228*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
229*5d9d9091SRichard Lowe/* 000000	   0 */		.align	8
230*5d9d9091SRichard Lowe/* 000000	     */		.skip	24
231*5d9d9091SRichard Lowe/* 0x0018	     */		.align	32
232*5d9d9091SRichard Lowe
233*5d9d9091SRichard Lowe!   70		      !	}
234*5d9d9091SRichard Lowe!   71		      !}
235*5d9d9091SRichard Lowe!   75		      !#ifdef _KERNEL
236*5d9d9091SRichard Lowe!   76		      !/*
237*5d9d9091SRichard Lowe!   77		      ! * This only works if  0 <= d < 2^53
238*5d9d9091SRichard Lowe!   78		      ! */
239*5d9d9091SRichard Lowe!   79		      !uint64_t
240*5d9d9091SRichard Lowe!   80		      !double2uint64_t(double* d)
241*5d9d9091SRichard Lowe!   81		      !{
242*5d9d9091SRichard Lowe!   82		      !	uint64_t x;
243*5d9d9091SRichard Lowe!   83		      !	uint64_t exp;
244*5d9d9091SRichard Lowe!   84		      !	uint64_t man;
245*5d9d9091SRichard Lowe!   86		      !	x = *((uint64_t *)d);
246*5d9d9091SRichard Lowe
247*5d9d9091SRichard Lowe!
248*5d9d9091SRichard Lowe! SUBROUTINE double2uint64_t
249*5d9d9091SRichard Lowe!
250*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
251*5d9d9091SRichard Lowe
252*5d9d9091SRichard Lowe			.global double2uint64_t
253*5d9d9091SRichard Lowe                       double2uint64_t:
254*5d9d9091SRichard Lowe/* 000000	  86 */		ldx	[%o0],%o2
255*5d9d9091SRichard Lowe
256*5d9d9091SRichard Lowe!   87		      !	if (x == 0) {
257*5d9d9091SRichard Lowe
258*5d9d9091SRichard Lowe/* 0x0004	  87 */		cmp	%o2,0
259*5d9d9091SRichard Lowe/* 0x0008	     */		bne,pn	%xcc,.L900000206
260*5d9d9091SRichard Lowe/* 0x000c	  94 */		sethi	%hi(0xfff00000),%o5
261*5d9d9091SRichard Lowe                       .L77000202:
262*5d9d9091SRichard Lowe/* 0x0010	  94 */		retl	! Result =  %o0
263*5d9d9091SRichard Lowe
264*5d9d9091SRichard Lowe!   88		      !		return (0ULL);
265*5d9d9091SRichard Lowe
266*5d9d9091SRichard Lowe/* 0x0014	  88 */		or	%g0,0,%o0
267*5d9d9091SRichard Lowe
268*5d9d9091SRichard Lowe!   89		      !	}
269*5d9d9091SRichard Lowe!   90		      !	exp = (x >> 52) - 1023;
270*5d9d9091SRichard Lowe!   91		      !	man = (x & 0xfffffffffffffULL) | 0x10000000000000ULL;
271*5d9d9091SRichard Lowe!   92		      !	x = man >> (52 - exp);
272*5d9d9091SRichard Lowe!   94		      !	return (x);
273*5d9d9091SRichard Lowe
274*5d9d9091SRichard Lowe                       .L900000206:
275*5d9d9091SRichard Lowe/* 0x0018	  94 */		sllx	%o5,32,%o4
276*5d9d9091SRichard Lowe/* 0x001c	     */		srlx	%o2,52,%o0
277*5d9d9091SRichard Lowe/* 0x0020	     */		sethi	%hi(0x40000000),%o1
278*5d9d9091SRichard Lowe/* 0x0024	     */		or	%g0,1023,%g5
279*5d9d9091SRichard Lowe/* 0x0028	     */		sllx	%o1,22,%g4
280*5d9d9091SRichard Lowe/* 0x002c	     */		xor	%o4,-1,%o3
281*5d9d9091SRichard Lowe/* 0x0030	     */		sub	%g5,%o0,%g3
282*5d9d9091SRichard Lowe/* 0x0034	     */		and	%o2,%o3,%g2
283*5d9d9091SRichard Lowe/* 0x0038	     */		or	%g2,%g4,%o5
284*5d9d9091SRichard Lowe/* 0x003c	     */		add	%g3,52,%g1
285*5d9d9091SRichard Lowe/* 0x0040	     */		retl	! Result =  %o0
286*5d9d9091SRichard Lowe/* 0x0044	     */		srlx	%o5,%g1,%o0
287*5d9d9091SRichard Lowe/* 0x0048	   0 */		.type	double2uint64_t,2
288*5d9d9091SRichard Lowe/* 0x0048	   0 */		.size	double2uint64_t,(.-double2uint64_t)
289*5d9d9091SRichard Lowe
290*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
291*5d9d9091SRichard Lowe/* 000000	   0 */		.align	8
292*5d9d9091SRichard Lowe/* 000000	     */		.skip	24
293*5d9d9091SRichard Lowe/* 0x0018	     */		.align	32
294*5d9d9091SRichard Lowe
295*5d9d9091SRichard Lowe!   95		      !}
296*5d9d9091SRichard Lowe!   96		      !#else
297*5d9d9091SRichard Lowe!   97		      !/*
298*5d9d9091SRichard Lowe!   98		      ! * This only works if  0 <= d < 2^63
299*5d9d9091SRichard Lowe!   99		      ! */
300*5d9d9091SRichard Lowe!  100		      !uint64_t
301*5d9d9091SRichard Lowe!  101		      !double2uint64_t(double* d)
302*5d9d9091SRichard Lowe!  102		      !{
303*5d9d9091SRichard Lowe!  103		      !	return ((int64_t)(*d));
304*5d9d9091SRichard Lowe!  104		      !}
305*5d9d9091SRichard Lowe!  105		      !#endif
306*5d9d9091SRichard Lowe!  107		      !/* ARGSUSED */
307*5d9d9091SRichard Lowe!  108		      !void
308*5d9d9091SRichard Lowe!  109		      !conv_d16_to_i32(uint32_t *i32, double *d16, int64_t *tmp, int ilen)
309*5d9d9091SRichard Lowe!  110		      !{
310*5d9d9091SRichard Lowe
311*5d9d9091SRichard Lowe!
312*5d9d9091SRichard Lowe! SUBROUTINE conv_d16_to_i32
313*5d9d9091SRichard Lowe!
314*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
315*5d9d9091SRichard Lowe
316*5d9d9091SRichard Lowe			.global conv_d16_to_i32
317*5d9d9091SRichard Lowe                       conv_d16_to_i32:
318*5d9d9091SRichard Lowe/* 000000	 110 */		save	%sp,-176,%sp
319*5d9d9091SRichard Lowe
320*5d9d9091SRichard Lowe!  111		      !	int i;
321*5d9d9091SRichard Lowe!  112		      !	int64_t t, t1,		/* using int64_t and not uint64_t */
322*5d9d9091SRichard Lowe!  113		      !		a, b, c, d;	/* because more efficient code is */
323*5d9d9091SRichard Lowe!  114		      !				/* generated this way, and there  */
324*5d9d9091SRichard Lowe!  115		      !				/* is no overflow  */
325*5d9d9091SRichard Lowe!  116		      !	t1 = 0;
326*5d9d9091SRichard Lowe!  117		      !	a = double2uint64_t(&(d16[0]));
327*5d9d9091SRichard Lowe
328*5d9d9091SRichard Lowe/* 0x0004	 117 */		ldx	[%i1],%o0
329*5d9d9091SRichard Lowe/* 0x0008	 118 */		ldx	[%i1+8],%i2
330*5d9d9091SRichard Lowe/* 0x000c	 117 */		cmp	%o0,0
331*5d9d9091SRichard Lowe/* 0x0010	     */		bne,pn	%xcc,.L77000216
332*5d9d9091SRichard Lowe/* 0x0014	     */		or	%g0,0,%i4
333*5d9d9091SRichard Lowe                       .L77000215:
334*5d9d9091SRichard Lowe/* 0x0018	 117 */		ba	.L900000316
335*5d9d9091SRichard Lowe/* 0x001c	 118 */		cmp	%i2,0
336*5d9d9091SRichard Lowe                       .L77000216:
337*5d9d9091SRichard Lowe/* 0x0020	 117 */		srlx	%o0,52,%o5
338*5d9d9091SRichard Lowe/* 0x0024	     */		sethi	%hi(0xfff00000),%i4
339*5d9d9091SRichard Lowe/* 0x0028	     */		sllx	%i4,32,%o2
340*5d9d9091SRichard Lowe/* 0x002c	     */		sethi	%hi(0x40000000),%o7
341*5d9d9091SRichard Lowe/* 0x0030	     */		sllx	%o7,22,%o3
342*5d9d9091SRichard Lowe/* 0x0034	     */		or	%g0,1023,%o4
343*5d9d9091SRichard Lowe/* 0x0038	     */		xor	%o2,-1,%g5
344*5d9d9091SRichard Lowe/* 0x003c	     */		sub	%o4,%o5,%l0
345*5d9d9091SRichard Lowe/* 0x0040	     */		and	%o0,%g5,%o1
346*5d9d9091SRichard Lowe/* 0x0044	     */		add	%l0,52,%l1
347*5d9d9091SRichard Lowe/* 0x0048	     */		or	%o1,%o3,%g4
348*5d9d9091SRichard Lowe
349*5d9d9091SRichard Lowe!  118		      !	b = double2uint64_t(&(d16[1]));
350*5d9d9091SRichard Lowe
351*5d9d9091SRichard Lowe/* 0x004c	 118 */		cmp	%i2,0
352*5d9d9091SRichard Lowe/* 0x0050	 117 */		srlx	%g4,%l1,%i4
353*5d9d9091SRichard Lowe                       .L900000316:
354*5d9d9091SRichard Lowe/* 0x0054	 118 */		bne,pn	%xcc,.L77000222
355*5d9d9091SRichard Lowe/* 0x0058	 134 */		sub	%i3,1,%l3
356*5d9d9091SRichard Lowe                       .L77000221:
357*5d9d9091SRichard Lowe/* 0x005c	 118 */		or	%g0,0,%i2
358*5d9d9091SRichard Lowe/* 0x0060	     */		ba	.L900000315
359*5d9d9091SRichard Lowe/* 0x0064	 116 */		or	%g0,0,%o3
360*5d9d9091SRichard Lowe                       .L77000222:
361*5d9d9091SRichard Lowe/* 0x0068	 118 */		srlx	%i2,52,%l6
362*5d9d9091SRichard Lowe/* 0x006c	     */		sethi	%hi(0xfff00000),%g4
363*5d9d9091SRichard Lowe/* 0x0070	     */		sllx	%g4,32,%i5
364*5d9d9091SRichard Lowe/* 0x0074	     */		sethi	%hi(0x40000000),%l5
365*5d9d9091SRichard Lowe/* 0x0078	     */		xor	%i5,-1,%l4
366*5d9d9091SRichard Lowe/* 0x007c	     */		or	%g0,1023,%l2
367*5d9d9091SRichard Lowe/* 0x0080	     */		and	%i2,%l4,%l7
368*5d9d9091SRichard Lowe/* 0x0084	     */		sllx	%l5,22,%i2
369*5d9d9091SRichard Lowe/* 0x0088	     */		sub	%l2,%l6,%g1
370*5d9d9091SRichard Lowe/* 0x008c	     */		or	%l7,%i2,%g3
371*5d9d9091SRichard Lowe/* 0x0090	     */		add	%g1,52,%g2
372*5d9d9091SRichard Lowe/* 0x0094	 116 */		or	%g0,0,%o3
373*5d9d9091SRichard Lowe/* 0x0098	 118 */		srlx	%g3,%g2,%i2
374*5d9d9091SRichard Lowe
375*5d9d9091SRichard Lowe!  119		      !	for (i = 0; i < ilen - 1; i++) {
376*5d9d9091SRichard Lowe
377*5d9d9091SRichard Lowe                       .L900000315:
378*5d9d9091SRichard Lowe/* 0x009c	 119 */		cmp	%l3,0
379*5d9d9091SRichard Lowe/* 0x00a0	     */		ble,pn	%icc,.L77000210
380*5d9d9091SRichard Lowe/* 0x00a4	     */		or	%g0,0,%l4
381*5d9d9091SRichard Lowe                       .L77000245:
382*5d9d9091SRichard Lowe/* 0x00a8	 118 */		sethi	%hi(0xfff00000),%l7
383*5d9d9091SRichard Lowe/* 0x00ac	     */		or	%g0,-1,%l6
384*5d9d9091SRichard Lowe/* 0x00b0	     */		sllx	%l7,32,%l3
385*5d9d9091SRichard Lowe/* 0x00b4	     */		srl	%l6,0,%l6
386*5d9d9091SRichard Lowe/* 0x00b8	     */		sethi	%hi(0x40000000),%l1
387*5d9d9091SRichard Lowe/* 0x00bc	     */		sethi	%hi(0xfc00),%l2
388*5d9d9091SRichard Lowe/* 0x00c0	     */		xor	%l3,-1,%l7
389*5d9d9091SRichard Lowe/* 0x00c4	     */		sllx	%l1,22,%l3
390*5d9d9091SRichard Lowe/* 0x00c8	     */		sub	%i3,2,%l5
391*5d9d9091SRichard Lowe/* 0x00cc	     */		add	%l2,1023,%l2
392*5d9d9091SRichard Lowe/* 0x00d0	     */		or	%g0,2,%g2
393*5d9d9091SRichard Lowe/* 0x00d4	     */		or	%g0,%i0,%g1
394*5d9d9091SRichard Lowe
395*5d9d9091SRichard Lowe!  120		      !		c = double2uint64_t(&(d16[2 * i + 2]));
396*5d9d9091SRichard Lowe
397*5d9d9091SRichard Lowe                       .L77000208:
398*5d9d9091SRichard Lowe/* 0x00d8	 120 */		sra	%g2,0,%g3
399*5d9d9091SRichard Lowe/* 0x00dc	 123 */		add	%g2,1,%o2
400*5d9d9091SRichard Lowe/* 0x00e0	 120 */		sllx	%g3,3,%i3
401*5d9d9091SRichard Lowe
402*5d9d9091SRichard Lowe!  121		      !		t1 += a & 0xffffffff;
403*5d9d9091SRichard Lowe!  122		      !		t = (a >> 32);
404*5d9d9091SRichard Lowe!  123		      !		d = double2uint64_t(&(d16[2 * i + 3]));
405*5d9d9091SRichard Lowe
406*5d9d9091SRichard Lowe/* 0x00e4	 123 */		sra	%o2,0,%g5
407*5d9d9091SRichard Lowe/* 0x00e8	 120 */		ldx	[%i1+%i3],%o5
408*5d9d9091SRichard Lowe/* 0x00ec	 123 */		sllx	%g5,3,%o0
409*5d9d9091SRichard Lowe/* 0x00f0	 121 */		and	%i4,%l6,%g4
410*5d9d9091SRichard Lowe/* 0x00f4	 123 */		ldx	[%i1+%o0],%i3
411*5d9d9091SRichard Lowe/* 0x00f8	 120 */		cmp	%o5,0
412*5d9d9091SRichard Lowe/* 0x00fc	     */		bne,pn	%xcc,.L77000228
413*5d9d9091SRichard Lowe/* 0x0100	 124 */		and	%i2,%l2,%i5
414*5d9d9091SRichard Lowe                       .L77000227:
415*5d9d9091SRichard Lowe/* 0x0104	 120 */		or	%g0,0,%l1
416*5d9d9091SRichard Lowe/* 0x0108	     */		ba	.L900000314
417*5d9d9091SRichard Lowe/* 0x010c	 121 */		add	%o3,%g4,%o0
418*5d9d9091SRichard Lowe                       .L77000228:
419*5d9d9091SRichard Lowe/* 0x0110	 120 */		srlx	%o5,52,%o7
420*5d9d9091SRichard Lowe/* 0x0114	     */		and	%o5,%l7,%o5
421*5d9d9091SRichard Lowe/* 0x0118	     */		or	%g0,52,%l0
422*5d9d9091SRichard Lowe/* 0x011c	     */		sub	%o7,1023,%o4
423*5d9d9091SRichard Lowe/* 0x0120	     */		or	%o5,%l3,%l1
424*5d9d9091SRichard Lowe/* 0x0124	     */		sub	%l0,%o4,%o1
425*5d9d9091SRichard Lowe/* 0x0128	     */		srlx	%l1,%o1,%l1
426*5d9d9091SRichard Lowe/* 0x012c	 121 */		add	%o3,%g4,%o0
427*5d9d9091SRichard Lowe                       .L900000314:
428*5d9d9091SRichard Lowe/* 0x0130	 122 */		srax	%i4,32,%g3
429*5d9d9091SRichard Lowe/* 0x0134	 123 */		cmp	%i3,0
430*5d9d9091SRichard Lowe/* 0x0138	     */		bne,pn	%xcc,.L77000234
431*5d9d9091SRichard Lowe/* 0x013c	 124 */		sllx	%i5,16,%g5
432*5d9d9091SRichard Lowe                       .L77000233:
433*5d9d9091SRichard Lowe/* 0x0140	 123 */		or	%g0,0,%o2
434*5d9d9091SRichard Lowe/* 0x0144	     */		ba	.L900000313
435*5d9d9091SRichard Lowe/* 0x0148	 124 */		add	%o0,%g5,%o7
436*5d9d9091SRichard Lowe                       .L77000234:
437*5d9d9091SRichard Lowe/* 0x014c	 123 */		srlx	%i3,52,%o2
438*5d9d9091SRichard Lowe/* 0x0150	     */		and	%i3,%l7,%i4
439*5d9d9091SRichard Lowe/* 0x0154	     */		sub	%o2,1023,%o1
440*5d9d9091SRichard Lowe/* 0x0158	     */		or	%g0,52,%g4
441*5d9d9091SRichard Lowe/* 0x015c	     */		sub	%g4,%o1,%i5
442*5d9d9091SRichard Lowe/* 0x0160	     */		or	%i4,%l3,%i3
443*5d9d9091SRichard Lowe/* 0x0164	     */		srlx	%i3,%i5,%o2
444*5d9d9091SRichard Lowe
445*5d9d9091SRichard Lowe!  124		      !		t1 += (b & 0xffff) << 16;
446*5d9d9091SRichard Lowe
447*5d9d9091SRichard Lowe/* 0x0168	 124 */		add	%o0,%g5,%o7
448*5d9d9091SRichard Lowe
449*5d9d9091SRichard Lowe!  125		      !		t += (b >> 16) + (t1 >> 32);
450*5d9d9091SRichard Lowe
451*5d9d9091SRichard Lowe                       .L900000313:
452*5d9d9091SRichard Lowe/* 0x016c	 125 */		srax	%i2,16,%l0
453*5d9d9091SRichard Lowe/* 0x0170	     */		srax	%o7,32,%o4
454*5d9d9091SRichard Lowe/* 0x0174	     */		add	%l0,%o4,%o3
455*5d9d9091SRichard Lowe
456*5d9d9091SRichard Lowe!  126		      !		i32[i] = t1 & 0xffffffff;
457*5d9d9091SRichard Lowe!  127		      !		t1 = t;
458*5d9d9091SRichard Lowe!  128		      !		a = c;
459*5d9d9091SRichard Lowe!  129		      !		b = d;
460*5d9d9091SRichard Lowe
461*5d9d9091SRichard Lowe/* 0x0178	 129 */		add	%l4,1,%l4
462*5d9d9091SRichard Lowe/* 0x017c	 126 */		and	%o7,%l6,%o5
463*5d9d9091SRichard Lowe/* 0x0180	 125 */		add	%g3,%o3,%o3
464*5d9d9091SRichard Lowe/* 0x0184	 126 */		st	%o5,[%g1]
465*5d9d9091SRichard Lowe/* 0x0188	 128 */		or	%g0,%l1,%i4
466*5d9d9091SRichard Lowe/* 0x018c	 129 */		or	%g0,%o2,%i2
467*5d9d9091SRichard Lowe/* 0x0190	     */		add	%g2,2,%g2
468*5d9d9091SRichard Lowe/* 0x0194	     */		cmp	%l4,%l5
469*5d9d9091SRichard Lowe/* 0x0198	     */		ble,pt	%icc,.L77000208
470*5d9d9091SRichard Lowe/* 0x019c	     */		add	%g1,4,%g1
471*5d9d9091SRichard Lowe
472*5d9d9091SRichard Lowe!  130		      !	}
473*5d9d9091SRichard Lowe!  131		      !	t1 += a & 0xffffffff;
474*5d9d9091SRichard Lowe!  132		      !	t = (a >> 32);
475*5d9d9091SRichard Lowe!  133		      !	t1 += (b & 0xffff) << 16;
476*5d9d9091SRichard Lowe!  134		      !	i32[i] = t1 & 0xffffffff;
477*5d9d9091SRichard Lowe
478*5d9d9091SRichard Lowe                       .L77000210:
479*5d9d9091SRichard Lowe/* 0x01a0	 134 */		sra	%l4,0,%l4
480*5d9d9091SRichard Lowe/* 0x01a4	     */		sethi	%hi(0xfc00),%i1
481*5d9d9091SRichard Lowe/* 0x01a8	     */		add	%o3,%i4,%l2
482*5d9d9091SRichard Lowe/* 0x01ac	     */		add	%i1,1023,%i5
483*5d9d9091SRichard Lowe/* 0x01b0	     */		and	%i2,%i5,%l5
484*5d9d9091SRichard Lowe/* 0x01b4	     */		sllx	%l4,2,%i2
485*5d9d9091SRichard Lowe/* 0x01b8	     */		sllx	%l5,16,%l6
486*5d9d9091SRichard Lowe/* 0x01bc	     */		add	%l2,%l6,%l7
487*5d9d9091SRichard Lowe/* 0x01c0	     */		st	%l7,[%i0+%i2]
488*5d9d9091SRichard Lowe/* 0x01c4	 129 */		ret	! Result =
489*5d9d9091SRichard Lowe/* 0x01c8	     */		restore	%g0,%g0,%g0
490*5d9d9091SRichard Lowe/* 0x01cc	   0 */		.type	conv_d16_to_i32,2
491*5d9d9091SRichard Lowe/* 0x01cc	   0 */		.size	conv_d16_to_i32,(.-conv_d16_to_i32)
492*5d9d9091SRichard Lowe
493*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
494*5d9d9091SRichard Lowe/* 000000	   0 */		.align	8
495*5d9d9091SRichard Lowe!
496*5d9d9091SRichard Lowe! CONSTANT POOL
497*5d9d9091SRichard Lowe!
498*5d9d9091SRichard Lowe                       ___const_seg_900000401:
499*5d9d9091SRichard Lowe/* 000000	   0 */		.word	1127219200,0
500*5d9d9091SRichard Lowe/* 0x0008	     */		.word	1127219200
501*5d9d9091SRichard Lowe/* 0x000c	   0 */		.type	___const_seg_900000401,1
502*5d9d9091SRichard Lowe/* 0x000c	   0 */		.size	___const_seg_900000401,(.-___const_seg_900000401)
503*5d9d9091SRichard Lowe/* 0x000c	   0 */		.align	8
504*5d9d9091SRichard Lowe/* 0x0010	     */		.skip	24
505*5d9d9091SRichard Lowe/* 0x0028	     */		.align	32
506*5d9d9091SRichard Lowe
507*5d9d9091SRichard Lowe!  135		      !}
508*5d9d9091SRichard Lowe!  138		      !void
509*5d9d9091SRichard Lowe!  139		      !conv_i32_to_d32(double *d32, uint32_t *i32, int len)
510*5d9d9091SRichard Lowe!  140		      !{
511*5d9d9091SRichard Lowe
512*5d9d9091SRichard Lowe!
513*5d9d9091SRichard Lowe! SUBROUTINE conv_i32_to_d32
514*5d9d9091SRichard Lowe!
515*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
516*5d9d9091SRichard Lowe
517*5d9d9091SRichard Lowe			.global conv_i32_to_d32
518*5d9d9091SRichard Lowe                       conv_i32_to_d32:
519*5d9d9091SRichard Lowe/* 000000	 140 */		orcc	%g0,%o2,%o2
520*5d9d9091SRichard Lowe
521*5d9d9091SRichard Lowe!  141		      !	int i;
522*5d9d9091SRichard Lowe!  143		      !#pragma pipeloop(0)
523*5d9d9091SRichard Lowe!  144		      !	for (i = 0; i < len; i++)
524*5d9d9091SRichard Lowe
525*5d9d9091SRichard Lowe/* 0x0004	 144 */		ble,pn	%icc,.L77000254
526*5d9d9091SRichard Lowe/* 0x0008	     */		sub	%o2,1,%o3
527*5d9d9091SRichard Lowe                       .L77000263:
528*5d9d9091SRichard Lowe/* 0x000c	 140 */		or	%g0,%o0,%o2
529*5d9d9091SRichard Lowe
530*5d9d9091SRichard Lowe!  145		      !		d32[i] = (double)(i32[i]);
531*5d9d9091SRichard Lowe
532*5d9d9091SRichard Lowe/* 0x0010	 145 */		add	%o3,1,%o5
533*5d9d9091SRichard Lowe/* 0x0014	 144 */		or	%g0,0,%g5
534*5d9d9091SRichard Lowe/* 0x0018	 145 */		cmp	%o5,10
535*5d9d9091SRichard Lowe/* 0x001c	     */		bl,pn	%icc,.L77000261
536*5d9d9091SRichard Lowe/* 0x0020	     */		sethi	%hi(___const_seg_900000401),%g4
537*5d9d9091SRichard Lowe                       .L900000407:
538*5d9d9091SRichard Lowe/* 0x0024	 145 */		prefetch	[%o1],0
539*5d9d9091SRichard Lowe/* 0x0028	     */		prefetch	[%o0],22
540*5d9d9091SRichard Lowe/* 0x002c	     */		sethi	%hi(___const_seg_900000401+8),%o4
541*5d9d9091SRichard Lowe/* 0x0030	     */		or	%g0,%o0,%o2
542*5d9d9091SRichard Lowe/* 0x0034	     */		prefetch	[%o1+64],0
543*5d9d9091SRichard Lowe/* 0x0038	     */		add	%o1,8,%o0
544*5d9d9091SRichard Lowe/* 0x003c	     */		sub	%o3,7,%o5
545*5d9d9091SRichard Lowe/* 0x0040	     */		prefetch	[%o2+64],22
546*5d9d9091SRichard Lowe/* 0x0044	     */		or	%g0,2,%g5
547*5d9d9091SRichard Lowe/* 0x0048	     */		prefetch	[%o2+128],22
548*5d9d9091SRichard Lowe/* 0x004c	     */		prefetch	[%o2+192],22
549*5d9d9091SRichard Lowe/* 0x0050	     */		prefetch	[%o1+128],0
550*5d9d9091SRichard Lowe/* 0x0054	     */		ld	[%o4+%lo(___const_seg_900000401+8)],%f2
551*5d9d9091SRichard Lowe/* 0x0058	     */		ldd	[%g4+%lo(___const_seg_900000401)],%f16
552*5d9d9091SRichard Lowe/* 0x005c	     */		fmovs	%f2,%f0
553*5d9d9091SRichard Lowe/* 0x0060	     */		prefetch	[%o2+256],22
554*5d9d9091SRichard Lowe/* 0x0064	     */		prefetch	[%o2+320],22
555*5d9d9091SRichard Lowe/* 0x0068	     */		ld	[%o1],%f3
556*5d9d9091SRichard Lowe/* 0x006c	     */		prefetch	[%o1+192],0
557*5d9d9091SRichard Lowe/* 0x0070	     */		ld	[%o1+4],%f1
558*5d9d9091SRichard Lowe                       .L900000405:
559*5d9d9091SRichard Lowe/* 0x0074	 145 */		prefetch	[%o0+188],0
560*5d9d9091SRichard Lowe/* 0x0078	     */		fsubd	%f2,%f16,%f22
561*5d9d9091SRichard Lowe/* 0x007c	     */		add	%g5,8,%g5
562*5d9d9091SRichard Lowe/* 0x0080	     */		add	%o0,32,%o0
563*5d9d9091SRichard Lowe/* 0x0084	     */		ld	[%o4+%lo(___const_seg_900000401+8)],%f4
564*5d9d9091SRichard Lowe/* 0x0088	     */		std	%f22,[%o2]
565*5d9d9091SRichard Lowe/* 0x008c	     */		cmp	%g5,%o5
566*5d9d9091SRichard Lowe/* 0x0090	     */		ld	[%o0-32],%f5
567*5d9d9091SRichard Lowe/* 0x0094	     */		fsubd	%f0,%f16,%f24
568*5d9d9091SRichard Lowe/* 0x0098	     */		add	%o2,64,%o2
569*5d9d9091SRichard Lowe/* 0x009c	     */		fmovs	%f4,%f0
570*5d9d9091SRichard Lowe/* 0x00a0	     */		std	%f24,[%o2-56]
571*5d9d9091SRichard Lowe/* 0x00a4	     */		ld	[%o0-28],%f1
572*5d9d9091SRichard Lowe/* 0x00a8	     */		fsubd	%f4,%f16,%f26
573*5d9d9091SRichard Lowe/* 0x00ac	     */		fmovs	%f0,%f6
574*5d9d9091SRichard Lowe/* 0x00b0	     */		prefetch	[%o2+312],22
575*5d9d9091SRichard Lowe/* 0x00b4	     */		std	%f26,[%o2-48]
576*5d9d9091SRichard Lowe/* 0x00b8	     */		ld	[%o0-24],%f7
577*5d9d9091SRichard Lowe/* 0x00bc	     */		fsubd	%f0,%f16,%f28
578*5d9d9091SRichard Lowe/* 0x00c0	     */		fmovs	%f6,%f8
579*5d9d9091SRichard Lowe/* 0x00c4	     */		std	%f28,[%o2-40]
580*5d9d9091SRichard Lowe/* 0x00c8	     */		ld	[%o0-20],%f9
581*5d9d9091SRichard Lowe/* 0x00cc	     */		fsubd	%f6,%f16,%f30
582*5d9d9091SRichard Lowe/* 0x00d0	     */		fmovs	%f8,%f10
583*5d9d9091SRichard Lowe/* 0x00d4	     */		std	%f30,[%o2-32]
584*5d9d9091SRichard Lowe/* 0x00d8	     */		ld	[%o0-16],%f11
585*5d9d9091SRichard Lowe/* 0x00dc	     */		prefetch	[%o2+344],22
586*5d9d9091SRichard Lowe/* 0x00e0	     */		fsubd	%f8,%f16,%f48
587*5d9d9091SRichard Lowe/* 0x00e4	     */		fmovs	%f10,%f12
588*5d9d9091SRichard Lowe/* 0x00e8	     */		std	%f48,[%o2-24]
589*5d9d9091SRichard Lowe/* 0x00ec	     */		ld	[%o0-12],%f13
590*5d9d9091SRichard Lowe/* 0x00f0	     */		fsubd	%f10,%f16,%f50
591*5d9d9091SRichard Lowe/* 0x00f4	     */		fmovs	%f12,%f2
592*5d9d9091SRichard Lowe/* 0x00f8	     */		std	%f50,[%o2-16]
593*5d9d9091SRichard Lowe/* 0x00fc	     */		ld	[%o0-8],%f3
594*5d9d9091SRichard Lowe/* 0x0100	     */		fsubd	%f12,%f16,%f52
595*5d9d9091SRichard Lowe/* 0x0104	     */		fmovs	%f2,%f0
596*5d9d9091SRichard Lowe/* 0x0108	     */		std	%f52,[%o2-8]
597*5d9d9091SRichard Lowe/* 0x010c	     */		ble,pt	%icc,.L900000405
598*5d9d9091SRichard Lowe/* 0x0110	     */		ld	[%o0-4],%f1
599*5d9d9091SRichard Lowe                       .L900000408:
600*5d9d9091SRichard Lowe/* 0x0114	 145 */		fsubd	%f2,%f16,%f18
601*5d9d9091SRichard Lowe/* 0x0118	     */		add	%o2,16,%o2
602*5d9d9091SRichard Lowe/* 0x011c	     */		cmp	%g5,%o3
603*5d9d9091SRichard Lowe/* 0x0120	     */		std	%f18,[%o2-16]
604*5d9d9091SRichard Lowe/* 0x0124	     */		fsubd	%f0,%f16,%f20
605*5d9d9091SRichard Lowe/* 0x0128	     */		or	%g0,%o0,%o1
606*5d9d9091SRichard Lowe/* 0x012c	     */		bg,pn	%icc,.L77000254
607*5d9d9091SRichard Lowe/* 0x0130	     */		std	%f20,[%o2-8]
608*5d9d9091SRichard Lowe                       .L77000261:
609*5d9d9091SRichard Lowe/* 0x0134	 145 */		ld	[%o1],%f15
610*5d9d9091SRichard Lowe                       .L900000409:
611*5d9d9091SRichard Lowe/* 0x0138	 145 */		sethi	%hi(___const_seg_900000401+8),%o4
612*5d9d9091SRichard Lowe/* 0x013c	     */		ldd	[%g4+%lo(___const_seg_900000401)],%f16
613*5d9d9091SRichard Lowe/* 0x0140	     */		add	%g5,1,%g5
614*5d9d9091SRichard Lowe/* 0x0144	     */		ld	[%o4+%lo(___const_seg_900000401+8)],%f14
615*5d9d9091SRichard Lowe/* 0x0148	     */		add	%o1,4,%o1
616*5d9d9091SRichard Lowe/* 0x014c	     */		cmp	%g5,%o3
617*5d9d9091SRichard Lowe/* 0x0150	     */		fsubd	%f14,%f16,%f54
618*5d9d9091SRichard Lowe/* 0x0154	     */		std	%f54,[%o2]
619*5d9d9091SRichard Lowe/* 0x0158	     */		add	%o2,8,%o2
620*5d9d9091SRichard Lowe/* 0x015c	     */		ble,a,pt	%icc,.L900000409
621*5d9d9091SRichard Lowe/* 0x0160	     */		ld	[%o1],%f15
622*5d9d9091SRichard Lowe                       .L77000254:
623*5d9d9091SRichard Lowe/* 0x0164	 145 */		retl	! Result =
624*5d9d9091SRichard Lowe/* 0x0168	     */		nop
625*5d9d9091SRichard Lowe/* 0x016c	   0 */		.type	conv_i32_to_d32,2
626*5d9d9091SRichard Lowe/* 0x016c	   0 */		.size	conv_i32_to_d32,(.-conv_i32_to_d32)
627*5d9d9091SRichard Lowe
628*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
629*5d9d9091SRichard Lowe/* 000000	   0 */		.align	8
630*5d9d9091SRichard Lowe!
631*5d9d9091SRichard Lowe! CONSTANT POOL
632*5d9d9091SRichard Lowe!
633*5d9d9091SRichard Lowe                       ___const_seg_900000501:
634*5d9d9091SRichard Lowe/* 000000	   0 */		.word	1127219200,0
635*5d9d9091SRichard Lowe/* 0x0008	     */		.word	1127219200
636*5d9d9091SRichard Lowe/* 0x000c	   0 */		.type	___const_seg_900000501,1
637*5d9d9091SRichard Lowe/* 0x000c	   0 */		.size	___const_seg_900000501,(.-___const_seg_900000501)
638*5d9d9091SRichard Lowe/* 0x000c	   0 */		.align	8
639*5d9d9091SRichard Lowe/* 0x0010	     */		.skip	24
640*5d9d9091SRichard Lowe/* 0x0028	     */		.align	32
641*5d9d9091SRichard Lowe
642*5d9d9091SRichard Lowe!  146		      !}
643*5d9d9091SRichard Lowe!  149		      !void
644*5d9d9091SRichard Lowe!  150		      !conv_i32_to_d16(double *d16, uint32_t *i32, int len)
645*5d9d9091SRichard Lowe!  151		      !{
646*5d9d9091SRichard Lowe
647*5d9d9091SRichard Lowe!
648*5d9d9091SRichard Lowe! SUBROUTINE conv_i32_to_d16
649*5d9d9091SRichard Lowe!
650*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
651*5d9d9091SRichard Lowe
652*5d9d9091SRichard Lowe			.global conv_i32_to_d16
653*5d9d9091SRichard Lowe                       conv_i32_to_d16:
654*5d9d9091SRichard Lowe/* 000000	 151 */		save	%sp,-368,%sp
655*5d9d9091SRichard Lowe/* 0x0004	     */		orcc	%g0,%i2,%i2
656*5d9d9091SRichard Lowe
657*5d9d9091SRichard Lowe!  152		      !	int i;
658*5d9d9091SRichard Lowe!  153		      !	uint32_t a;
659*5d9d9091SRichard Lowe!  155		      !#pragma pipeloop(0)
660*5d9d9091SRichard Lowe!  156		      !	for (i = 0; i < len; i++) {
661*5d9d9091SRichard Lowe
662*5d9d9091SRichard Lowe/* 0x0008	 156 */		ble,pn	%icc,.L77000272
663*5d9d9091SRichard Lowe/* 0x000c	     */		sub	%i2,1,%l6
664*5d9d9091SRichard Lowe                       .L77000281:
665*5d9d9091SRichard Lowe/* 0x0010	 156 */		sethi	%hi(0xfc00),%i3
666*5d9d9091SRichard Lowe
667*5d9d9091SRichard Lowe!  157		      !		a = i32[i];
668*5d9d9091SRichard Lowe
669*5d9d9091SRichard Lowe/* 0x0014	 157 */		or	%g0,%i2,%l1
670*5d9d9091SRichard Lowe/* 0x0018	 156 */		add	%i3,1023,%i4
671*5d9d9091SRichard Lowe/* 0x001c	 157 */		cmp	%i2,4
672*5d9d9091SRichard Lowe/* 0x0020	 151 */		or	%g0,%i1,%l7
673*5d9d9091SRichard Lowe/* 0x0024	     */		or	%g0,%i0,%i2
674*5d9d9091SRichard Lowe/* 0x0028	 156 */		or	%g0,0,%i5
675*5d9d9091SRichard Lowe/* 0x002c	     */		or	%g0,0,%i3
676*5d9d9091SRichard Lowe/* 0x0030	 157 */		bl,pn	%icc,.L77000279
677*5d9d9091SRichard Lowe/* 0x0034	   0 */		sethi	%hi(___const_seg_900000501),%i1
678*5d9d9091SRichard Lowe                       .L900000508:
679*5d9d9091SRichard Lowe/* 0x0038	 157 */		prefetch	[%i0+8],22
680*5d9d9091SRichard Lowe/* 0x003c	     */		prefetch	[%i0+72],22
681*5d9d9091SRichard Lowe/* 0x0040	     */		or	%g0,%i0,%l2
682*5d9d9091SRichard Lowe
683*5d9d9091SRichard Lowe!  158		      !		d16[2 * i] = (double)(a & 0xffff);
684*5d9d9091SRichard Lowe
685*5d9d9091SRichard Lowe/* 0x0044	 158 */		sethi	%hi(___const_seg_900000501+8),%l1
686*5d9d9091SRichard Lowe/* 0x0048	 157 */		prefetch	[%i0+136],22
687*5d9d9091SRichard Lowe/* 0x004c	     */		sub	%l6,1,%i0
688*5d9d9091SRichard Lowe/* 0x0050	     */		or	%g0,0,%i3
689*5d9d9091SRichard Lowe/* 0x0054	     */		prefetch	[%i2+200],22
690*5d9d9091SRichard Lowe/* 0x0058	     */		or	%g0,2,%i5
691*5d9d9091SRichard Lowe/* 0x005c	     */		prefetch	[%i2+264],22
692*5d9d9091SRichard Lowe/* 0x0060	     */		prefetch	[%i2+328],22
693*5d9d9091SRichard Lowe/* 0x0064	     */		prefetch	[%i2+392],22
694*5d9d9091SRichard Lowe/* 0x0068	     */		ld	[%l7],%l3
695*5d9d9091SRichard Lowe/* 0x006c	     */		ld	[%l7+4],%l4
696*5d9d9091SRichard Lowe/* 0x0070	 158 */		ldd	[%i1+%lo(___const_seg_900000501)],%f20
697*5d9d9091SRichard Lowe
698*5d9d9091SRichard Lowe!  159		      !		d16[2 * i + 1] = (double)(a >> 16);
699*5d9d9091SRichard Lowe
700*5d9d9091SRichard Lowe/* 0x0074	 159 */		srl	%l3,16,%o1
701*5d9d9091SRichard Lowe/* 0x0078	 158 */		and	%l3,%i4,%o3
702*5d9d9091SRichard Lowe/* 0x007c	     */		st	%o3,[%sp+2335]
703*5d9d9091SRichard Lowe/* 0x0080	 159 */		srl	%l4,16,%g4
704*5d9d9091SRichard Lowe/* 0x0084	 158 */		and	%l4,%i4,%o0
705*5d9d9091SRichard Lowe/* 0x0088	     */		st	%o0,[%sp+2303]
706*5d9d9091SRichard Lowe/* 0x008c	 159 */		add	%l7,8,%l7
707*5d9d9091SRichard Lowe/* 0x0090	     */		st	%o1,[%sp+2271]
708*5d9d9091SRichard Lowe/* 0x0094	     */		st	%g4,[%sp+2239]
709*5d9d9091SRichard Lowe/* 0x0098	 157 */		prefetch	[%i2+456],22
710*5d9d9091SRichard Lowe/* 0x009c	     */		prefetch	[%i2+520],22
711*5d9d9091SRichard Lowe                       .L900000506:
712*5d9d9091SRichard Lowe/* 0x00a0	 157 */		prefetch	[%l2+536],22
713*5d9d9091SRichard Lowe/* 0x00a4	 159 */		add	%i5,2,%i5
714*5d9d9091SRichard Lowe/* 0x00a8	 157 */		add	%l2,32,%l2
715*5d9d9091SRichard Lowe/* 0x00ac	     */		ld	[%l7],%g2
716*5d9d9091SRichard Lowe/* 0x00b0	 159 */		cmp	%i5,%i0
717*5d9d9091SRichard Lowe/* 0x00b4	     */		add	%l7,8,%l7
718*5d9d9091SRichard Lowe/* 0x00b8	 158 */		ld	[%sp+2335],%f9
719*5d9d9091SRichard Lowe/* 0x00bc	 159 */		add	%i3,4,%i3
720*5d9d9091SRichard Lowe/* 0x00c0	 158 */		ld	[%l1+%lo(___const_seg_900000501+8)],%f8
721*5d9d9091SRichard Lowe/* 0x00c4	 159 */		ld	[%sp+2271],%f11
722*5d9d9091SRichard Lowe/* 0x00c8	 158 */		and	%g2,%i4,%g3
723*5d9d9091SRichard Lowe/* 0x00cc	 159 */		fmovs	%f8,%f10
724*5d9d9091SRichard Lowe/* 0x00d0	 158 */		st	%g3,[%sp+2335]
725*5d9d9091SRichard Lowe/* 0x00d4	     */		fsubd	%f8,%f20,%f28
726*5d9d9091SRichard Lowe/* 0x00d8	     */		std	%f28,[%l2-32]
727*5d9d9091SRichard Lowe/* 0x00dc	 159 */		srl	%g2,16,%g1
728*5d9d9091SRichard Lowe/* 0x00e0	     */		st	%g1,[%sp+2271]
729*5d9d9091SRichard Lowe/* 0x00e4	     */		fsubd	%f10,%f20,%f30
730*5d9d9091SRichard Lowe/* 0x00e8	     */		std	%f30,[%l2-24]
731*5d9d9091SRichard Lowe/* 0x00ec	 157 */		ld	[%l7-4],%l0
732*5d9d9091SRichard Lowe/* 0x00f0	 158 */		ld	[%sp+2303],%f13
733*5d9d9091SRichard Lowe/* 0x00f4	     */		ld	[%l1+%lo(___const_seg_900000501+8)],%f12
734*5d9d9091SRichard Lowe/* 0x00f8	 159 */		ld	[%sp+2239],%f15
735*5d9d9091SRichard Lowe/* 0x00fc	 158 */		and	%l0,%i4,%l5
736*5d9d9091SRichard Lowe/* 0x0100	 159 */		fmovs	%f12,%f14
737*5d9d9091SRichard Lowe/* 0x0104	 158 */		st	%l5,[%sp+2303]
738*5d9d9091SRichard Lowe/* 0x0108	     */		fsubd	%f12,%f20,%f44
739*5d9d9091SRichard Lowe/* 0x010c	     */		std	%f44,[%l2-16]
740*5d9d9091SRichard Lowe/* 0x0110	 159 */		srl	%l0,16,%o5
741*5d9d9091SRichard Lowe/* 0x0114	     */		st	%o5,[%sp+2239]
742*5d9d9091SRichard Lowe/* 0x0118	     */		fsubd	%f14,%f20,%f46
743*5d9d9091SRichard Lowe/* 0x011c	     */		ble,pt	%icc,.L900000506
744*5d9d9091SRichard Lowe/* 0x0120	     */		std	%f46,[%l2-8]
745*5d9d9091SRichard Lowe                       .L900000509:
746*5d9d9091SRichard Lowe/* 0x0124	 158 */		ld	[%l1+%lo(___const_seg_900000501+8)],%f0
747*5d9d9091SRichard Lowe/* 0x0128	 159 */		cmp	%i5,%l6
748*5d9d9091SRichard Lowe/* 0x012c	     */		add	%i3,4,%i3
749*5d9d9091SRichard Lowe/* 0x0130	 158 */		ld	[%sp+2335],%f1
750*5d9d9091SRichard Lowe/* 0x0134	     */		ld	[%sp+2303],%f5
751*5d9d9091SRichard Lowe/* 0x0138	 159 */		fmovs	%f0,%f2
752*5d9d9091SRichard Lowe/* 0x013c	     */		ld	[%sp+2271],%f3
753*5d9d9091SRichard Lowe/* 0x0140	 158 */		fmovs	%f0,%f4
754*5d9d9091SRichard Lowe/* 0x0144	 159 */		ld	[%sp+2239],%f7
755*5d9d9091SRichard Lowe/* 0x0148	     */		fmovs	%f0,%f6
756*5d9d9091SRichard Lowe/* 0x014c	 158 */		fsubd	%f0,%f20,%f22
757*5d9d9091SRichard Lowe/* 0x0150	     */		std	%f22,[%l2]
758*5d9d9091SRichard Lowe/* 0x0154	 159 */		fsubd	%f2,%f20,%f24
759*5d9d9091SRichard Lowe/* 0x0158	     */		std	%f24,[%l2+8]
760*5d9d9091SRichard Lowe/* 0x015c	 158 */		fsubd	%f4,%f20,%f26
761*5d9d9091SRichard Lowe/* 0x0160	     */		std	%f26,[%l2+16]
762*5d9d9091SRichard Lowe/* 0x0164	 159 */		fsubd	%f6,%f20,%f20
763*5d9d9091SRichard Lowe/* 0x0168	     */		bg,pn	%icc,.L77000272
764*5d9d9091SRichard Lowe/* 0x016c	     */		std	%f20,[%l2+24]
765*5d9d9091SRichard Lowe                       .L77000279:
766*5d9d9091SRichard Lowe/* 0x0170	 157 */		ld	[%l7],%l2
767*5d9d9091SRichard Lowe                       .L900000510:
768*5d9d9091SRichard Lowe/* 0x0174	 158 */		and	%l2,%i4,%o4
769*5d9d9091SRichard Lowe/* 0x0178	     */		st	%o4,[%sp+2399]
770*5d9d9091SRichard Lowe/* 0x017c	 159 */		srl	%l2,16,%o2
771*5d9d9091SRichard Lowe/* 0x0180	     */		st	%o2,[%sp+2367]
772*5d9d9091SRichard Lowe/* 0x0184	 158 */		sethi	%hi(___const_seg_900000501+8),%l1
773*5d9d9091SRichard Lowe/* 0x0188	     */		sra	%i3,0,%i0
774*5d9d9091SRichard Lowe/* 0x018c	     */		ld	[%l1+%lo(___const_seg_900000501+8)],%f16
775*5d9d9091SRichard Lowe/* 0x0190	     */		sllx	%i0,3,%o1
776*5d9d9091SRichard Lowe/* 0x0194	 159 */		add	%i3,1,%o3
777*5d9d9091SRichard Lowe/* 0x0198	 158 */		ldd	[%i1+%lo(___const_seg_900000501)],%f20
778*5d9d9091SRichard Lowe/* 0x019c	 159 */		sra	%o3,0,%l3
779*5d9d9091SRichard Lowe/* 0x01a0	     */		add	%i5,1,%i5
780*5d9d9091SRichard Lowe/* 0x01a4	 158 */		ld	[%sp+2399],%f17
781*5d9d9091SRichard Lowe/* 0x01a8	 159 */		sllx	%l3,3,%o0
782*5d9d9091SRichard Lowe/* 0x01ac	     */		add	%l7,4,%l7
783*5d9d9091SRichard Lowe/* 0x01b0	     */		fmovs	%f16,%f18
784*5d9d9091SRichard Lowe/* 0x01b4	     */		cmp	%i5,%l6
785*5d9d9091SRichard Lowe/* 0x01b8	     */		add	%i3,2,%i3
786*5d9d9091SRichard Lowe/* 0x01bc	 158 */		fsubd	%f16,%f20,%f48
787*5d9d9091SRichard Lowe/* 0x01c0	     */		std	%f48,[%i2+%o1]
788*5d9d9091SRichard Lowe/* 0x01c4	 159 */		ld	[%sp+2367],%f19
789*5d9d9091SRichard Lowe/* 0x01c8	     */		fsubd	%f18,%f20,%f50
790*5d9d9091SRichard Lowe/* 0x01cc	     */		std	%f50,[%i2+%o0]
791*5d9d9091SRichard Lowe/* 0x01d0	     */		ble,a,pt	%icc,.L900000510
792*5d9d9091SRichard Lowe/* 0x01d4	 157 */		ld	[%l7],%l2
793*5d9d9091SRichard Lowe                       .L77000272:
794*5d9d9091SRichard Lowe/* 0x01d8	 159 */		ret	! Result =
795*5d9d9091SRichard Lowe/* 0x01dc	     */		restore	%g0,%g0,%g0
796*5d9d9091SRichard Lowe/* 0x01e0	   0 */		.type	conv_i32_to_d16,2
797*5d9d9091SRichard Lowe/* 0x01e0	   0 */		.size	conv_i32_to_d16,(.-conv_i32_to_d16)
798*5d9d9091SRichard Lowe
799*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
800*5d9d9091SRichard Lowe/* 000000	   0 */		.align	8
801*5d9d9091SRichard Lowe!
802*5d9d9091SRichard Lowe! CONSTANT POOL
803*5d9d9091SRichard Lowe!
804*5d9d9091SRichard Lowe                       ___const_seg_900000601:
805*5d9d9091SRichard Lowe/* 000000	   0 */		.word	1127219200,0
806*5d9d9091SRichard Lowe/* 0x0008	     */		.word	1127219200
807*5d9d9091SRichard Lowe/* 0x000c	   0 */		.type	___const_seg_900000601,1
808*5d9d9091SRichard Lowe/* 0x000c	   0 */		.size	___const_seg_900000601,(.-___const_seg_900000601)
809*5d9d9091SRichard Lowe/* 0x000c	   0 */		.align	8
810*5d9d9091SRichard Lowe/* 0x0010	     */		.skip	24
811*5d9d9091SRichard Lowe/* 0x0028	     */		.align	32
812*5d9d9091SRichard Lowe
813*5d9d9091SRichard Lowe!  160		      !	}
814*5d9d9091SRichard Lowe!  161		      !}
815*5d9d9091SRichard Lowe!  163		      !#ifdef RF_INLINE_MACROS
816*5d9d9091SRichard Lowe!  165		      !void
817*5d9d9091SRichard Lowe!  166		      !i16_to_d16_and_d32x4(const double *,	/* 1/(2^16) */
818*5d9d9091SRichard Lowe!  167		      !			const double *,	/* 2^16 */
819*5d9d9091SRichard Lowe!  168		      !			const double *,	/* 0 */
820*5d9d9091SRichard Lowe!  169		      !			double *,	/* result16 */
821*5d9d9091SRichard Lowe!  170		      !			double *,	/* result32 */
822*5d9d9091SRichard Lowe!  171		      !			float *);	/* source - should be unsigned int* */
823*5d9d9091SRichard Lowe!  172		      !					/* converted to float* */
824*5d9d9091SRichard Lowe!  174		      !#else
825*5d9d9091SRichard Lowe!  177		      !/* ARGSUSED */
826*5d9d9091SRichard Lowe!  178		      !static void
827*5d9d9091SRichard Lowe!  179		      !i16_to_d16_and_d32x4(const double *dummy1,	/* 1/(2^16) */
828*5d9d9091SRichard Lowe!  180		      !			const double *dummy2,	/* 2^16 */
829*5d9d9091SRichard Lowe!  181		      !			const double *dummy3,	/* 0 */
830*5d9d9091SRichard Lowe!  182		      !			double *result16,
831*5d9d9091SRichard Lowe!  183		      !			double *result32,
832*5d9d9091SRichard Lowe!  184		      !			float *src)	/* source - should be unsigned int* */
833*5d9d9091SRichard Lowe!  185		      !					/* converted to float* */
834*5d9d9091SRichard Lowe!  186		      !{
835*5d9d9091SRichard Lowe!  187		      !	uint32_t *i32;
836*5d9d9091SRichard Lowe!  188		      !	uint32_t a, b, c, d;
837*5d9d9091SRichard Lowe!  190		      !	i32 = (uint32_t *)src;
838*5d9d9091SRichard Lowe!  191		      !	a = i32[0];
839*5d9d9091SRichard Lowe!  192		      !	b = i32[1];
840*5d9d9091SRichard Lowe!  193		      !	c = i32[2];
841*5d9d9091SRichard Lowe!  194		      !	d = i32[3];
842*5d9d9091SRichard Lowe!  195		      !	result16[0] = (double)(a & 0xffff);
843*5d9d9091SRichard Lowe!  196		      !	result16[1] = (double)(a >> 16);
844*5d9d9091SRichard Lowe!  197		      !	result32[0] = (double)a;
845*5d9d9091SRichard Lowe!  198		      !	result16[2] = (double)(b & 0xffff);
846*5d9d9091SRichard Lowe!  199		      !	result16[3] = (double)(b >> 16);
847*5d9d9091SRichard Lowe!  200		      !	result32[1] = (double)b;
848*5d9d9091SRichard Lowe!  201		      !	result16[4] = (double)(c & 0xffff);
849*5d9d9091SRichard Lowe!  202		      !	result16[5] = (double)(c >> 16);
850*5d9d9091SRichard Lowe!  203		      !	result32[2] = (double)c;
851*5d9d9091SRichard Lowe!  204		      !	result16[6] = (double)(d & 0xffff);
852*5d9d9091SRichard Lowe!  205		      !	result16[7] = (double)(d >> 16);
853*5d9d9091SRichard Lowe!  206		      !	result32[3] = (double)d;
854*5d9d9091SRichard Lowe!  207		      !}
855*5d9d9091SRichard Lowe!  209		      !#endif
856*5d9d9091SRichard Lowe!  212		      !void
857*5d9d9091SRichard Lowe!  213		      !conv_i32_to_d32_and_d16(double *d32, double *d16, uint32_t *i32, int len)
858*5d9d9091SRichard Lowe!  214		      !{
859*5d9d9091SRichard Lowe
860*5d9d9091SRichard Lowe!
861*5d9d9091SRichard Lowe! SUBROUTINE conv_i32_to_d32_and_d16
862*5d9d9091SRichard Lowe!
863*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
864*5d9d9091SRichard Lowe
865*5d9d9091SRichard Lowe			.global conv_i32_to_d32_and_d16
866*5d9d9091SRichard Lowe                       conv_i32_to_d32_and_d16:
867*5d9d9091SRichard Lowe/* 000000	 214 */		save	%sp,-368,%sp
868*5d9d9091SRichard Lowe
869*5d9d9091SRichard Lowe!  215		      !	int i;
870*5d9d9091SRichard Lowe!  216		      !	uint32_t a;
871*5d9d9091SRichard Lowe!  218		      !#pragma pipeloop(0)
872*5d9d9091SRichard Lowe!  219		      !	for (i = 0; i < len - 3; i += 4) {
873*5d9d9091SRichard Lowe!  220		      !		i16_to_d16_and_d32x4(&TwoToMinus16, &TwoTo16, &Zero,
874*5d9d9091SRichard Lowe!  221		      !					&(d16[2*i]), &(d32[i]),
875*5d9d9091SRichard Lowe!  222		      !					(float *)(&(i32[i])));
876*5d9d9091SRichard Lowe!  223		      !	}
877*5d9d9091SRichard Lowe!  224		      !	for (; i < len; i++) {
878*5d9d9091SRichard Lowe!  225		      !		a = i32[i];
879*5d9d9091SRichard Lowe!  226		      !		d32[i] = (double)(i32[i]);
880*5d9d9091SRichard Lowe!  227		      !		d16[2 * i] = (double)(a & 0xffff);
881*5d9d9091SRichard Lowe!  228		      !		d16[2 * i + 1] = (double)(a >> 16);
882*5d9d9091SRichard Lowe
883*5d9d9091SRichard Lowe/* 0x0004	 228 */		sub	%i3,3,%i4
884*5d9d9091SRichard Lowe/* 0x0008	 219 */		cmp	%i4,0
885*5d9d9091SRichard Lowe/* 0x000c	     */		ble,pn	%icc,.L77000289
886*5d9d9091SRichard Lowe/* 0x0010	     */		or	%g0,0,%i5
887*5d9d9091SRichard Lowe                       .L77000306:
888*5d9d9091SRichard Lowe/* 0x0014	 222 */		sethi	%hi(Zero),%g3
889*5d9d9091SRichard Lowe/* 0x0018	     */		sethi	%hi(TwoToMinus16),%g2
890*5d9d9091SRichard Lowe/* 0x001c	     */		sethi	%hi(TwoTo16),%o5
891*5d9d9091SRichard Lowe/* 0x0020	     */		ldd	[%g3+%lo(Zero)],%f2
892*5d9d9091SRichard Lowe/* 0x0024	 219 */		sub	%i3,4,%o4
893*5d9d9091SRichard Lowe/* 0x0028	     */		or	%g0,0,%o3
894*5d9d9091SRichard Lowe/* 0x002c	     */		or	%g0,%i0,%l6
895*5d9d9091SRichard Lowe/* 0x0030	     */		or	%g0,%i2,%l5
896*5d9d9091SRichard Lowe                       .L900000615:
897*5d9d9091SRichard Lowe/* 0x0034	 222 */		fmovd	%f2,%f26
898*5d9d9091SRichard Lowe/* 0x0038	     */		ld	[%l5],%f27
899*5d9d9091SRichard Lowe/* 0x003c	     */		sra	%o3,0,%o0
900*5d9d9091SRichard Lowe/* 0x0040	     */		add	%i5,4,%i5
901*5d9d9091SRichard Lowe/* 0x0044	     */		fmovd	%f2,%f28
902*5d9d9091SRichard Lowe/* 0x0048	     */		ld	[%l5+4],%f29
903*5d9d9091SRichard Lowe/* 0x004c	     */		sllx	%o0,3,%g5
904*5d9d9091SRichard Lowe/* 0x0050	     */		cmp	%i5,%o4
905*5d9d9091SRichard Lowe/* 0x0054	     */		fmovd	%f2,%f30
906*5d9d9091SRichard Lowe/* 0x0058	     */		ld	[%l5+8],%f31
907*5d9d9091SRichard Lowe/* 0x005c	     */		add	%i1,%g5,%g4
908*5d9d9091SRichard Lowe/* 0x0060	     */		add	%o3,8,%o3
909*5d9d9091SRichard Lowe/* 0x0064	     */		ld	[%l5+12],%f3
910*5d9d9091SRichard Lowe/* 0x0068	     */		fxtod	%f26,%f26
911*5d9d9091SRichard Lowe/* 0x006c	     */		ldd	[%g2+%lo(TwoToMinus16)],%f32
912*5d9d9091SRichard Lowe/* 0x0070	     */		fxtod	%f28,%f28
913*5d9d9091SRichard Lowe/* 0x0074	     */		add	%l5,16,%l5
914*5d9d9091SRichard Lowe/* 0x0078	     */		fxtod	%f30,%f30
915*5d9d9091SRichard Lowe/* 0x007c	     */		ldd	[%o5+%lo(TwoTo16)],%f34
916*5d9d9091SRichard Lowe/* 0x0080	     */		fxtod	%f2,%f2
917*5d9d9091SRichard Lowe/* 0x0084	     */		std	%f2,[%l6+24]
918*5d9d9091SRichard Lowe/* 0x0088	     */		fmuld	%f32,%f26,%f36
919*5d9d9091SRichard Lowe/* 0x008c	     */		std	%f26,[%l6]
920*5d9d9091SRichard Lowe/* 0x0090	     */		fmuld	%f32,%f28,%f38
921*5d9d9091SRichard Lowe/* 0x0094	     */		std	%f28,[%l6+8]
922*5d9d9091SRichard Lowe/* 0x0098	     */		fmuld	%f32,%f30,%f40
923*5d9d9091SRichard Lowe/* 0x009c	     */		std	%f30,[%l6+16]
924*5d9d9091SRichard Lowe/* 0x00a0	     */		fmuld	%f32,%f2,%f42
925*5d9d9091SRichard Lowe/* 0x00a4	     */		add	%l6,32,%l6
926*5d9d9091SRichard Lowe/* 0x00a8	     */		fdtox	%f36,%f36
927*5d9d9091SRichard Lowe/* 0x00ac	     */		fdtox	%f38,%f38
928*5d9d9091SRichard Lowe/* 0x00b0	     */		fdtox	%f40,%f40
929*5d9d9091SRichard Lowe/* 0x00b4	     */		fdtox	%f42,%f42
930*5d9d9091SRichard Lowe/* 0x00b8	     */		fxtod	%f36,%f36
931*5d9d9091SRichard Lowe/* 0x00bc	     */		std	%f36,[%g4+8]
932*5d9d9091SRichard Lowe/* 0x00c0	     */		fxtod	%f38,%f38
933*5d9d9091SRichard Lowe/* 0x00c4	     */		std	%f38,[%g4+24]
934*5d9d9091SRichard Lowe/* 0x00c8	     */		fxtod	%f40,%f40
935*5d9d9091SRichard Lowe/* 0x00cc	     */		std	%f40,[%g4+40]
936*5d9d9091SRichard Lowe/* 0x00d0	     */		fxtod	%f42,%f42
937*5d9d9091SRichard Lowe/* 0x00d4	     */		std	%f42,[%g4+56]
938*5d9d9091SRichard Lowe/* 0x00d8	     */		fmuld	%f36,%f34,%f36
939*5d9d9091SRichard Lowe/* 0x00dc	     */		fmuld	%f38,%f34,%f38
940*5d9d9091SRichard Lowe/* 0x00e0	     */		fmuld	%f40,%f34,%f40
941*5d9d9091SRichard Lowe/* 0x00e4	     */		fmuld	%f42,%f34,%f42
942*5d9d9091SRichard Lowe/* 0x00e8	     */		fsubd	%f26,%f36,%f36
943*5d9d9091SRichard Lowe/* 0x00ec	     */		std	%f36,[%i1+%g5]
944*5d9d9091SRichard Lowe/* 0x00f0	     */		fsubd	%f28,%f38,%f38
945*5d9d9091SRichard Lowe/* 0x00f4	     */		std	%f38,[%g4+16]
946*5d9d9091SRichard Lowe/* 0x00f8	     */		fsubd	%f30,%f40,%f40
947*5d9d9091SRichard Lowe/* 0x00fc	     */		std	%f40,[%g4+32]
948*5d9d9091SRichard Lowe/* 0x0100	     */		fsubd	%f2,%f42,%f42
949*5d9d9091SRichard Lowe/* 0x0104	     */		std	%f42,[%g4+48]
950*5d9d9091SRichard Lowe/* 0x0108	     */		ble,a,pt	%icc,.L900000615
951*5d9d9091SRichard Lowe/* 0x010c	     */		ldd	[%g3+%lo(Zero)],%f2
952*5d9d9091SRichard Lowe                       .L77000289:
953*5d9d9091SRichard Lowe/* 0x0110	 224 */		cmp	%i5,%i3
954*5d9d9091SRichard Lowe/* 0x0114	     */		bge,pn	%icc,.L77000294
955*5d9d9091SRichard Lowe/* 0x0118	     */		sethi	%hi(0xfc00),%l0
956*5d9d9091SRichard Lowe                       .L77000307:
957*5d9d9091SRichard Lowe/* 0x011c	 224 */		sra	%i5,0,%l2
958*5d9d9091SRichard Lowe/* 0x0120	     */		sll	%i5,1,%i4
959*5d9d9091SRichard Lowe/* 0x0124	     */		sllx	%l2,3,%l1
960*5d9d9091SRichard Lowe/* 0x0128	     */		sllx	%l2,2,%o1
961*5d9d9091SRichard Lowe/* 0x012c	 225 */		sub	%i3,%i5,%l3
962*5d9d9091SRichard Lowe/* 0x0130	 224 */		add	%l0,1023,%l0
963*5d9d9091SRichard Lowe/* 0x0134	     */		add	%l1,%i0,%l1
964*5d9d9091SRichard Lowe/* 0x0138	     */		add	%o1,%i2,%i2
965*5d9d9091SRichard Lowe/* 0x013c	 225 */		cmp	%l3,5
966*5d9d9091SRichard Lowe/* 0x0140	     */		bl,pn	%icc,.L77000291
967*5d9d9091SRichard Lowe/* 0x0144	   0 */		sethi	%hi(___const_seg_900000601),%l7
968*5d9d9091SRichard Lowe                       .L900000612:
969*5d9d9091SRichard Lowe/* 0x0148	 225 */		prefetch	[%l1],22
970*5d9d9091SRichard Lowe/* 0x014c	     */		prefetch	[%l1+64],22
971*5d9d9091SRichard Lowe/* 0x0150	     */		sra	%i4,0,%l6
972*5d9d9091SRichard Lowe/* 0x0154	 226 */		sethi	%hi(___const_seg_900000601+8),%l2
973*5d9d9091SRichard Lowe/* 0x0158	 225 */		prefetch	[%l1+128],22
974*5d9d9091SRichard Lowe/* 0x015c	     */		add	%l6,-2,%l5
975*5d9d9091SRichard Lowe/* 0x0160	     */		sub	%i3,3,%i0
976*5d9d9091SRichard Lowe/* 0x0164	     */		prefetch	[%l1+192],22
977*5d9d9091SRichard Lowe/* 0x0168	     */		sllx	%l5,3,%o4
978*5d9d9091SRichard Lowe/* 0x016c	 228 */		add	%i5,1,%i5
979*5d9d9091SRichard Lowe/* 0x0170	 225 */		add	%i1,%o4,%o3
980*5d9d9091SRichard Lowe/* 0x0174	     */		or	%g0,%i3,%g1
981*5d9d9091SRichard Lowe/* 0x0178	     */		ld	[%i2],%l4
982*5d9d9091SRichard Lowe/* 0x017c	     */		prefetch	[%o3+16],22
983*5d9d9091SRichard Lowe/* 0x0180	     */		add	%o3,16,%l3
984*5d9d9091SRichard Lowe/* 0x0184	 228 */		add	%i2,4,%i2
985*5d9d9091SRichard Lowe/* 0x0188	 225 */		prefetch	[%o3+80],22
986*5d9d9091SRichard Lowe/* 0x018c	 228 */		srl	%l4,16,%o1
987*5d9d9091SRichard Lowe/* 0x0190	 227 */		and	%l4,%l0,%o0
988*5d9d9091SRichard Lowe/* 0x0194	 225 */		prefetch	[%o3+144],22
989*5d9d9091SRichard Lowe/* 0x0198	 228 */		st	%o1,[%sp+2271]
990*5d9d9091SRichard Lowe/* 0x019c	 227 */		st	%o0,[%sp+2239]
991*5d9d9091SRichard Lowe/* 0x01a0	 226 */		ldd	[%l7+%lo(___const_seg_900000601)],%f32
992*5d9d9091SRichard Lowe/* 0x01a4	 228 */		ld	[%l2+%lo(___const_seg_900000601+8)],%f0
993*5d9d9091SRichard Lowe/* 0x01a8	 225 */		prefetch	[%o3+208],22
994*5d9d9091SRichard Lowe/* 0x01ac	     */		prefetch	[%o3+272],22
995*5d9d9091SRichard Lowe/* 0x01b0	     */		prefetch	[%o3+336],22
996*5d9d9091SRichard Lowe                       .L900000610:
997*5d9d9091SRichard Lowe/* 0x01b4	 225 */		prefetch	[%l1+192],22
998*5d9d9091SRichard Lowe/* 0x01b8	 228 */		add	%i5,4,%i5
999*5d9d9091SRichard Lowe/* 0x01bc	 225 */		add	%l3,64,%l3
1000*5d9d9091SRichard Lowe/* 0x01c0	 227 */		ld	[%l2+%lo(___const_seg_900000601+8)],%f8
1001*5d9d9091SRichard Lowe/* 0x01c4	 228 */		cmp	%i5,%i0
1002*5d9d9091SRichard Lowe/* 0x01c8	 225 */		ld	[%i2],%g5
1003*5d9d9091SRichard Lowe/* 0x01cc	 228 */		add	%i2,16,%i2
1004*5d9d9091SRichard Lowe/* 0x01d0	     */		add	%l1,32,%l1
1005*5d9d9091SRichard Lowe/* 0x01d4	     */		add	%i4,8,%i4
1006*5d9d9091SRichard Lowe/* 0x01d8	 226 */		ld	[%i2-20],%f7
1007*5d9d9091SRichard Lowe/* 0x01dc	 228 */		srl	%g5,16,%i3
1008*5d9d9091SRichard Lowe/* 0x01e0	 226 */		fmovs	%f8,%f6
1009*5d9d9091SRichard Lowe/* 0x01e4	 228 */		st	%i3,[%sp+2335]
1010*5d9d9091SRichard Lowe/* 0x01e8	 227 */		and	%g5,%l0,%g4
1011*5d9d9091SRichard Lowe/* 0x01ec	     */		st	%g4,[%sp+2303]
1012*5d9d9091SRichard Lowe/* 0x01f0	 226 */		fsubd	%f6,%f32,%f40
1013*5d9d9091SRichard Lowe/* 0x01f4	 227 */		ld	[%sp+2239],%f9
1014*5d9d9091SRichard Lowe/* 0x01f8	 228 */		ld	[%sp+2271],%f1
1015*5d9d9091SRichard Lowe/* 0x01fc	     */		fmovs	%f8,%f12
1016*5d9d9091SRichard Lowe/* 0x0200	 226 */		std	%f40,[%l1-32]
1017*5d9d9091SRichard Lowe/* 0x0204	 227 */		fsubd	%f8,%f32,%f42
1018*5d9d9091SRichard Lowe/* 0x0208	     */		std	%f42,[%l3-64]
1019*5d9d9091SRichard Lowe/* 0x020c	 228 */		fsubd	%f0,%f32,%f44
1020*5d9d9091SRichard Lowe/* 0x0210	     */		std	%f44,[%l3-56]
1021*5d9d9091SRichard Lowe/* 0x0214	 227 */		fmovs	%f12,%f10
1022*5d9d9091SRichard Lowe/* 0x0218	 225 */		ld	[%i2-12],%g2
1023*5d9d9091SRichard Lowe/* 0x021c	 226 */		ld	[%i2-16],%f1
1024*5d9d9091SRichard Lowe/* 0x0220	 228 */		srl	%g2,16,%g3
1025*5d9d9091SRichard Lowe/* 0x0224	 226 */		fmovs	%f12,%f0
1026*5d9d9091SRichard Lowe/* 0x0228	 225 */		prefetch	[%l3+320],22
1027*5d9d9091SRichard Lowe/* 0x022c	 228 */		st	%g3,[%sp+2271]
1028*5d9d9091SRichard Lowe/* 0x0230	 227 */		and	%g2,%l0,%l6
1029*5d9d9091SRichard Lowe/* 0x0234	     */		st	%l6,[%sp+2239]
1030*5d9d9091SRichard Lowe/* 0x0238	 226 */		fsubd	%f0,%f32,%f46
1031*5d9d9091SRichard Lowe/* 0x023c	 227 */		ld	[%sp+2303],%f11
1032*5d9d9091SRichard Lowe/* 0x0240	 228 */		ld	[%sp+2335],%f13
1033*5d9d9091SRichard Lowe/* 0x0244	     */		fmovs	%f12,%f18
1034*5d9d9091SRichard Lowe/* 0x0248	 226 */		std	%f46,[%l1-24]
1035*5d9d9091SRichard Lowe/* 0x024c	 227 */		fsubd	%f10,%f32,%f48
1036*5d9d9091SRichard Lowe/* 0x0250	     */		std	%f48,[%l3-48]
1037*5d9d9091SRichard Lowe/* 0x0254	 228 */		fsubd	%f12,%f32,%f50
1038*5d9d9091SRichard Lowe/* 0x0258	     */		std	%f50,[%l3-40]
1039*5d9d9091SRichard Lowe/* 0x025c	 227 */		fmovs	%f18,%f16
1040*5d9d9091SRichard Lowe/* 0x0260	 225 */		ld	[%i2-8],%o5
1041*5d9d9091SRichard Lowe/* 0x0264	 226 */		ld	[%i2-12],%f15
1042*5d9d9091SRichard Lowe/* 0x0268	 228 */		srl	%o5,16,%l5
1043*5d9d9091SRichard Lowe/* 0x026c	 226 */		fmovs	%f18,%f14
1044*5d9d9091SRichard Lowe/* 0x0270	 228 */		st	%l5,[%sp+2335]
1045*5d9d9091SRichard Lowe/* 0x0274	 227 */		and	%o5,%l0,%o4
1046*5d9d9091SRichard Lowe/* 0x0278	     */		st	%o4,[%sp+2303]
1047*5d9d9091SRichard Lowe/* 0x027c	 226 */		fsubd	%f14,%f32,%f52
1048*5d9d9091SRichard Lowe/* 0x0280	 227 */		ld	[%sp+2239],%f17
1049*5d9d9091SRichard Lowe/* 0x0284	 228 */		ld	[%sp+2271],%f19
1050*5d9d9091SRichard Lowe/* 0x0288	 225 */		prefetch	[%l3+352],22
1051*5d9d9091SRichard Lowe/* 0x028c	 228 */		fmovs	%f18,%f24
1052*5d9d9091SRichard Lowe/* 0x0290	 226 */		std	%f52,[%l1-16]
1053*5d9d9091SRichard Lowe/* 0x0294	 227 */		fsubd	%f16,%f32,%f54
1054*5d9d9091SRichard Lowe/* 0x0298	     */		std	%f54,[%l3-32]
1055*5d9d9091SRichard Lowe/* 0x029c	 228 */		fsubd	%f18,%f32,%f56
1056*5d9d9091SRichard Lowe/* 0x02a0	     */		std	%f56,[%l3-24]
1057*5d9d9091SRichard Lowe/* 0x02a4	 227 */		fmovs	%f24,%f22
1058*5d9d9091SRichard Lowe/* 0x02a8	 225 */		ld	[%i2-4],%l4
1059*5d9d9091SRichard Lowe/* 0x02ac	 226 */		ld	[%i2-8],%f21
1060*5d9d9091SRichard Lowe/* 0x02b0	 228 */		srl	%l4,16,%o3
1061*5d9d9091SRichard Lowe/* 0x02b4	 226 */		fmovs	%f24,%f20
1062*5d9d9091SRichard Lowe/* 0x02b8	 228 */		st	%o3,[%sp+2271]
1063*5d9d9091SRichard Lowe/* 0x02bc	 227 */		and	%l4,%l0,%o2
1064*5d9d9091SRichard Lowe/* 0x02c0	     */		st	%o2,[%sp+2239]
1065*5d9d9091SRichard Lowe/* 0x02c4	 226 */		fsubd	%f20,%f32,%f58
1066*5d9d9091SRichard Lowe/* 0x02c8	 227 */		ld	[%sp+2303],%f23
1067*5d9d9091SRichard Lowe/* 0x02cc	 228 */		ld	[%sp+2335],%f25
1068*5d9d9091SRichard Lowe/* 0x02d0	     */		fmovs	%f24,%f0
1069*5d9d9091SRichard Lowe/* 0x02d4	 226 */		std	%f58,[%l1-8]
1070*5d9d9091SRichard Lowe/* 0x02d8	 227 */		fsubd	%f22,%f32,%f60
1071*5d9d9091SRichard Lowe/* 0x02dc	     */		std	%f60,[%l3-16]
1072*5d9d9091SRichard Lowe/* 0x02e0	 228 */		fsubd	%f24,%f32,%f62
1073*5d9d9091SRichard Lowe/* 0x02e4	     */		bl,pt	%icc,.L900000610
1074*5d9d9091SRichard Lowe/* 0x02e8	     */		std	%f62,[%l3-8]
1075*5d9d9091SRichard Lowe                       .L900000613:
1076*5d9d9091SRichard Lowe/* 0x02ec	 227 */		ld	[%l2+%lo(___const_seg_900000601+8)],%f4
1077*5d9d9091SRichard Lowe/* 0x02f0	 228 */		add	%l1,8,%l1
1078*5d9d9091SRichard Lowe/* 0x02f4	     */		cmp	%i5,%g1
1079*5d9d9091SRichard Lowe/* 0x02f8	 226 */		ld	[%i2-4],%f3
1080*5d9d9091SRichard Lowe/* 0x02fc	 225 */		or	%g0,%g1,%i3
1081*5d9d9091SRichard Lowe/* 0x0300	 228 */		add	%i4,2,%i4
1082*5d9d9091SRichard Lowe/* 0x0304	 227 */		ld	[%sp+2239],%f5
1083*5d9d9091SRichard Lowe/* 0x0308	 226 */		fmovs	%f4,%f2
1084*5d9d9091SRichard Lowe/* 0x030c	 228 */		ld	[%sp+2271],%f1
1085*5d9d9091SRichard Lowe/* 0x0310	 226 */		fsubd	%f2,%f32,%f34
1086*5d9d9091SRichard Lowe/* 0x0314	     */		std	%f34,[%l1-8]
1087*5d9d9091SRichard Lowe/* 0x0318	 227 */		fsubd	%f4,%f32,%f36
1088*5d9d9091SRichard Lowe/* 0x031c	     */		std	%f36,[%l3]
1089*5d9d9091SRichard Lowe/* 0x0320	 228 */		fsubd	%f0,%f32,%f38
1090*5d9d9091SRichard Lowe/* 0x0324	     */		bge,pn	%icc,.L77000294
1091*5d9d9091SRichard Lowe/* 0x0328	     */		std	%f38,[%l3+8]
1092*5d9d9091SRichard Lowe                       .L77000291:
1093*5d9d9091SRichard Lowe/* 0x032c	 225 */		ld	[%i2],%o2
1094*5d9d9091SRichard Lowe                       .L900000614:
1095*5d9d9091SRichard Lowe/* 0x0330	 226 */		ldd	[%l7+%lo(___const_seg_900000601)],%f32
1096*5d9d9091SRichard Lowe/* 0x0334	 228 */		srl	%o2,16,%l3
1097*5d9d9091SRichard Lowe/* 0x0338	 227 */		sra	%i4,0,%i0
1098*5d9d9091SRichard Lowe/* 0x033c	 228 */		st	%l3,[%sp+2367]
1099*5d9d9091SRichard Lowe/* 0x0340	 227 */		and	%o2,%l0,%g1
1100*5d9d9091SRichard Lowe/* 0x0344	 226 */		sethi	%hi(___const_seg_900000601+8),%l2
1101*5d9d9091SRichard Lowe/* 0x0348	 227 */		st	%g1,[%sp+2399]
1102*5d9d9091SRichard Lowe/* 0x034c	     */		sllx	%i0,3,%o0
1103*5d9d9091SRichard Lowe/* 0x0350	 228 */		add	%i4,1,%l4
1104*5d9d9091SRichard Lowe/* 0x0354	 226 */		ld	[%l2+%lo(___const_seg_900000601+8)],%f4
1105*5d9d9091SRichard Lowe/* 0x0358	 228 */		sra	%l4,0,%o1
1106*5d9d9091SRichard Lowe/* 0x035c	     */		add	%i5,1,%i5
1107*5d9d9091SRichard Lowe/* 0x0360	 226 */		ld	[%i2],%f5
1108*5d9d9091SRichard Lowe/* 0x0364	 228 */		sllx	%o1,3,%g5
1109*5d9d9091SRichard Lowe/* 0x0368	     */		cmp	%i5,%i3
1110*5d9d9091SRichard Lowe/* 0x036c	     */		ld	[%sp+2367],%f9
1111*5d9d9091SRichard Lowe/* 0x0370	     */		add	%i2,4,%i2
1112*5d9d9091SRichard Lowe/* 0x0374	     */		add	%i4,2,%i4
1113*5d9d9091SRichard Lowe/* 0x0378	 227 */		fmovs	%f4,%f6
1114*5d9d9091SRichard Lowe/* 0x037c	 226 */		fsubd	%f4,%f32,%f44
1115*5d9d9091SRichard Lowe/* 0x0380	     */		std	%f44,[%l1]
1116*5d9d9091SRichard Lowe/* 0x0384	 227 */		ld	[%sp+2399],%f7
1117*5d9d9091SRichard Lowe/* 0x0388	 228 */		fmovs	%f6,%f8
1118*5d9d9091SRichard Lowe/* 0x038c	     */		add	%l1,8,%l1
1119*5d9d9091SRichard Lowe/* 0x0390	     */		fsubd	%f8,%f32,%f48
1120*5d9d9091SRichard Lowe/* 0x0394	 227 */		fsubd	%f6,%f32,%f46
1121*5d9d9091SRichard Lowe/* 0x0398	     */		std	%f46,[%i1+%o0]
1122*5d9d9091SRichard Lowe/* 0x039c	 228 */		std	%f48,[%i1+%g5]
1123*5d9d9091SRichard Lowe/* 0x03a0	     */		bl,a,pt	%icc,.L900000614
1124*5d9d9091SRichard Lowe/* 0x03a4	 225 */		ld	[%i2],%o2
1125*5d9d9091SRichard Lowe                       .L77000294:
1126*5d9d9091SRichard Lowe/* 0x03a8	 222 */		ret	! Result =
1127*5d9d9091SRichard Lowe/* 0x03ac	     */		restore	%g0,%g0,%g0
1128*5d9d9091SRichard Lowe/* 0x03b0	   0 */		.type	conv_i32_to_d32_and_d16,2
1129*5d9d9091SRichard Lowe/* 0x03b0	   0 */		.size	conv_i32_to_d32_and_d16,(.-conv_i32_to_d32_and_d16)
1130*5d9d9091SRichard Lowe
1131*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
1132*5d9d9091SRichard Lowe/* 000000	   0 */		.align	32
1133*5d9d9091SRichard Lowe
1134*5d9d9091SRichard Lowe!  229		      !	}
1135*5d9d9091SRichard Lowe!  230		      !}
1136*5d9d9091SRichard Lowe!  232		      !extern long long c1, c2, c3, c4;
1137*5d9d9091SRichard Lowe!  234		      !static void
1138*5d9d9091SRichard Lowe!  235		      !adjust_montf_result(uint32_t *i32, uint32_t *nint, int len)
1139*5d9d9091SRichard Lowe!  236		      !{
1140*5d9d9091SRichard Lowe
1141*5d9d9091SRichard Lowe!
1142*5d9d9091SRichard Lowe! SUBROUTINE adjust_montf_result
1143*5d9d9091SRichard Lowe!
1144*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
1145*5d9d9091SRichard Lowe
1146*5d9d9091SRichard Lowe                       adjust_montf_result:
1147*5d9d9091SRichard Lowe/* 000000	 236 */		sra	%o2,0,%g2
1148*5d9d9091SRichard Lowe/* 0x0004	     */		or	%g0,%o0,%o4
1149*5d9d9091SRichard Lowe
1150*5d9d9091SRichard Lowe!  237		      !	int64_t acc;
1151*5d9d9091SRichard Lowe!  238		      !	int i;
1152*5d9d9091SRichard Lowe!  240		      !	if (i32[len] > 0) {
1153*5d9d9091SRichard Lowe
1154*5d9d9091SRichard Lowe/* 0x0008	 240 */		sllx	%g2,2,%g3
1155*5d9d9091SRichard Lowe/* 0x000c	     */		ld	[%o0+%g3],%o0
1156*5d9d9091SRichard Lowe/* 0x0010	     */		cmp	%o0,0
1157*5d9d9091SRichard Lowe/* 0x0014	     */		bleu,pn	%icc,.L77000316
1158*5d9d9091SRichard Lowe/* 0x0018	 236 */		or	%g0,%o1,%o5
1159*5d9d9091SRichard Lowe
1160*5d9d9091SRichard Lowe!  241		      !		i = -1;
1161*5d9d9091SRichard Lowe
1162*5d9d9091SRichard Lowe                       .L77000315:
1163*5d9d9091SRichard Lowe/* 0x001c	 241 */		sub	%g2,1,%g3
1164*5d9d9091SRichard Lowe/* 0x0020	     */		ba	.L900000712
1165*5d9d9091SRichard Lowe/* 0x0024	 249 */		cmp	%g2,0
1166*5d9d9091SRichard Lowe
1167*5d9d9091SRichard Lowe!  242		      !	} else {
1168*5d9d9091SRichard Lowe!  243		      !		for (i = len - 1; i >= 0; i--) {
1169*5d9d9091SRichard Lowe
1170*5d9d9091SRichard Lowe                       .L77000316:
1171*5d9d9091SRichard Lowe/* 0x0028	 243 */		subcc	%g2,1,%g3
1172*5d9d9091SRichard Lowe/* 0x002c	     */		bneg,pn	%icc,.L77000340
1173*5d9d9091SRichard Lowe/* 0x0030	     */		or	%g0,%g3,%o3
1174*5d9d9091SRichard Lowe                       .L77000348:
1175*5d9d9091SRichard Lowe/* 0x0034	 243 */		sra	%g3,0,%o1
1176*5d9d9091SRichard Lowe/* 0x0038	     */		sllx	%o1,2,%g1
1177*5d9d9091SRichard Lowe
1178*5d9d9091SRichard Lowe!  244		      !			if (i32[i] != nint[i]) break;
1179*5d9d9091SRichard Lowe
1180*5d9d9091SRichard Lowe/* 0x003c	 244 */		ld	[%g1+%o5],%g4
1181*5d9d9091SRichard Lowe/* 0x0040	 243 */		add	%g1,%o4,%o2
1182*5d9d9091SRichard Lowe/* 0x0044	     */		add	%g1,%o5,%o1
1183*5d9d9091SRichard Lowe                       .L900000713:
1184*5d9d9091SRichard Lowe/* 0x0048	 244 */		ld	[%o2],%o0
1185*5d9d9091SRichard Lowe/* 0x004c	     */		cmp	%o0,%g4
1186*5d9d9091SRichard Lowe/* 0x0050	     */		bne,pn	%icc,.L77000324
1187*5d9d9091SRichard Lowe/* 0x0054	     */		sub	%o2,4,%o2
1188*5d9d9091SRichard Lowe                       .L77000320:
1189*5d9d9091SRichard Lowe/* 0x0058	 244 */		sub	%o1,4,%o1
1190*5d9d9091SRichard Lowe/* 0x005c	     */		subcc	%o3,1,%o3
1191*5d9d9091SRichard Lowe/* 0x0060	     */		bpos,a,pt	%icc,.L900000713
1192*5d9d9091SRichard Lowe/* 0x0064	     */		ld	[%o1],%g4
1193*5d9d9091SRichard Lowe                       .L900000706:
1194*5d9d9091SRichard Lowe/* 0x0068	 244 */		ba	.L900000712
1195*5d9d9091SRichard Lowe/* 0x006c	 249 */		cmp	%g2,0
1196*5d9d9091SRichard Lowe                       .L77000324:
1197*5d9d9091SRichard Lowe/* 0x0070	 244 */		sra	%o3,0,%o0
1198*5d9d9091SRichard Lowe/* 0x0074	     */		sllx	%o0,2,%g1
1199*5d9d9091SRichard Lowe/* 0x0078	     */		ld	[%o5+%g1],%o3
1200*5d9d9091SRichard Lowe/* 0x007c	     */		ld	[%o4+%g1],%g5
1201*5d9d9091SRichard Lowe/* 0x0080	     */		cmp	%g5,%o3
1202*5d9d9091SRichard Lowe/* 0x0084	     */		bleu,pt	%icc,.L77000332
1203*5d9d9091SRichard Lowe/* 0x0088	     */		nop
1204*5d9d9091SRichard Lowe
1205*5d9d9091SRichard Lowe!  245		      !		}
1206*5d9d9091SRichard Lowe!  246		      !	}
1207*5d9d9091SRichard Lowe!  247		      !	if ((i < 0) || (i32[i] > nint[i])) {
1208*5d9d9091SRichard Lowe!  248		      !		acc = 0;
1209*5d9d9091SRichard Lowe!  249		      !		for (i = 0; i < len; i++) {
1210*5d9d9091SRichard Lowe
1211*5d9d9091SRichard Lowe                       .L77000340:
1212*5d9d9091SRichard Lowe/* 0x008c	 249 */		cmp	%g2,0
1213*5d9d9091SRichard Lowe                       .L900000712:
1214*5d9d9091SRichard Lowe/* 0x0090	 249 */		ble,pn	%icc,.L77000332
1215*5d9d9091SRichard Lowe/* 0x0094	 250 */		or	%g0,%g2,%o3
1216*5d9d9091SRichard Lowe                       .L77000347:
1217*5d9d9091SRichard Lowe/* 0x0098	 249 */		or	%g0,0,%o0
1218*5d9d9091SRichard Lowe
1219*5d9d9091SRichard Lowe!  250		      !			acc = acc + (uint64_t)(i32[i]) - (uint64_t)(nint[i]);
1220*5d9d9091SRichard Lowe
1221*5d9d9091SRichard Lowe/* 0x009c	 250 */		cmp	%o3,10
1222*5d9d9091SRichard Lowe/* 0x00a0	     */		bl,pn	%icc,.L77000341
1223*5d9d9091SRichard Lowe/* 0x00a4	 249 */		or	%g0,0,%g2
1224*5d9d9091SRichard Lowe                       .L900000709:
1225*5d9d9091SRichard Lowe/* 0x00a8	 250 */		prefetch	[%o4],22
1226*5d9d9091SRichard Lowe/* 0x00ac	     */		prefetch	[%o4+64],22
1227*5d9d9091SRichard Lowe
1228*5d9d9091SRichard Lowe!  251		      !			i32[i] = acc & 0xffffffff;
1229*5d9d9091SRichard Lowe!  252		      !			acc = acc >> 32;
1230*5d9d9091SRichard Lowe
1231*5d9d9091SRichard Lowe/* 0x00b0	 252 */		add	%o5,4,%o1
1232*5d9d9091SRichard Lowe/* 0x00b4	     */		add	%o4,8,%o2
1233*5d9d9091SRichard Lowe/* 0x00b8	 250 */		prefetch	[%o4+128],22
1234*5d9d9091SRichard Lowe/* 0x00bc	     */		sub	%o3,8,%o5
1235*5d9d9091SRichard Lowe/* 0x00c0	     */		or	%g0,2,%o0
1236*5d9d9091SRichard Lowe/* 0x00c4	     */		prefetch	[%o4+192],22
1237*5d9d9091SRichard Lowe/* 0x00c8	     */		prefetch	[%o4+256],22
1238*5d9d9091SRichard Lowe/* 0x00cc	     */		prefetch	[%o4+320],22
1239*5d9d9091SRichard Lowe/* 0x00d0	     */		prefetch	[%o4+384],22
1240*5d9d9091SRichard Lowe/* 0x00d4	     */		ld	[%o2-4],%g5
1241*5d9d9091SRichard Lowe/* 0x00d8	     */		prefetch	[%o2+440],22
1242*5d9d9091SRichard Lowe/* 0x00dc	     */		prefetch	[%o2+504],22
1243*5d9d9091SRichard Lowe/* 0x00e0	     */		ld	[%o4],%g4
1244*5d9d9091SRichard Lowe/* 0x00e4	     */		ld	[%o1-4],%o4
1245*5d9d9091SRichard Lowe/* 0x00e8	     */		sub	%g4,%o4,%o3
1246*5d9d9091SRichard Lowe/* 0x00ec	 251 */		st	%o3,[%o2-8]
1247*5d9d9091SRichard Lowe/* 0x00f0	 252 */		srax	%o3,32,%g4
1248*5d9d9091SRichard Lowe                       .L900000707:
1249*5d9d9091SRichard Lowe/* 0x00f4	 252 */		add	%o0,8,%o0
1250*5d9d9091SRichard Lowe/* 0x00f8	     */		add	%o2,32,%o2
1251*5d9d9091SRichard Lowe/* 0x00fc	 250 */		ld	[%o1],%g1
1252*5d9d9091SRichard Lowe/* 0x0100	     */		prefetch	[%o2+496],22
1253*5d9d9091SRichard Lowe/* 0x0104	 252 */		cmp	%o0,%o5
1254*5d9d9091SRichard Lowe/* 0x0108	     */		add	%o1,32,%o1
1255*5d9d9091SRichard Lowe/* 0x010c	 250 */		sub	%g5,%g1,%g5
1256*5d9d9091SRichard Lowe/* 0x0110	     */		add	%g5,%g4,%o4
1257*5d9d9091SRichard Lowe/* 0x0114	     */		ld	[%o2-32],%g4
1258*5d9d9091SRichard Lowe/* 0x0118	 251 */		st	%o4,[%o2-36]
1259*5d9d9091SRichard Lowe/* 0x011c	 252 */		srax	%o4,32,%g1
1260*5d9d9091SRichard Lowe/* 0x0120	 250 */		ld	[%o1-28],%o3
1261*5d9d9091SRichard Lowe/* 0x0124	     */		sub	%g4,%o3,%g2
1262*5d9d9091SRichard Lowe/* 0x0128	     */		add	%g2,%g1,%g5
1263*5d9d9091SRichard Lowe/* 0x012c	     */		ld	[%o2-28],%o3
1264*5d9d9091SRichard Lowe/* 0x0130	 251 */		st	%g5,[%o2-32]
1265*5d9d9091SRichard Lowe/* 0x0134	 252 */		srax	%g5,32,%g4
1266*5d9d9091SRichard Lowe/* 0x0138	 250 */		ld	[%o1-24],%o4
1267*5d9d9091SRichard Lowe/* 0x013c	     */		sub	%o3,%o4,%g1
1268*5d9d9091SRichard Lowe/* 0x0140	     */		add	%g1,%g4,%g2
1269*5d9d9091SRichard Lowe/* 0x0144	     */		ld	[%o2-24],%o3
1270*5d9d9091SRichard Lowe/* 0x0148	 251 */		st	%g2,[%o2-28]
1271*5d9d9091SRichard Lowe/* 0x014c	 252 */		srax	%g2,32,%g5
1272*5d9d9091SRichard Lowe/* 0x0150	 250 */		ld	[%o1-20],%o4
1273*5d9d9091SRichard Lowe/* 0x0154	     */		sub	%o3,%o4,%g4
1274*5d9d9091SRichard Lowe/* 0x0158	     */		add	%g4,%g5,%g1
1275*5d9d9091SRichard Lowe/* 0x015c	     */		ld	[%o2-20],%o4
1276*5d9d9091SRichard Lowe/* 0x0160	 251 */		st	%g1,[%o2-24]
1277*5d9d9091SRichard Lowe/* 0x0164	 252 */		srax	%g1,32,%o3
1278*5d9d9091SRichard Lowe/* 0x0168	 250 */		ld	[%o1-16],%g2
1279*5d9d9091SRichard Lowe/* 0x016c	     */		sub	%o4,%g2,%g5
1280*5d9d9091SRichard Lowe/* 0x0170	     */		add	%g5,%o3,%g1
1281*5d9d9091SRichard Lowe/* 0x0174	     */		ld	[%o2-16],%g4
1282*5d9d9091SRichard Lowe/* 0x0178	 251 */		st	%g1,[%o2-20]
1283*5d9d9091SRichard Lowe/* 0x017c	 252 */		srax	%g1,32,%o4
1284*5d9d9091SRichard Lowe/* 0x0180	 250 */		ld	[%o1-12],%g2
1285*5d9d9091SRichard Lowe/* 0x0184	     */		sub	%g4,%g2,%o3
1286*5d9d9091SRichard Lowe/* 0x0188	     */		add	%o3,%o4,%g5
1287*5d9d9091SRichard Lowe/* 0x018c	     */		ld	[%o2-12],%g2
1288*5d9d9091SRichard Lowe/* 0x0190	 251 */		st	%g5,[%o2-16]
1289*5d9d9091SRichard Lowe/* 0x0194	 252 */		srax	%g5,32,%g4
1290*5d9d9091SRichard Lowe/* 0x0198	 250 */		ld	[%o1-8],%g1
1291*5d9d9091SRichard Lowe/* 0x019c	     */		sub	%g2,%g1,%o4
1292*5d9d9091SRichard Lowe/* 0x01a0	     */		add	%o4,%g4,%o3
1293*5d9d9091SRichard Lowe/* 0x01a4	     */		ld	[%o2-8],%g2
1294*5d9d9091SRichard Lowe/* 0x01a8	 251 */		st	%o3,[%o2-12]
1295*5d9d9091SRichard Lowe/* 0x01ac	 252 */		srax	%o3,32,%g5
1296*5d9d9091SRichard Lowe/* 0x01b0	 250 */		ld	[%o1-4],%g1
1297*5d9d9091SRichard Lowe/* 0x01b4	     */		sub	%g2,%g1,%g4
1298*5d9d9091SRichard Lowe/* 0x01b8	     */		add	%g4,%g5,%o4
1299*5d9d9091SRichard Lowe/* 0x01bc	     */		ld	[%o2-4],%g5
1300*5d9d9091SRichard Lowe/* 0x01c0	 251 */		st	%o4,[%o2-8]
1301*5d9d9091SRichard Lowe/* 0x01c4	 252 */		ble,pt	%icc,.L900000707
1302*5d9d9091SRichard Lowe/* 0x01c8	     */		srax	%o4,32,%g4
1303*5d9d9091SRichard Lowe                       .L900000710:
1304*5d9d9091SRichard Lowe/* 0x01cc	 250 */		ld	[%o1],%o3
1305*5d9d9091SRichard Lowe/* 0x01d0	 252 */		add	%o1,4,%o5
1306*5d9d9091SRichard Lowe/* 0x01d4	 250 */		or	%g0,%o2,%o4
1307*5d9d9091SRichard Lowe/* 0x01d8	 252 */		cmp	%o0,%g3
1308*5d9d9091SRichard Lowe/* 0x01dc	 250 */		sub	%g5,%o3,%g2
1309*5d9d9091SRichard Lowe/* 0x01e0	     */		add	%g2,%g4,%g1
1310*5d9d9091SRichard Lowe/* 0x01e4	 251 */		st	%g1,[%o2-4]
1311*5d9d9091SRichard Lowe/* 0x01e8	 252 */		bg,pn	%icc,.L77000332
1312*5d9d9091SRichard Lowe/* 0x01ec	     */		srax	%g1,32,%g2
1313*5d9d9091SRichard Lowe                       .L77000341:
1314*5d9d9091SRichard Lowe/* 0x01f0	 250 */		ld	[%o4],%g5
1315*5d9d9091SRichard Lowe                       .L900000711:
1316*5d9d9091SRichard Lowe/* 0x01f4	 250 */		ld	[%o5],%o2
1317*5d9d9091SRichard Lowe/* 0x01f8	     */		add	%g2,%g5,%g4
1318*5d9d9091SRichard Lowe/* 0x01fc	 252 */		add	%o0,1,%o0
1319*5d9d9091SRichard Lowe/* 0x0200	     */		cmp	%o0,%g3
1320*5d9d9091SRichard Lowe/* 0x0204	     */		add	%o5,4,%o5
1321*5d9d9091SRichard Lowe/* 0x0208	 250 */		sub	%g4,%o2,%o1
1322*5d9d9091SRichard Lowe/* 0x020c	 251 */		st	%o1,[%o4]
1323*5d9d9091SRichard Lowe/* 0x0210	 252 */		srax	%o1,32,%g2
1324*5d9d9091SRichard Lowe/* 0x0214	     */		add	%o4,4,%o4
1325*5d9d9091SRichard Lowe/* 0x0218	     */		ble,a,pt	%icc,.L900000711
1326*5d9d9091SRichard Lowe/* 0x021c	 250 */		ld	[%o4],%g5
1327*5d9d9091SRichard Lowe                       .L77000332:
1328*5d9d9091SRichard Lowe/* 0x0220	 252 */		retl	! Result =
1329*5d9d9091SRichard Lowe/* 0x0224	     */		nop
1330*5d9d9091SRichard Lowe/* 0x0228	   0 */		.type	adjust_montf_result,2
1331*5d9d9091SRichard Lowe/* 0x0228	   0 */		.size	adjust_montf_result,(.-adjust_montf_result)
1332*5d9d9091SRichard Lowe
1333*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
1334*5d9d9091SRichard Lowe/* 000000	   0 */		.align	32
1335*5d9d9091SRichard Lowe
1336*5d9d9091SRichard Lowe!  253		      !		}
1337*5d9d9091SRichard Lowe!  254		      !	}
1338*5d9d9091SRichard Lowe!  255		      !}
1339*5d9d9091SRichard Lowe!  257		      !/*************
1340*5d9d9091SRichard Lowe!  258		      !static void
1341*5d9d9091SRichard Lowe!  259		      !adjust_montf_result_bad(uint32_t *i32, uint32_t *nint, int len)
1342*5d9d9091SRichard Lowe!  260		      !{
1343*5d9d9091SRichard Lowe!  261		      !	int64_t acc;
1344*5d9d9091SRichard Lowe!  262		      !	int i;
1345*5d9d9091SRichard Lowe!  264		      !	c4++;
1346*5d9d9091SRichard Lowe!  265		      !
1347*5d9d9091SRichard Lowe!  266		      !	if (i32[len] > 0) {
1348*5d9d9091SRichard Lowe!  267		      !		i = -1;
1349*5d9d9091SRichard Lowe!  268		      !		c1++;
1350*5d9d9091SRichard Lowe!  269		      !	} else {
1351*5d9d9091SRichard Lowe!  270		      !		for (i = len - 1; i >= 0; i++) {
1352*5d9d9091SRichard Lowe!  271		      !			if (i32[i] != nint[i]) break;
1353*5d9d9091SRichard Lowe!  272		      !			c2++;
1354*5d9d9091SRichard Lowe!  273		      !		}
1355*5d9d9091SRichard Lowe!  274		      !	}
1356*5d9d9091SRichard Lowe!  275		      !	if ((i < 0) || (i32[i] > nint[i])) {
1357*5d9d9091SRichard Lowe!  276		      !		c3++;
1358*5d9d9091SRichard Lowe!  277		      !		acc = 0;
1359*5d9d9091SRichard Lowe!  278		      !		for (i = 0; i < len; i++) {
1360*5d9d9091SRichard Lowe!  279		      !			acc = acc + (uint64_t)(i32[i]) - (uint64_t)(nint[i]);
1361*5d9d9091SRichard Lowe!  280		      !			i32[i] = acc & 0xffffffff;
1362*5d9d9091SRichard Lowe!  281		      !			acc = acc >> 32;
1363*5d9d9091SRichard Lowe!  282		      !		}
1364*5d9d9091SRichard Lowe!  283		      !	}
1365*5d9d9091SRichard Lowe!  284		      !}
1366*5d9d9091SRichard Lowe!  285		      !uint32_t saveresult[1000];
1367*5d9d9091SRichard Lowe!  286		      !void printarray(char *name, uint32_t *arr, int len)
1368*5d9d9091SRichard Lowe!  287		      !{
1369*5d9d9091SRichard Lowe!  288		      !	int i, j;
1370*5d9d9091SRichard Lowe!  289		      !	uint64_t tmp;
1371*5d9d9091SRichard Lowe!  291		      !	printf("uint64_t %s[%d] =\n{\n",name,(len+1)/2);
1372*5d9d9091SRichard Lowe!  292		      !	for(i=j=0; i<len; i+=2,j+=2){
1373*5d9d9091SRichard Lowe!  293		      !		if(j == 6){
1374*5d9d9091SRichard Lowe!  294		      !			printf("\n");
1375*5d9d9091SRichard Lowe!  295		      !			j=0;
1376*5d9d9091SRichard Lowe!  296		      !		}
1377*5d9d9091SRichard Lowe!  297		      !		tmp = (((uint64_t)arr[i])<<32) | ((uint64_t)arr[i+1]);
1378*5d9d9091SRichard Lowe!  298		      !		printf("0x%016llx",tmp);
1379*5d9d9091SRichard Lowe!  299		      !		if((i/2)!=(((len+1)/2)-1))printf(",");
1380*5d9d9091SRichard Lowe!  300		      !		if(j!=4)printf(" ");
1381*5d9d9091SRichard Lowe!  301		      !	}
1382*5d9d9091SRichard Lowe!  302		      !	if(j!=0) printf("\n");
1383*5d9d9091SRichard Lowe!  303		      !	printf("};\n");
1384*5d9d9091SRichard Lowe!  304		      !}
1385*5d9d9091SRichard Lowe!  305		      !**************/
1386*5d9d9091SRichard Lowe!  308		      !/*
1387*5d9d9091SRichard Lowe!  309		      ! * the lengths of the input arrays should be at least the following:
1388*5d9d9091SRichard Lowe!  310		      ! * result[nlen+1], dm1[nlen], dm2[2*nlen+1], dt[4*nlen+2], dn[nlen], nint[nlen]
1389*5d9d9091SRichard Lowe!  311		      ! * all of them should be different from one another
1390*5d9d9091SRichard Lowe!  312		      ! */
1391*5d9d9091SRichard Lowe!  313		      !void mont_mulf_noconv(uint32_t *result,
1392*5d9d9091SRichard Lowe!  314		      !			double *dm1, double *dm2, double *dt,
1393*5d9d9091SRichard Lowe!  315		      !			double *dn, uint32_t *nint,
1394*5d9d9091SRichard Lowe!  316		      !			int nlen, double dn0)
1395*5d9d9091SRichard Lowe!  317		      !{
1396*5d9d9091SRichard Lowe
1397*5d9d9091SRichard Lowe!
1398*5d9d9091SRichard Lowe! SUBROUTINE mont_mulf_noconv
1399*5d9d9091SRichard Lowe!
1400*5d9d9091SRichard Lowe! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
1401*5d9d9091SRichard Lowe
1402*5d9d9091SRichard Lowe			.global mont_mulf_noconv
1403*5d9d9091SRichard Lowe                       mont_mulf_noconv:
1404*5d9d9091SRichard Lowe/* 000000	 317 */		save	%sp,-176,%sp
1405*5d9d9091SRichard Lowe/* 0x0004	     */		ldx	[%fp+2223],%g1
1406*5d9d9091SRichard Lowe/* 0x0008	   0 */		sethi	%hi(Zero),%l5
1407*5d9d9091SRichard Lowe/* 0x000c	 317 */		or	%g0,%i2,%l0
1408*5d9d9091SRichard Lowe
1409*5d9d9091SRichard Lowe!  318		      !	int i, j, jj;
1410*5d9d9091SRichard Lowe!  319		      !	double digit, m2j, a, b;
1411*5d9d9091SRichard Lowe!  320		      !	double *pdm1, *pdm2, *pdn, *pdtj, pdn_0, pdm1_0;
1412*5d9d9091SRichard Lowe!  322		      !	pdm1 = &(dm1[0]);
1413*5d9d9091SRichard Lowe!  323		      !	pdm2 = &(dm2[0]);
1414*5d9d9091SRichard Lowe!  324		      !	pdn = &(dn[0]);
1415*5d9d9091SRichard Lowe!  325		      !	pdm2[2 * nlen] = Zero;
1416*5d9d9091SRichard Lowe
1417*5d9d9091SRichard Lowe/* 0x0010	 325 */		ldd	[%l5+%lo(Zero)],%f0
1418*5d9d9091SRichard Lowe/* 0x0014	 317 */		or	%g0,%i0,%i2
1419*5d9d9091SRichard Lowe/* 0x0018	 325 */		sll	%g1,1,%o3
1420*5d9d9091SRichard Lowe
1421*5d9d9091SRichard Lowe!  327		      !	if (nlen != 16) {
1422*5d9d9091SRichard Lowe
1423*5d9d9091SRichard Lowe/* 0x001c	 327 */		cmp	%g1,16
1424*5d9d9091SRichard Lowe/* 0x0020	 325 */		sra	%o3,0,%i0
1425*5d9d9091SRichard Lowe/* 0x0024	     */		sllx	%i0,3,%o0
1426*5d9d9091SRichard Lowe/* 0x0028	 317 */		or	%g0,%i5,%i0
1427*5d9d9091SRichard Lowe/* 0x002c	 327 */		bne,pn	%icc,.L77000476
1428*5d9d9091SRichard Lowe/* 0x0030	 325 */		std	%f0,[%l0+%o0]
1429*5d9d9091SRichard Lowe                       .L77000488:
1430*5d9d9091SRichard Lowe/* 0x0034	   0 */		sethi	%hi(TwoToMinus16),%o2
1431*5d9d9091SRichard Lowe/* 0x0038	   0 */		sethi	%hi(TwoTo16),%l3
1432*5d9d9091SRichard Lowe
1433*5d9d9091SRichard Lowe!  328		      !		for (i = 0; i < 4 * nlen + 2; i++)
1434*5d9d9091SRichard Lowe!  329		      !			dt[i] = Zero;
1435*5d9d9091SRichard Lowe!  330		      !		a = dt[0] = pdm1[0] * pdm2[0];
1436*5d9d9091SRichard Lowe!  331		      !		digit = mod(lower32(a, Zero) * dn0, TwoToMinus16, TwoTo16);
1437*5d9d9091SRichard Lowe!  333		      !		pdtj = &(dt[0]);
1438*5d9d9091SRichard Lowe!  334		      !		for (j = jj = 0; j < 2 * nlen; j++, jj++, pdtj++) {
1439*5d9d9091SRichard Lowe!  335		      !			m2j = pdm2[j];
1440*5d9d9091SRichard Lowe!  336		      !			a = pdtj[0] + pdn[0] * digit;
1441*5d9d9091SRichard Lowe!  337		      !			b = pdtj[1] + pdm1[0] * pdm2[j + 1] + a * TwoToMinus16;
1442*5d9d9091SRichard Lowe!  338		      !			pdtj[1] = b;
1443*5d9d9091SRichard Lowe!  340		      !#pragma pipeloop(0)
1444*5d9d9091SRichard Lowe!  341		      !			for (i = 1; i < nlen; i++) {
1445*5d9d9091SRichard Lowe!  342		      !				pdtj[2 * i] += pdm1[i] * m2j + pdn[i] * digit;
1446*5d9d9091SRichard Lowe!  343		      !			}
1447*5d9d9091SRichard Lowe!  344		      !			if (jj == 15) {
1448*5d9d9091SRichard Lowe!  345		      !				cleanup(dt, j / 2 + 1, 2 * nlen + 1);
1449*5d9d9091SRichard Lowe!  346		      !				jj = 0;
1450*5d9d9091SRichard Lowe!  347		      !			}
1451*5d9d9091SRichard Lowe!  349		      !			digit = mod(lower32(b, Zero) * dn0,
1452*5d9d9091SRichard Lowe!  350		      !				    TwoToMinus16, TwoTo16);
1453*5d9d9091SRichard Lowe!  351		      !		}
1454*5d9d9091SRichard Lowe!  352		      !	} else {
1455*5d9d9091SRichard Lowe!  353		      !		a = dt[0] = pdm1[0] * pdm2[0];
1456*5d9d9091SRichard Lowe
1457*5d9d9091SRichard Lowe/* 0x003c	 353 */		ldd	[%i1],%f40
1458*5d9d9091SRichard Lowe
1459*5d9d9091SRichard Lowe!  355		      !		dt[65] = dt[64] = dt[63] = dt[62] = dt[61] = dt[60] =
1460*5d9d9091SRichard Lowe!  356		      !			dt[59] = dt[58] = dt[57] = dt[56] = dt[55] =
1461*5d9d9091SRichard Lowe!  357		      !			dt[54] = dt[53] = dt[52] = dt[51] = dt[50] =
1462*5d9d9091SRichard Lowe!  358		      !			dt[49] = dt[48] = dt[47] = dt[46] = dt[45] =
1463*5d9d9091SRichard Lowe!  359		      !			dt[44] = dt[43] = dt[42] = dt[41] = dt[40] =
1464*5d9d9091SRichard Lowe!  360		      !			dt[39] = dt[38] = dt[37] = dt[36] = dt[35] =
1465*5d9d9091SRichard Lowe!  361		      !			dt[34] = dt[33] = dt[32] = dt[31] = dt[30] =
1466*5d9d9091SRichard Lowe!  362		      !			dt[29] = dt[28] = dt[27] = dt[26] = dt[25] =
1467*5d9d9091SRichard Lowe!  363		      !			dt[24] = dt[23] = dt[22] = dt[21] = dt[20] =
1468*5d9d9091SRichard Lowe!  364		      !			dt[19] = dt[18] = dt[17] = dt[16] = dt[15] =
1469*5d9d9091SRichard Lowe!  365		      !			dt[14] = dt[13] = dt[12] = dt[11] = dt[10] =
1470*5d9d9091SRichard Lowe!  366		      !			dt[9] = dt[8] = dt[7] = dt[6] = dt[5] = dt[4] =
1471*5d9d9091SRichard Lowe!  367		      !			dt[3] = dt[2] = dt[1] = Zero;
1472*5d9d9091SRichard Lowe!  369		      !		pdn_0 = pdn[0];
1473*5d9d9091SRichard Lowe!  370		      !		pdm1_0 = pdm1[0];
1474*5d9d9091SRichard Lowe!  372		      !		digit = mod(lower32(a, Zero) * dn0, TwoToMinus16, TwoTo16);
1475*5d9d9091SRichard Lowe!  373		      !		pdtj = &(dt[0]);
1476*5d9d9091SRichard Lowe
1477*5d9d9091SRichard Lowe/* 0x0040	 373 */		or	%g0,%i3,%o3
1478*5d9d9091SRichard Lowe
1479*5d9d9091SRichard Lowe!  375		      !		for (j = 0; j < 32; j++, pdtj++) {
1480*5d9d9091SRichard Lowe
1481*5d9d9091SRichard Lowe/* 0x0044	 375 */		or	%g0,0,%l1
1482*5d9d9091SRichard Lowe/* 0x0048	 353 */		ldd	[%l0],%f42
1483*5d9d9091SRichard Lowe/* 0x004c	 372 */		ldd	[%o2+%lo(TwoToMinus16)],%f44
1484*5d9d9091SRichard Lowe/* 0x0050	     */		ldd	[%l3+%lo(TwoTo16)],%f46
1485*5d9d9091SRichard Lowe/* 0x0054	 367 */		std	%f0,[%i3+8]
1486*5d9d9091SRichard Lowe/* 0x0058	 353 */		fmuld	%f40,%f42,%f38
1487*5d9d9091SRichard Lowe/* 0x005c	     */		std	%f38,[%i3]
1488*5d9d9091SRichard Lowe/* 0x0060	 367 */		std	%f0,[%i3+16]
1489*5d9d9091SRichard Lowe/* 0x0064	     */		std	%f0,[%i3+24]
1490*5d9d9091SRichard Lowe/* 0x0068	     */		std	%f0,[%i3+32]
1491*5d9d9091SRichard Lowe/* 0x006c	 372 */		fdtox	%f38,%f4
1492*5d9d9091SRichard Lowe/* 0x0070	 367 */		std	%f0,[%i3+40]
1493*5d9d9091SRichard Lowe/* 0x0074	     */		std	%f0,[%i3+48]
1494*5d9d9091SRichard Lowe/* 0x0078	     */		std	%f0,[%i3+56]
1495*5d9d9091SRichard Lowe/* 0x007c	 372 */		fmovs	%f0,%f4
1496*5d9d9091SRichard Lowe/* 0x0080	 367 */		std	%f0,[%i3+64]
1497*5d9d9091SRichard Lowe/* 0x0084	     */		std	%f0,[%i3+72]
1498*5d9d9091SRichard Lowe/* 0x0088	 372 */		fxtod	%f4,%f52
1499*5d9d9091SRichard Lowe/* 0x008c	 367 */		std	%f0,[%i3+80]
1500*5d9d9091SRichard Lowe/* 0x0090	     */		std	%f0,[%i3+88]
1501*5d9d9091SRichard Lowe/* 0x0094	     */		std	%f0,[%i3+96]
1502*5d9d9091SRichard Lowe/* 0x0098	     */		std	%f0,[%i3+104]
1503*5d9d9091SRichard Lowe/* 0x009c	 372 */		fmuld	%f52,%f14,%f60
1504*5d9d9091SRichard Lowe/* 0x00a0	 367 */		std	%f0,[%i3+112]
1505*5d9d9091SRichard Lowe/* 0x00a4	     */		std	%f0,[%i3+120]
1506*5d9d9091SRichard Lowe/* 0x00a8	     */		std	%f0,[%i3+128]
1507*5d9d9091SRichard Lowe/* 0x00ac	     */		std	%f0,[%i3+136]
1508*5d9d9091SRichard Lowe/* 0x00b0	 372 */		fmuld	%f60,%f44,%f62
1509*5d9d9091SRichard Lowe/* 0x00b4	 367 */		std	%f0,[%i3+144]
1510*5d9d9091SRichard Lowe/* 0x00b8	     */		std	%f0,[%i3+152]
1511*5d9d9091SRichard Lowe/* 0x00bc	     */		std	%f0,[%i3+160]
1512*5d9d9091SRichard Lowe/* 0x00c0	     */		std	%f0,[%i3+168]
1513*5d9d9091SRichard Lowe/* 0x00c4	 372 */		fdtox	%f62,%f32
1514*5d9d9091SRichard Lowe/* 0x00c8	 367 */		std	%f0,[%i3+176]
1515*5d9d9091SRichard Lowe/* 0x00cc	     */		std	%f0,[%i3+184]
1516*5d9d9091SRichard Lowe/* 0x00d0	     */		std	%f0,[%i3+192]
1517*5d9d9091SRichard Lowe/* 0x00d4	     */		std	%f0,[%i3+200]
1518*5d9d9091SRichard Lowe/* 0x00d8	 372 */		fxtod	%f32,%f50
1519*5d9d9091SRichard Lowe/* 0x00dc	 367 */		std	%f0,[%i3+208]
1520*5d9d9091SRichard Lowe/* 0x00e0	     */		std	%f0,[%i3+216]
1521*5d9d9091SRichard Lowe/* 0x00e4	     */		std	%f0,[%i3+224]
1522*5d9d9091SRichard Lowe/* 0x00e8	     */		std	%f0,[%i3+232]
1523*5d9d9091SRichard Lowe/* 0x00ec	 372 */		fmuld	%f50,%f46,%f34
1524*5d9d9091SRichard Lowe/* 0x00f0	 367 */		std	%f0,[%i3+240]
1525*5d9d9091SRichard Lowe/* 0x00f4	     */		std	%f0,[%i3+248]
1526*5d9d9091SRichard Lowe/* 0x00f8	     */		std	%f0,[%i3+256]
1527*5d9d9091SRichard Lowe/* 0x00fc	     */		std	%f0,[%i3+264]
1528*5d9d9091SRichard Lowe/* 0x0100	 372 */		fsubd	%f60,%f34,%f40
1529*5d9d9091SRichard Lowe/* 0x0104	 367 */		std	%f0,[%i3+272]
1530*5d9d9091SRichard Lowe/* 0x0108	     */		std	%f0,[%i3+280]
1531*5d9d9091SRichard Lowe/* 0x010c	     */		std	%f0,[%i3+288]
1532*5d9d9091SRichard Lowe/* 0x0110	     */		std	%f0,[%i3+296]
1533*5d9d9091SRichard Lowe/* 0x0114	     */		std	%f0,[%i3+304]
1534*5d9d9091SRichard Lowe/* 0x0118	     */		std	%f0,[%i3+312]
1535*5d9d9091SRichard Lowe/* 0x011c	     */		std	%f0,[%i3+320]
1536*5d9d9091SRichard Lowe/* 0x0120	     */		std	%f0,[%i3+328]
1537*5d9d9091SRichard Lowe/* 0x0124	     */		std	%f0,[%i3+336]
1538*5d9d9091SRichard Lowe/* 0x0128	     */		std	%f0,[%i3+344]
1539*5d9d9091SRichard Lowe/* 0x012c	     */		std	%f0,[%i3+352]
1540*5d9d9091SRichard Lowe/* 0x0130	     */		std	%f0,[%i3+360]
1541*5d9d9091SRichard Lowe/* 0x0134	     */		std	%f0,[%i3+368]
1542*5d9d9091SRichard Lowe/* 0x0138	 375 */		sub	%g1,1,%l3
1543*5d9d9091SRichard Lowe/* 0x013c	     */		add	%i3,8,%o7
1544*5d9d9091SRichard Lowe/* 0x0140	 367 */		std	%f0,[%i3+376]
1545*5d9d9091SRichard Lowe/* 0x0144	     */		std	%f0,[%i3+384]
1546*5d9d9091SRichard Lowe/* 0x0148	     */		std	%f0,[%i3+392]
1547*5d9d9091SRichard Lowe/* 0x014c	     */		std	%f0,[%i3+400]
1548*5d9d9091SRichard Lowe/* 0x0150	     */		std	%f0,[%i3+408]
1549*5d9d9091SRichard Lowe/* 0x0154	     */		std	%f0,[%i3+416]
1550*5d9d9091SRichard Lowe/* 0x0158	     */		std	%f0,[%i3+424]
1551*5d9d9091SRichard Lowe/* 0x015c	     */		std	%f0,[%i3+432]
1552*5d9d9091SRichard Lowe/* 0x0160	     */		std	%f0,[%i3+440]
1553*5d9d9091SRichard Lowe/* 0x0164	     */		std	%f0,[%i3+448]
1554*5d9d9091SRichard Lowe/* 0x0168	     */		std	%f0,[%i3+456]
1555*5d9d9091SRichard Lowe/* 0x016c	     */		std	%f0,[%i3+464]
1556*5d9d9091SRichard Lowe/* 0x0170	     */		std	%f0,[%i3+472]
1557*5d9d9091SRichard Lowe/* 0x0174	     */		std	%f0,[%i3+480]
1558*5d9d9091SRichard Lowe/* 0x0178	     */		std	%f0,[%i3+488]
1559*5d9d9091SRichard Lowe/* 0x017c	     */		std	%f0,[%i3+496]
1560*5d9d9091SRichard Lowe/* 0x0180	     */		std	%f0,[%i3+504]
1561*5d9d9091SRichard Lowe/* 0x0184	     */		std	%f0,[%i3+512]
1562*5d9d9091SRichard Lowe/* 0x0188	     */		std	%f0,[%i3+520]
1563*5d9d9091SRichard Lowe
1564*5d9d9091SRichard Lowe!BEGIN HAND CODED PART
1565*5d9d9091SRichard Lowe
1566*5d9d9091SRichard Lowe! cheetah schedule, no even-odd trick
1567*5d9d9091SRichard Lowe
1568*5d9d9091SRichard Lowe
1569*5d9d9091SRichard Lowe	add	%i3,%g0,%o5
1570*5d9d9091SRichard Lowe
1571*5d9d9091SRichard Lowe	fmovd	%f40,%f0
1572*5d9d9091SRichard Lowe	fmovd	%f14,%f2
1573*5d9d9091SRichard Lowe	fmovd	%f44,%f8
1574*5d9d9091SRichard Lowe	sethi	%hi(TwoTo32),%l5
1575*5d9d9091SRichard Lowe	fmovd	%f46,%f10
1576*5d9d9091SRichard Lowe	sethi	%hi(TwoToMinus32),%g5
1577*5d9d9091SRichard Lowe	ldd	[%i3],%f6
1578*5d9d9091SRichard Lowe	ldd	[%l0],%f4
1579*5d9d9091SRichard Lowe
1580*5d9d9091SRichard Lowe	ldd	[%i1],%f40
1581*5d9d9091SRichard Lowe	ldd	[%i1+8],%f42
1582*5d9d9091SRichard Lowe	ldd	[%i1+16],%f52
1583*5d9d9091SRichard Lowe	ldd	[%i1+48],%f54
1584*5d9d9091SRichard Lowe	ldd	[%i1+56],%f36
1585*5d9d9091SRichard Lowe	ldd	[%i1+64],%f56
1586*5d9d9091SRichard Lowe	ldd	[%i1+104],%f48
1587*5d9d9091SRichard Lowe	ldd	[%i1+112],%f58
1588*5d9d9091SRichard Lowe
1589*5d9d9091SRichard Lowe	ldd	[%i4],%f44
1590*5d9d9091SRichard Lowe	ldd	[%i4+8],%f46
1591*5d9d9091SRichard Lowe	ldd	[%i4+104],%f50
1592*5d9d9091SRichard Lowe	ldd	[%i4+112],%f60
1593*5d9d9091SRichard Lowe
1594*5d9d9091SRichard Lowe
1595*5d9d9091SRichard Lowe	.L99999999:
1596*5d9d9091SRichard Lowe!1
1597*5d9d9091SRichard Lowe	ldd	[%i1+24],%f20
1598*5d9d9091SRichard Lowe	fmuld	%f0,%f44,%f12
1599*5d9d9091SRichard Lowe!2
1600*5d9d9091SRichard Lowe	ldd	[%i4+24],%f22
1601*5d9d9091SRichard Lowe	fmuld	%f42,%f4,%f16
1602*5d9d9091SRichard Lowe!3
1603*5d9d9091SRichard Lowe	ldd	[%i1+40],%f24
1604*5d9d9091SRichard Lowe	fmuld	%f46,%f0,%f18
1605*5d9d9091SRichard Lowe!4
1606*5d9d9091SRichard Lowe	ldd	[%i4+40],%f26
1607*5d9d9091SRichard Lowe	fmuld	%f20,%f4,%f20
1608*5d9d9091SRichard Lowe!5
1609*5d9d9091SRichard Lowe	ldd	[%l0+8],%f38
1610*5d9d9091SRichard Lowe	faddd	%f12,%f6,%f12
1611*5d9d9091SRichard Lowe	fmuld	%f22,%f0,%f22
1612*5d9d9091SRichard Lowe!6
1613*5d9d9091SRichard Lowe	add	%l0,8,%l0
1614*5d9d9091SRichard Lowe	ldd	[%i4+56],%f30
1615*5d9d9091SRichard Lowe	fmuld	%f24,%f4,%f24
1616*5d9d9091SRichard Lowe!7
1617*5d9d9091SRichard Lowe	ldd	[%i1+72],%f32
1618*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
1619*5d9d9091SRichard Lowe	fmuld	%f26,%f0,%f26
1620*5d9d9091SRichard Lowe!8
1621*5d9d9091SRichard Lowe	ldd	[%i3+16],%f18
1622*5d9d9091SRichard Lowe	fmuld	%f40,%f38,%f14
1623*5d9d9091SRichard Lowe!9
1624*5d9d9091SRichard Lowe	ldd	[%i4+72],%f34
1625*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
1626*5d9d9091SRichard Lowe	fmuld	%f8,%f12,%f12
1627*5d9d9091SRichard Lowe!10
1628*5d9d9091SRichard Lowe	ldd	[%i3+48],%f22
1629*5d9d9091SRichard Lowe	fmuld	%f36,%f4,%f28
1630*5d9d9091SRichard Lowe!11
1631*5d9d9091SRichard Lowe	ldd	[%i3+8],%f6
1632*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
1633*5d9d9091SRichard Lowe	fmuld	%f30,%f0,%f30
1634*5d9d9091SRichard Lowe!12
1635*5d9d9091SRichard Lowe	std	%f16,[%i3+16]
1636*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
1637*5d9d9091SRichard Lowe	fmuld	%f32,%f4,%f32
1638*5d9d9091SRichard Lowe!13
1639*5d9d9091SRichard Lowe	ldd	[%i3+80],%f26
1640*5d9d9091SRichard Lowe	faddd	%f12,%f14,%f12
1641*5d9d9091SRichard Lowe	fmuld	%f34,%f0,%f34
1642*5d9d9091SRichard Lowe!14
1643*5d9d9091SRichard Lowe	ldd	[%i1+88],%f16
1644*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
1645*5d9d9091SRichard Lowe!15
1646*5d9d9091SRichard Lowe	ldd	[%i4+88],%f18
1647*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
1648*5d9d9091SRichard Lowe!16
1649*5d9d9091SRichard Lowe	ldd	[%i3+112],%f30
1650*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
1651*5d9d9091SRichard Lowe!17
1652*5d9d9091SRichard Lowe	ldd	[%i3+144],%f34
1653*5d9d9091SRichard Lowe	faddd	%f12,%f6,%f6
1654*5d9d9091SRichard Lowe	fmuld	%f16,%f4,%f16
1655*5d9d9091SRichard Lowe!18
1656*5d9d9091SRichard Lowe	std	%f20,[%i3+48]
1657*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
1658*5d9d9091SRichard Lowe	fmuld	%f18,%f0,%f18
1659*5d9d9091SRichard Lowe!19
1660*5d9d9091SRichard Lowe	std	%f24,[%i3+80]
1661*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
1662*5d9d9091SRichard Lowe	fmuld	%f48,%f4,%f20
1663*5d9d9091SRichard Lowe!20
1664*5d9d9091SRichard Lowe	std	%f28,[%i3+112]
1665*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
1666*5d9d9091SRichard Lowe	fmuld	%f50,%f0,%f22
1667*5d9d9091SRichard Lowe!21
1668*5d9d9091SRichard Lowe	ldd	[%i1+120],%f24
1669*5d9d9091SRichard Lowe	fdtox	%f6,%f12
1670*5d9d9091SRichard Lowe!22
1671*5d9d9091SRichard Lowe	std	%f32,[%i3+144]
1672*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
1673*5d9d9091SRichard Lowe!23
1674*5d9d9091SRichard Lowe	ldd	[%i4+120],%f26
1675*5d9d9091SRichard Lowe!24
1676*5d9d9091SRichard Lowe	ldd	[%i3+176],%f18
1677*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
1678*5d9d9091SRichard Lowe	fmuld	%f24,%f4,%f24
1679*5d9d9091SRichard Lowe!25
1680*5d9d9091SRichard Lowe	ldd	[%i4+16],%f30
1681*5d9d9091SRichard Lowe	fmovs	%f11,%f12
1682*5d9d9091SRichard Lowe!26
1683*5d9d9091SRichard Lowe	ldd	[%i1+32],%f32
1684*5d9d9091SRichard Lowe	fmuld	%f26,%f0,%f26
1685*5d9d9091SRichard Lowe!27
1686*5d9d9091SRichard Lowe	ldd	[%i4+32],%f34
1687*5d9d9091SRichard Lowe	fmuld	%f52,%f4,%f28
1688*5d9d9091SRichard Lowe!28
1689*5d9d9091SRichard Lowe	ldd	[%i3+208],%f22
1690*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
1691*5d9d9091SRichard Lowe	fmuld	%f30,%f0,%f30
1692*5d9d9091SRichard Lowe!29
1693*5d9d9091SRichard Lowe	std	%f16,[%i3+176]
1694*5d9d9091SRichard Lowe	fxtod	%f12,%f12
1695*5d9d9091SRichard Lowe	fmuld	%f32,%f4,%f32
1696*5d9d9091SRichard Lowe!30
1697*5d9d9091SRichard Lowe	ldd	[%i4+48],%f18
1698*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
1699*5d9d9091SRichard Lowe	fmuld	%f34,%f0,%f34
1700*5d9d9091SRichard Lowe!31
1701*5d9d9091SRichard Lowe	ldd	[%i3+240],%f26
1702*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
1703*5d9d9091SRichard Lowe!32
1704*5d9d9091SRichard Lowe	std	%f20,[%i3+208]
1705*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
1706*5d9d9091SRichard Lowe	fmuld	%f54,%f4,%f16
1707*5d9d9091SRichard Lowe!33
1708*5d9d9091SRichard Lowe	ldd	[%i3+32],%f30
1709*5d9d9091SRichard Lowe	fmuld	%f12,%f2,%f14
1710*5d9d9091SRichard Lowe!34
1711*5d9d9091SRichard Lowe	ldd	[%i4+64],%f22
1712*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
1713*5d9d9091SRichard Lowe	fmuld	%f18,%f0,%f18
1714*5d9d9091SRichard Lowe!35
1715*5d9d9091SRichard Lowe	ldd	[%i3+64],%f34
1716*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
1717*5d9d9091SRichard Lowe!36
1718*5d9d9091SRichard Lowe	std	%f24,[%i3+240]
1719*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
1720*5d9d9091SRichard Lowe	fmuld	%f56,%f4,%f20
1721*5d9d9091SRichard Lowe!37
1722*5d9d9091SRichard Lowe	std	%f28,[%i3+32]
1723*5d9d9091SRichard Lowe	fmuld	%f14,%f8,%f12
1724*5d9d9091SRichard Lowe!38
1725*5d9d9091SRichard Lowe	ldd	[%i1+80],%f24
1726*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f34	! yes, tmp52!
1727*5d9d9091SRichard Lowe	fmuld	%f22,%f0,%f22
1728*5d9d9091SRichard Lowe!39
1729*5d9d9091SRichard Lowe	ldd	[%i4+80],%f26
1730*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
1731*5d9d9091SRichard Lowe!40
1732*5d9d9091SRichard Lowe	ldd	[%i1+96],%f28
1733*5d9d9091SRichard Lowe	fmuld	%f58,%f4,%f32
1734*5d9d9091SRichard Lowe!41
1735*5d9d9091SRichard Lowe	ldd	[%i4+96],%f30
1736*5d9d9091SRichard Lowe	fdtox	%f12,%f12
1737*5d9d9091SRichard Lowe	fmuld	%f24,%f4,%f24
1738*5d9d9091SRichard Lowe!42
1739*5d9d9091SRichard Lowe	std	%f34,[%i3+64]	! yes, tmp52!
1740*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
1741*5d9d9091SRichard Lowe	fmuld	%f26,%f0,%f26
1742*5d9d9091SRichard Lowe!43
1743*5d9d9091SRichard Lowe	ldd	[%i3+96],%f18
1744*5d9d9091SRichard Lowe	fmuld	%f28,%f4,%f28
1745*5d9d9091SRichard Lowe!44
1746*5d9d9091SRichard Lowe	ldd	[%i3+128],%f22
1747*5d9d9091SRichard Lowe	fmovd	%f38,%f4
1748*5d9d9091SRichard Lowe	fmuld	%f30,%f0,%f30
1749*5d9d9091SRichard Lowe!45
1750*5d9d9091SRichard Lowe	fxtod	%f12,%f12
1751*5d9d9091SRichard Lowe	fmuld	%f60,%f0,%f34
1752*5d9d9091SRichard Lowe!46
1753*5d9d9091SRichard Lowe	add	%i3,8,%i3
1754*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
1755*5d9d9091SRichard Lowe!47
1756*5d9d9091SRichard Lowe	ldd	[%i3+160-8],%f26
1757*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
1758*5d9d9091SRichard Lowe!48
1759*5d9d9091SRichard Lowe	std	%f16,[%i3+96-8]
1760*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
1761*5d9d9091SRichard Lowe!49
1762*5d9d9091SRichard Lowe	ldd	[%i3+192-8],%f30
1763*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
1764*5d9d9091SRichard Lowe	fmuld	%f12,%f10,%f12
1765*5d9d9091SRichard Lowe!50
1766*5d9d9091SRichard Lowe	ldd	[%i3+224-8],%f34
1767*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
1768*5d9d9091SRichard Lowe!51
1769*5d9d9091SRichard Lowe	std	%f20,[%i3+128-8]
1770*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
1771*5d9d9091SRichard Lowe!52
1772*5d9d9091SRichard Lowe	add	%l1,1,%l1
1773*5d9d9091SRichard Lowe	std	%f24,[%i3+160-8]
1774*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
1775*5d9d9091SRichard Lowe!53
1776*5d9d9091SRichard Lowe	cmp	%l1,15
1777*5d9d9091SRichard Lowe	std	%f28,[%i3+192-8]
1778*5d9d9091SRichard Lowe	fsubd	%f14,%f12,%f0
1779*5d9d9091SRichard Lowe!54
1780*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
1781*5d9d9091SRichard Lowe	ble,pt	%icc,.L99999999
1782*5d9d9091SRichard Lowe	std	%f32,[%i3+224-8]
1783*5d9d9091SRichard Lowe
1784*5d9d9091SRichard Lowe
1785*5d9d9091SRichard Lowe!
1786*5d9d9091SRichard Lowe	ldd	[%g5+%lo(TwoToMinus32)],%f8
1787*5d9d9091SRichard Lowe!
1788*5d9d9091SRichard Lowe	ldd	[%i3+8],%f16
1789*5d9d9091SRichard Lowe!
1790*5d9d9091SRichard Lowe	ldd	[%i3+16],%f20
1791*5d9d9091SRichard Lowe!
1792*5d9d9091SRichard Lowe	fmuld	%f8,%f16,%f18
1793*5d9d9091SRichard Lowe	ldd	[%i3+24],%f24
1794*5d9d9091SRichard Lowe!
1795*5d9d9091SRichard Lowe	fmuld	%f8,%f20,%f22
1796*5d9d9091SRichard Lowe	ldd	[%i3+32],%f28
1797*5d9d9091SRichard Lowe!
1798*5d9d9091SRichard Lowe	fmuld	%f8,%f24,%f26
1799*5d9d9091SRichard Lowe	ldd	[%l5+%lo(TwoTo32)],%f10
1800*5d9d9091SRichard Lowe!
1801*5d9d9091SRichard Lowe	fmuld	%f8,%f28,%f30
1802*5d9d9091SRichard Lowe!
1803*5d9d9091SRichard Lowe	fdtox	%f18,%f18
1804*5d9d9091SRichard Lowe!
1805*5d9d9091SRichard Lowe	fdtox	%f22,%f22
1806*5d9d9091SRichard Lowe!
1807*5d9d9091SRichard Lowe	fdtox	%f26,%f26
1808*5d9d9091SRichard Lowe	ldd	[%i3+40],%f32
1809*5d9d9091SRichard Lowe!
1810*5d9d9091SRichard Lowe	fdtox	%f30,%f30
1811*5d9d9091SRichard Lowe	ldd	[%i3+48],%f56
1812*5d9d9091SRichard Lowe!
1813*5d9d9091SRichard Lowe	fxtod	%f18,%f18
1814*5d9d9091SRichard Lowe	fmuld	%f8,%f32,%f34
1815*5d9d9091SRichard Lowe	ldd	[%i3+56],%f36
1816*5d9d9091SRichard Lowe!
1817*5d9d9091SRichard Lowe	fxtod	%f22,%f22
1818*5d9d9091SRichard Lowe	fmuld	%f8,%f56,%f58
1819*5d9d9091SRichard Lowe	ldd	[%i3+64],%f38
1820*5d9d9091SRichard Lowe!
1821*5d9d9091SRichard Lowe	fxtod	%f26,%f26
1822*5d9d9091SRichard Lowe	fmuld	%f8,%f36,%f60
1823*5d9d9091SRichard Lowe!
1824*5d9d9091SRichard Lowe	fxtod	%f30,%f30
1825*5d9d9091SRichard Lowe	fmuld	%f8,%f38,%f62
1826*5d9d9091SRichard Lowe!
1827*5d9d9091SRichard Lowe	fdtox	%f34,%f34
1828*5d9d9091SRichard Lowe	fmuld	%f10,%f18,%f40
1829*5d9d9091SRichard Lowe!
1830*5d9d9091SRichard Lowe	fdtox	%f58,%f58
1831*5d9d9091SRichard Lowe	fmuld	%f10,%f22,%f42
1832*5d9d9091SRichard Lowe!
1833*5d9d9091SRichard Lowe	fdtox	%f60,%f60
1834*5d9d9091SRichard Lowe	fmuld	%f10,%f26,%f44
1835*5d9d9091SRichard Lowe!
1836*5d9d9091SRichard Lowe	fdtox	%f62,%f62
1837*5d9d9091SRichard Lowe	fmuld	%f10,%f30,%f46
1838*5d9d9091SRichard Lowe!
1839*5d9d9091SRichard Lowe	fxtod	%f34,%f34
1840*5d9d9091SRichard Lowe!
1841*5d9d9091SRichard Lowe	fxtod	%f58,%f58
1842*5d9d9091SRichard Lowe!
1843*5d9d9091SRichard Lowe	fxtod	%f60,%f60
1844*5d9d9091SRichard Lowe!
1845*5d9d9091SRichard Lowe	fxtod	%f62,%f62
1846*5d9d9091SRichard Lowe!
1847*5d9d9091SRichard Lowe	fsubd	%f16,%f40,%f40
1848*5d9d9091SRichard Lowe	fmuld	%f10,%f34,%f48
1849*5d9d9091SRichard Lowe!
1850*5d9d9091SRichard Lowe	fsubd	%f20,%f42,%f42
1851*5d9d9091SRichard Lowe	fmuld	%f10,%f58,%f50
1852*5d9d9091SRichard Lowe!
1853*5d9d9091SRichard Lowe	fsubd	%f24,%f44,%f44
1854*5d9d9091SRichard Lowe	fmuld	%f10,%f60,%f52
1855*5d9d9091SRichard Lowe!
1856*5d9d9091SRichard Lowe	fsubd	%f28,%f46,%f46
1857*5d9d9091SRichard Lowe	fmuld	%f10,%f62,%f54
1858*5d9d9091SRichard Lowe!
1859*5d9d9091SRichard Lowe	std	%f40,[%i3+8]
1860*5d9d9091SRichard Lowe!
1861*5d9d9091SRichard Lowe	std	%f42,[%i3+16]
1862*5d9d9091SRichard Lowe!
1863*5d9d9091SRichard Lowe	faddd	%f18,%f44,%f44
1864*5d9d9091SRichard Lowe	std	%f44,[%i3+24]
1865*5d9d9091SRichard Lowe!
1866*5d9d9091SRichard Lowe	faddd	%f22,%f46,%f46
1867*5d9d9091SRichard Lowe	std	%f46,[%i3+32]
1868*5d9d9091SRichard Lowe!
1869*5d9d9091SRichard Lowe
1870*5d9d9091SRichard Lowe
1871*5d9d9091SRichard Lowe
1872*5d9d9091SRichard Lowe	fsubd	%f32,%f48,%f48
1873*5d9d9091SRichard Lowe	ldd	[%i3+64+8],%f16
1874*5d9d9091SRichard Lowe!
1875*5d9d9091SRichard Lowe	fsubd	%f56,%f50,%f50
1876*5d9d9091SRichard Lowe	ldd	[%i3+64+16],%f20
1877*5d9d9091SRichard Lowe!
1878*5d9d9091SRichard Lowe	fsubd	%f36,%f52,%f52
1879*5d9d9091SRichard Lowe	ldd	[%i3+64+24],%f24
1880*5d9d9091SRichard Lowe!
1881*5d9d9091SRichard Lowe	fsubd	%f38,%f54,%f54
1882*5d9d9091SRichard Lowe	ldd	[%i3+64+32],%f28
1883*5d9d9091SRichard Lowe!
1884*5d9d9091SRichard Lowe	faddd	%f26,%f48,%f48
1885*5d9d9091SRichard Lowe	fmuld	%f8,%f16,%f18
1886*5d9d9091SRichard Lowe	std	%f48,[%i3+40]
1887*5d9d9091SRichard Lowe!
1888*5d9d9091SRichard Lowe	faddd	%f30,%f50,%f50
1889*5d9d9091SRichard Lowe	fmuld	%f8,%f20,%f22
1890*5d9d9091SRichard Lowe	std	%f50,[%i3+48]
1891*5d9d9091SRichard Lowe!
1892*5d9d9091SRichard Lowe	faddd	%f34,%f52,%f52
1893*5d9d9091SRichard Lowe	fmuld	%f8,%f24,%f26
1894*5d9d9091SRichard Lowe	std	%f52,[%i3+56]
1895*5d9d9091SRichard Lowe!
1896*5d9d9091SRichard Lowe	faddd	%f58,%f54,%f54
1897*5d9d9091SRichard Lowe	fmuld	%f8,%f28,%f30
1898*5d9d9091SRichard Lowe	std	%f54,[%i3+64]
1899*5d9d9091SRichard Lowe!
1900*5d9d9091SRichard Lowe
1901*5d9d9091SRichard Lowe
1902*5d9d9091SRichard Lowe	fdtox	%f18,%f18
1903*5d9d9091SRichard Lowe!
1904*5d9d9091SRichard Lowe	fdtox	%f22,%f22
1905*5d9d9091SRichard Lowe!
1906*5d9d9091SRichard Lowe	fdtox	%f26,%f26
1907*5d9d9091SRichard Lowe	ldd	[%i3+64+40],%f32
1908*5d9d9091SRichard Lowe!
1909*5d9d9091SRichard Lowe	fdtox	%f30,%f30
1910*5d9d9091SRichard Lowe	ldd	[%i3+64+48],%f56
1911*5d9d9091SRichard Lowe!
1912*5d9d9091SRichard Lowe	fxtod	%f18,%f18
1913*5d9d9091SRichard Lowe	fmuld	%f8,%f32,%f34
1914*5d9d9091SRichard Lowe	ldd	[%i3+64+56],%f36
1915*5d9d9091SRichard Lowe!
1916*5d9d9091SRichard Lowe	fxtod	%f22,%f22
1917*5d9d9091SRichard Lowe	fmuld	%f8,%f56,%f58
1918*5d9d9091SRichard Lowe	ldd	[%i3+64+64],%f38
1919*5d9d9091SRichard Lowe!
1920*5d9d9091SRichard Lowe	fxtod	%f26,%f26
1921*5d9d9091SRichard Lowe	fmuld	%f8,%f36,%f12
1922*5d9d9091SRichard Lowe!
1923*5d9d9091SRichard Lowe	fxtod	%f30,%f30
1924*5d9d9091SRichard Lowe	fmuld	%f8,%f38,%f14
1925*5d9d9091SRichard Lowe!
1926*5d9d9091SRichard Lowe	fdtox	%f34,%f34
1927*5d9d9091SRichard Lowe	fmuld	%f10,%f18,%f40
1928*5d9d9091SRichard Lowe!
1929*5d9d9091SRichard Lowe	fdtox	%f58,%f58
1930*5d9d9091SRichard Lowe	fmuld	%f10,%f22,%f42
1931*5d9d9091SRichard Lowe!
1932*5d9d9091SRichard Lowe	fdtox	%f12,%f12
1933*5d9d9091SRichard Lowe	fmuld	%f10,%f26,%f44
1934*5d9d9091SRichard Lowe!
1935*5d9d9091SRichard Lowe	fdtox	%f14,%f14
1936*5d9d9091SRichard Lowe	fmuld	%f10,%f30,%f46
1937*5d9d9091SRichard Lowe!
1938*5d9d9091SRichard Lowe	fxtod	%f34,%f34
1939*5d9d9091SRichard Lowe!
1940*5d9d9091SRichard Lowe	fxtod	%f58,%f58
1941*5d9d9091SRichard Lowe!
1942*5d9d9091SRichard Lowe	fxtod	%f12,%f12
1943*5d9d9091SRichard Lowe!
1944*5d9d9091SRichard Lowe	fxtod	%f14,%f14
1945*5d9d9091SRichard Lowe!
1946*5d9d9091SRichard Lowe	fsubd	%f16,%f40,%f40
1947*5d9d9091SRichard Lowe	fmuld	%f10,%f34,%f48
1948*5d9d9091SRichard Lowe!
1949*5d9d9091SRichard Lowe	fsubd	%f20,%f42,%f42
1950*5d9d9091SRichard Lowe	fmuld	%f10,%f58,%f50
1951*5d9d9091SRichard Lowe!
1952*5d9d9091SRichard Lowe	fsubd	%f24,%f44,%f44
1953*5d9d9091SRichard Lowe	fmuld	%f10,%f12,%f52
1954*5d9d9091SRichard Lowe!
1955*5d9d9091SRichard Lowe	fsubd	%f28,%f46,%f46
1956*5d9d9091SRichard Lowe	fmuld	%f10,%f14,%f54
1957*5d9d9091SRichard Lowe!
1958*5d9d9091SRichard Lowe	faddd	%f60,%f40,%f40
1959*5d9d9091SRichard Lowe	std	%f40,[%i3+64+8]
1960*5d9d9091SRichard Lowe!
1961*5d9d9091SRichard Lowe	faddd	%f62,%f42,%f42
1962*5d9d9091SRichard Lowe	std	%f42,[%i3+64+16]
1963*5d9d9091SRichard Lowe!
1964*5d9d9091SRichard Lowe	faddd	%f18,%f44,%f44
1965*5d9d9091SRichard Lowe	std	%f44,[%i3+64+24]
1966*5d9d9091SRichard Lowe!
1967*5d9d9091SRichard Lowe	faddd	%f22,%f46,%f46
1968*5d9d9091SRichard Lowe	std	%f46,[%i3+64+32]
1969*5d9d9091SRichard Lowe!
1970*5d9d9091SRichard Lowe
1971*5d9d9091SRichard Lowe
1972*5d9d9091SRichard Lowe
1973*5d9d9091SRichard Lowe	fsubd	%f32,%f48,%f48
1974*5d9d9091SRichard Lowe	ldd	[%i3+64+64+8],%f16
1975*5d9d9091SRichard Lowe!
1976*5d9d9091SRichard Lowe	fsubd	%f56,%f50,%f50
1977*5d9d9091SRichard Lowe	ldd	[%i3+64+64+16],%f20
1978*5d9d9091SRichard Lowe!
1979*5d9d9091SRichard Lowe	fsubd	%f36,%f52,%f52
1980*5d9d9091SRichard Lowe	ldd	[%i3+64+64+24],%f24
1981*5d9d9091SRichard Lowe!
1982*5d9d9091SRichard Lowe	fsubd	%f38,%f54,%f54
1983*5d9d9091SRichard Lowe	ldd	[%i3+64+64+32],%f28
1984*5d9d9091SRichard Lowe!
1985*5d9d9091SRichard Lowe	faddd	%f26,%f48,%f48
1986*5d9d9091SRichard Lowe	fmuld	%f8,%f16,%f18
1987*5d9d9091SRichard Lowe	std	%f48,[%i3+64+40]
1988*5d9d9091SRichard Lowe!
1989*5d9d9091SRichard Lowe	faddd	%f30,%f50,%f50
1990*5d9d9091SRichard Lowe	fmuld	%f8,%f20,%f22
1991*5d9d9091SRichard Lowe	std	%f50,[%i3+64+48]
1992*5d9d9091SRichard Lowe!
1993*5d9d9091SRichard Lowe	faddd	%f34,%f52,%f52
1994*5d9d9091SRichard Lowe	fmuld	%f8,%f24,%f26
1995*5d9d9091SRichard Lowe	std	%f52,[%i3+64+56]
1996*5d9d9091SRichard Lowe!
1997*5d9d9091SRichard Lowe	faddd	%f58,%f54,%f54
1998*5d9d9091SRichard Lowe	fmuld	%f8,%f28,%f30
1999*5d9d9091SRichard Lowe	std	%f54,[%i3+64+64]
2000*5d9d9091SRichard Lowe!
2001*5d9d9091SRichard Lowe
2002*5d9d9091SRichard Lowe
2003*5d9d9091SRichard Lowe
2004*5d9d9091SRichard Lowe	fdtox	%f18,%f18
2005*5d9d9091SRichard Lowe!
2006*5d9d9091SRichard Lowe	fdtox	%f22,%f22
2007*5d9d9091SRichard Lowe!
2008*5d9d9091SRichard Lowe	fdtox	%f26,%f26
2009*5d9d9091SRichard Lowe	ldd	[%i3+64+64+40],%f32
2010*5d9d9091SRichard Lowe!
2011*5d9d9091SRichard Lowe	fdtox	%f30,%f30
2012*5d9d9091SRichard Lowe	ldd	[%i3+64+64+48],%f56
2013*5d9d9091SRichard Lowe!
2014*5d9d9091SRichard Lowe	fxtod	%f18,%f18
2015*5d9d9091SRichard Lowe	fmuld	%f8,%f32,%f34
2016*5d9d9091SRichard Lowe	ldd	[%i3+64+64+56],%f36
2017*5d9d9091SRichard Lowe!
2018*5d9d9091SRichard Lowe	fxtod	%f22,%f22
2019*5d9d9091SRichard Lowe	fmuld	%f8,%f56,%f58
2020*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64],%f38
2021*5d9d9091SRichard Lowe!
2022*5d9d9091SRichard Lowe	fxtod	%f26,%f26
2023*5d9d9091SRichard Lowe	fmuld	%f8,%f36,%f60
2024*5d9d9091SRichard Lowe!
2025*5d9d9091SRichard Lowe	fxtod	%f30,%f30
2026*5d9d9091SRichard Lowe	fmuld	%f8,%f38,%f62
2027*5d9d9091SRichard Lowe!
2028*5d9d9091SRichard Lowe	fdtox	%f34,%f34
2029*5d9d9091SRichard Lowe	fmuld	%f10,%f18,%f40
2030*5d9d9091SRichard Lowe!
2031*5d9d9091SRichard Lowe	fdtox	%f58,%f58
2032*5d9d9091SRichard Lowe	fmuld	%f10,%f22,%f42
2033*5d9d9091SRichard Lowe!
2034*5d9d9091SRichard Lowe	fdtox	%f60,%f60
2035*5d9d9091SRichard Lowe	fmuld	%f10,%f26,%f44
2036*5d9d9091SRichard Lowe!
2037*5d9d9091SRichard Lowe	fdtox	%f62,%f62
2038*5d9d9091SRichard Lowe	fmuld	%f10,%f30,%f46
2039*5d9d9091SRichard Lowe!
2040*5d9d9091SRichard Lowe	fxtod	%f34,%f34
2041*5d9d9091SRichard Lowe!
2042*5d9d9091SRichard Lowe	fxtod	%f58,%f58
2043*5d9d9091SRichard Lowe!
2044*5d9d9091SRichard Lowe	fxtod	%f60,%f60
2045*5d9d9091SRichard Lowe!
2046*5d9d9091SRichard Lowe	fxtod	%f62,%f62
2047*5d9d9091SRichard Lowe!
2048*5d9d9091SRichard Lowe	fsubd	%f16,%f40,%f40
2049*5d9d9091SRichard Lowe	fmuld	%f10,%f34,%f48
2050*5d9d9091SRichard Lowe!
2051*5d9d9091SRichard Lowe	fsubd	%f20,%f42,%f42
2052*5d9d9091SRichard Lowe	fmuld	%f10,%f58,%f50
2053*5d9d9091SRichard Lowe!
2054*5d9d9091SRichard Lowe	fsubd	%f24,%f44,%f44
2055*5d9d9091SRichard Lowe	fmuld	%f10,%f60,%f52
2056*5d9d9091SRichard Lowe!
2057*5d9d9091SRichard Lowe	fsubd	%f28,%f46,%f46
2058*5d9d9091SRichard Lowe	fmuld	%f10,%f62,%f54
2059*5d9d9091SRichard Lowe!
2060*5d9d9091SRichard Lowe	faddd	%f12,%f40,%f40
2061*5d9d9091SRichard Lowe	std	%f40,[%i3+64+64+8]
2062*5d9d9091SRichard Lowe!
2063*5d9d9091SRichard Lowe	faddd	%f14,%f42,%f42
2064*5d9d9091SRichard Lowe	std	%f42,[%i3+64+64+16]
2065*5d9d9091SRichard Lowe!
2066*5d9d9091SRichard Lowe	faddd	%f18,%f44,%f44
2067*5d9d9091SRichard Lowe	std	%f44,[%i3+64+64+24]
2068*5d9d9091SRichard Lowe!
2069*5d9d9091SRichard Lowe	faddd	%f22,%f46,%f46
2070*5d9d9091SRichard Lowe	std	%f46,[%i3+64+64+32]
2071*5d9d9091SRichard Lowe!
2072*5d9d9091SRichard Lowe
2073*5d9d9091SRichard Lowe
2074*5d9d9091SRichard Lowe	fsubd	%f32,%f48,%f48
2075*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+8],%f16
2076*5d9d9091SRichard Lowe!
2077*5d9d9091SRichard Lowe	fsubd	%f56,%f50,%f50
2078*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+16],%f20
2079*5d9d9091SRichard Lowe!
2080*5d9d9091SRichard Lowe	fsubd	%f36,%f52,%f52
2081*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+24],%f24
2082*5d9d9091SRichard Lowe!
2083*5d9d9091SRichard Lowe	fsubd	%f38,%f54,%f54
2084*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+32],%f28
2085*5d9d9091SRichard Lowe!
2086*5d9d9091SRichard Lowe	faddd	%f26,%f48,%f48
2087*5d9d9091SRichard Lowe	fmuld	%f8,%f16,%f18
2088*5d9d9091SRichard Lowe	std	%f48,[%i3+64+64+40]
2089*5d9d9091SRichard Lowe!
2090*5d9d9091SRichard Lowe	faddd	%f30,%f50,%f50
2091*5d9d9091SRichard Lowe	fmuld	%f8,%f20,%f22
2092*5d9d9091SRichard Lowe	std	%f50,[%i3+64+64+48]
2093*5d9d9091SRichard Lowe!
2094*5d9d9091SRichard Lowe	faddd	%f34,%f52,%f52
2095*5d9d9091SRichard Lowe	fmuld	%f8,%f24,%f26
2096*5d9d9091SRichard Lowe	std	%f52,[%i3+64+64+56]
2097*5d9d9091SRichard Lowe!
2098*5d9d9091SRichard Lowe	faddd	%f58,%f54,%f54
2099*5d9d9091SRichard Lowe	fmuld	%f8,%f28,%f30
2100*5d9d9091SRichard Lowe	std	%f54,[%i3+64+64+64]
2101*5d9d9091SRichard Lowe!
2102*5d9d9091SRichard Lowe
2103*5d9d9091SRichard Lowe
2104*5d9d9091SRichard Lowe	fdtox	%f18,%f18
2105*5d9d9091SRichard Lowe!
2106*5d9d9091SRichard Lowe	fdtox	%f22,%f22
2107*5d9d9091SRichard Lowe!
2108*5d9d9091SRichard Lowe	fdtox	%f26,%f26
2109*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+40],%f32
2110*5d9d9091SRichard Lowe!
2111*5d9d9091SRichard Lowe	fdtox	%f30,%f30
2112*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+48],%f56
2113*5d9d9091SRichard Lowe!
2114*5d9d9091SRichard Lowe	fxtod	%f18,%f18
2115*5d9d9091SRichard Lowe	fmuld	%f8,%f32,%f34
2116*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+56],%f36
2117*5d9d9091SRichard Lowe!
2118*5d9d9091SRichard Lowe	fxtod	%f22,%f22
2119*5d9d9091SRichard Lowe	fmuld	%f8,%f56,%f58
2120*5d9d9091SRichard Lowe	ldd	[%i3+64+64+64+64],%f38
2121*5d9d9091SRichard Lowe!
2122*5d9d9091SRichard Lowe	fxtod	%f26,%f26
2123*5d9d9091SRichard Lowe	fmuld	%f8,%f36,%f12
2124*5d9d9091SRichard Lowe!
2125*5d9d9091SRichard Lowe	fxtod	%f30,%f30
2126*5d9d9091SRichard Lowe	fmuld	%f8,%f38,%f14
2127*5d9d9091SRichard Lowe!
2128*5d9d9091SRichard Lowe	fdtox	%f34,%f34
2129*5d9d9091SRichard Lowe	fmuld	%f10,%f18,%f40
2130*5d9d9091SRichard Lowe!
2131*5d9d9091SRichard Lowe	fdtox	%f58,%f58
2132*5d9d9091SRichard Lowe	fmuld	%f10,%f22,%f42
2133*5d9d9091SRichard Lowe!
2134*5d9d9091SRichard Lowe	fdtox	%f12,%f12
2135*5d9d9091SRichard Lowe	fmuld	%f10,%f26,%f44
2136*5d9d9091SRichard Lowe!
2137*5d9d9091SRichard Lowe	fdtox	%f14,%f14
2138*5d9d9091SRichard Lowe	fmuld	%f10,%f30,%f46
2139*5d9d9091SRichard Lowe!
2140*5d9d9091SRichard Lowe	sethi	%hi(TwoToMinus16),%g5
2141*5d9d9091SRichard Lowe	fxtod	%f34,%f34
2142*5d9d9091SRichard Lowe!
2143*5d9d9091SRichard Lowe	sethi	%hi(TwoTo16),%l5
2144*5d9d9091SRichard Lowe	fxtod	%f58,%f58
2145*5d9d9091SRichard Lowe!
2146*5d9d9091SRichard Lowe	fxtod	%f12,%f12
2147*5d9d9091SRichard Lowe!
2148*5d9d9091SRichard Lowe	fxtod	%f14,%f14
2149*5d9d9091SRichard Lowe!
2150*5d9d9091SRichard Lowe	fsubd	%f16,%f40,%f16
2151*5d9d9091SRichard Lowe	fmuld	%f10,%f34,%f48
2152*5d9d9091SRichard Lowe	ldd	[%g5+%lo(TwoToMinus16)],%f8
2153*5d9d9091SRichard Lowe!
2154*5d9d9091SRichard Lowe	fsubd	%f20,%f42,%f20
2155*5d9d9091SRichard Lowe	fmuld	%f10,%f58,%f50
2156*5d9d9091SRichard Lowe	ldd	[%i1],%f40	! should be %f40
2157*5d9d9091SRichard Lowe!
2158*5d9d9091SRichard Lowe	fsubd	%f24,%f44,%f24
2159*5d9d9091SRichard Lowe	fmuld	%f10,%f12,%f52
2160*5d9d9091SRichard Lowe	ldd	[%i1+8],%f42	! should be %f42
2161*5d9d9091SRichard Lowe!
2162*5d9d9091SRichard Lowe	fsubd	%f28,%f46,%f28
2163*5d9d9091SRichard Lowe	fmuld	%f10,%f14,%f54
2164*5d9d9091SRichard Lowe	ldd	[%i4],%f44	! should be %f44
2165*5d9d9091SRichard Lowe!
2166*5d9d9091SRichard Lowe	faddd	%f60,%f16,%f16
2167*5d9d9091SRichard Lowe	std	%f16,[%i3+64+64+64+8]
2168*5d9d9091SRichard Lowe!
2169*5d9d9091SRichard Lowe	faddd	%f62,%f20,%f20
2170*5d9d9091SRichard Lowe	std	%f20,[%i3+64+64+64+16]
2171*5d9d9091SRichard Lowe!
2172*5d9d9091SRichard Lowe	faddd	%f18,%f24,%f24
2173*5d9d9091SRichard Lowe	std	%f24,[%i3+64+64+64+24]
2174*5d9d9091SRichard Lowe!
2175*5d9d9091SRichard Lowe	faddd	%f22,%f28,%f28
2176*5d9d9091SRichard Lowe	std	%f28,[%i3+64+64+64+32]
2177*5d9d9091SRichard Lowe!
2178*5d9d9091SRichard Lowe	fsubd	%f32,%f48,%f32
2179*5d9d9091SRichard Lowe	ldd	[%i4+8],%f46	 ! should be %f46
2180*5d9d9091SRichard Lowe!
2181*5d9d9091SRichard Lowe	fsubd	%f56,%f50,%f56
2182*5d9d9091SRichard Lowe	ldd	[%i1+104],%f48	! should be %f48
2183*5d9d9091SRichard Lowe!
2184*5d9d9091SRichard Lowe	fsubd	%f36,%f52,%f36
2185*5d9d9091SRichard Lowe	ldd	[%i4+104],%f50	! should be %f50
2186*5d9d9091SRichard Lowe!
2187*5d9d9091SRichard Lowe	fsubd	%f38,%f54,%f38
2188*5d9d9091SRichard Lowe	ldd	[%i1+16],%f52	! should be %f52
2189*5d9d9091SRichard Lowe!
2190*5d9d9091SRichard Lowe	faddd	%f26,%f32,%f32
2191*5d9d9091SRichard Lowe	std	%f32,[%i3+64+64+64+40]
2192*5d9d9091SRichard Lowe!
2193*5d9d9091SRichard Lowe	faddd	%f30,%f56,%f56
2194*5d9d9091SRichard Lowe	std	%f56,[%i3+64+64+64+48]
2195*5d9d9091SRichard Lowe!
2196*5d9d9091SRichard Lowe	faddd	%f34,%f36,%f36
2197*5d9d9091SRichard Lowe	std	%f36,[%i3+64+64+64+56]
2198*5d9d9091SRichard Lowe!
2199*5d9d9091SRichard Lowe	faddd	%f58,%f38,%f38
2200*5d9d9091SRichard Lowe	std	%f38,[%i3+64+64+64+64]
2201*5d9d9091SRichard Lowe!
2202*5d9d9091SRichard Lowe	std	%f12,[%i3+64+64+64+64+8]
2203*5d9d9091SRichard Lowe!
2204*5d9d9091SRichard Lowe	std	%f14,[%i3+64+64+64+64+16]
2205*5d9d9091SRichard Lowe!
2206*5d9d9091SRichard Lowe
2207*5d9d9091SRichard Lowe	ldd	[%l5+%lo(TwoTo16)],%f10
2208*5d9d9091SRichard Lowe	ldd	[%i1+48],%f54
2209*5d9d9091SRichard Lowe	ldd	[%i1+56],%f36
2210*5d9d9091SRichard Lowe	ldd	[%i1+64],%f56
2211*5d9d9091SRichard Lowe	ldd	[%i1+112],%f58
2212*5d9d9091SRichard Lowe
2213*5d9d9091SRichard Lowe	ldd	[%i4+104],%f50
2214*5d9d9091SRichard Lowe	ldd	[%i4+112],%f60
2215*5d9d9091SRichard Lowe
2216*5d9d9091SRichard Lowe
2217*5d9d9091SRichard Lowe	.L99999998:
2218*5d9d9091SRichard Lowe!1
2219*5d9d9091SRichard Lowe	ldd	[%i1+24],%f20
2220*5d9d9091SRichard Lowe	fmuld	%f0,%f44,%f12
2221*5d9d9091SRichard Lowe!2
2222*5d9d9091SRichard Lowe	ldd	[%i4+24],%f22
2223*5d9d9091SRichard Lowe	fmuld	%f42,%f4,%f16
2224*5d9d9091SRichard Lowe!3
2225*5d9d9091SRichard Lowe	ldd	[%i1+40],%f24
2226*5d9d9091SRichard Lowe	fmuld	%f46,%f0,%f18
2227*5d9d9091SRichard Lowe!4
2228*5d9d9091SRichard Lowe	ldd	[%i4+40],%f26
2229*5d9d9091SRichard Lowe	fmuld	%f20,%f4,%f20
2230*5d9d9091SRichard Lowe!5
2231*5d9d9091SRichard Lowe	ldd	[%l0+8],%f38
2232*5d9d9091SRichard Lowe	faddd	%f12,%f6,%f12
2233*5d9d9091SRichard Lowe	fmuld	%f22,%f0,%f22
2234*5d9d9091SRichard Lowe!6
2235*5d9d9091SRichard Lowe	add	%l0,8,%l0
2236*5d9d9091SRichard Lowe	ldd	[%i4+56],%f30
2237*5d9d9091SRichard Lowe	fmuld	%f24,%f4,%f24
2238*5d9d9091SRichard Lowe!7
2239*5d9d9091SRichard Lowe	ldd	[%i1+72],%f32
2240*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
2241*5d9d9091SRichard Lowe	fmuld	%f26,%f0,%f26
2242*5d9d9091SRichard Lowe!8
2243*5d9d9091SRichard Lowe	ldd	[%i3+16],%f18
2244*5d9d9091SRichard Lowe	fmuld	%f40,%f38,%f14
2245*5d9d9091SRichard Lowe!9
2246*5d9d9091SRichard Lowe	ldd	[%i4+72],%f34
2247*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
2248*5d9d9091SRichard Lowe	fmuld	%f8,%f12,%f12
2249*5d9d9091SRichard Lowe!10
2250*5d9d9091SRichard Lowe	ldd	[%i3+48],%f22
2251*5d9d9091SRichard Lowe	fmuld	%f36,%f4,%f28
2252*5d9d9091SRichard Lowe!11
2253*5d9d9091SRichard Lowe	ldd	[%i3+8],%f6
2254*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
2255*5d9d9091SRichard Lowe	fmuld	%f30,%f0,%f30
2256*5d9d9091SRichard Lowe!12
2257*5d9d9091SRichard Lowe	std	%f16,[%i3+16]
2258*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
2259*5d9d9091SRichard Lowe	fmuld	%f32,%f4,%f32
2260*5d9d9091SRichard Lowe!13
2261*5d9d9091SRichard Lowe	ldd	[%i3+80],%f26
2262*5d9d9091SRichard Lowe	faddd	%f12,%f14,%f12
2263*5d9d9091SRichard Lowe	fmuld	%f34,%f0,%f34
2264*5d9d9091SRichard Lowe!14
2265*5d9d9091SRichard Lowe	ldd	[%i1+88],%f16
2266*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
2267*5d9d9091SRichard Lowe!15
2268*5d9d9091SRichard Lowe	ldd	[%i4+88],%f18
2269*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
2270*5d9d9091SRichard Lowe!16
2271*5d9d9091SRichard Lowe	ldd	[%i3+112],%f30
2272*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
2273*5d9d9091SRichard Lowe!17
2274*5d9d9091SRichard Lowe	ldd	[%i3+144],%f34
2275*5d9d9091SRichard Lowe	faddd	%f12,%f6,%f6
2276*5d9d9091SRichard Lowe	fmuld	%f16,%f4,%f16
2277*5d9d9091SRichard Lowe!18
2278*5d9d9091SRichard Lowe	std	%f20,[%i3+48]
2279*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
2280*5d9d9091SRichard Lowe	fmuld	%f18,%f0,%f18
2281*5d9d9091SRichard Lowe!19
2282*5d9d9091SRichard Lowe	std	%f24,[%i3+80]
2283*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
2284*5d9d9091SRichard Lowe	fmuld	%f48,%f4,%f20
2285*5d9d9091SRichard Lowe!20
2286*5d9d9091SRichard Lowe	std	%f28,[%i3+112]
2287*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
2288*5d9d9091SRichard Lowe	fmuld	%f50,%f0,%f22
2289*5d9d9091SRichard Lowe!21
2290*5d9d9091SRichard Lowe	ldd	[%i1+120],%f24
2291*5d9d9091SRichard Lowe	fdtox	%f6,%f12
2292*5d9d9091SRichard Lowe!22
2293*5d9d9091SRichard Lowe	std	%f32,[%i3+144]
2294*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
2295*5d9d9091SRichard Lowe!23
2296*5d9d9091SRichard Lowe	ldd	[%i4+120],%f26
2297*5d9d9091SRichard Lowe!24
2298*5d9d9091SRichard Lowe	ldd	[%i3+176],%f18
2299*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
2300*5d9d9091SRichard Lowe	fmuld	%f24,%f4,%f24
2301*5d9d9091SRichard Lowe!25
2302*5d9d9091SRichard Lowe	ldd	[%i4+16],%f30
2303*5d9d9091SRichard Lowe	fmovs	%f11,%f12
2304*5d9d9091SRichard Lowe!26
2305*5d9d9091SRichard Lowe	ldd	[%i1+32],%f32
2306*5d9d9091SRichard Lowe	fmuld	%f26,%f0,%f26
2307*5d9d9091SRichard Lowe!27
2308*5d9d9091SRichard Lowe	ldd	[%i4+32],%f34
2309*5d9d9091SRichard Lowe	fmuld	%f52,%f4,%f28
2310*5d9d9091SRichard Lowe!28
2311*5d9d9091SRichard Lowe	ldd	[%i3+208],%f22
2312*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
2313*5d9d9091SRichard Lowe	fmuld	%f30,%f0,%f30
2314*5d9d9091SRichard Lowe!29
2315*5d9d9091SRichard Lowe	std	%f16,[%i3+176]
2316*5d9d9091SRichard Lowe	fxtod	%f12,%f12
2317*5d9d9091SRichard Lowe	fmuld	%f32,%f4,%f32
2318*5d9d9091SRichard Lowe!30
2319*5d9d9091SRichard Lowe	ldd	[%i4+48],%f18
2320*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
2321*5d9d9091SRichard Lowe	fmuld	%f34,%f0,%f34
2322*5d9d9091SRichard Lowe!31
2323*5d9d9091SRichard Lowe	ldd	[%i3+240],%f26
2324*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
2325*5d9d9091SRichard Lowe!32
2326*5d9d9091SRichard Lowe	std	%f20,[%i3+208]
2327*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
2328*5d9d9091SRichard Lowe	fmuld	%f54,%f4,%f16
2329*5d9d9091SRichard Lowe!33
2330*5d9d9091SRichard Lowe	ldd	[%i3+32],%f30
2331*5d9d9091SRichard Lowe	fmuld	%f12,%f2,%f14
2332*5d9d9091SRichard Lowe!34
2333*5d9d9091SRichard Lowe	ldd	[%i4+64],%f22
2334*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
2335*5d9d9091SRichard Lowe	fmuld	%f18,%f0,%f18
2336*5d9d9091SRichard Lowe!35
2337*5d9d9091SRichard Lowe	ldd	[%i3+64],%f34
2338*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
2339*5d9d9091SRichard Lowe!36
2340*5d9d9091SRichard Lowe	std	%f24,[%i3+240]
2341*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
2342*5d9d9091SRichard Lowe	fmuld	%f56,%f4,%f20
2343*5d9d9091SRichard Lowe!37
2344*5d9d9091SRichard Lowe	std	%f28,[%i3+32]
2345*5d9d9091SRichard Lowe	fmuld	%f14,%f8,%f12
2346*5d9d9091SRichard Lowe!38
2347*5d9d9091SRichard Lowe	ldd	[%i1+80],%f24
2348*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f34	!	yes, tmp52!
2349*5d9d9091SRichard Lowe	fmuld	%f22,%f0,%f22
2350*5d9d9091SRichard Lowe!39
2351*5d9d9091SRichard Lowe	ldd	[%i4+80],%f26
2352*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
2353*5d9d9091SRichard Lowe!40
2354*5d9d9091SRichard Lowe	ldd	[%i1+96],%f28
2355*5d9d9091SRichard Lowe	fmuld	%f58,%f4,%f32
2356*5d9d9091SRichard Lowe!41
2357*5d9d9091SRichard Lowe	ldd	[%i4+96],%f30
2358*5d9d9091SRichard Lowe	fdtox	%f12,%f12
2359*5d9d9091SRichard Lowe	fmuld	%f24,%f4,%f24
2360*5d9d9091SRichard Lowe!42
2361*5d9d9091SRichard Lowe	std	%f34,[%i3+64]	! yes, tmp52!
2362*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
2363*5d9d9091SRichard Lowe	fmuld	%f26,%f0,%f26
2364*5d9d9091SRichard Lowe!43
2365*5d9d9091SRichard Lowe	ldd	[%i3+96],%f18
2366*5d9d9091SRichard Lowe	fmuld	%f28,%f4,%f28
2367*5d9d9091SRichard Lowe!44
2368*5d9d9091SRichard Lowe	ldd	[%i3+128],%f22
2369*5d9d9091SRichard Lowe	fmovd	%f38,%f4
2370*5d9d9091SRichard Lowe	fmuld	%f30,%f0,%f30
2371*5d9d9091SRichard Lowe!45
2372*5d9d9091SRichard Lowe	fxtod	%f12,%f12
2373*5d9d9091SRichard Lowe	fmuld	%f60,%f0,%f34
2374*5d9d9091SRichard Lowe!46
2375*5d9d9091SRichard Lowe	add	%i3,8,%i3
2376*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
2377*5d9d9091SRichard Lowe!47
2378*5d9d9091SRichard Lowe	ldd	[%i3+160-8],%f26
2379*5d9d9091SRichard Lowe	faddd	%f16,%f18,%f16
2380*5d9d9091SRichard Lowe!48
2381*5d9d9091SRichard Lowe	std	%f16,[%i3+96-8]
2382*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
2383*5d9d9091SRichard Lowe!49
2384*5d9d9091SRichard Lowe	ldd	[%i3+192-8],%f30
2385*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
2386*5d9d9091SRichard Lowe	fmuld	%f12,%f10,%f12
2387*5d9d9091SRichard Lowe!50
2388*5d9d9091SRichard Lowe	ldd	[%i3+224-8],%f34
2389*5d9d9091SRichard Lowe	faddd	%f20,%f22,%f20
2390*5d9d9091SRichard Lowe!51
2391*5d9d9091SRichard Lowe	std	%f20,[%i3+128-8]
2392*5d9d9091SRichard Lowe	faddd	%f24,%f26,%f24
2393*5d9d9091SRichard Lowe!52
2394*5d9d9091SRichard Lowe	add	%l1,1,%l1
2395*5d9d9091SRichard Lowe	std	%f24,[%i3+160-8]
2396*5d9d9091SRichard Lowe	faddd	%f28,%f30,%f28
2397*5d9d9091SRichard Lowe!53
2398*5d9d9091SRichard Lowe	cmp	%l1,31
2399*5d9d9091SRichard Lowe	std	%f28,[%i3+192-8]
2400*5d9d9091SRichard Lowe	fsubd	%f14,%f12,%f0
2401*5d9d9091SRichard Lowe!54
2402*5d9d9091SRichard Lowe	faddd	%f32,%f34,%f32
2403*5d9d9091SRichard Lowe	ble,pt	%icc,.L99999998
2404*5d9d9091SRichard Lowe	std	%f32,[%i3+224-8]
2405*5d9d9091SRichard Lowe!55
2406*5d9d9091SRichard Lowe	std	%f6,[%i3]
2407*5d9d9091SRichard Lowe
2408*5d9d9091SRichard Lowe	add	%o5,%g0,%i3
2409*5d9d9091SRichard Lowe
2410*5d9d9091SRichard Lowe
2411*5d9d9091SRichard Lowe!END HAND CODED PART
2412*5d9d9091SRichard Lowe                       .L900000828:
2413*5d9d9091SRichard Lowe/* 0x03e4	 405 */		ba	.L900000852
2414*5d9d9091SRichard Lowe/* 0x03e8	 409 */		ldx	[%i3+%o0],%l1
2415*5d9d9091SRichard Lowe
2416*5d9d9091SRichard Lowe!  406		      !		}
2417*5d9d9091SRichard Lowe!  407		      !	}
2418*5d9d9091SRichard Lowe!  409		      !	conv_d16_to_i32(result, dt + 2 * nlen, (int64_t *)dt, nlen + 1);
2419*5d9d9091SRichard Lowe!  411		      !/*for(i=0;i<nlen+1;i++) saveresult[i]=result[i];*/
2420*5d9d9091SRichard Lowe!  413		      !	adjust_montf_result(result, nint, nlen);
2421*5d9d9091SRichard Lowe
2422*5d9d9091SRichard Lowe                       .L77000476:
2423*5d9d9091SRichard Lowe/* 0x03ec	 413 */		sll	%g1,2,%l3
2424*5d9d9091SRichard Lowe/* 0x03f0	   0 */		sethi	%hi(TwoTo16),%g5
2425*5d9d9091SRichard Lowe/* 0x03f4	 413 */		add	%l3,2,%l2
2426*5d9d9091SRichard Lowe/* 0x03f8	 328 */		cmp	%l2,0
2427*5d9d9091SRichard Lowe/* 0x03fc	     */		ble,pn	%icc,.L77000482
2428*5d9d9091SRichard Lowe/* 0x0400	   0 */		sethi	%hi(TwoToMinus16),%o2
2429*5d9d9091SRichard Lowe                       .L77000514:
2430*5d9d9091SRichard Lowe/* 0x0404	 329 */		add	%l3,2,%l2
2431*5d9d9091SRichard Lowe/* 0x0408	 328 */		add	%l3,1,%o4
2432*5d9d9091SRichard Lowe/* 0x040c	     */		or	%g0,0,%l3
2433*5d9d9091SRichard Lowe/* 0x0410	 329 */		cmp	%l2,8
2434*5d9d9091SRichard Lowe/* 0x0414	     */		bl,pn	%icc,.L77000477
2435*5d9d9091SRichard Lowe/* 0x0418	 328 */		or	%g0,%i3,%l1
2436*5d9d9091SRichard Lowe                       .L900000831:
2437*5d9d9091SRichard Lowe/* 0x041c	 329 */		prefetch	[%i3],22
2438*5d9d9091SRichard Lowe/* 0x0420	     */		sub	%o4,7,%l4
2439*5d9d9091SRichard Lowe/* 0x0424	     */		or	%g0,0,%l3
2440*5d9d9091SRichard Lowe/* 0x0428	     */		or	%g0,%i3,%l1
2441*5d9d9091SRichard Lowe                       .L900000829:
2442*5d9d9091SRichard Lowe/* 0x042c	 329 */		prefetch	[%l1+528],22
2443*5d9d9091SRichard Lowe/* 0x0430	     */		std	%f0,[%l1]
2444*5d9d9091SRichard Lowe/* 0x0434	     */		add	%l3,8,%l3
2445*5d9d9091SRichard Lowe/* 0x0438	     */		add	%l1,64,%l1
2446*5d9d9091SRichard Lowe/* 0x043c	     */		std	%f0,[%l1-56]
2447*5d9d9091SRichard Lowe/* 0x0440	     */		cmp	%l3,%l4
2448*5d9d9091SRichard Lowe/* 0x0444	     */		std	%f0,[%l1-48]
2449*5d9d9091SRichard Lowe/* 0x0448	     */		std	%f0,[%l1-40]
2450*5d9d9091SRichard Lowe/* 0x044c	     */		prefetch	[%l1+496],22
2451*5d9d9091SRichard Lowe/* 0x0450	     */		std	%f0,[%l1-32]
2452*5d9d9091SRichard Lowe/* 0x0454	     */		std	%f0,[%l1-24]
2453*5d9d9091SRichard Lowe/* 0x0458	     */		std	%f0,[%l1-16]
2454*5d9d9091SRichard Lowe/* 0x045c	     */		ble,pt	%icc,.L900000829
2455*5d9d9091SRichard Lowe/* 0x0460	     */		std	%f0,[%l1-8]
2456*5d9d9091SRichard Lowe                       .L900000832:
2457*5d9d9091SRichard Lowe/* 0x0464	 329 */		cmp	%l3,%o4
2458*5d9d9091SRichard Lowe/* 0x0468	     */		bg,pn	%icc,.L77000482
2459*5d9d9091SRichard Lowe/* 0x046c	     */		nop
2460*5d9d9091SRichard Lowe                       .L77000477:
2461*5d9d9091SRichard Lowe/* 0x0470	 329 */		add	%l3,1,%l3
2462*5d9d9091SRichard Lowe                       .L900000851:
2463*5d9d9091SRichard Lowe/* 0x0474	 329 */		std	%f0,[%l1]
2464*5d9d9091SRichard Lowe/* 0x0478	     */		cmp	%l3,%o4
2465*5d9d9091SRichard Lowe/* 0x047c	     */		add	%l1,8,%l1
2466*5d9d9091SRichard Lowe/* 0x0480	     */		ble,pt	%icc,.L900000851
2467*5d9d9091SRichard Lowe/* 0x0484	     */		add	%l3,1,%l3
2468*5d9d9091SRichard Lowe                       .L77000482:
2469*5d9d9091SRichard Lowe/* 0x0488	 330 */		ldd	[%i1],%f40
2470*5d9d9091SRichard Lowe/* 0x048c	 334 */		cmp	%o3,0
2471*5d9d9091SRichard Lowe/* 0x0490	     */		sub	%g1,1,%l3
2472*5d9d9091SRichard Lowe/* 0x0494	 330 */		ldd	[%l0],%f42
2473*5d9d9091SRichard Lowe/* 0x0498	 331 */		ldd	[%o2+%lo(TwoToMinus16)],%f36
2474*5d9d9091SRichard Lowe/* 0x049c	     */		ldd	[%g5+%lo(TwoTo16)],%f38
2475*5d9d9091SRichard Lowe/* 0x04a0	 330 */		fmuld	%f40,%f42,%f52
2476*5d9d9091SRichard Lowe/* 0x04a4	 331 */		fdtox	%f52,%f8
2477*5d9d9091SRichard Lowe/* 0x04a8	     */		fmovs	%f0,%f8
2478*5d9d9091SRichard Lowe/* 0x04ac	     */		fxtod	%f8,%f62
2479*5d9d9091SRichard Lowe/* 0x04b0	     */		fmuld	%f62,%f14,%f60
2480*5d9d9091SRichard Lowe/* 0x04b4	     */		fmuld	%f60,%f36,%f32
2481*5d9d9091SRichard Lowe/* 0x04b8	     */		fdtox	%f32,%f50
2482*5d9d9091SRichard Lowe/* 0x04bc	     */		fxtod	%f50,%f34
2483*5d9d9091SRichard Lowe/* 0x04c0	     */		fmuld	%f34,%f38,%f46
2484*5d9d9091SRichard Lowe/* 0x04c4	     */		fsubd	%f60,%f46,%f40
2485*5d9d9091SRichard Lowe/* 0x04c8	 334 */		ble,pn	%icc,.L77000378
2486*5d9d9091SRichard Lowe/* 0x04cc	 330 */		std	%f52,[%i3]
2487*5d9d9091SRichard Lowe                       .L77000509:
2488*5d9d9091SRichard Lowe/* 0x04d0	 345 */		add	%o3,1,%g5
2489*5d9d9091SRichard Lowe/* 0x04d4	     */		sll	%g5,1,%o2
2490*5d9d9091SRichard Lowe/* 0x04d8	     */		or	%g0,0,%l1
2491*5d9d9091SRichard Lowe/* 0x04dc	 337 */		ldd	[%i4],%f42
2492*5d9d9091SRichard Lowe/* 0x04e0	 345 */		sub	%o3,1,%o3
2493*5d9d9091SRichard Lowe/* 0x04e4	     */		or	%g0,0,%o5
2494*5d9d9091SRichard Lowe/* 0x04e8	     */		or	%g0,%i3,%l2
2495*5d9d9091SRichard Lowe/* 0x04ec	     */		add	%i4,8,%o1
2496*5d9d9091SRichard Lowe/* 0x04f0	     */		add	%i1,8,%g5
2497*5d9d9091SRichard Lowe                       .L900000848:
2498*5d9d9091SRichard Lowe/* 0x04f4	 337 */		fmuld	%f40,%f42,%f34
2499*5d9d9091SRichard Lowe/* 0x04f8	     */		ldd	[%l0+8],%f32
2500*5d9d9091SRichard Lowe/* 0x04fc	 341 */		cmp	%g1,1
2501*5d9d9091SRichard Lowe/* 0x0500	 337 */		ldd	[%i1],%f50
2502*5d9d9091SRichard Lowe/* 0x0504	     */		ldd	[%l2],%f46
2503*5d9d9091SRichard Lowe/* 0x0508	     */		ldd	[%l2+8],%f44
2504*5d9d9091SRichard Lowe/* 0x050c	     */		fmuld	%f50,%f32,%f60
2505*5d9d9091SRichard Lowe/* 0x0510	 335 */		ldd	[%l0],%f42
2506*5d9d9091SRichard Lowe/* 0x0514	 337 */		faddd	%f46,%f34,%f48
2507*5d9d9091SRichard Lowe/* 0x0518	     */		faddd	%f44,%f60,%f58
2508*5d9d9091SRichard Lowe/* 0x051c	     */		fmuld	%f36,%f48,%f54
2509*5d9d9091SRichard Lowe/* 0x0520	     */		faddd	%f58,%f54,%f34
2510*5d9d9091SRichard Lowe/* 0x0524	 341 */		ble,pn	%icc,.L77000368
2511*5d9d9091SRichard Lowe/* 0x0528	 338 */		std	%f34,[%l2+8]
2512*5d9d9091SRichard Lowe                       .L77000507:
2513*5d9d9091SRichard Lowe/* 0x052c	 341 */		or	%g0,1,%l5
2514*5d9d9091SRichard Lowe/* 0x0530	     */		or	%g0,2,%l4
2515*5d9d9091SRichard Lowe/* 0x0534	     */		or	%g0,%g5,%g4
2516*5d9d9091SRichard Lowe/* 0x0538	 342 */		cmp	%l3,12
2517*5d9d9091SRichard Lowe/* 0x053c	     */		bl,pn	%icc,.L77000481
2518*5d9d9091SRichard Lowe/* 0x0540	 341 */		or	%g0,%o1,%g3
2519*5d9d9091SRichard Lowe                       .L900000839:
2520*5d9d9091SRichard Lowe/* 0x0544	 342 */		prefetch	[%i1+8],0
2521*5d9d9091SRichard Lowe/* 0x0548	     */		prefetch	[%i1+72],0
2522*5d9d9091SRichard Lowe/* 0x054c	     */		add	%i4,40,%l6
2523*5d9d9091SRichard Lowe/* 0x0550	     */		add	%i1,40,%l7
2524*5d9d9091SRichard Lowe/* 0x0554	     */		prefetch	[%l2+16],0
2525*5d9d9091SRichard Lowe/* 0x0558	     */		or	%g0,%l2,%o7
2526*5d9d9091SRichard Lowe/* 0x055c	     */		sub	%l3,7,%i5
2527*5d9d9091SRichard Lowe/* 0x0560	     */		prefetch	[%l2+80],0
2528*5d9d9091SRichard Lowe/* 0x0564	     */		add	%l2,80,%g2
2529*5d9d9091SRichard Lowe/* 0x0568	     */		or	%g0,2,%l4
2530*5d9d9091SRichard Lowe/* 0x056c	     */		prefetch	[%i1+136],0
2531*5d9d9091SRichard Lowe/* 0x0570	     */		or	%g0,5,%l5
2532*5d9d9091SRichard Lowe/* 0x0574	     */		prefetch	[%i1+200],0
2533*5d9d9091SRichard Lowe/* 0x0578	     */		prefetch	[%l2+144],0
2534*5d9d9091SRichard Lowe/* 0x057c	     */		ldd	[%i4+8],%f52
2535*5d9d9091SRichard Lowe/* 0x0580	     */		ldd	[%i4+16],%f44
2536*5d9d9091SRichard Lowe/* 0x0584	     */		ldd	[%i4+24],%f56
2537*5d9d9091SRichard Lowe/* 0x0588	     */		fmuld	%f40,%f52,%f48
2538*5d9d9091SRichard Lowe/* 0x058c	     */		fmuld	%f40,%f44,%f46
2539*5d9d9091SRichard Lowe/* 0x0590	     */		fmuld	%f40,%f56,%f44
2540*5d9d9091SRichard Lowe/* 0x0594	     */		ldd	[%l2+48],%f56
2541*5d9d9091SRichard Lowe/* 0x0598	     */		prefetch	[%l2+208],0
2542*5d9d9091SRichard Lowe/* 0x059c	     */		prefetch	[%l2+272],0
2543*5d9d9091SRichard Lowe/* 0x05a0	     */		prefetch	[%l2+336],0
2544*5d9d9091SRichard Lowe/* 0x05a4	     */		prefetch	[%l2+400],0
2545*5d9d9091SRichard Lowe/* 0x05a8	     */		ldd	[%i1+8],%f32
2546*5d9d9091SRichard Lowe/* 0x05ac	     */		ldd	[%i1+16],%f60
2547*5d9d9091SRichard Lowe/* 0x05b0	     */		ldd	[%i1+24],%f50
2548*5d9d9091SRichard Lowe/* 0x05b4	     */		fmuld	%f42,%f32,%f62
2549*5d9d9091SRichard Lowe/* 0x05b8	     */		ldd	[%i1+32],%f32
2550*5d9d9091SRichard Lowe/* 0x05bc	     */		fmuld	%f42,%f60,%f58
2551*5d9d9091SRichard Lowe/* 0x05c0	     */		ldd	[%l2+16],%f52
2552*5d9d9091SRichard Lowe/* 0x05c4	     */		ldd	[%l2+32],%f54
2553*5d9d9091SRichard Lowe/* 0x05c8	     */		faddd	%f62,%f48,%f60
2554*5d9d9091SRichard Lowe/* 0x05cc	     */		fmuld	%f42,%f50,%f48
2555*5d9d9091SRichard Lowe/* 0x05d0	     */		faddd	%f58,%f46,%f62
2556*5d9d9091SRichard Lowe/* 0x05d4	     */		ldd	[%i4+32],%f46
2557*5d9d9091SRichard Lowe/* 0x05d8	     */		ldd	[%l2+64],%f58
2558*5d9d9091SRichard Lowe                       .L900000837:
2559*5d9d9091SRichard Lowe/* 0x05dc	 342 */		prefetch	[%l7+192],0
2560*5d9d9091SRichard Lowe/* 0x05e0	     */		fmuld	%f40,%f46,%f46
2561*5d9d9091SRichard Lowe/* 0x05e4	     */		faddd	%f60,%f52,%f60
2562*5d9d9091SRichard Lowe/* 0x05e8	     */		ldd	[%l6],%f52
2563*5d9d9091SRichard Lowe/* 0x05ec	     */		std	%f60,[%g2-64]
2564*5d9d9091SRichard Lowe/* 0x05f0	     */		fmuld	%f42,%f32,%f50
2565*5d9d9091SRichard Lowe/* 0x05f4	     */		add	%l5,8,%l5
2566*5d9d9091SRichard Lowe/* 0x05f8	     */		ldd	[%l7],%f60
2567*5d9d9091SRichard Lowe/* 0x05fc	     */		faddd	%f48,%f44,%f48
2568*5d9d9091SRichard Lowe/* 0x0600	     */		cmp	%l5,%i5
2569*5d9d9091SRichard Lowe/* 0x0604	     */		ldd	[%g2],%f32
2570*5d9d9091SRichard Lowe/* 0x0608	     */		add	%g2,128,%g2
2571*5d9d9091SRichard Lowe/* 0x060c	     */		prefetch	[%g2+256],0
2572*5d9d9091SRichard Lowe/* 0x0610	     */		fmuld	%f40,%f52,%f52
2573*5d9d9091SRichard Lowe/* 0x0614	     */		faddd	%f62,%f54,%f44
2574*5d9d9091SRichard Lowe/* 0x0618	     */		ldd	[%l6+8],%f54
2575*5d9d9091SRichard Lowe/* 0x061c	     */		std	%f44,[%g2-176]
2576*5d9d9091SRichard Lowe/* 0x0620	     */		fmuld	%f42,%f60,%f44
2577*5d9d9091SRichard Lowe/* 0x0624	     */		add	%l6,64,%l6
2578*5d9d9091SRichard Lowe/* 0x0628	     */		ldd	[%l7+8],%f60
2579*5d9d9091SRichard Lowe/* 0x062c	     */		faddd	%f50,%f46,%f50
2580*5d9d9091SRichard Lowe/* 0x0630	     */		add	%l7,64,%l7
2581*5d9d9091SRichard Lowe/* 0x0634	     */		add	%l4,16,%l4
2582*5d9d9091SRichard Lowe/* 0x0638	     */		ldd	[%g2-112],%f46
2583*5d9d9091SRichard Lowe/* 0x063c	     */		fmuld	%f40,%f54,%f54
2584*5d9d9091SRichard Lowe/* 0x0640	     */		faddd	%f48,%f56,%f62
2585*5d9d9091SRichard Lowe/* 0x0644	     */		ldd	[%l6-48],%f56
2586*5d9d9091SRichard Lowe/* 0x0648	     */		std	%f62,[%g2-160]
2587*5d9d9091SRichard Lowe/* 0x064c	     */		fmuld	%f42,%f60,%f48
2588*5d9d9091SRichard Lowe/* 0x0650	     */		ldd	[%l7-48],%f60
2589*5d9d9091SRichard Lowe/* 0x0654	     */		faddd	%f44,%f52,%f52
2590*5d9d9091SRichard Lowe/* 0x0658	     */		ldd	[%g2-96],%f30
2591*5d9d9091SRichard Lowe/* 0x065c	     */		prefetch	[%g2+288],0
2592*5d9d9091SRichard Lowe/* 0x0660	     */		fmuld	%f40,%f56,%f56
2593*5d9d9091SRichard Lowe/* 0x0664	     */		faddd	%f50,%f58,%f62
2594*5d9d9091SRichard Lowe/* 0x0668	     */		ldd	[%l6-40],%f58
2595*5d9d9091SRichard Lowe/* 0x066c	     */		std	%f62,[%g2-144]
2596*5d9d9091SRichard Lowe/* 0x0670	     */		fmuld	%f42,%f60,%f50
2597*5d9d9091SRichard Lowe/* 0x0674	     */		ldd	[%l7-40],%f62
2598*5d9d9091SRichard Lowe/* 0x0678	     */		faddd	%f48,%f54,%f54
2599*5d9d9091SRichard Lowe/* 0x067c	     */		ldd	[%g2-80],%f28
2600*5d9d9091SRichard Lowe/* 0x0680	     */		prefetch	[%l7+160],0
2601*5d9d9091SRichard Lowe/* 0x0684	     */		fmuld	%f40,%f58,%f48
2602*5d9d9091SRichard Lowe/* 0x0688	     */		faddd	%f52,%f32,%f44
2603*5d9d9091SRichard Lowe/* 0x068c	     */		ldd	[%l6-32],%f58
2604*5d9d9091SRichard Lowe/* 0x0690	     */		std	%f44,[%g2-128]
2605*5d9d9091SRichard Lowe/* 0x0694	     */		fmuld	%f42,%f62,%f44
2606*5d9d9091SRichard Lowe/* 0x0698	     */		ldd	[%l7-32],%f60
2607*5d9d9091SRichard Lowe/* 0x069c	     */		faddd	%f50,%f56,%f56
2608*5d9d9091SRichard Lowe/* 0x06a0	     */		ldd	[%g2-64],%f52
2609*5d9d9091SRichard Lowe/* 0x06a4	     */		prefetch	[%g2+320],0
2610*5d9d9091SRichard Lowe/* 0x06a8	     */		fmuld	%f40,%f58,%f50
2611*5d9d9091SRichard Lowe/* 0x06ac	     */		faddd	%f54,%f46,%f32
2612*5d9d9091SRichard Lowe/* 0x06b0	     */		ldd	[%l6-24],%f62
2613*5d9d9091SRichard Lowe/* 0x06b4	     */		std	%f32,[%g2-112]
2614*5d9d9091SRichard Lowe/* 0x06b8	     */		fmuld	%f42,%f60,%f46
2615*5d9d9091SRichard Lowe/* 0x06bc	     */		ldd	[%l7-24],%f60
2616*5d9d9091SRichard Lowe/* 0x06c0	     */		faddd	%f44,%f48,%f48
2617*5d9d9091SRichard Lowe/* 0x06c4	     */		ldd	[%g2-48],%f54
2618*5d9d9091SRichard Lowe/* 0x06c8	     */		fmuld	%f40,%f62,%f26
2619*5d9d9091SRichard Lowe/* 0x06cc	     */		faddd	%f56,%f30,%f32
2620*5d9d9091SRichard Lowe/* 0x06d0	     */		ldd	[%l6-16],%f58
2621*5d9d9091SRichard Lowe/* 0x06d4	     */		std	%f32,[%g2-96]
2622*5d9d9091SRichard Lowe/* 0x06d8	     */		fmuld	%f42,%f60,%f30
2623*5d9d9091SRichard Lowe/* 0x06dc	     */		ldd	[%l7-16],%f32
2624*5d9d9091SRichard Lowe/* 0x06e0	     */		faddd	%f46,%f50,%f60
2625*5d9d9091SRichard Lowe/* 0x06e4	     */		ldd	[%g2-32],%f56
2626*5d9d9091SRichard Lowe/* 0x06e8	     */		prefetch	[%g2+352],0
2627*5d9d9091SRichard Lowe/* 0x06ec	     */		fmuld	%f40,%f58,%f44
2628*5d9d9091SRichard Lowe/* 0x06f0	     */		faddd	%f48,%f28,%f62
2629*5d9d9091SRichard Lowe/* 0x06f4	     */		ldd	[%l6-8],%f46
2630*5d9d9091SRichard Lowe/* 0x06f8	     */		std	%f62,[%g2-80]
2631*5d9d9091SRichard Lowe/* 0x06fc	     */		fmuld	%f42,%f32,%f48
2632*5d9d9091SRichard Lowe/* 0x0700	     */		ldd	[%l7-8],%f32
2633*5d9d9091SRichard Lowe/* 0x0704	     */		faddd	%f30,%f26,%f62
2634*5d9d9091SRichard Lowe/* 0x0708	     */		ble,pt	%icc,.L900000837
2635*5d9d9091SRichard Lowe/* 0x070c	     */		ldd	[%g2-16],%f58
2636*5d9d9091SRichard Lowe                       .L900000840:
2637*5d9d9091SRichard Lowe/* 0x0710	 342 */		fmuld	%f40,%f46,%f46
2638*5d9d9091SRichard Lowe/* 0x0714	     */		faddd	%f62,%f54,%f62
2639*5d9d9091SRichard Lowe/* 0x0718	     */		std	%f62,[%g2-48]
2640*5d9d9091SRichard Lowe/* 0x071c	     */		cmp	%l5,%l3
2641*5d9d9091SRichard Lowe/* 0x0720	     */		fmuld	%f42,%f32,%f50
2642*5d9d9091SRichard Lowe/* 0x0724	     */		faddd	%f48,%f44,%f48
2643*5d9d9091SRichard Lowe/* 0x0728	     */		or	%g0,%l7,%g4
2644*5d9d9091SRichard Lowe/* 0x072c	     */		or	%g0,%l6,%g3
2645*5d9d9091SRichard Lowe/* 0x0730	     */		faddd	%f60,%f52,%f60
2646*5d9d9091SRichard Lowe/* 0x0734	     */		std	%f60,[%g2-64]
2647*5d9d9091SRichard Lowe/* 0x0738	     */		or	%g0,%o7,%l2
2648*5d9d9091SRichard Lowe/* 0x073c	     */		add	%l4,8,%l4
2649*5d9d9091SRichard Lowe/* 0x0740	     */		faddd	%f50,%f46,%f54
2650*5d9d9091SRichard Lowe/* 0x0744	     */		faddd	%f48,%f56,%f56
2651*5d9d9091SRichard Lowe/* 0x0748	     */		std	%f56,[%g2-32]
2652*5d9d9091SRichard Lowe/* 0x074c	     */		faddd	%f54,%f58,%f58
2653*5d9d9091SRichard Lowe/* 0x0750	     */		bg,pn	%icc,.L77000368
2654*5d9d9091SRichard Lowe/* 0x0754	     */		std	%f58,[%g2-16]
2655*5d9d9091SRichard Lowe                       .L77000481:
2656*5d9d9091SRichard Lowe/* 0x0758	 342 */		ldd	[%g4],%f44
2657*5d9d9091SRichard Lowe                       .L900000850:
2658*5d9d9091SRichard Lowe/* 0x075c	 342 */		ldd	[%g3],%f48
2659*5d9d9091SRichard Lowe/* 0x0760	     */		fmuld	%f42,%f44,%f58
2660*5d9d9091SRichard Lowe/* 0x0764	     */		sra	%l4,0,%l7
2661*5d9d9091SRichard Lowe/* 0x0768	     */		add	%l5,1,%l5
2662*5d9d9091SRichard Lowe/* 0x076c	     */		sllx	%l7,3,%g2
2663*5d9d9091SRichard Lowe/* 0x0770	     */		add	%g4,8,%g4
2664*5d9d9091SRichard Lowe/* 0x0774	     */		ldd	[%l2+%g2],%f56
2665*5d9d9091SRichard Lowe/* 0x0778	     */		cmp	%l5,%l3
2666*5d9d9091SRichard Lowe/* 0x077c	     */		add	%l4,2,%l4
2667*5d9d9091SRichard Lowe/* 0x0780	     */		fmuld	%f40,%f48,%f54
2668*5d9d9091SRichard Lowe/* 0x0784	     */		add	%g3,8,%g3
2669*5d9d9091SRichard Lowe/* 0x0788	     */		faddd	%f58,%f54,%f52
2670*5d9d9091SRichard Lowe/* 0x078c	     */		faddd	%f52,%f56,%f62
2671*5d9d9091SRichard Lowe/* 0x0790	     */		std	%f62,[%l2+%g2]
2672*5d9d9091SRichard Lowe/* 0x0794	     */		ble,a,pt	%icc,.L900000850
2673*5d9d9091SRichard Lowe/* 0x0798	     */		ldd	[%g4],%f44
2674*5d9d9091SRichard Lowe                       .L77000368:
2675*5d9d9091SRichard Lowe/* 0x079c	 344 */		cmp	%o5,15
2676*5d9d9091SRichard Lowe/* 0x07a0	     */		bne,pn	%icc,.L77000483
2677*5d9d9091SRichard Lowe/* 0x07a4	 345 */		srl	%l1,31,%g4
2678*5d9d9091SRichard Lowe                       .L77000478:
2679*5d9d9091SRichard Lowe/* 0x07a8	 345 */		add	%l1,%g4,%l4
2680*5d9d9091SRichard Lowe/* 0x07ac	     */		sra	%l4,1,%o7
2681*5d9d9091SRichard Lowe/* 0x07b0	     */		add	%o7,1,%o4
2682*5d9d9091SRichard Lowe/* 0x07b4	     */		sll	%o4,1,%l6
2683*5d9d9091SRichard Lowe/* 0x07b8	     */		cmp	%l6,%o2
2684*5d9d9091SRichard Lowe/* 0x07bc	     */		bge,pn	%icc,.L77000392
2685*5d9d9091SRichard Lowe/* 0x07c0	     */		fmovd	%f0,%f42
2686*5d9d9091SRichard Lowe                       .L77000508:
2687*5d9d9091SRichard Lowe/* 0x07c4	 345 */		sra	%l6,0,%l4
2688*5d9d9091SRichard Lowe/* 0x07c8	     */		sllx	%l4,3,%g2
2689*5d9d9091SRichard Lowe/* 0x07cc	     */		fmovd	%f0,%f32
2690*5d9d9091SRichard Lowe/* 0x07d0	     */		sub	%o2,1,%l5
2691*5d9d9091SRichard Lowe/* 0x07d4	     */		ldd	[%g2+%i3],%f40
2692*5d9d9091SRichard Lowe/* 0x07d8	     */		add	%g2,%i3,%g3
2693*5d9d9091SRichard Lowe                       .L900000849:
2694*5d9d9091SRichard Lowe/* 0x07dc	 345 */		fdtox	%f40,%f10
2695*5d9d9091SRichard Lowe/* 0x07e0	     */		ldd	[%g3+8],%f52
2696*5d9d9091SRichard Lowe/* 0x07e4	     */		add	%l6,2,%l6
2697*5d9d9091SRichard Lowe/* 0x07e8	     */		cmp	%l6,%l5
2698*5d9d9091SRichard Lowe/* 0x07ec	     */		fdtox	%f52,%f2
2699*5d9d9091SRichard Lowe/* 0x07f0	     */		fmovd	%f10,%f30
2700*5d9d9091SRichard Lowe/* 0x07f4	     */		fmovs	%f0,%f10
2701*5d9d9091SRichard Lowe/* 0x07f8	     */		fmovs	%f0,%f2
2702*5d9d9091SRichard Lowe/* 0x07fc	     */		fxtod	%f10,%f10
2703*5d9d9091SRichard Lowe/* 0x0800	     */		fxtod	%f2,%f2
2704*5d9d9091SRichard Lowe/* 0x0804	     */		fdtox	%f52,%f28
2705*5d9d9091SRichard Lowe/* 0x0808	     */		faddd	%f10,%f32,%f56
2706*5d9d9091SRichard Lowe/* 0x080c	     */		std	%f56,[%g3]
2707*5d9d9091SRichard Lowe/* 0x0810	     */		faddd	%f2,%f42,%f62
2708*5d9d9091SRichard Lowe/* 0x0814	     */		std	%f62,[%g3+8]
2709*5d9d9091SRichard Lowe/* 0x0818	     */		fitod	%f30,%f32
2710*5d9d9091SRichard Lowe/* 0x081c	     */		add	%g3,16,%g3
2711*5d9d9091SRichard Lowe/* 0x0820	     */		fitod	%f28,%f42
2712*5d9d9091SRichard Lowe/* 0x0824	     */		ble,a,pt	%icc,.L900000849
2713*5d9d9091SRichard Lowe/* 0x0828	     */		ldd	[%g3],%f40
2714*5d9d9091SRichard Lowe                       .L77000392:
2715*5d9d9091SRichard Lowe/* 0x082c	 346 */		or	%g0,0,%o5
2716*5d9d9091SRichard Lowe                       .L77000483:
2717*5d9d9091SRichard Lowe/* 0x0830	 350 */		fdtox	%f34,%f6
2718*5d9d9091SRichard Lowe/* 0x0834	     */		add	%l1,1,%l1
2719*5d9d9091SRichard Lowe/* 0x0838	     */		cmp	%l1,%o3
2720*5d9d9091SRichard Lowe/* 0x083c	     */		add	%o5,1,%o5
2721*5d9d9091SRichard Lowe/* 0x0840	     */		add	%l2,8,%l2
2722*5d9d9091SRichard Lowe/* 0x0844	     */		add	%l0,8,%l0
2723*5d9d9091SRichard Lowe/* 0x0848	     */		fmovs	%f0,%f6
2724*5d9d9091SRichard Lowe/* 0x084c	     */		fxtod	%f6,%f46
2725*5d9d9091SRichard Lowe/* 0x0850	     */		fmuld	%f46,%f14,%f56
2726*5d9d9091SRichard Lowe/* 0x0854	     */		fmuld	%f56,%f36,%f44
2727*5d9d9091SRichard Lowe/* 0x0858	     */		fdtox	%f44,%f48
2728*5d9d9091SRichard Lowe/* 0x085c	     */		fxtod	%f48,%f58
2729*5d9d9091SRichard Lowe/* 0x0860	     */		fmuld	%f58,%f38,%f54
2730*5d9d9091SRichard Lowe/* 0x0864	     */		fsubd	%f56,%f54,%f40
2731*5d9d9091SRichard Lowe/* 0x0868	     */		ble,a,pt	%icc,.L900000848
2732*5d9d9091SRichard Lowe/* 0x086c	 337 */		ldd	[%i4],%f42
2733*5d9d9091SRichard Lowe                       .L77000378:
2734*5d9d9091SRichard Lowe/* 0x0870	 409 */		ldx	[%i3+%o0],%l1
2735*5d9d9091SRichard Lowe                       .L900000852:
2736*5d9d9091SRichard Lowe/* 0x0874	 409 */		add	%i3,%o0,%l4
2737*5d9d9091SRichard Lowe/* 0x0878	     */		ldx	[%l4+8],%i1
2738*5d9d9091SRichard Lowe/* 0x087c	     */		cmp	%l1,0
2739*5d9d9091SRichard Lowe/* 0x0880	     */		bne,pn	%xcc,.L77000403
2740*5d9d9091SRichard Lowe/* 0x0884	     */		or	%g0,0,%g5
2741*5d9d9091SRichard Lowe                       .L77000402:
2742*5d9d9091SRichard Lowe/* 0x0888	 409 */		or	%g0,0,%i3
2743*5d9d9091SRichard Lowe/* 0x088c	     */		ba	.L900000847
2744*5d9d9091SRichard Lowe/* 0x0890	     */		cmp	%i1,0
2745*5d9d9091SRichard Lowe                       .L77000403:
2746*5d9d9091SRichard Lowe/* 0x0894	 409 */		srlx	%l1,52,%o5
2747*5d9d9091SRichard Lowe/* 0x0898	     */		sethi	%hi(0xfff00000),%i3
2748*5d9d9091SRichard Lowe/* 0x089c	     */		sllx	%i3,32,%o2
2749*5d9d9091SRichard Lowe/* 0x08a0	     */		sethi	%hi(0x40000000),%o0
2750*5d9d9091SRichard Lowe/* 0x08a4	     */		sllx	%o0,22,%o4
2751*5d9d9091SRichard Lowe/* 0x08a8	     */		or	%g0,1023,%l0
2752*5d9d9091SRichard Lowe/* 0x08ac	     */		xor	%o2,-1,%o3
2753*5d9d9091SRichard Lowe/* 0x08b0	     */		sub	%l0,%o5,%o7
2754*5d9d9091SRichard Lowe/* 0x08b4	     */		and	%l1,%o3,%l1
2755*5d9d9091SRichard Lowe/* 0x08b8	     */		add	%o7,52,%i4
2756*5d9d9091SRichard Lowe/* 0x08bc	     */		or	%l1,%o4,%o1
2757*5d9d9091SRichard Lowe/* 0x08c0	     */		cmp	%i1,0
2758*5d9d9091SRichard Lowe/* 0x08c4	     */		srlx	%o1,%i4,%i3
2759*5d9d9091SRichard Lowe                       .L900000847:
2760*5d9d9091SRichard Lowe/* 0x08c8	 409 */		bne,pn	%xcc,.L77000409
2761*5d9d9091SRichard Lowe/* 0x08cc	     */		or	%g0,0,%o7
2762*5d9d9091SRichard Lowe                       .L77000408:
2763*5d9d9091SRichard Lowe/* 0x08d0	 409 */		ba	.L900000846
2764*5d9d9091SRichard Lowe/* 0x08d4	 350 */		cmp	%g1,0
2765*5d9d9091SRichard Lowe                       .L77000409:
2766*5d9d9091SRichard Lowe/* 0x08d8	 409 */		srlx	%i1,52,%l2
2767*5d9d9091SRichard Lowe/* 0x08dc	     */		sethi	%hi(0xfff00000),%o7
2768*5d9d9091SRichard Lowe/* 0x08e0	     */		sllx	%o7,32,%i4
2769*5d9d9091SRichard Lowe/* 0x08e4	     */		sethi	%hi(0x40000000),%i5
2770*5d9d9091SRichard Lowe/* 0x08e8	     */		sllx	%i5,22,%l6
2771*5d9d9091SRichard Lowe/* 0x08ec	     */		or	%g0,1023,%l5
2772*5d9d9091SRichard Lowe/* 0x08f0	     */		xor	%i4,-1,%o1
2773*5d9d9091SRichard Lowe/* 0x08f4	     */		sub	%l5,%l2,%g2
2774*5d9d9091SRichard Lowe/* 0x08f8	     */		and	%i1,%o1,%l7
2775*5d9d9091SRichard Lowe/* 0x08fc	     */		add	%g2,52,%g3
2776*5d9d9091SRichard Lowe/* 0x0900	     */		or	%l7,%l6,%g4
2777*5d9d9091SRichard Lowe/* 0x0904	 350 */		cmp	%g1,0
2778*5d9d9091SRichard Lowe/* 0x0908	 409 */		srlx	%g4,%g3,%o7
2779*5d9d9091SRichard Lowe                       .L900000846:
2780*5d9d9091SRichard Lowe/* 0x090c	 350 */		ble,pn	%icc,.L77000397
2781*5d9d9091SRichard Lowe/* 0x0910	     */		or	%g0,0,%l5
2782*5d9d9091SRichard Lowe                       .L77000510:
2783*5d9d9091SRichard Lowe/* 0x0914	 409 */		sethi	%hi(0xfff00000),%g4
2784*5d9d9091SRichard Lowe/* 0x0918	     */		sllx	%g4,32,%o0
2785*5d9d9091SRichard Lowe/* 0x091c	   0 */		or	%g0,-1,%i5
2786*5d9d9091SRichard Lowe/* 0x0920	 409 */		srl	%i5,0,%l7
2787*5d9d9091SRichard Lowe/* 0x0924	     */		sethi	%hi(0x40000000),%i1
2788*5d9d9091SRichard Lowe/* 0x0928	     */		sllx	%i1,22,%l6
2789*5d9d9091SRichard Lowe/* 0x092c	     */		sethi	%hi(0xfc00),%i4
2790*5d9d9091SRichard Lowe/* 0x0930	     */		xor	%o0,-1,%g2
2791*5d9d9091SRichard Lowe/* 0x0934	     */		add	%i4,1023,%l2
2792*5d9d9091SRichard Lowe/* 0x0938	     */		or	%g0,2,%g4
2793*5d9d9091SRichard Lowe/* 0x093c	     */		or	%g0,%i2,%g3
2794*5d9d9091SRichard Lowe                       .L77000395:
2795*5d9d9091SRichard Lowe/* 0x0940	 409 */		sra	%g4,0,%o2
2796*5d9d9091SRichard Lowe/* 0x0944	     */		add	%g4,1,%o3
2797*5d9d9091SRichard Lowe/* 0x0948	     */		sllx	%o2,3,%o0
2798*5d9d9091SRichard Lowe/* 0x094c	     */		sra	%o3,0,%o5
2799*5d9d9091SRichard Lowe/* 0x0950	     */		ldx	[%l4+%o0],%o4
2800*5d9d9091SRichard Lowe/* 0x0954	     */		sllx	%o5,3,%l0
2801*5d9d9091SRichard Lowe/* 0x0958	     */		and	%i3,%l7,%o1
2802*5d9d9091SRichard Lowe/* 0x095c	     */		ldx	[%l4+%l0],%i4
2803*5d9d9091SRichard Lowe/* 0x0960	     */		cmp	%o4,0
2804*5d9d9091SRichard Lowe/* 0x0964	     */		bne,pn	%xcc,.L77000415
2805*5d9d9091SRichard Lowe/* 0x0968	 350 */		and	%o7,%l2,%i5
2806*5d9d9091SRichard Lowe                       .L77000414:
2807*5d9d9091SRichard Lowe/* 0x096c	 409 */		or	%g0,0,%l1
2808*5d9d9091SRichard Lowe/* 0x0970	     */		ba	.L900000845
2809*5d9d9091SRichard Lowe/* 0x0974	     */		add	%g5,%o1,%i1
2810*5d9d9091SRichard Lowe                       .L77000415:
2811*5d9d9091SRichard Lowe/* 0x0978	 409 */		srlx	%o4,52,%o3
2812*5d9d9091SRichard Lowe/* 0x097c	     */		and	%o4,%g2,%l1
2813*5d9d9091SRichard Lowe/* 0x0980	     */		or	%g0,52,%o0
2814*5d9d9091SRichard Lowe/* 0x0984	     */		sub	%o3,1023,%l0
2815*5d9d9091SRichard Lowe/* 0x0988	     */		or	%l1,%l6,%o4
2816*5d9d9091SRichard Lowe/* 0x098c	     */		sub	%o0,%l0,%o5
2817*5d9d9091SRichard Lowe/* 0x0990	     */		srlx	%o4,%o5,%l1
2818*5d9d9091SRichard Lowe/* 0x0994	     */		add	%g5,%o1,%i1
2819*5d9d9091SRichard Lowe                       .L900000845:
2820*5d9d9091SRichard Lowe/* 0x0998	 409 */		srax	%i3,32,%g5
2821*5d9d9091SRichard Lowe/* 0x099c	     */		cmp	%i4,0
2822*5d9d9091SRichard Lowe/* 0x09a0	     */		bne,pn	%xcc,.L77000421
2823*5d9d9091SRichard Lowe/* 0x09a4	 350 */		sllx	%i5,16,%o2
2824*5d9d9091SRichard Lowe                       .L77000420:
2825*5d9d9091SRichard Lowe/* 0x09a8	 409 */		or	%g0,0,%o4
2826*5d9d9091SRichard Lowe/* 0x09ac	     */		ba	.L900000844
2827*5d9d9091SRichard Lowe/* 0x09b0	 350 */		add	%i1,%o2,%o5
2828*5d9d9091SRichard Lowe                       .L77000421:
2829*5d9d9091SRichard Lowe/* 0x09b4	 409 */		srlx	%i4,52,%o4
2830*5d9d9091SRichard Lowe/* 0x09b8	     */		or	%g0,52,%o0
2831*5d9d9091SRichard Lowe/* 0x09bc	     */		sub	%o4,1023,%o3
2832*5d9d9091SRichard Lowe/* 0x09c0	     */		and	%i4,%g2,%i3
2833*5d9d9091SRichard Lowe/* 0x09c4	     */		or	%i3,%l6,%o5
2834*5d9d9091SRichard Lowe/* 0x09c8	     */		sub	%o0,%o3,%l0
2835*5d9d9091SRichard Lowe/* 0x09cc	     */		srlx	%o5,%l0,%o4
2836*5d9d9091SRichard Lowe/* 0x09d0	 350 */		add	%i1,%o2,%o5
2837*5d9d9091SRichard Lowe                       .L900000844:
2838*5d9d9091SRichard Lowe/* 0x09d4	 350 */		srax	%o7,16,%i4
2839*5d9d9091SRichard Lowe/* 0x09d8	     */		srax	%o5,32,%i5
2840*5d9d9091SRichard Lowe/* 0x09dc	     */		add	%i4,%i5,%o1
2841*5d9d9091SRichard Lowe/* 0x09e0	     */		add	%l5,1,%l5
2842*5d9d9091SRichard Lowe/* 0x09e4	     */		and	%o5,%l7,%i1
2843*5d9d9091SRichard Lowe/* 0x09e8	     */		add	%g5,%o1,%g5
2844*5d9d9091SRichard Lowe/* 0x09ec	     */		st	%i1,[%g3]
2845*5d9d9091SRichard Lowe/* 0x09f0	     */		or	%g0,%l1,%i3
2846*5d9d9091SRichard Lowe/* 0x09f4	     */		or	%g0,%o4,%o7
2847*5d9d9091SRichard Lowe/* 0x09f8	     */		add	%g4,2,%g4
2848*5d9d9091SRichard Lowe/* 0x09fc	     */		cmp	%l5,%l3
2849*5d9d9091SRichard Lowe/* 0x0a00	     */		ble,pt	%icc,.L77000395
2850*5d9d9091SRichard Lowe/* 0x0a04	     */		add	%g3,4,%g3
2851*5d9d9091SRichard Lowe                       .L77000397:
2852*5d9d9091SRichard Lowe/* 0x0a08	 409 */		sethi	%hi(0xfc00),%l4
2853*5d9d9091SRichard Lowe/* 0x0a0c	     */		sra	%l5,0,%i5
2854*5d9d9091SRichard Lowe/* 0x0a10	     */		add	%l4,1023,%i1
2855*5d9d9091SRichard Lowe/* 0x0a14	     */		add	%g5,%i3,%l5
2856*5d9d9091SRichard Lowe/* 0x0a18	     */		and	%o7,%i1,%g5
2857*5d9d9091SRichard Lowe/* 0x0a1c	     */		sllx	%g5,16,%l2
2858*5d9d9091SRichard Lowe/* 0x0a20	     */		sllx	%i5,2,%l7
2859*5d9d9091SRichard Lowe/* 0x0a24	 413 */		sra	%g1,0,%g2
2860*5d9d9091SRichard Lowe/* 0x0a28	 409 */		add	%l5,%l2,%l6
2861*5d9d9091SRichard Lowe/* 0x0a2c	     */		st	%l6,[%i2+%l7]
2862*5d9d9091SRichard Lowe/* 0x0a30	 413 */		sllx	%g2,2,%g3
2863*5d9d9091SRichard Lowe/* 0x0a34	     */		ld	[%i2+%g3],%g4
2864*5d9d9091SRichard Lowe/* 0x0a38	     */		cmp	%g4,0
2865*5d9d9091SRichard Lowe/* 0x0a3c	     */		bgu,pn	%icc,.L77000486
2866*5d9d9091SRichard Lowe/* 0x0a40	     */		cmp	%l3,0
2867*5d9d9091SRichard Lowe                       .L77000427:
2868*5d9d9091SRichard Lowe/* 0x0a44	 413 */		bl,pn	%icc,.L77000486
2869*5d9d9091SRichard Lowe/* 0x0a48	     */		or	%g0,%l3,%i5
2870*5d9d9091SRichard Lowe                       .L77000512:
2871*5d9d9091SRichard Lowe/* 0x0a4c	 413 */		sra	%l3,0,%o5
2872*5d9d9091SRichard Lowe/* 0x0a50	     */		sllx	%o5,2,%l7
2873*5d9d9091SRichard Lowe/* 0x0a54	     */		ld	[%l7+%i0],%o5
2874*5d9d9091SRichard Lowe/* 0x0a58	     */		add	%l7,%i2,%o1
2875*5d9d9091SRichard Lowe/* 0x0a5c	     */		add	%l7,%i0,%i4
2876*5d9d9091SRichard Lowe                       .L900000843:
2877*5d9d9091SRichard Lowe/* 0x0a60	 413 */		ld	[%o1],%i1
2878*5d9d9091SRichard Lowe/* 0x0a64	     */		cmp	%i1,%o5
2879*5d9d9091SRichard Lowe/* 0x0a68	     */		bne,pn	%icc,.L77000435
2880*5d9d9091SRichard Lowe/* 0x0a6c	     */		sub	%o1,4,%o1
2881*5d9d9091SRichard Lowe                       .L77000431:
2882*5d9d9091SRichard Lowe/* 0x0a70	 413 */		sub	%i4,4,%i4
2883*5d9d9091SRichard Lowe/* 0x0a74	     */		subcc	%i5,1,%i5
2884*5d9d9091SRichard Lowe/* 0x0a78	     */		bpos,a,pt	%icc,.L900000843
2885*5d9d9091SRichard Lowe/* 0x0a7c	     */		ld	[%i4],%o5
2886*5d9d9091SRichard Lowe                       .L900000827:
2887*5d9d9091SRichard Lowe/* 0x0a80	 413 */		ba	.L900000842
2888*5d9d9091SRichard Lowe/* 0x0a84	 350 */		cmp	%g1,0
2889*5d9d9091SRichard Lowe                       .L77000435:
2890*5d9d9091SRichard Lowe/* 0x0a88	 413 */		sra	%i5,0,%o0
2891*5d9d9091SRichard Lowe/* 0x0a8c	     */		sllx	%o0,2,%l1
2892*5d9d9091SRichard Lowe/* 0x0a90	     */		ld	[%i0+%l1],%i3
2893*5d9d9091SRichard Lowe/* 0x0a94	     */		ld	[%i2+%l1],%l0
2894*5d9d9091SRichard Lowe/* 0x0a98	     */		cmp	%l0,%i3
2895*5d9d9091SRichard Lowe/* 0x0a9c	     */		bleu,pt	%icc,.L77000379
2896*5d9d9091SRichard Lowe/* 0x0aa0	     */		nop
2897*5d9d9091SRichard Lowe                       .L77000486:
2898*5d9d9091SRichard Lowe/* 0x0aa4	 350 */		cmp	%g1,0
2899*5d9d9091SRichard Lowe                       .L900000842:
2900*5d9d9091SRichard Lowe/* 0x0aa8	 350 */		ble,pn	%icc,.L77000379
2901*5d9d9091SRichard Lowe/* 0x0aac	     */		add	%l3,1,%g3
2902*5d9d9091SRichard Lowe                       .L77000511:
2903*5d9d9091SRichard Lowe/* 0x0ab0	 350 */		or	%g0,0,%l5
2904*5d9d9091SRichard Lowe/* 0x0ab4	     */		cmp	%g3,10
2905*5d9d9091SRichard Lowe/* 0x0ab8	     */		bl,pn	%icc,.L77000487
2906*5d9d9091SRichard Lowe/* 0x0abc	     */		or	%g0,0,%g1
2907*5d9d9091SRichard Lowe                       .L900000835:
2908*5d9d9091SRichard Lowe/* 0x0ac0	 350 */		prefetch	[%i2],22
2909*5d9d9091SRichard Lowe/* 0x0ac4	     */		add	%i0,4,%l2
2910*5d9d9091SRichard Lowe/* 0x0ac8	     */		prefetch	[%i2+64],22
2911*5d9d9091SRichard Lowe/* 0x0acc	     */		add	%i2,8,%o5
2912*5d9d9091SRichard Lowe/* 0x0ad0	     */		sub	%l3,7,%i0
2913*5d9d9091SRichard Lowe/* 0x0ad4	     */		prefetch	[%i2+128],22
2914*5d9d9091SRichard Lowe/* 0x0ad8	     */		or	%g0,2,%l5
2915*5d9d9091SRichard Lowe/* 0x0adc	     */		prefetch	[%i2+192],22
2916*5d9d9091SRichard Lowe/* 0x0ae0	     */		prefetch	[%i2+256],22
2917*5d9d9091SRichard Lowe/* 0x0ae4	     */		prefetch	[%i2+320],22
2918*5d9d9091SRichard Lowe/* 0x0ae8	     */		prefetch	[%i2+384],22
2919*5d9d9091SRichard Lowe/* 0x0aec	     */		ld	[%l2-4],%l7
2920*5d9d9091SRichard Lowe/* 0x0af0	     */		ld	[%o5-4],%l6
2921*5d9d9091SRichard Lowe/* 0x0af4	     */		prefetch	[%o5+440],22
2922*5d9d9091SRichard Lowe/* 0x0af8	     */		prefetch	[%o5+504],22
2923*5d9d9091SRichard Lowe/* 0x0afc	     */		ld	[%i2],%i2
2924*5d9d9091SRichard Lowe/* 0x0b00	     */		sub	%i2,%l7,%g3
2925*5d9d9091SRichard Lowe/* 0x0b04	     */		st	%g3,[%o5-8]
2926*5d9d9091SRichard Lowe/* 0x0b08	     */		srax	%g3,32,%l7
2927*5d9d9091SRichard Lowe                       .L900000833:
2928*5d9d9091SRichard Lowe/* 0x0b0c	 350 */		add	%l5,8,%l5
2929*5d9d9091SRichard Lowe/* 0x0b10	     */		add	%o5,32,%o5
2930*5d9d9091SRichard Lowe/* 0x0b14	     */		ld	[%l2],%i5
2931*5d9d9091SRichard Lowe/* 0x0b18	     */		prefetch	[%o5+496],22
2932*5d9d9091SRichard Lowe/* 0x0b1c	     */		cmp	%l5,%i0
2933*5d9d9091SRichard Lowe/* 0x0b20	     */		add	%l2,32,%l2
2934*5d9d9091SRichard Lowe/* 0x0b24	     */		sub	%l6,%i5,%g5
2935*5d9d9091SRichard Lowe/* 0x0b28	     */		add	%g5,%l7,%o0
2936*5d9d9091SRichard Lowe/* 0x0b2c	     */		ld	[%o5-32],%l4
2937*5d9d9091SRichard Lowe/* 0x0b30	     */		st	%o0,[%o5-36]
2938*5d9d9091SRichard Lowe/* 0x0b34	     */		srax	%o0,32,%i3
2939*5d9d9091SRichard Lowe/* 0x0b38	     */		ld	[%l2-28],%i1
2940*5d9d9091SRichard Lowe/* 0x0b3c	     */		sub	%l4,%i1,%i4
2941*5d9d9091SRichard Lowe/* 0x0b40	     */		add	%i4,%i3,%o1
2942*5d9d9091SRichard Lowe/* 0x0b44	     */		ld	[%o5-28],%o3
2943*5d9d9091SRichard Lowe/* 0x0b48	     */		st	%o1,[%o5-32]
2944*5d9d9091SRichard Lowe/* 0x0b4c	     */		srax	%o1,32,%l1
2945*5d9d9091SRichard Lowe/* 0x0b50	     */		ld	[%l2-24],%o2
2946*5d9d9091SRichard Lowe/* 0x0b54	     */		sub	%o3,%o2,%g2
2947*5d9d9091SRichard Lowe/* 0x0b58	     */		add	%g2,%l1,%o7
2948*5d9d9091SRichard Lowe/* 0x0b5c	     */		ld	[%o5-24],%l0
2949*5d9d9091SRichard Lowe/* 0x0b60	     */		st	%o7,[%o5-28]
2950*5d9d9091SRichard Lowe/* 0x0b64	     */		srax	%o7,32,%l6
2951*5d9d9091SRichard Lowe/* 0x0b68	     */		ld	[%l2-20],%o4
2952*5d9d9091SRichard Lowe/* 0x0b6c	     */		sub	%l0,%o4,%g1
2953*5d9d9091SRichard Lowe/* 0x0b70	     */		add	%g1,%l6,%l7
2954*5d9d9091SRichard Lowe/* 0x0b74	     */		ld	[%o5-20],%i2
2955*5d9d9091SRichard Lowe/* 0x0b78	     */		st	%l7,[%o5-24]
2956*5d9d9091SRichard Lowe/* 0x0b7c	     */		srax	%l7,32,%g4
2957*5d9d9091SRichard Lowe/* 0x0b80	     */		ld	[%l2-16],%g3
2958*5d9d9091SRichard Lowe/* 0x0b84	     */		sub	%i2,%g3,%i5
2959*5d9d9091SRichard Lowe/* 0x0b88	     */		add	%i5,%g4,%g5
2960*5d9d9091SRichard Lowe/* 0x0b8c	     */		ld	[%o5-16],%i1
2961*5d9d9091SRichard Lowe/* 0x0b90	     */		st	%g5,[%o5-20]
2962*5d9d9091SRichard Lowe/* 0x0b94	     */		srax	%g5,32,%l4
2963*5d9d9091SRichard Lowe/* 0x0b98	     */		ld	[%l2-12],%o0
2964*5d9d9091SRichard Lowe/* 0x0b9c	     */		sub	%i1,%o0,%i3
2965*5d9d9091SRichard Lowe/* 0x0ba0	     */		add	%i3,%l4,%i4
2966*5d9d9091SRichard Lowe/* 0x0ba4	     */		ld	[%o5-12],%o2
2967*5d9d9091SRichard Lowe/* 0x0ba8	     */		st	%i4,[%o5-16]
2968*5d9d9091SRichard Lowe/* 0x0bac	     */		srax	%i4,32,%o3
2969*5d9d9091SRichard Lowe/* 0x0bb0	     */		ld	[%l2-8],%o1
2970*5d9d9091SRichard Lowe/* 0x0bb4	     */		sub	%o2,%o1,%l1
2971*5d9d9091SRichard Lowe/* 0x0bb8	     */		add	%l1,%o3,%g2
2972*5d9d9091SRichard Lowe/* 0x0bbc	     */		ld	[%o5-8],%o4
2973*5d9d9091SRichard Lowe/* 0x0bc0	     */		st	%g2,[%o5-12]
2974*5d9d9091SRichard Lowe/* 0x0bc4	     */		srax	%g2,32,%l0
2975*5d9d9091SRichard Lowe/* 0x0bc8	     */		ld	[%l2-4],%o7
2976*5d9d9091SRichard Lowe/* 0x0bcc	     */		sub	%o4,%o7,%l6
2977*5d9d9091SRichard Lowe/* 0x0bd0	     */		add	%l6,%l0,%g1
2978*5d9d9091SRichard Lowe/* 0x0bd4	     */		ld	[%o5-4],%l6
2979*5d9d9091SRichard Lowe/* 0x0bd8	     */		st	%g1,[%o5-8]
2980*5d9d9091SRichard Lowe/* 0x0bdc	     */		ble,pt	%icc,.L900000833
2981*5d9d9091SRichard Lowe/* 0x0be0	     */		srax	%g1,32,%l7
2982*5d9d9091SRichard Lowe                       .L900000836:
2983*5d9d9091SRichard Lowe/* 0x0be4	 350 */		ld	[%l2],%l0
2984*5d9d9091SRichard Lowe/* 0x0be8	     */		add	%l2,4,%i0
2985*5d9d9091SRichard Lowe/* 0x0bec	     */		or	%g0,%o5,%i2
2986*5d9d9091SRichard Lowe/* 0x0bf0	     */		cmp	%l5,%l3
2987*5d9d9091SRichard Lowe/* 0x0bf4	     */		sub	%l6,%l0,%l6
2988*5d9d9091SRichard Lowe/* 0x0bf8	     */		add	%l6,%l7,%g1
2989*5d9d9091SRichard Lowe/* 0x0bfc	     */		st	%g1,[%o5-4]
2990*5d9d9091SRichard Lowe/* 0x0c00	     */		bg,pn	%icc,.L77000379
2991*5d9d9091SRichard Lowe/* 0x0c04	     */		srax	%g1,32,%g1
2992*5d9d9091SRichard Lowe                       .L77000487:
2993*5d9d9091SRichard Lowe/* 0x0c08	 350 */		ld	[%i2],%o4
2994*5d9d9091SRichard Lowe                       .L900000841:
2995*5d9d9091SRichard Lowe/* 0x0c0c	 350 */		ld	[%i0],%i3
2996*5d9d9091SRichard Lowe/* 0x0c10	     */		add	%g1,%o4,%l0
2997*5d9d9091SRichard Lowe/* 0x0c14	     */		add	%l5,1,%l5
2998*5d9d9091SRichard Lowe/* 0x0c18	     */		cmp	%l5,%l3
2999*5d9d9091SRichard Lowe/* 0x0c1c	     */		add	%i0,4,%i0
3000*5d9d9091SRichard Lowe/* 0x0c20	     */		sub	%l0,%i3,%l6
3001*5d9d9091SRichard Lowe/* 0x0c24	     */		st	%l6,[%i2]
3002*5d9d9091SRichard Lowe/* 0x0c28	     */		srax	%l6,32,%g1
3003*5d9d9091SRichard Lowe/* 0x0c2c	     */		add	%i2,4,%i2
3004*5d9d9091SRichard Lowe/* 0x0c30	     */		ble,a,pt	%icc,.L900000841
3005*5d9d9091SRichard Lowe/* 0x0c34	     */		ld	[%i2],%o4
3006*5d9d9091SRichard Lowe                       .L77000379:
3007*5d9d9091SRichard Lowe/* 0x0c38	 405 */		ret	! Result =
3008*5d9d9091SRichard Lowe/* 0x0c3c	     */		restore	%g0,%g0,%g0
3009*5d9d9091SRichard Lowe/* 0x0c40	   0 */		.type	mont_mulf_noconv,2
3010*5d9d9091SRichard Lowe/* 0x0c40	   0 */		.size	mont_mulf_noconv,(.-mont_mulf_noconv)
3011*5d9d9091SRichard Lowe
3012*5d9d9091SRichard Lowe! Begin Disassembling Debug Info
3013*5d9d9091SRichard Lowe	.xstabs ".stab.index","V=10.0;DBG_GEN=4.14.14;cd;backend;Xa;O;R=Sun C 5.5 Patch 112760-07 2004/02/03",60,0,0,0
3014*5d9d9091SRichard Lowe	.xstabs ".stab.index","/workspace/ferenc/algorithms/bignum/unified/mont_mulf; /ws/onnv-tools/SUNWspro/SOS8/prod/bin/cc -D_KERNEL -DRF_INLINE_MACROS -fast -xarch=v9 -xO5 -xstrconst -xdepend -Xa -xchip=ultra3 -xcode=abs32 -Wc,-Qrm-Qd -Wc,-Qrm-Qf -Wc,-assembly -V -W0,-xp -c conv_v9.il -o mont_mulf.o  mont_mulf.c",52,0,0,0
3015*5d9d9091SRichard Lowe
3016*5d9d9091SRichard Lowe! End Disassembling Debug Info
3017*5d9d9091SRichard Lowe
3018*5d9d9091SRichard Lowe! Begin Disassembling Ident
3019*5d9d9091SRichard Lowe	.ident	"cg: Sun Compiler Common 7.1 Patch 112763-10 2004/01/27"	! (NO SOURCE LINE)
3020*5d9d9091SRichard Lowe	.ident	"@(#)mont_mulf.c\t1.2\t01/09/24 SMI"	! (/tmp/acompAAApja4Fx:8)
3021*5d9d9091SRichard Lowe	.ident	"@(#)types.h\t1.74\t03/08/07 SMI"	! (/tmp/acompAAApja4Fx:9)
3022*5d9d9091SRichard Lowe	.ident	"@(#)isa_defs.h\t1.20\t99/05/04 SMI"	! (/tmp/acompAAApja4Fx:10)
3023*5d9d9091SRichard Lowe	.ident	"@(#)feature_tests.h\t1.18\t99/07/26 SMI"	! (/tmp/acompAAApja4Fx:11)
3024*5d9d9091SRichard Lowe	.ident	"@(#)machtypes.h\t1.13\t99/05/04 SMI"	! (/tmp/acompAAApja4Fx:12)
3025*5d9d9091SRichard Lowe	.ident	"@(#)inttypes.h\t1.2\t98/01/16 SMI"	! (/tmp/acompAAApja4Fx:13)
3026*5d9d9091SRichard Lowe	.ident	"@(#)int_types.h\t1.6\t97/08/20 SMI"	! (/tmp/acompAAApja4Fx:14)
3027*5d9d9091SRichard Lowe	.ident	"@(#)int_limits.h\t1.6\t99/08/06 SMI"	! (/tmp/acompAAApja4Fx:15)
3028*5d9d9091SRichard Lowe	.ident	"@(#)int_const.h\t1.2\t96/07/08 SMI"	! (/tmp/acompAAApja4Fx:16)
3029*5d9d9091SRichard Lowe	.ident	"@(#)int_fmtio.h\t1.2\t96/07/08 SMI"	! (/tmp/acompAAApja4Fx:17)
3030*5d9d9091SRichard Lowe	.ident	"@(#)types32.h\t1.4\t98/02/13 SMI"	! (/tmp/acompAAApja4Fx:18)
3031*5d9d9091SRichard Lowe	.ident	"@(#)select.h\t1.17\t01/08/15 SMI"	! (/tmp/acompAAApja4Fx:19)
3032*5d9d9091SRichard Lowe	.ident	"@(#)math.h\t2.11\t00/09/07 SMI"	! (/tmp/acompAAApja4Fx:20)
3033*5d9d9091SRichard Lowe	.ident	"@(#)math_iso.h\t1.2\t00/09/07 SMI"	! (/tmp/acompAAApja4Fx:21)
3034*5d9d9091SRichard Lowe	.ident	"@(#)floatingpoint.h\t2.5\t99/06/22 SMI"	! (/tmp/acompAAApja4Fx:22)
3035*5d9d9091SRichard Lowe	.ident	"@(#)stdio_tag.h\t1.3\t98/04/20 SMI"	! (/tmp/acompAAApja4Fx:23)
3036*5d9d9091SRichard Lowe	.ident	"@(#)ieeefp.h\t2.8 99/10/29"	! (/tmp/acompAAApja4Fx:24)
3037*5d9d9091SRichard Lowe	.ident	"acomp: Sun C 5.5 Patch 112760-07 2004/02/03"	! (/tmp/acompAAApja4Fx:57)
3038*5d9d9091SRichard Lowe	.ident	"iropt: Sun Compiler Common 7.1 Patch 112763-10 2004/01/27"	! (/tmp/acompAAApja4Fx:58)
3039*5d9d9091SRichard Lowe	.ident	"cg: Sun Compiler Common 7.1 Patch 112763-10 2004/01/27"	! (NO SOURCE LINE)
3040*5d9d9091SRichard Lowe! End Disassembling Ident
3041*5d9d9091SRichard Lowe
3042*5d9d9091SRichard Lowe#define	FZERO				\
3043*5d9d9091SRichard Lowe	fzero	%f0			;\
3044*5d9d9091SRichard Lowe	fzero	%f2			;\
3045*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f4		;\
3046*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f6		;\
3047*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f8		;\
3048*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f10		;\
3049*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f12		;\
3050*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f14		;\
3051*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f16		;\
3052*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f18		;\
3053*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f20		;\
3054*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f22		;\
3055*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f24		;\
3056*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f26		;\
3057*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f28		;\
3058*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f30		;\
3059*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f32		;\
3060*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f34		;\
3061*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f36		;\
3062*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f38		;\
3063*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f40		;\
3064*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f42		;\
3065*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f44		;\
3066*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f46		;\
3067*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f48		;\
3068*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f50		;\
3069*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f52		;\
3070*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f54		;\
3071*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f56		;\
3072*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f58		;\
3073*5d9d9091SRichard Lowe	faddd	%f0, %f2, %f60		;\
3074*5d9d9091SRichard Lowe	fmuld	%f0, %f2, %f62
3075*5d9d9091SRichard Lowe
3076*5d9d9091SRichard Lowe#include "assym.h"
3077*5d9d9091SRichard Lowe
3078*5d9d9091SRichard Lowe/*
3079*5d9d9091SRichard Lowe * In the routine below, we check/set FPRS_FEF bit since
3080*5d9d9091SRichard Lowe * we don't want to take a fp_disabled trap. We need not
3081*5d9d9091SRichard Lowe * check/set PSTATE_PEF bit as it is done early during boot.
3082*5d9d9091SRichard Lowe */
3083*5d9d9091SRichard Lowe	ENTRY(big_savefp)
3084*5d9d9091SRichard Lowe	rd	%fprs, %o2
3085*5d9d9091SRichard Lowe	st	%o2, [%o0 + FPU_FPRS]
3086*5d9d9091SRichard Lowe	andcc	%o2, FPRS_FEF, %g0		! is FPRS_FEF set?
3087*5d9d9091SRichard Lowe	bnz,a,pt	%icc, .fregs_save	! yes, go to save
3088*5d9d9091SRichard Lowe	nop
3089*5d9d9091SRichard Lowe	wr	%g0, FPRS_FEF, %fprs		! else, set the bit
3090*5d9d9091SRichard Lowe        stx     %fsr, [%o0 + FPU_FSR]	! store %fsr
3091*5d9d9091SRichard Lowe	retl
3092*5d9d9091SRichard Lowe	nop
3093*5d9d9091SRichard Lowe.fregs_save:
3094*5d9d9091SRichard Lowe	BSTORE_FPREGS(%o0, %o4)
3095*5d9d9091SRichard Lowe        stx     %fsr, [%o0 + FPU_FSR]	! store %fsr
3096*5d9d9091SRichard Lowe	retl
3097*5d9d9091SRichard Lowe	nop
3098*5d9d9091SRichard Lowe	SET_SIZE(big_savefp)
3099*5d9d9091SRichard Lowe
3100*5d9d9091SRichard Lowe
3101*5d9d9091SRichard Lowe	ENTRY(big_restorefp)
3102*5d9d9091SRichard Lowe	ldx     [%o0 + FPU_FSR], %fsr	! restore %fsr
3103*5d9d9091SRichard Lowe	ld	[%o0 + FPU_FPRS], %o1
3104*5d9d9091SRichard Lowe	andcc   %o1, FPRS_FEF, %g0	! is FPRS_FEF set in saved %fprs?
3105*5d9d9091SRichard Lowe	bnz,pt	%icc, .fregs_restore	! yes, go to restore
3106*5d9d9091SRichard Lowe	nop
3107*5d9d9091SRichard Lowe	FZERO				! zero out to avoid leaks
3108*5d9d9091SRichard Lowe	wr	%g0, 0, %fprs
3109*5d9d9091SRichard Lowe	retl
3110*5d9d9091SRichard Lowe	nop
3111*5d9d9091SRichard Lowe.fregs_restore:
3112*5d9d9091SRichard Lowe	BLOAD_FPREGS(%o0, %o2)
3113*5d9d9091SRichard Lowe	wr      %o1, 0, %fprs
3114*5d9d9091SRichard Lowe	retl
3115*5d9d9091SRichard Lowe	nop
3116*5d9d9091SRichard Lowe	SET_SIZE(big_restorefp)
3117