xref: /titanic_52/usr/src/lib/libmvec/common/vis/__vrhypotf.S (revision 25c28e83beb90e7c80452a7c818c5e6f73a07dc8)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23 */
24/*
25 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
26 * Use is subject to license terms.
27 */
28
29	.file	"__vrhypotf.S"
30
31#include "libm.h"
32
33	RO_DATA
34	.align	64
35.CONST_TBL:
36! i = [0,63]
37! TBL[2*i+0] = 1.0 / (*(double*)&(0x3ff0000000000000LL + (i << 46)));
38! TBL[2*i+1] = (double)(0.5/sqrtl(2) / sqrtl(*(double*)&(0x3ff0000000000000LL + (i << 46))));
39! TBL[128+2*i+0] = 1.0 / (*(double*)&(0x3ff0000000000000LL + (i << 46)));
40! TBL[128+2*i+1] = (double)(0.25 / sqrtl(*(double*)&(0x3ff0000000000000LL + (i << 46))));
41
42	.word	0x3ff00000, 0x00000000, 0x3fd6a09e, 0x667f3bcd,
43	.word	0x3fef81f8, 0x1f81f820, 0x3fd673e3, 0x2ef63a03,
44	.word	0x3fef07c1, 0xf07c1f08, 0x3fd6482d, 0x37a5a3d2,
45	.word	0x3fee9131, 0xabf0b767, 0x3fd61d72, 0xb7978671,
46	.word	0x3fee1e1e, 0x1e1e1e1e, 0x3fd5f3aa, 0x673fa911,
47	.word	0x3fedae60, 0x76b981db, 0x3fd5cacb, 0x7802f342,
48	.word	0x3fed41d4, 0x1d41d41d, 0x3fd5a2cd, 0x8c69d61a,
49	.word	0x3fecd856, 0x89039b0b, 0x3fd57ba8, 0xb0ee01b9,
50	.word	0x3fec71c7, 0x1c71c71c, 0x3fd55555, 0x55555555,
51	.word	0x3fec0e07, 0x0381c0e0, 0x3fd52fcc, 0x468d6b54,
52	.word	0x3febacf9, 0x14c1bad0, 0x3fd50b06, 0xa8fc6b70,
53	.word	0x3feb4e81, 0xb4e81b4f, 0x3fd4e6fd, 0xf33cf032,
54	.word	0x3feaf286, 0xbca1af28, 0x3fd4c3ab, 0xe93bcf74,
55	.word	0x3fea98ef, 0x606a63be, 0x3fd4a10a, 0x97af7b92,
56	.word	0x3fea41a4, 0x1a41a41a, 0x3fd47f14, 0x4fe17f9f,
57	.word	0x3fe9ec8e, 0x951033d9, 0x3fd45dc3, 0xa3c34fa3,
58	.word	0x3fe99999, 0x9999999a, 0x3fd43d13, 0x6248490f,
59	.word	0x3fe948b0, 0xfcd6e9e0, 0x3fd41cfe, 0x93ff5199,
60	.word	0x3fe8f9c1, 0x8f9c18fa, 0x3fd3fd80, 0x77e70577,
61	.word	0x3fe8acb9, 0x0f6bf3aa, 0x3fd3de94, 0x8077db58,
62	.word	0x3fe86186, 0x18618618, 0x3fd3c036, 0x50e00e03,
63	.word	0x3fe81818, 0x18181818, 0x3fd3a261, 0xba6d7a37,
64	.word	0x3fe7d05f, 0x417d05f4, 0x3fd38512, 0xba21f51e,
65	.word	0x3fe78a4c, 0x8178a4c8, 0x3fd36845, 0x766eec92,
66	.word	0x3fe745d1, 0x745d1746, 0x3fd34bf6, 0x3d156826,
67	.word	0x3fe702e0, 0x5c0b8170, 0x3fd33021, 0x8127c0e0,
68	.word	0x3fe6c16c, 0x16c16c17, 0x3fd314c3, 0xd92a9e91,
69	.word	0x3fe68168, 0x16816817, 0x3fd2f9d9, 0xfd52fd50,
70	.word	0x3fe642c8, 0x590b2164, 0x3fd2df60, 0xc5df2c9e,
71	.word	0x3fe60581, 0x60581606, 0x3fd2c555, 0x2988e428,
72	.word	0x3fe5c988, 0x2b931057, 0x3fd2abb4, 0x3c0eb0f4,
73	.word	0x3fe58ed2, 0x308158ed, 0x3fd2927b, 0x2cd320f5,
74	.word	0x3fe55555, 0x55555555, 0x3fd279a7, 0x4590331c,
75	.word	0x3fe51d07, 0xeae2f815, 0x3fd26135, 0xe91daf55,
76	.word	0x3fe4e5e0, 0xa72f0539, 0x3fd24924, 0x92492492,
77	.word	0x3fe4afd6, 0xa052bf5b, 0x3fd23170, 0xd2be638a,
78	.word	0x3fe47ae1, 0x47ae147b, 0x3fd21a18, 0x51ff630a,
79	.word	0x3fe446f8, 0x6562d9fb, 0x3fd20318, 0xcc6a8f5d,
80	.word	0x3fe41414, 0x14141414, 0x3fd1ec70, 0x124e98f9,
81	.word	0x3fe3e22c, 0xbce4a902, 0x3fd1d61c, 0x070ae7d3,
82	.word	0x3fe3b13b, 0x13b13b14, 0x3fd1c01a, 0xa03be896,
83	.word	0x3fe38138, 0x13813814, 0x3fd1aa69, 0xe4f2777f,
84	.word	0x3fe3521c, 0xfb2b78c1, 0x3fd19507, 0xecf5b9e9,
85	.word	0x3fe323e3, 0x4a2b10bf, 0x3fd17ff2, 0xe00ec3ee,
86	.word	0x3fe2f684, 0xbda12f68, 0x3fd16b28, 0xf55d72d4,
87	.word	0x3fe2c9fb, 0x4d812ca0, 0x3fd156a8, 0x72b5ef62,
88	.word	0x3fe29e41, 0x29e4129e, 0x3fd1426f, 0xac0654db,
89	.word	0x3fe27350, 0xb8812735, 0x3fd12e7d, 0x02c40253,
90	.word	0x3fe24924, 0x92492492, 0x3fd11ace, 0xe560242a,
91	.word	0x3fe21fb7, 0x8121fb78, 0x3fd10763, 0xcec30b26,
92	.word	0x3fe1f704, 0x7dc11f70, 0x3fd0f43a, 0x45cdedad,
93	.word	0x3fe1cf06, 0xada2811d, 0x3fd0e150, 0xdce2b60c,
94	.word	0x3fe1a7b9, 0x611a7b96, 0x3fd0cea6, 0x317186dc,
95	.word	0x3fe18118, 0x11811812, 0x3fd0bc38, 0xeb8ba412,
96	.word	0x3fe15b1e, 0x5f75270d, 0x3fd0aa07, 0xbd7b7488,
97	.word	0x3fe135c8, 0x1135c811, 0x3fd09811, 0x63615499,
98	.word	0x3fe11111, 0x11111111, 0x3fd08654, 0xa2d4f6db,
99	.word	0x3fe0ecf5, 0x6be69c90, 0x3fd074d0, 0x4a8b1438,
100	.word	0x3fe0c971, 0x4fbcda3b, 0x3fd06383, 0x31ff307a,
101	.word	0x3fe0a681, 0x0a6810a7, 0x3fd0526c, 0x39213bfa,
102	.word	0x3fe08421, 0x08421084, 0x3fd0418a, 0x4806de7d,
103	.word	0x3fe0624d, 0xd2f1a9fc, 0x3fd030dc, 0x4ea03a72,
104	.word	0x3fe04104, 0x10410410, 0x3fd02061, 0x446ffa9a,
105	.word	0x3fe02040, 0x81020408, 0x3fd01018, 0x28467ee9,
106	.word	0x3ff00000, 0x00000000, 0x3fd00000, 0x00000000,
107	.word	0x3fef81f8, 0x1f81f820, 0x3fcfc0bd, 0x88a0f1d9,
108	.word	0x3fef07c1, 0xf07c1f08, 0x3fcf82ec, 0x882c0f9b,
109	.word	0x3fee9131, 0xabf0b767, 0x3fcf467f, 0x2814b0cc,
110	.word	0x3fee1e1e, 0x1e1e1e1e, 0x3fcf0b68, 0x48d2af1c,
111	.word	0x3fedae60, 0x76b981db, 0x3fced19b, 0x75e78957,
112	.word	0x3fed41d4, 0x1d41d41d, 0x3fce990c, 0xdad55ed2,
113	.word	0x3fecd856, 0x89039b0b, 0x3fce61b1, 0x38f18adc,
114	.word	0x3fec71c7, 0x1c71c71c, 0x3fce2b7d, 0xddfefa66,
115	.word	0x3fec0e07, 0x0381c0e0, 0x3fcdf668, 0x9b7e6350,
116	.word	0x3febacf9, 0x14c1bad0, 0x3fcdc267, 0xbea45549,
117	.word	0x3feb4e81, 0xb4e81b4f, 0x3fcd8f72, 0x08e6b82d,
118	.word	0x3feaf286, 0xbca1af28, 0x3fcd5d7e, 0xa914b937,
119	.word	0x3fea98ef, 0x606a63be, 0x3fcd2c85, 0x34ed6d86,
120	.word	0x3fea41a4, 0x1a41a41a, 0x3fccfc7d, 0xa32a9213,
121	.word	0x3fe9ec8e, 0x951033d9, 0x3fcccd60, 0x45f5d358,
122	.word	0x3fe99999, 0x9999999a, 0x3fcc9f25, 0xc5bfedd9,
123	.word	0x3fe948b0, 0xfcd6e9e0, 0x3fcc71c7, 0x1c71c71c,
124	.word	0x3fe8f9c1, 0x8f9c18fa, 0x3fcc453d, 0x90f057a2,
125	.word	0x3fe8acb9, 0x0f6bf3aa, 0x3fcc1982, 0xb2ece47b,
126	.word	0x3fe86186, 0x18618618, 0x3fcbee90, 0x56fb9c39,
127	.word	0x3fe81818, 0x18181818, 0x3fcbc460, 0x92eb3118,
128	.word	0x3fe7d05f, 0x417d05f4, 0x3fcb9aed, 0xba588347,
129	.word	0x3fe78a4c, 0x8178a4c8, 0x3fcb7232, 0x5b79db11,
130	.word	0x3fe745d1, 0x745d1746, 0x3fcb4a29, 0x3c1d9550,
131	.word	0x3fe702e0, 0x5c0b8170, 0x3fcb22cd, 0x56d87d7e,
132	.word	0x3fe6c16c, 0x16c16c17, 0x3fcafc19, 0xd8606169,
133	.word	0x3fe68168, 0x16816817, 0x3fcad60a, 0x1d0fb394,
134	.word	0x3fe642c8, 0x590b2164, 0x3fcab099, 0xae8f539a,
135	.word	0x3fe60581, 0x60581606, 0x3fca8bc4, 0x41a3d02c,
136	.word	0x3fe5c988, 0x2b931057, 0x3fca6785, 0xb41bacf7,
137	.word	0x3fe58ed2, 0x308158ed, 0x3fca43da, 0x0adc6899,
138	.word	0x3fe55555, 0x55555555, 0x3fca20bd, 0x700c2c3e,
139	.word	0x3fe51d07, 0xeae2f815, 0x3fc9fe2c, 0x315637ee,
140	.word	0x3fe4e5e0, 0xa72f0539, 0x3fc9dc22, 0xbe484458,
141	.word	0x3fe4afd6, 0xa052bf5b, 0x3fc9ba9d, 0xa6c73588,
142	.word	0x3fe47ae1, 0x47ae147b, 0x3fc99999, 0x9999999a,
143	.word	0x3fe446f8, 0x6562d9fb, 0x3fc97913, 0x63068b54,
144	.word	0x3fe41414, 0x14141414, 0x3fc95907, 0xeb87ab44,
145	.word	0x3fe3e22c, 0xbce4a902, 0x3fc93974, 0x368cfa31,
146	.word	0x3fe3b13b, 0x13b13b14, 0x3fc91a55, 0x6151761c,
147	.word	0x3fe38138, 0x13813814, 0x3fc8fba8, 0xa1bf6f96,
148	.word	0x3fe3521c, 0xfb2b78c1, 0x3fc8dd6b, 0x4563a009,
149	.word	0x3fe323e3, 0x4a2b10bf, 0x3fc8bf9a, 0xb06e1af3,
150	.word	0x3fe2f684, 0xbda12f68, 0x3fc8a234, 0x5cc04426,
151	.word	0x3fe2c9fb, 0x4d812ca0, 0x3fc88535, 0xd90703c6,
152	.word	0x3fe29e41, 0x29e4129e, 0x3fc8689c, 0xc7e07e7d,
153	.word	0x3fe27350, 0xb8812735, 0x3fc84c66, 0xdf0ca4c2,
154	.word	0x3fe24924, 0x92492492, 0x3fc83091, 0xe6a7f7e7,
155	.word	0x3fe21fb7, 0x8121fb78, 0x3fc8151b, 0xb86fee1d,
156	.word	0x3fe1f704, 0x7dc11f70, 0x3fc7fa02, 0x3f1068d1,
157	.word	0x3fe1cf06, 0xada2811d, 0x3fc7df43, 0x7579b9b5,
158	.word	0x3fe1a7b9, 0x611a7b96, 0x3fc7c4dd, 0x663ebb88,
159	.word	0x3fe18118, 0x11811812, 0x3fc7aace, 0x2afa8b72,
160	.word	0x3fe15b1e, 0x5f75270d, 0x3fc79113, 0xebbd7729,
161	.word	0x3fe135c8, 0x1135c811, 0x3fc777ac, 0xde80baea,
162	.word	0x3fe11111, 0x11111111, 0x3fc75e97, 0x46a0b098,
163	.word	0x3fe0ecf5, 0x6be69c90, 0x3fc745d1, 0x745d1746,
164	.word	0x3fe0c971, 0x4fbcda3b, 0x3fc72d59, 0xc45f1fc5,
165	.word	0x3fe0a681, 0x0a6810a7, 0x3fc7152e, 0x9f44f01f,
166	.word	0x3fe08421, 0x08421084, 0x3fc6fd4e, 0x79325467,
167	.word	0x3fe0624d, 0xd2f1a9fc, 0x3fc6e5b7, 0xd16657e1,
168	.word	0x3fe04104, 0x10410410, 0x3fc6ce69, 0x31d5858d,
169	.word	0x3fe02040, 0x81020408, 0x3fc6b761, 0x2ec892f6,
170
171	.word	0x000fffff, 0xffffffff	! DC0
172	.word	0x3ff00000, 0		! DC1
173	.word	0x7fffc000, 0		! DC2
174	.word	0x7fe00000, 0		! DA0
175	.word	0x60000000, 0		! DA1
176	.word	0x80808080, 0x3f800000	! SCALE , FONE = 1.0f
177	.word	0x3fefffff, 0xfee7f18f	! KA0 =  9.99999997962321453275e-01
178	.word	0xbfdfffff, 0xfe07e52f	! KA1 = -4.99999998166077580600e-01
179	.word	0x3fd80118, 0x0ca296d9	! KA2 = 3.75066768969515586277e-01
180	.word	0xbfd400fc, 0x0bbb8e78	! KA3 = -3.12560092408808548438e-01
181
182#define _0x7f800000	%o0
183#define _0x7fffffff	%o7
184#define TBL		%l2
185
186#define TBL_SHIFT	2048
187
188#define stridex		%l3
189#define stridey		%l4
190#define stridez		%l5
191#define counter		%i0
192
193#define DA0		%f52
194#define DA1		%f44
195#define SCALE		%f6
196
197#define DC0		%f46
198#define DC1		%f8
199#define FZERO		%f9
200#define DC2		%f50
201
202#define KA3		%f56
203#define KA2		%f58
204#define KA1		%f60
205#define KA0		%f54
206
207#define tmp_counter	STACK_BIAS-0x04
208#define tmp_px		STACK_BIAS-0x20
209#define tmp_py		STACK_BIAS-0x18
210
211#define ftmp0		STACK_BIAS-0x10
212#define ftmp1		STACK_BIAS-0x0c
213#define ftmp2		STACK_BIAS-0x10
214#define ftmp3		STACK_BIAS-0x0c
215#define ftmp4		STACK_BIAS-0x08
216
217! sizeof temp storage - must be a multiple of 16 for V9
218#define tmps		0x20
219
220!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
221!      !!!!!   algorithm   !!!!!
222!  x0 = *px;
223!  ax = *(int*)px;
224!
225!  y0 = *py;
226!  ay = *(int*)py;
227!
228!  ax &= 0x7fffffff;
229!  ay &= 0x7fffffff;
230!
231!  px += stridex;
232!  py += stridey;
233!
234!  if ( ax >= 0x7f800000 || ay >= 0x7f800000 )
235!  {
236!    *pz = fabsf(x0) * fabsf(y0);
237!    if( ax == 0x7f800000 ) *pz = 0.0f;
238!    else if( ay == 0x7f800000 ) *pz = 0.0f;
239!    pz += stridez;
240!    continue;
241!  }
242!
243!  if ( ay == 0 )
244!  {
245!    if ( ax == 0 )
246!    {
247!      *pz = 1.0f / 0.0f;
248!      pz += stridez;
249!      continue;
250!    }
251!  }
252!
253!  hyp0 = x0 * (double)x0;
254!  dtmp0 = y0 * (double)y0;
255!  hyp0 += dtmp0;
256!
257!  ibase0 = ((int*)&hyp0)[0];
258!
259!  dbase0 = vis_fand(hyp0,DA0);
260!  dbase0 = vis_fmul8x16(SCALE, dbase0);
261!  dbase0 = vis_fpsub32(DA1,dbase0);
262!
263!  hyp0 = vis_fand(hyp0,DC0);
264!  hyp0 = vis_for(hyp0,DC1);
265!  h_hi0 = vis_fand(hyp0,DC2);
266!
267!  ibase0 >>= 10;
268!  si0 = ibase0 & 0x7f0;
269!  xx0 = ((double*)((char*)TBL + si0))[0];
270!
271!  dtmp1 = hyp0 - h_hi0;
272!  xx0 = dtmp1 * xx0;
273!  res0 = ((double*)((char*)arr + si0))[1];
274!  dtmp2 = KA3 * xx0;
275!  dtmp2 += KA2;
276!  dtmp2 *= xx0;
277!  dtmp2 += KA1;
278!  dtmp2 *= xx0;
279!  dtmp2 += KA0;
280!  res0 *= dtmp2;
281!  res0 *= dbase0;
282!  ftmp0 = (float)res0;
283!  *pz = ftmp0;
284!  pz += stridez;
285!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
286
287	ENTRY(__vrhypotf)
288	save	%sp,-SA(MINFRAME)-tmps,%sp
289	PIC_SETUP(l7)
290	PIC_SET(l7,.CONST_TBL,l2)
291	wr	%g0,0x82,%asi
292
293#ifdef __sparcv9
294	ldx	[%fp+STACK_BIAS+176],stridez
295#else
296	ld	[%fp+STACK_BIAS+92],stridez
297#endif
298
299	stx	%i1,[%fp+tmp_px]
300	sll	%i2,2,stridex
301
302	stx	%i3,[%fp+tmp_py]
303	sll	%i4,2,stridey
304
305	st	%i0,[%fp+tmp_counter]
306	sll	stridez,2,stridez
307	mov	%i5,%o1
308
309	ldd	[TBL+TBL_SHIFT],DC0
310	ldd	[TBL+TBL_SHIFT+8],DC1
311	ldd	[TBL+TBL_SHIFT+16],DC2
312	ldd	[TBL+TBL_SHIFT+24],DA0
313	ldd	[TBL+TBL_SHIFT+32],DA1
314	ldd	[TBL+TBL_SHIFT+40],SCALE
315	ldd	[TBL+TBL_SHIFT+48],KA0
316
317	ldd	[TBL+TBL_SHIFT+56],KA1
318	sethi	%hi(0x7f800000),%o0
319
320	ldd	[TBL+TBL_SHIFT+64],KA2
321	sethi	%hi(0x7ffffc00),%o7
322
323	ldd	[TBL+TBL_SHIFT+72],KA3
324	add	%o7,1023,%o7
325
326.begin:
327	ld	[%fp+tmp_counter],counter
328	ldx	[%fp+tmp_px],%o4
329	ldx	[%fp+tmp_py],%i2
330	st	%g0,[%fp+tmp_counter]
331.begin1:
332	cmp	counter,0
333	ble,pn	%icc,.exit
334	nop
335
336	lda	[%i2]0x82,%l6		! (3_0) ay = *(int*)py;
337
338	lda	[%o4]0x82,%i5		! (3_0) ax = *(int*)px;
339
340	lda	[%i2]0x82,%f2		! (3_0) y0 = *py;
341	and	%l6,_0x7fffffff,%l6	! (3_0) ay &= 0x7fffffff;
342
343	and	%i5,_0x7fffffff,%i5	! (3_0) ax &= 0x7fffffff;
344	cmp	%l6,_0x7f800000		! (3_0) ay ? 0x7f800000
345	bge,pn	%icc,.spec0		! (3_0) if ( ay >= 0x7f800000 )
346	lda	[%o4]0x82,%f4		! (3_0) x0 = *px;
347
348	cmp	%i5,_0x7f800000		! (3_0) ax ? 0x7f800000
349	bge,pn	%icc,.spec0		! (3_0) if ( ax >= 0x7f800000 )
350	nop
351
352	cmp	%l6,0			! (3_0)
353	be,pn	%icc,.spec1		! (3_0) if ( ay == 0 )
354	fsmuld	%f4,%f4,%f36		! (3_0) hyp0 = x0 * (double)x0;
355.cont_spec1:
356	lda	[%i2+stridey]0x82,%l6	! (4_0) ay = *(int*)py;
357
358	fsmuld	%f2,%f2,%f62		! (3_0) dtmp0 = y0 * (double)y0;
359	lda	[stridex+%o4]0x82,%i5	! (4_0) ax = *(int*)px;
360
361	add	%o4,stridex,%l0		! px += stridex
362
363	add	%i2,stridey,%i2		! py += stridey
364	and	%l6,_0x7fffffff,%l6	! (4_0) ay &= 0x7fffffff;
365
366	and	%i5,_0x7fffffff,%i5	! (4_0) ax &= 0x7fffffff;
367	lda	[%i2]0x82,%f2		! (4_0) y0 = *py;
368
369	faddd	%f36,%f62,%f20		! (3_0) hyp0 += dtmp0;
370	cmp	%l6,_0x7f800000		! (4_0) ay ? 0x7f800000
371
372	bge,pn	%icc,.update0		! (4_0) if ( ay >= 0x7f800000 )
373	lda	[stridex+%o4]0x82,%f4	! (4_0) x0 = *px;
374.cont0:
375	cmp	%i5,_0x7f800000		! (4_0) ax ? 0x7f800000
376	bge,pn	%icc,.update1		! (4_0) if ( ax >= 0x7f800000 )
377	st	%f20,[%fp+ftmp4]	! (3_0) ibase0 = ((int*)&hyp0)[0];
378.cont1:
379	cmp	%l6,0			! (4_1) ay ? 0
380	be,pn	%icc,.update2		! (4_1) if ( ay == 0 )
381	fsmuld	%f4,%f4,%f38		! (4_1) hyp0 = x0 * (double)x0;
382.cont2:
383	lda	[%i2+stridey]0x82,%l6	! (0_0) ay = *(int*)py;
384
385	fsmuld	%f2,%f2,%f62		! (4_1) dtmp0 = y0 * (double)y0;
386	lda	[%l0+stridex]0x82,%i5	! (0_0) ax = *(int*)px;
387
388	add	%l0,stridex,%i1		! px += stridex
389
390	add	%i2,stridey,%i2		! py += stridey
391	and	%l6,_0x7fffffff,%l6	! (0_0) ay &= 0x7fffffff;
392
393	and	%i5,_0x7fffffff,%i5	! (0_0) ax &= 0x7fffffff;
394	lda	[%i2]0x82,%f2		! (0_0) y0 = *py;
395
396	cmp	%l6,_0x7f800000		! (0_0) ay ? 0x7f800000
397	bge,pn	%icc,.update3		! (0_0) if ( ay >= 0x7f800000 )
398	faddd	%f38,%f62,%f12		! (4_1) hyp0 += dtmp0;
399.cont3:
400	lda	[%i1]0x82,%f4		! (0_0) x0 = *px;
401
402	cmp	%i5,_0x7f800000		! (0_0) ax ? 0x7f800000
403	bge,pn	%icc,.update4		! (0_0) if ( ax >= 0x7f800000 )
404	st	%f12,[%fp+ftmp0]	! (4_1) ibase0 = ((int*)&hyp0)[0];
405.cont4:
406	cmp	%l6,0			! (0_0) ay ? 0
407	be,pn	%icc,.update5		! (0_0) if ( ay == 0 )
408	fsmuld	%f4,%f4,%f38		! (0_0) hyp0 = x0 * (double)x0;
409.cont5:
410	lda	[%i2+stridey]0x82,%l6	! (1_0) ay = *(int*)py;
411
412	fsmuld	%f2,%f2,%f62		! (0_0) dtmp0 = y0 * (double)y0;
413	lda	[%i1+stridex]0x82,%i5	! (1_0) ax = *(int*)px;
414
415	add	%i1,stridex,%g5		! px += stridex
416
417	add	%i2,stridey,%o3		! py += stridey
418	and	%l6,_0x7fffffff,%l6	! (1_0) ay &= 0x7fffffff;
419	fand	%f20,DC0,%f30		! (3_1) hyp0 = vis_fand(hyp0,DC0);
420
421	and	%i5,_0x7fffffff,%i5	! (1_0) ax &= 0x7fffffff;
422	lda	[%o3]0x82,%f2		! (1_0) y0 = *py;
423
424	faddd	%f38,%f62,%f14		! (0_0) hyp0 += dtmp0;
425	cmp	%l6,_0x7f800000		! (1_0) ay ? 0x7f800000
426
427	lda	[%g5]0x82,%f4		! (1_0) x0 = *px;
428	bge,pn	%icc,.update6		! (1_0) if ( ay >= 0x7f800000 )
429	for	%f30,DC1,%f28		! (3_1) hyp0 = vis_for(hyp0,DC1);
430.cont6:
431	cmp	%i5,_0x7f800000		! (1_0) ax ? 0x7f800000
432	bge,pn	%icc,.update7		! (1_0) if ( ax >= 0x7f800000 )
433	ld	[%fp+ftmp4],%l1		! (3_1) ibase0 = ((int*)&hyp0)[0];
434.cont7:
435	st	%f14,[%fp+ftmp1]	! (0_0) ibase0 = ((int*)&hyp0)[0];
436
437	cmp	%l6,0			! (1_0) ay ? 0
438	be,pn	%icc,.update8		! (1_0) if ( ay == 0 )
439	fand	%f28,DC2,%f30		! (3_1) h_hi0 = vis_fand(hyp0,DC2);
440.cont8:
441	fsmuld	%f4,%f4,%f38		! (1_0) hyp0 = x0 * (double)x0;
442	sra	%l1,10,%o5		! (3_1) ibase0 >>= 10;
443
444	and	%o5,2032,%o4		! (3_1) si0 = ibase0 & 0x7f0;
445	lda	[%o3+stridey]0x82,%l6	! (2_0) ay = *(int*)py;
446
447	fsmuld	%f2,%f2,%f62		! (1_0) dtmp0 = y0 * (double)y0;
448	add	%o4,TBL,%l7		! (3_1) (char*)TBL + si0
449	lda	[stridex+%g5]0x82,%i5	! (2_0) ax = *(int*)px;
450	fsubd	%f28,%f30,%f28		! (3_1) dtmp1 = hyp0 - h_hi0;
451
452	add	%g5,stridex,%i4		! px += stridex
453	ldd	[TBL+%o4],%f42		! (3_1) xx0 = ((double*)((char*)TBL + si0))[0];
454
455	and	%l6,_0x7fffffff,%l6	! (2_0) ay &= 0x7fffffff;
456	add	%o3,stridey,%i2		! py += stridey
457	fand	%f12,DC0,%f30		! (4_1) hyp0 = vis_fand(hyp0,DC0);
458
459	and	%i5,_0x7fffffff,%i5	! (2_0) ax &= 0x7fffffff;
460	lda	[%i2]0x82,%f2		! (2_0) y0 = *py;
461
462	faddd	%f38,%f62,%f16		! (1_0) hyp0 += dtmp0;
463	cmp	%l6,_0x7f800000		! (2_0) ay ? 0x7f800000
464	fmuld	%f28,%f42,%f26		! (3_1) xx0 = dtmp1 * xx0;
465
466	lda	[stridex+%g5]0x82,%f4	! (2_0) x0 = *px;
467	bge,pn	%icc,.update9		! (2_0) if ( ay >= 0x7f800000
468	for	%f30,DC1,%f28		! (4_1) hyp0 = vis_for(hyp0,DC1);
469.cont9:
470	cmp	%i5,_0x7f800000		! (2_0) ax ? 0x7f800000
471	bge,pn	%icc,.update10		! (2_0) if ( ax >= 0x7f800000 )
472	ld	[%fp+ftmp0],%i3		! (4_1) ibase0 = ((int*)&hyp0)[0];
473.cont10:
474	st	%f16,[%fp+ftmp2]	! (1_0) ibase0 = ((int*)&hyp0)[0];
475
476	fmuld	KA3,%f26,%f34		! (3_1) dtmp2 = KA3 * xx0;
477	cmp	%l6,0			! (2_0) ay ? 0
478	be,pn	%icc,.update11		! (2_0) if ( ay == 0 )
479	fand	%f28,DC2,%f30		! (4_1) h_hi0 = vis_fand(hyp0,DC2);
480.cont11:
481	fsmuld	%f4,%f4,%f36		! (2_0) hyp0 = x0 * (double)x0;
482	sra	%i3,10,%i3		! (4_1) ibase0 >>= 10;
483
484	and	%i3,2032,%i3		! (4_1) si0 = ibase0 & 0x7f0;
485	lda	[%i2+stridey]0x82,%l6	! (3_0) ay = *(int*)py;
486
487	fsmuld	%f2,%f2,%f62		! (2_0) dtmp0 = y0 * (double)y0;
488	add	%i3,TBL,%i3		! (4_1) (char*)TBL + si0
489	lda	[%i4+stridex]0x82,%i5	! (3_0) ax = *(int*)px;
490	fsubd	%f28,%f30,%f28		! (4_1) dtmp1 = hyp0 - h_hi0;
491
492	add	%i4,stridex,%o4		! px += stridex
493	ldd	[%i3],%f42		! (4_1) xx0 = ((double*)((char*)TBL + si0))[0];
494	faddd	%f34,KA2,%f10		! (3_1) dtmp2 += KA2;
495
496	add	%i2,stridey,%i2		! py += stridey
497	and	%l6,_0x7fffffff,%l6	! (3_0) ay &= 0x7fffffff;
498	fand	%f14,DC0,%f30		! (0_0) hyp0 = vis_fand(hyp0,DC0);
499
500	and	%i5,_0x7fffffff,%i5	! (3_0) ax &= 0x7fffffff;
501	lda	[%i2]0x82,%f2		! (3_0) y0 = *py;
502
503	faddd	%f36,%f62,%f18		! (2_0) hyp0 += dtmp0;
504	cmp	%l6,_0x7f800000		! (3_0) ay ? 0x7f800000
505	fmuld	%f28,%f42,%f32		! (4_1) xx0 = dtmp1 * xx0;
506
507	fmuld	%f10,%f26,%f10		! (3_1) dtmp2 *= xx0;
508	lda	[%o4]0x82,%f4		! (3_0) x0 = *px;
509	bge,pn	%icc,.update12		! (3_0) if ( ay >= 0x7f800000 )
510	for	%f30,DC1,%f28		! (0_0) hyp0 = vis_for(hyp0,DC1);
511.cont12:
512	cmp	%i5,_0x7f800000		! (3_0) ax ? 0x7f800000
513	bge,pn	%icc,.update13		! (3_0) if ( ax >= 0x7f800000 )
514	ld	[%fp+ftmp1],%i1		! (0_0) ibase0 = ((int*)&hyp0)[0];
515.cont13:
516	st	%f18,[%fp+ftmp3]	! (2_0) ibase0 = ((int*)&hyp0)[0];
517
518	fmuld	KA3,%f32,%f34		! (4_1) dtmp2 = KA3 * xx0;
519	cmp	%l6,0			! (3_0)
520	be,pn	%icc,.update14		! (3_0) if ( ay == 0 )
521	fand	%f28,DC2,%f30		! (0_0) h_hi0 = vis_fand(hyp0,DC2);
522.cont14:
523	fsmuld	%f4,%f4,%f36		! (3_0) hyp0 = x0 * (double)x0;
524	sra	%i1,10,%l1		! (0_0) ibase0 >>= 10;
525	faddd	%f10,KA1,%f40		! (3_1) dtmp2 += KA1;
526
527	and	%l1,2032,%o5		! (0_0) si0 = ibase0 & 0x7f0;
528	lda	[%i2+stridey]0x82,%l6	! (4_0) ay = *(int*)py;
529
530	fsmuld	%f2,%f2,%f62		! (3_0) dtmp0 = y0 * (double)y0;
531	add	%o5,TBL,%l1		! (0_0) (char*)TBL + si0
532	lda	[stridex+%o4]0x82,%i5	! (4_0) ax = *(int*)px;
533	fsubd	%f28,%f30,%f28		! (0_0) dtmp1 = hyp0 - h_hi0;
534
535	add	%o4,stridex,%l0		! px += stridex
536	ldd	[TBL+%o5],%f42		! (0_0) xx0 = ((double*)((char*)TBL + si0))[0];
537	faddd	%f34,KA2,%f10		! (4_1) dtmp2 += KA2;
538
539	fmuld	%f40,%f26,%f40		! (3_1) dtmp2 *= xx0;
540	add	%i2,stridey,%i2		! py += stridey
541	and	%l6,_0x7fffffff,%l6	! (4_0) ay &= 0x7fffffff;
542	fand	%f16,DC0,%f30		! (1_0) hyp0 = vis_fand(hyp0,DC0);
543
544	and	%i5,_0x7fffffff,%i5	! (4_0) ax &= 0x7fffffff;
545	lda	[%i2]0x82,%f2		! (4_0) y0 = *py;
546	fand	%f20,DA0,%f24		! (3_1) dbase0 = vis_fand(hyp0,DA0);
547
548	faddd	%f36,%f62,%f20		! (3_0) hyp0 += dtmp0;
549	cmp	%l6,_0x7f800000		! (4_0) ay ? 0x7f800000
550	ldd	[%l7+8],%f36		! (3_1) res0 = ((double*)((char*)arr + si0))[1];
551	fmuld	%f28,%f42,%f26		! (0_0) xx0 = dtmp1 * xx0;
552
553	fmuld	%f10,%f32,%f10		! (4_1) dtmp2 *= xx0;
554	lda	[stridex+%o4]0x82,%f4	! (4_0) x0 = *px;
555	bge,pn	%icc,.update15		! (4_0) if ( ay >= 0x7f800000 )
556	for	%f30,DC1,%f28		! (1_0) hyp0 = vis_for(hyp0,DC1);
557.cont15:
558	fmul8x16	SCALE,%f24,%f24	! (3_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
559	cmp	%i5,_0x7f800000		! (4_0) ax ? 0x7f800000
560	ld	[%fp+ftmp2],%i1		! (1_0) ibase0 = ((int*)&hyp0)[0];
561	faddd	%f40,KA0,%f62		! (3_1) dtmp2 += KA0;
562
563	bge,pn	%icc,.update16		! (4_0) if ( ax >= 0x7f800000 )
564	st	%f20,[%fp+ftmp4]	! (3_0) ibase0 = ((int*)&hyp0)[0];
565.cont16:
566	fmuld	KA3,%f26,%f34		! (0_0) dtmp2 = KA3 * xx0;
567	fand	%f28,DC2,%f30		! (1_0) h_hi0 = vis_fand(hyp0,DC2);
568
569	mov	%o1,%i4
570	cmp	counter,5
571	bl,pn	%icc,.tail
572	nop
573
574	ba	.main_loop
575	sub	counter,5,counter
576
577	.align	16
578.main_loop:
579	fsmuld	%f4,%f4,%f38		! (4_1) hyp0 = x0 * (double)x0;
580	sra	%i1,10,%o2		! (1_1) ibase0 >>= 10;
581	cmp	%l6,0			! (4_1) ay ? 0
582	faddd	%f10,KA1,%f40		! (4_2) dtmp2 += KA1;
583
584	fmuld	%f36,%f62,%f36		! (3_2) res0 *= dtmp2;
585	and	%o2,2032,%o2		! (1_1) si0 = ibase0 & 0x7f0;
586	lda	[%i2+stridey]0x82,%l6	! (0_0) ay = *(int*)py;
587	fpsub32	DA1,%f24,%f24		! (3_2) dbase0 = vis_fpsub32(DA1,dbase0);
588
589	fsmuld	%f2,%f2,%f62		! (4_1) dtmp0 = y0 * (double)y0;
590	add	%o2,TBL,%o2		! (1_1) (char*)TBL + si0
591	lda	[%l0+stridex]0x82,%o1	! (0_0) ax = *(int*)px;
592	fsubd	%f28,%f30,%f28		! (1_1) dtmp1 = hyp0 - h_hi0;
593
594	add	%l0,stridex,%i1		! px += stridex
595	ldd	[%o2],%f42		! (1_1) xx0 = ((double*)((char*)TBL + si0))[0];
596	be,pn	%icc,.update17		! (4_1) if ( ay == 0 )
597	faddd	%f34,KA2,%f10		! (0_1) dtmp2 += KA2;
598.cont17:
599	fmuld	%f40,%f32,%f40		! (4_2) dtmp2 *= xx0;
600	add	%i2,stridey,%i2		! py += stridey
601	and	%l6,_0x7fffffff,%l6	! (0_0) ay &= 0x7fffffff;
602	fand	%f18,DC0,%f30		! (2_1) hyp0 = vis_fand(hyp0,DC0);
603
604	fmuld	%f36,%f24,%f32		! (3_2) res0 *= dbase0;
605	and	%o1,_0x7fffffff,%o1	! (0_0) ax &= 0x7fffffff;
606	lda	[%i2]0x82,%f2		! (0_0) y0 = *py;
607	fand	%f12,DA0,%f24		! (4_2) dbase0 = vis_fand(hyp0,DA0);
608
609	faddd	%f38,%f62,%f12		! (4_1) hyp0 += dtmp0;
610	cmp	%l6,_0x7f800000		! (0_0) ay ? 0x7f800000
611	ldd	[%i3+8],%f62		! (4_2) res0 = ((double*)((char*)arr + si0))[1];
612	fmuld	%f28,%f42,%f36		! (1_1) xx0 = dtmp1 * xx0;
613
614	fmuld	%f10,%f26,%f10		! (0_1) dtmp2 *= xx0;
615	lda	[%i1]0x82,%f4		! (0_0) x0 = *px;
616	bge,pn	%icc,.update18		! (0_0) if ( ay >= 0x7f800000 )
617	for	%f30,DC1,%f28		! (2_1) hyp0 = vis_for(hyp0,DC1);
618.cont18:
619	fmul8x16	SCALE,%f24,%f24	! (4_2) dbase0 = vis_fmul8x16(SCALE, dbase0);
620	cmp	%o1,_0x7f800000		! (0_0) ax ? 0x7f800000
621	ld	[%fp+ftmp3],%l0		! (2_1) ibase0 = ((int*)&hyp0)[0];
622	faddd	%f40,KA0,%f42		! (4_2) dtmp2 += KA0;
623
624	add	%i4,stridez,%i3		! pz += stridez
625	st	%f12,[%fp+ftmp0]	! (4_1) ibase0 = ((int*)&hyp0)[0];
626	bge,pn	%icc,.update19		! (0_0) if ( ax >= 0x7f800000 )
627	fdtos	%f32,%f1		! (3_2) ftmp0 = (float)res0;
628.cont19:
629	fmuld	KA3,%f36,%f34		! (1_1) dtmp2 = KA3 * xx0;
630	cmp	%l6,0			! (0_0) ay ? 0
631	st	%f1,[%i4]		! (3_2) *pz = ftmp0;
632	fand	%f28,DC2,%f30		! (2_1) h_hi0 = vis_fand(hyp0,DC2);
633
634	fsmuld	%f4,%f4,%f38		! (0_0) hyp0 = x0 * (double)x0;
635	sra	%l0,10,%i4		! (2_1) ibase0 >>= 10;
636	be,pn	%icc,.update20		! (0_0) if ( ay == 0 )
637	faddd	%f10,KA1,%f40		! (0_1) dtmp2 += KA1;
638.cont20:
639	fmuld	%f62,%f42,%f32		! (4_2) res0 *= dtmp2;
640	and	%i4,2032,%g1		! (2_1) si0 = ibase0 & 0x7f0;
641	lda	[%i2+stridey]0x82,%l6	! (1_0) ay = *(int*)py;
642	fpsub32	DA1,%f24,%f24		! (4_2) dbase0 = vis_fpsub32(DA1,dbase0);
643
644	fsmuld	%f2,%f2,%f62		! (0_0) dtmp0 = y0 * (double)y0;
645	add	%g1,TBL,%l0		! (2_1) (char*)TBL + si0
646	lda	[%i1+stridex]0x82,%i5	! (1_0) ax = *(int*)px;
647	fsubd	%f28,%f30,%f28		! (2_1) dtmp1 = hyp0 - h_hi0;
648
649	nop
650	add	%i1,stridex,%g5		! px += stridex
651	ldd	[TBL+%g1],%f42		! (2_1) xx0 = ((double*)((char*)TBL + si0))[0];
652	faddd	%f34,KA2,%f10		! (1_1) dtmp2 += KA2;
653
654	fmuld	%f40,%f26,%f40		! (0_1) dtmp2 *= xx0;
655	add	%i2,stridey,%o3		! py += stridey
656	and	%l6,_0x7fffffff,%l6	! (1_0) ay &= 0x7fffffff;
657	fand	%f20,DC0,%f30		! (3_1) hyp0 = vis_fand(hyp0,DC0);
658
659	fmuld	%f32,%f24,%f26		! (4_2) res0 *= dbase0;
660	and	%i5,_0x7fffffff,%i5	! (1_0) ax &= 0x7fffffff;
661	lda	[%o3]0x82,%f2		! (1_0) y0 = *py;
662	fand	%f14,DA0,%f24		! (0_1) dbase0 = vis_fand(hyp0,DA0);
663
664	faddd	%f38,%f62,%f14		! (0_0) hyp0 += dtmp0;
665	cmp	%l6,_0x7f800000		! (1_0) ay ? 0x7f800000
666	ldd	[%l1+8],%f62		! (0_1) res0 = ((double*)((char*)arr + si0))[1];
667	fmuld	%f28,%f42,%f32		! (2_1) xx0 = dtmp1 * xx0;
668
669	fmuld	%f10,%f36,%f10		! (1_1) dtmp2 *= xx0;
670	lda	[%g5]0x82,%f4		! (1_0) x0 = *px;
671	bge,pn	%icc,.update21		! (1_0) if ( ay >= 0x7f800000 )
672	for	%f30,DC1,%f28		! (3_1) hyp0 = vis_for(hyp0,DC1);
673.cont21:
674	fmul8x16	SCALE,%f24,%f24	! (0_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
675	cmp	%i5,_0x7f800000		! (1_0) ax ? 0x7f800000
676	ld	[%fp+ftmp4],%l1		! (3_1) ibase0 = ((int*)&hyp0)[0];
677	faddd	%f40,KA0,%f42		! (0_1) dtmp2 += KA0
678
679	add	%i3,stridez,%o1		! pz += stridez
680	st	%f14,[%fp+ftmp1]	! (0_0) ibase0 = ((int*)&hyp0)[0];
681	bge,pn	%icc,.update22		! (1_0) if ( ax >= 0x7f800000 )
682	fdtos	%f26,%f1		! (4_2) ftmp0 = (float)res0;
683.cont22:
684	fmuld	KA3,%f32,%f34		! (2_1) dtmp2 = KA3 * xx0;
685	cmp	%l6,0			! (1_0) ay ? 0
686	st	%f1,[%i3]		! (4_2) *pz = ftmp0;
687	fand	%f28,DC2,%f30		! (3_1) h_hi0 = vis_fand(hyp0,DC2);
688
689	fsmuld	%f4,%f4,%f38		! (1_0) hyp0 = x0 * (double)x0;
690	sra	%l1,10,%o5		! (3_1) ibase0 >>= 10;
691	be,pn	%icc,.update23		! (1_0) if ( ay == 0 )
692	faddd	%f10,KA1,%f40		! (1_1) dtmp2 += KA1;
693.cont23:
694	fmuld	%f62,%f42,%f26		! (0_1) res0 *= dtmp2;
695	and	%o5,2032,%o4		! (3_1) si0 = ibase0 & 0x7f0;
696	lda	[%o3+stridey]0x82,%l6	! (2_0) ay = *(int*)py;
697	fpsub32	DA1,%f24,%f24		! (0_1) dbase0 = vis_fpsub32(DA1,dbase0);
698
699	fsmuld	%f2,%f2,%f62		! (1_0) dtmp0 = y0 * (double)y0;
700	add	%o4,TBL,%l7		! (3_1) (char*)TBL + si0
701	lda	[stridex+%g5]0x82,%i5	! (2_0) ax = *(int*)px;
702	fsubd	%f28,%f30,%f28		! (3_1) dtmp1 = hyp0 - h_hi0;
703
704	nop
705	add	%g5,stridex,%i4		! px += stridex
706	ldd	[TBL+%o4],%f42		! (3_1) xx0 = ((double*)((char*)TBL + si0))[0];
707	faddd	%f34,KA2,%f10		! (2_1) dtmp2 += KA2;
708
709	fmuld	%f40,%f36,%f40		! (1_1) dtmp2 *= xx0;
710	and	%l6,_0x7fffffff,%l6	! (2_0) ay &= 0x7fffffff;
711	add	%o3,stridey,%i2		! py += stridey
712	fand	%f12,DC0,%f30		! (4_1) hyp0 = vis_fand(hyp0,DC0);
713
714	fmuld	%f26,%f24,%f36		! (0_1) res0 *= dbase0;
715	and	%i5,_0x7fffffff,%i5	! (2_0) ax &= 0x7fffffff;
716	lda	[%i2]0x82,%f2		! (2_0) y0 = *py;
717	fand	%f16,DA0,%f24		! (1_1) dbase0 = vis_fand(hyp0,DA0);
718
719	faddd	%f38,%f62,%f16		! (1_0) hyp0 += dtmp0;
720	cmp	%l6,_0x7f800000		! (2_0) ay ? 0x7f800000
721	ldd	[%o2+8],%f38		! (1_1) res0 = ((double*)((char*)arr + si0))[1];
722	fmuld	%f28,%f42,%f26		! (3_1) xx0 = dtmp1 * xx0;
723
724	fmuld	%f10,%f32,%f10		! (2_1) dtmp2 *= xx0;
725	lda	[stridex+%g5]0x82,%f4	! (2_0) x0 = *px;
726	bge,pn	%icc,.update24		! (2_0) if ( ay >= 0x7f800000
727	for	%f30,DC1,%f28		! (4_1) hyp0 = vis_for(hyp0,DC1);
728.cont24:
729	fmul8x16	SCALE,%f24,%f24	! (1_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
730	cmp	%i5,_0x7f800000		! (2_0) ax ? 0x7f800000
731	ld	[%fp+ftmp0],%i3		! (4_1) ibase0 = ((int*)&hyp0)[0];
732	faddd	%f40,KA0,%f62		! (1_1) dtmp2 += KA0;
733
734	add	%o1,stridez,%g1		! pz += stridez
735	st	%f16,[%fp+ftmp2]	! (1_0) ibase0 = ((int*)&hyp0)[0];
736	bge,pn	%icc,.update25		! (2_0) if ( ax >= 0x7f800000 )
737	fdtos	%f36,%f1		! (0_1) ftmp0 = (float)res0;
738.cont25:
739	fmuld	KA3,%f26,%f34		! (3_1) dtmp2 = KA3 * xx0;
740	cmp	%l6,0			! (2_0) ay ? 0
741	st	%f1,[%o1]		! (0_1) *pz = ftmp0;
742	fand	%f28,DC2,%f30		! (4_1) h_hi0 = vis_fand(hyp0,DC2);
743
744	fsmuld	%f4,%f4,%f36		! (2_0) hyp0 = x0 * (double)x0;
745	sra	%i3,10,%i3		! (4_1) ibase0 >>= 10;
746	be,pn	%icc,.update26		! (2_0) if ( ay == 0 )
747	faddd	%f10,KA1,%f40		! (2_1) dtmp2 += KA1;
748.cont26:
749	fmuld	%f38,%f62,%f38		! (1_1) res0 *= dtmp2;
750	and	%i3,2032,%i3		! (4_1) si0 = ibase0 & 0x7f0;
751	lda	[%i2+stridey]0x82,%l6	! (3_0) ay = *(int*)py;
752	fpsub32	DA1,%f24,%f24		! (1_1) dbase0 = vis_fpsub32(DA1,dbase0);
753
754	fsmuld	%f2,%f2,%f62		! (2_0) dtmp0 = y0 * (double)y0;
755	add	%i3,TBL,%i3		! (4_1) (char*)TBL + si0
756	lda	[%i4+stridex]0x82,%i5	! (3_0) ax = *(int*)px;
757	fsubd	%f28,%f30,%f28		! (4_1) dtmp1 = hyp0 - h_hi0;
758
759	nop
760	add	%i4,stridex,%o4		! px += stridex
761	ldd	[%i3],%f42		! (4_1) xx0 = ((double*)((char*)TBL + si0))[0];
762	faddd	%f34,KA2,%f10		! (3_1) dtmp2 += KA2;
763
764	fmuld	%f40,%f32,%f40		! (2_1) dtmp2 *= xx0;
765	add	%i2,stridey,%i2		! py += stridey
766	and	%l6,_0x7fffffff,%l6	! (3_0) ay &= 0x7fffffff;
767	fand	%f14,DC0,%f30		! (0_0) hyp0 = vis_fand(hyp0,DC0);
768
769	fmuld	%f38,%f24,%f38		! (1_1) res0 *= dbase0;
770	and	%i5,_0x7fffffff,%i5	! (3_0) ax &= 0x7fffffff;
771	lda	[%i2]0x82,%f2		! (3_0) y0 = *py;
772	fand	%f18,DA0,%f24		! (2_1) dbase0 = vis_fand(hyp0,DA0);
773
774	faddd	%f36,%f62,%f18		! (2_0) hyp0 += dtmp0;
775	cmp	%l6,_0x7f800000		! (3_0) ay ? 0x7f800000
776	ldd	[%l0+8],%f62		! (2_1) res0 = ((double*)((char*)arr + si0))[1];
777	fmuld	%f28,%f42,%f32		! (4_1) xx0 = dtmp1 * xx0;
778
779	fmuld	%f10,%f26,%f10		! (3_1) dtmp2 *= xx0;
780	lda	[%o4]0x82,%f4		! (3_0) x0 = *px;
781	bge,pn	%icc,.update27		! (3_0) if ( ay >= 0x7f800000 )
782	for	%f30,DC1,%f28		! (0_0) hyp0 = vis_for(hyp0,DC1);
783.cont27:
784	fmul8x16	SCALE,%f24,%f24	! (2_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
785	cmp	%i5,_0x7f800000		! (3_0) ax ? 0x7f800000
786	ld	[%fp+ftmp1],%i1		! (0_0) ibase0 = ((int*)&hyp0)[0];
787	faddd	%f40,KA0,%f42		! (2_1) dtmp2 += KA0;
788
789	add	%g1,stridez,%o3		! pz += stridez
790	st	%f18,[%fp+ftmp3]	! (2_0) ibase0 = ((int*)&hyp0)[0];
791	bge,pn	%icc,.update28		! (3_0) if ( ax >= 0x7f800000 )
792	fdtos	%f38,%f1		! (1_1) ftmp0 = (float)res0;
793.cont28:
794	fmuld	KA3,%f32,%f34		! (4_1) dtmp2 = KA3 * xx0;
795	cmp	%l6,0			! (3_0)
796	st	%f1,[%g1]		! (1_1) *pz = ftmp0;
797	fand	%f28,DC2,%f30		! (0_0) h_hi0 = vis_fand(hyp0,DC2);
798
799	fsmuld	%f4,%f4,%f36		! (3_0) hyp0 = x0 * (double)x0;
800	sra	%i1,10,%l1		! (0_0) ibase0 >>= 10;
801	be,pn	%icc,.update29		! (3_0) if ( ay == 0 )
802	faddd	%f10,KA1,%f40		! (3_1) dtmp2 += KA1;
803.cont29:
804	fmuld	%f62,%f42,%f38		! (2_1) res0 *= dtmp2;
805	and	%l1,2032,%o5		! (0_0) si0 = ibase0 & 0x7f0;
806	lda	[%i2+stridey]0x82,%l6	! (4_0) ay = *(int*)py;
807	fpsub32	DA1,%f24,%f24		! (2_1) dbase0 = vis_fpsub32(DA1,dbase0);
808
809	fsmuld	%f2,%f2,%f62		! (3_0) dtmp0 = y0 * (double)y0;
810	add	%o5,TBL,%l1		! (0_0) (char*)TBL + si0
811	lda	[stridex+%o4]0x82,%i5	! (4_0) ax = *(int*)px;
812	fsubd	%f28,%f30,%f28		! (0_0) dtmp1 = hyp0 - h_hi0;
813
814	add	%o3,stridez,%i4		! pz += stridez
815	add	%o4,stridex,%l0		! px += stridex
816	ldd	[TBL+%o5],%f42		! (0_0) xx0 = ((double*)((char*)TBL + si0))[0];
817	faddd	%f34,KA2,%f10		! (4_1) dtmp2 += KA2;
818
819	fmuld	%f40,%f26,%f40		! (3_1) dtmp2 *= xx0;
820	add	%i2,stridey,%i2		! py += stridey
821	and	%l6,_0x7fffffff,%l6	! (4_0) ay &= 0x7fffffff;
822	fand	%f16,DC0,%f30		! (1_0) hyp0 = vis_fand(hyp0,DC0);
823
824	fmuld	%f38,%f24,%f38		! (2_1) res0 *= dbase0;
825	and	%i5,_0x7fffffff,%i5	! (4_0) ax &= 0x7fffffff;
826	lda	[%i2]0x82,%f2		! (4_0) y0 = *py;
827	fand	%f20,DA0,%f24		! (3_1) dbase0 = vis_fand(hyp0,DA0);
828
829	faddd	%f36,%f62,%f20		! (3_0) hyp0 += dtmp0;
830	cmp	%l6,_0x7f800000		! (4_0) ay ? 0x7f800000
831	ldd	[%l7+8],%f36		! (3_1) res0 = ((double*)((char*)arr + si0))[1];
832	fmuld	%f28,%f42,%f26		! (0_0) xx0 = dtmp1 * xx0;
833
834	fmuld	%f10,%f32,%f10		! (4_1) dtmp2 *= xx0;
835	lda	[stridex+%o4]0x82,%f4	! (4_0) x0 = *px;
836	bge,pn	%icc,.update30		! (4_0) if ( ay >= 0x7f800000 )
837	for	%f30,DC1,%f28		! (1_0) hyp0 = vis_for(hyp0,DC1);
838.cont30:
839	fmul8x16	SCALE,%f24,%f24	! (3_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
840	cmp	%i5,_0x7f800000		! (4_0) ax ? 0x7f800000
841	ld	[%fp+ftmp2],%i1		! (1_0) ibase0 = ((int*)&hyp0)[0];
842	faddd	%f40,KA0,%f62		! (3_1) dtmp2 += KA0;
843
844	bge,pn	%icc,.update31		! (4_0) if ( ax >= 0x7f800000 )
845	st	%f20,[%fp+ftmp4]	! (3_0) ibase0 = ((int*)&hyp0)[0];
846.cont31:
847	subcc	counter,5,counter	! counter -= 5;
848	fdtos	%f38,%f1		! (2_1) ftmp0 = (float)res0;
849
850	fmuld	KA3,%f26,%f34		! (0_0) dtmp2 = KA3 * xx0;
851	st	%f1,[%o3]		! (2_1) *pz = ftmp0;
852	bpos,pt	%icc,.main_loop
853	fand	%f28,DC2,%f30		! (1_0) h_hi0 = vis_fand(hyp0,DC2);
854
855	add	counter,5,counter
856
857.tail:
858	subcc	counter,1,counter
859	bneg	.begin
860	mov	%i4,%o1
861
862	sra	%i1,10,%o2		! (1_1) ibase0 >>= 10;
863	faddd	%f10,KA1,%f40		! (4_2) dtmp2 += KA1;
864
865	fmuld	%f36,%f62,%f36		! (3_2) res0 *= dtmp2;
866	and	%o2,2032,%o2		! (1_1) si0 = ibase0 & 0x7f0;
867	fpsub32	DA1,%f24,%f24		! (3_2) dbase0 = vis_fpsub32(DA1,dbase0);
868
869	add	%o2,TBL,%o2		! (1_1) (char*)TBL + si0
870	fsubd	%f28,%f30,%f28		! (1_1) dtmp1 = hyp0 - h_hi0;
871
872	ldd	[%o2],%f42		! (1_1) xx0 = ((double*)((char*)TBL + si0))[0];
873	faddd	%f34,KA2,%f10		! (0_1) dtmp2 += KA2;
874
875	fmuld	%f40,%f32,%f40		! (4_2) dtmp2 *= xx0;
876
877	fmuld	%f36,%f24,%f32		! (3_2) res0 *= dbase0;
878	fand	%f12,DA0,%f24		! (4_2) dbase0 = vis_fand(hyp0,DA0);
879
880	ldd	[%i3+8],%f62		! (4_2) res0 = ((double*)((char*)arr + si0))[1];
881	fmuld	%f28,%f42,%f36		! (1_1) xx0 = dtmp1 * xx0;
882
883	fmuld	%f10,%f26,%f10		! (0_1) dtmp2 *= xx0;
884
885	fmul8x16	SCALE,%f24,%f24	! (4_2) dbase0 = vis_fmul8x16(SCALE, dbase0);
886	faddd	%f40,KA0,%f42		! (4_2) dtmp2 += KA0;
887
888	add	%i4,stridez,%i3		! pz += stridez
889	fdtos	%f32,%f1		! (3_2) ftmp0 = (float)res0;
890
891	fmuld	KA3,%f36,%f34		! (1_1) dtmp2 = KA3 * xx0;
892	st	%f1,[%i4]		! (3_2) *pz = ftmp0;
893
894	subcc	counter,1,counter
895	bneg	.begin
896	mov	%i3,%o1
897
898	faddd	%f10,KA1,%f40		! (0_1) dtmp2 += KA1;
899
900	fmuld	%f62,%f42,%f32		! (4_2) res0 *= dtmp2;
901	fpsub32	DA1,%f24,%f24		! (4_2) dbase0 = vis_fpsub32(DA1,dbase0);
902
903
904	faddd	%f34,KA2,%f10		! (1_1) dtmp2 += KA2;
905
906	fmuld	%f40,%f26,%f40		! (0_1) dtmp2 *= xx0;
907
908	fmuld	%f32,%f24,%f26		! (4_2) res0 *= dbase0;
909	fand	%f14,DA0,%f24		! (0_1) dbase0 = vis_fand(hyp0,DA0);
910
911	ldd	[%l1+8],%f62		! (0_1) res0 = ((double*)((char*)arr + si0))[1];
912
913	fmuld	%f10,%f36,%f10		! (1_1) dtmp2 *= xx0;
914
915	fmul8x16	SCALE,%f24,%f24	! (0_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
916	faddd	%f40,KA0,%f42		! (0_1) dtmp2 += KA0
917
918	add	%i3,stridez,%o1		! pz += stridez
919	fdtos	%f26,%f1		! (4_2) ftmp0 = (float)res0;
920
921	st	%f1,[%i3]		! (4_2) *pz = ftmp0;
922
923	subcc	counter,1,counter
924	bneg	.begin
925	nop
926
927	faddd	%f10,KA1,%f40		! (1_1) dtmp2 += KA1;
928
929	fmuld	%f62,%f42,%f26		! (0_1) res0 *= dtmp2;
930	fpsub32	DA1,%f24,%f24		! (0_1) dbase0 = vis_fpsub32(DA1,dbase0);
931
932	fmuld	%f40,%f36,%f40		! (1_1) dtmp2 *= xx0;
933
934	fmuld	%f26,%f24,%f36		! (0_1) res0 *= dbase0;
935	fand	%f16,DA0,%f24		! (1_1) dbase0 = vis_fand(hyp0,DA0);
936
937	ldd	[%o2+8],%f38		! (1_1) res0 = ((double*)((char*)arr + si0))[1];
938
939	fmul8x16	SCALE,%f24,%f24	! (1_1) dbase0 = vis_fmul8x16(SCALE, dbase0);
940	faddd	%f40,KA0,%f62		! (1_1) dtmp2 += KA0;
941
942	add	%o1,stridez,%g1		! pz += stridez
943	fdtos	%f36,%f1		! (0_1) ftmp0 = (float)res0;
944
945	st	%f1,[%o1]		! (0_1) *pz = ftmp0;
946
947	subcc	counter,1,counter
948	bneg	.begin
949	mov	%g1,%o1
950
951	fmuld	%f38,%f62,%f38		! (1_1) res0 *= dtmp2;
952	fpsub32	DA1,%f24,%f24		! (1_1) dbase0 = vis_fpsub32(DA1,dbase0);
953
954	fmuld	%f38,%f24,%f38		! (1_1) res0 *= dbase0;
955
956	fdtos	%f38,%f1		! (1_1) ftmp0 = (float)res0;
957	st	%f1,[%g1]		! (1_1) *pz = ftmp0;
958
959	ba	.begin
960	add	%g1,stridez,%o1		! pz += stridez
961
962	.align	16
963.spec0:
964	fabss	%f2,%f2			! fabsf(y0);
965
966	fabss	%f4,%f4			! fabsf(x0);
967
968	fcmps	%f2,%f4
969
970	cmp	%l6,_0x7f800000		! ay ? 0x7f800000
971	be,a	1f			! if( ay == 0x7f800000 )
972	st	%g0,[%o1]		! *pz = 0.0f;
973
974	cmp	%i5,_0x7f800000		! ax ? 0x7f800000
975	be,a	1f			! if( ax == 0x7f800000 )
976	st	%g0,[%o1]		! *pz = 0.0f;
977
978	fmuls	%f2,%f4,%f2		! fabsf(x0) * fabsf(y0);
979	st	%f2,[%o1]		! *pz = fabsf(x0) + fabsf(y0);
9801:
981	add	%o4,stridex,%o4		! px += stridex;
982	add	%i2,stridey,%i2		! py += stridey;
983
984	add	%o1,stridez,%o1		! pz += stridez;
985	ba	.begin1
986	sub	counter,1,counter	! counter--;
987
988	.align	16
989.spec1:
990	cmp	%i5,0			! ax ? 0
991	bne,pt	%icc,.cont_spec1	! if ( ax != 0 )
992	nop
993
994	add	%o4,stridex,%o4		! px += stridex;
995	add	%i2,stridey,%i2		! py += stridey;
996
997	fdivs	%f7,%f9,%f2		! 1.0f / 0.0f
998	st	%f2,[%o1]		! *pz = 1.0f / 0.0f;
999
1000	add	%o1,stridez,%o1		! pz += stridez;
1001	ba	.begin1
1002	sub	counter,1,counter	! counter--;
1003
1004	.align	16
1005.update0:
1006	cmp	counter,1
1007	ble	.cont0
1008	ld	[TBL+TBL_SHIFT+44],%f2
1009
1010	sub	counter,1,counter
1011	st	counter,[%fp+tmp_counter]
1012
1013	stx	%l0,[%fp+tmp_px]
1014
1015	stx	%i2,[%fp+tmp_py]
1016	ba	.cont0
1017	mov	1,counter
1018
1019	.align	16
1020.update1:
1021	cmp	counter,1
1022	ble	.cont1
1023	ld	[TBL+TBL_SHIFT+44],%f4
1024
1025	sub	counter,1,counter
1026	st	counter,[%fp+tmp_counter]
1027
1028	stx	%l0,[%fp+tmp_px]
1029
1030	stx	%i2,[%fp+tmp_py]
1031	ba	.cont1
1032	mov	1,counter
1033
1034	.align	16
1035.update2:
1036	cmp	%i5,0
1037	bne	.cont2
1038
1039	cmp	counter,1
1040	ble	.cont2
1041	ld	[TBL+TBL_SHIFT+44],%f2
1042
1043	sub	counter,1,counter
1044	st	counter,[%fp+tmp_counter]
1045
1046	stx	%l0,[%fp+tmp_px]
1047
1048	stx	%i2,[%fp+tmp_py]
1049	ba	.cont2
1050	mov	1,counter
1051
1052	.align	16
1053.update3:
1054	cmp	counter,2
1055	ble	.cont3
1056	ld	[TBL+TBL_SHIFT+44],%f2
1057
1058	sub	counter,2,counter
1059	st	counter,[%fp+tmp_counter]
1060
1061	stx	%i1,[%fp+tmp_px]
1062
1063	stx	%i2,[%fp+tmp_py]
1064	ba	.cont3
1065	mov	2,counter
1066
1067	.align	16
1068.update4:
1069	cmp	counter,2
1070	ble	.cont4
1071	ld	[TBL+TBL_SHIFT+44],%f4
1072
1073	sub	counter,2,counter
1074	st	counter,[%fp+tmp_counter]
1075
1076	stx	%i1,[%fp+tmp_px]
1077
1078	stx	%i2,[%fp+tmp_py]
1079	ba	.cont4
1080	mov	2,counter
1081
1082	.align	16
1083.update5:
1084	cmp	%i5,0
1085	bne	.cont5
1086
1087	cmp	counter,2
1088	ble	.cont5
1089	ld	[TBL+TBL_SHIFT+44],%f2
1090
1091	sub	counter,2,counter
1092	st	counter,[%fp+tmp_counter]
1093
1094	stx	%i1,[%fp+tmp_px]
1095
1096	stx	%i2,[%fp+tmp_py]
1097	ba	.cont5
1098	mov	2,counter
1099
1100	.align	16
1101.update6:
1102	cmp	counter,3
1103	ble	.cont6
1104	ld	[TBL+TBL_SHIFT+44],%f2
1105
1106	sub	counter,3,counter
1107	st	counter,[%fp+tmp_counter]
1108
1109	stx	%g5,[%fp+tmp_px]
1110
1111	stx	%o3,[%fp+tmp_py]
1112	ba	.cont6
1113	mov	3,counter
1114
1115	.align	16
1116.update7:
1117	cmp	counter,3
1118	ble	.cont7
1119	ld	[TBL+TBL_SHIFT+44],%f4
1120
1121	sub	counter,3,counter
1122	st	counter,[%fp+tmp_counter]
1123
1124	stx	%g5,[%fp+tmp_px]
1125
1126	stx	%o3,[%fp+tmp_py]
1127	ba	.cont7
1128	mov	3,counter
1129
1130	.align	16
1131.update8:
1132	cmp	%i5,0
1133	bne	.cont8
1134
1135	cmp	counter,3
1136	ble	.cont8
1137	ld	[TBL+TBL_SHIFT+44],%f2
1138
1139	sub	counter,3,counter
1140	st	counter,[%fp+tmp_counter]
1141
1142	stx	%g5,[%fp+tmp_px]
1143
1144	stx	%o3,[%fp+tmp_py]
1145	ba	.cont8
1146	mov	3,counter
1147
1148	.align	16
1149.update9:
1150	cmp	counter,4
1151	ble	.cont9
1152	ld	[TBL+TBL_SHIFT+44],%f2
1153
1154	sub	counter,4,counter
1155	st	counter,[%fp+tmp_counter]
1156
1157	stx	%i4,[%fp+tmp_px]
1158
1159	stx	%i2,[%fp+tmp_py]
1160	ba	.cont9
1161	mov	4,counter
1162
1163	.align	16
1164.update10:
1165	cmp	counter,4
1166	ble	.cont10
1167	ld	[TBL+TBL_SHIFT+44],%f4
1168
1169	sub	counter,4,counter
1170	st	counter,[%fp+tmp_counter]
1171
1172	stx	%i4,[%fp+tmp_px]
1173
1174	stx	%i2,[%fp+tmp_py]
1175	ba	.cont10
1176	mov	4,counter
1177
1178	.align	16
1179.update11:
1180	cmp	%i5,0
1181	bne	.cont11
1182
1183	cmp	counter,4
1184	ble	.cont11
1185	ld	[TBL+TBL_SHIFT+44],%f2
1186
1187	sub	counter,4,counter
1188	st	counter,[%fp+tmp_counter]
1189
1190	stx	%i4,[%fp+tmp_px]
1191
1192	stx	%i2,[%fp+tmp_py]
1193	ba	.cont11
1194	mov	4,counter
1195
1196	.align	16
1197.update12:
1198	cmp	counter,5
1199	ble	.cont12
1200	ld	[TBL+TBL_SHIFT+44],%f2
1201
1202	sub	counter,5,counter
1203	st	counter,[%fp+tmp_counter]
1204
1205	stx	%o4,[%fp+tmp_px]
1206
1207	stx	%i2,[%fp+tmp_py]
1208	ba	.cont12
1209	mov	5,counter
1210
1211	.align	16
1212.update13:
1213	cmp	counter,5
1214	ble	.cont13
1215	ld	[TBL+TBL_SHIFT+44],%f4
1216
1217	sub	counter,5,counter
1218	st	counter,[%fp+tmp_counter]
1219
1220	stx	%o4,[%fp+tmp_px]
1221
1222	stx	%i2,[%fp+tmp_py]
1223	ba	.cont13
1224	mov	5,counter
1225
1226	.align	16
1227.update14:
1228	cmp	%i5,0
1229	bne	.cont14
1230
1231	cmp	counter,5
1232	ble	.cont14
1233	ld	[TBL+TBL_SHIFT+44],%f2
1234
1235	sub	counter,5,counter
1236	st	counter,[%fp+tmp_counter]
1237
1238	stx	%o4,[%fp+tmp_px]
1239
1240	stx	%i2,[%fp+tmp_py]
1241	ba	.cont14
1242	mov	5,counter
1243
1244	.align	16
1245.update15:
1246	cmp	counter,6
1247	ble	.cont15
1248	ld	[TBL+TBL_SHIFT+44],%f2
1249
1250	sub	counter,6,counter
1251	st	counter,[%fp+tmp_counter]
1252
1253	stx	%l0,[%fp+tmp_px]
1254
1255	stx	%i2,[%fp+tmp_py]
1256	ba	.cont15
1257	mov	6,counter
1258
1259	.align	16
1260.update16:
1261	cmp	counter,6
1262	ble	.cont16
1263	ld	[TBL+TBL_SHIFT+44],%f4
1264
1265	sub	counter,6,counter
1266	st	counter,[%fp+tmp_counter]
1267
1268	stx	%l0,[%fp+tmp_px]
1269
1270	stx	%i2,[%fp+tmp_py]
1271	ba	.cont16
1272	mov	6,counter
1273
1274	.align	16
1275.update17:
1276	cmp	%i5,0
1277	bne	.cont17
1278
1279	cmp	counter,1
1280	ble	.cont17
1281	fmovd	DC1,%f62
1282
1283	sub	counter,1,counter
1284	st	counter,[%fp+tmp_counter]
1285
1286	stx	%l0,[%fp+tmp_px]
1287
1288	stx	%i2,[%fp+tmp_py]
1289	ba	.cont17
1290	mov	1,counter
1291
1292	.align	16
1293.update18:
1294	cmp	counter,2
1295	ble	.cont18
1296	ld	[TBL+TBL_SHIFT+44],%f2
1297
1298	sub	counter,2,counter
1299	st	counter,[%fp+tmp_counter]
1300
1301	stx	%i1,[%fp+tmp_px]
1302
1303	stx	%i2,[%fp+tmp_py]
1304	ba	.cont18
1305	mov	2,counter
1306
1307	.align	16
1308.update19:
1309	cmp	counter,2
1310	ble	.cont19
1311	ld	[TBL+TBL_SHIFT+44],%f4
1312
1313	sub	counter,2,counter
1314	st	counter,[%fp+tmp_counter]
1315
1316	stx	%i1,[%fp+tmp_px]
1317
1318	stx	%i2,[%fp+tmp_py]
1319	ba	.cont19
1320	mov	2,counter
1321
1322	.align	16
1323.update20:
1324	cmp	%o1,0
1325	bne	.cont20
1326
1327	cmp	counter,2
1328	ble	.cont20
1329	ld	[TBL+TBL_SHIFT+44],%f2
1330
1331	sub	counter,2,counter
1332	st	counter,[%fp+tmp_counter]
1333
1334	stx	%i1,[%fp+tmp_px]
1335
1336	stx	%i2,[%fp+tmp_py]
1337	ba	.cont20
1338	mov	2,counter
1339
1340	.align	16
1341.update21:
1342	cmp	counter,3
1343	ble	.cont21
1344	ld	[TBL+TBL_SHIFT+44],%f2
1345
1346	sub	counter,3,counter
1347	st	counter,[%fp+tmp_counter]
1348
1349	stx	%g5,[%fp+tmp_px]
1350
1351	stx	%o3,[%fp+tmp_py]
1352	ba	.cont21
1353	mov	3,counter
1354
1355	.align	16
1356.update22:
1357	cmp	counter,3
1358	ble	.cont22
1359	ld	[TBL+TBL_SHIFT+44],%f4
1360
1361	sub	counter,3,counter
1362	st	counter,[%fp+tmp_counter]
1363
1364	stx	%g5,[%fp+tmp_px]
1365
1366	stx	%o3,[%fp+tmp_py]
1367	ba	.cont22
1368	mov	3,counter
1369
1370	.align	16
1371.update23:
1372	cmp	%i5,0
1373	bne	.cont23
1374
1375	cmp	counter,3
1376	ble	.cont23
1377	ld	[TBL+TBL_SHIFT+44],%f2
1378
1379	sub	counter,3,counter
1380	st	counter,[%fp+tmp_counter]
1381
1382	stx	%g5,[%fp+tmp_px]
1383
1384	stx	%o3,[%fp+tmp_py]
1385	ba	.cont23
1386	mov	3,counter
1387
1388	.align	16
1389.update24:
1390	cmp	counter,4
1391	ble	.cont24
1392	ld	[TBL+TBL_SHIFT+44],%f2
1393
1394	sub	counter,4,counter
1395	st	counter,[%fp+tmp_counter]
1396
1397	stx	%i4,[%fp+tmp_px]
1398
1399	stx	%i2,[%fp+tmp_py]
1400	ba	.cont24
1401	mov	4,counter
1402
1403	.align	16
1404.update25:
1405	cmp	counter,4
1406	ble	.cont25
1407	ld	[TBL+TBL_SHIFT+44],%f4
1408
1409	sub	counter,4,counter
1410	st	counter,[%fp+tmp_counter]
1411
1412	stx	%i4,[%fp+tmp_px]
1413
1414	stx	%i2,[%fp+tmp_py]
1415	ba	.cont25
1416	mov	4,counter
1417
1418	.align	16
1419.update26:
1420	cmp	%i5,0
1421	bne	.cont26
1422
1423	cmp	counter,4
1424	ble	.cont26
1425	ld	[TBL+TBL_SHIFT+44],%f2
1426
1427	sub	counter,4,counter
1428	st	counter,[%fp+tmp_counter]
1429
1430	stx	%i4,[%fp+tmp_px]
1431
1432	stx	%i2,[%fp+tmp_py]
1433	ba	.cont26
1434	mov	4,counter
1435
1436	.align	16
1437.update27:
1438	cmp	counter,5
1439	ble	.cont27
1440	ld	[TBL+TBL_SHIFT+44],%f2
1441
1442	sub	counter,5,counter
1443	st	counter,[%fp+tmp_counter]
1444
1445	stx	%o4,[%fp+tmp_px]
1446
1447	stx	%i2,[%fp+tmp_py]
1448	ba	.cont27
1449	mov	5,counter
1450
1451	.align	16
1452.update28:
1453	cmp	counter,5
1454	ble	.cont28
1455	ld	[TBL+TBL_SHIFT+44],%f4
1456
1457	sub	counter,5,counter
1458	st	counter,[%fp+tmp_counter]
1459
1460	stx	%o4,[%fp+tmp_px]
1461
1462	stx	%i2,[%fp+tmp_py]
1463	ba	.cont28
1464	mov	5,counter
1465
1466	.align	16
1467.update29:
1468	cmp	%i5,0
1469	bne	.cont29
1470
1471	cmp	counter,5
1472	ble	.cont29
1473	ld	[TBL+TBL_SHIFT+44],%f2
1474
1475	sub	counter,5,counter
1476	st	counter,[%fp+tmp_counter]
1477
1478	stx	%o4,[%fp+tmp_px]
1479
1480	stx	%i2,[%fp+tmp_py]
1481	ba	.cont29
1482	mov	5,counter
1483
1484	.align	16
1485.update30:
1486	cmp	counter,6
1487	ble	.cont30
1488	ld	[TBL+TBL_SHIFT+44],%f2
1489
1490	sub	counter,6,counter
1491	st	counter,[%fp+tmp_counter]
1492
1493	stx	%l0,[%fp+tmp_px]
1494
1495	stx	%i2,[%fp+tmp_py]
1496	ba	.cont30
1497	mov	6,counter
1498
1499	.align	16
1500.update31:
1501	cmp	counter,6
1502	ble	.cont31
1503	ld	[TBL+TBL_SHIFT+44],%f4
1504
1505	sub	counter,6,counter
1506	st	counter,[%fp+tmp_counter]
1507
1508	stx	%l0,[%fp+tmp_px]
1509
1510	stx	%i2,[%fp+tmp_py]
1511	ba	.cont31
1512	mov	6,counter
1513
1514	.align	16
1515.exit:
1516	ret
1517	restore
1518	SET_SIZE(__vrhypotf)
1519
1520