1*25c28e83SPiotr Jasiukajtis/*
2*25c28e83SPiotr Jasiukajtis * CDDL HEADER START
3*25c28e83SPiotr Jasiukajtis *
4*25c28e83SPiotr Jasiukajtis * The contents of this file are subject to the terms of the
5*25c28e83SPiotr Jasiukajtis * Common Development and Distribution License (the "License").
6*25c28e83SPiotr Jasiukajtis * You may not use this file except in compliance with the License.
7*25c28e83SPiotr Jasiukajtis *
8*25c28e83SPiotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*25c28e83SPiotr Jasiukajtis * or http://www.opensolaris.org/os/licensing.
10*25c28e83SPiotr Jasiukajtis * See the License for the specific language governing permissions
11*25c28e83SPiotr Jasiukajtis * and limitations under the License.
12*25c28e83SPiotr Jasiukajtis *
13*25c28e83SPiotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each
14*25c28e83SPiotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*25c28e83SPiotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the
16*25c28e83SPiotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying
17*25c28e83SPiotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner]
18*25c28e83SPiotr Jasiukajtis *
19*25c28e83SPiotr Jasiukajtis * CDDL HEADER END
20*25c28e83SPiotr Jasiukajtis */
21*25c28e83SPiotr Jasiukajtis/*
22*25c28e83SPiotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23*25c28e83SPiotr Jasiukajtis */
24*25c28e83SPiotr Jasiukajtis/*
25*25c28e83SPiotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
26*25c28e83SPiotr Jasiukajtis * Use is subject to license terms.
27*25c28e83SPiotr Jasiukajtis */
28*25c28e83SPiotr Jasiukajtis
29*25c28e83SPiotr Jasiukajtis	.file	"__vlogf.S"
30*25c28e83SPiotr Jasiukajtis
31*25c28e83SPiotr Jasiukajtis#include "libm.h"
32*25c28e83SPiotr Jasiukajtis
33*25c28e83SPiotr Jasiukajtis	RO_DATA
34*25c28e83SPiotr Jasiukajtis	.align	64
35*25c28e83SPiotr Jasiukajtis!! CONST_TBL[2*i]   = 127*log(2) - log(1+i/32), i = [0, 32]
36*25c28e83SPiotr Jasiukajtis!! CONST_TBL[2*i+1] = 2**(-23)/(1+i/32),        i = [0, 32]
37*25c28e83SPiotr Jasiukajtis
38*25c28e83SPiotr Jasiukajtis.CONST_TBL:
39*25c28e83SPiotr Jasiukajtis	.word  	0x405601e6, 	0x78fc457b, 	0x3e800000, 	0x00000000,
40*25c28e83SPiotr Jasiukajtis	.word  	0x4055ffee, 	0x4f4b5df8,	0x3e7f07c1,	0xf07c1f08,
41*25c28e83SPiotr Jasiukajtis	.word	0x4055fe05,	0x32e4434f,	0x3e7e1e1e,	0x1e1e1e1e,
42*25c28e83SPiotr Jasiukajtis	.word	0x4055fc2a,	0x44598c21,	0x3e7d41d4,	0x1d41d41d,
43*25c28e83SPiotr Jasiukajtis	.word	0x4055fa5c,	0xb720babf,	0x3e7c71c7,	0x1c71c71c,
44*25c28e83SPiotr Jasiukajtis	.word	0x4055f89b,	0xcf803581,	0x3e7bacf9,	0x14c1bad0,
45*25c28e83SPiotr Jasiukajtis	.word	0x4055f6e6,	0xe0c3f1b1,	0x3e7af286,	0xbca1af28,
46*25c28e83SPiotr Jasiukajtis	.word	0x4055f53d,	0x4badcb50,	0x3e7a41a4,	0x1a41a41a,
47*25c28e83SPiotr Jasiukajtis	.word	0x4055f39e,	0x7d18782e,	0x3e799999,	0x9999999a,
48*25c28e83SPiotr Jasiukajtis	.word	0x4055f209,	0xecc5965c,	0x3e78f9c1,	0x8f9c18fa,
49*25c28e83SPiotr Jasiukajtis	.word	0x4055f07f,	0x1c5099d5,	0x3e786186,	0x18618618,
50*25c28e83SPiotr Jasiukajtis	.word	0x4055eefd,	0x9641645e,	0x3e77d05f,	0x417d05f4,
51*25c28e83SPiotr Jasiukajtis	.word	0x4055ed84,	0xed3a291d,	0x3e7745d1,	0x745d1746,
52*25c28e83SPiotr Jasiukajtis	.word	0x4055ec14,	0xbb3ced72,	0x3e76c16c,	0x16c16c17,
53*25c28e83SPiotr Jasiukajtis	.word	0x4055eaac,	0xa10589ab,	0x3e7642c8,	0x590b2164,
54*25c28e83SPiotr Jasiukajtis	.word	0x4055e94c,	0x45758439,	0x3e75c988,	0x2b931057,
55*25c28e83SPiotr Jasiukajtis	.word	0x4055e7f3,	0x550f85e3,	0x3e755555,	0x55555555,
56*25c28e83SPiotr Jasiukajtis	.word	0x4055e6a1,	0x818078ec,	0x3e74e5e0,	0xa72f0539,
57*25c28e83SPiotr Jasiukajtis	.word	0x4055e556,	0x8134aae1,	0x3e747ae1,	0x47ae147b,
58*25c28e83SPiotr Jasiukajtis	.word	0x4055e412,	0x0ef783b7,	0x3e741414,	0x14141414,
59*25c28e83SPiotr Jasiukajtis	.word	0x4055e2d3,	0xe99c9674,	0x3e73b13b,	0x13b13b14,
60*25c28e83SPiotr Jasiukajtis	.word	0x4055e19b,	0xd3b0f9d9,	0x3e73521c,	0xfb2b78c1,
61*25c28e83SPiotr Jasiukajtis	.word	0x4055e069,	0x9333fb26,	0x3e72f684,	0xbda12f68,
62*25c28e83SPiotr Jasiukajtis	.word	0x4055df3c,	0xf1565bd0,	0x3e729e41,	0x29e4129e,
63*25c28e83SPiotr Jasiukajtis	.word	0x4055de15,	0xba3f64fa,	0x3e724924,	0x92492492,
64*25c28e83SPiotr Jasiukajtis	.word	0x4055dcf3,	0xbcd73219,	0x3e71f704,	0x7dc11f70,
65*25c28e83SPiotr Jasiukajtis	.word	0x4055dbd6,	0xca95a75a,	0x3e71a7b9,	0x611a7b96,
66*25c28e83SPiotr Jasiukajtis	.word	0x4055dabe,	0xb7559927,	0x3e715b1e,	0x5f75270d,
67*25c28e83SPiotr Jasiukajtis	.word	0x4055d9ab,	0x592bb896,	0x3e711111,	0x11111111,
68*25c28e83SPiotr Jasiukajtis	.word	0x4055d89c,	0x8840e4fe,	0x3e70c971,	0x4fbcda3b,
69*25c28e83SPiotr Jasiukajtis	.word	0x4055d792,	0x1eaf8df0,	0x3e708421,	0x08421084,
70*25c28e83SPiotr Jasiukajtis	.word	0x4055d68b,	0xf863da3d,	0x3e704104,	0x10410410,
71*25c28e83SPiotr Jasiukajtis	.word	0x4055d589,	0xf2fe5107,	0x3e700000,	0x00000000,
72*25c28e83SPiotr Jasiukajtis	.word	0xbfcffb16,	0xbfa3db6e,	! K3 = -2.49850123953105416108e-01
73*25c28e83SPiotr Jasiukajtis	.word	0x3fd5561b,	0xa4b3110b,	! K2 =  3.33380614127478394992e-01
74*25c28e83SPiotr Jasiukajtis	.word	0xbfe00000,	0x0b666d0b,	! K1 = -5.00000021234343492201e-01
75*25c28e83SPiotr Jasiukajtis	.word	0x3fefffff,	0xff3fd118,	! K0 =  9.99999998601683029714e-01
76*25c28e83SPiotr Jasiukajtis	.word	0x3fe62e42,	0xfefa39ef,	! LN2 = 6.931471805599452862e-01
77*25c28e83SPiotr Jasiukajtis	.word	0xbf800000,	0x7f800000,	! MONE = -1.0f ;    INF
78*25c28e83SPiotr Jasiukajtis
79*25c28e83SPiotr Jasiukajtis! local storage indices
80*25c28e83SPiotr Jasiukajtis#define tmp0		STACK_BIAS-0x8
81*25c28e83SPiotr Jasiukajtis#define tmp1		STACK_BIAS-0x10
82*25c28e83SPiotr Jasiukajtis#define tmp2		STACK_BIAS-0x18
83*25c28e83SPiotr Jasiukajtis#define tmp3		STACK_BIAS-0x20
84*25c28e83SPiotr Jasiukajtis#define tmp4		STACK_BIAS-0x28
85*25c28e83SPiotr Jasiukajtis#define tmp5		STACK_BIAS-0x30
86*25c28e83SPiotr Jasiukajtis! sizeof temp storage - must be a multiple of 16 for V9
87*25c28e83SPiotr Jasiukajtis#define tmps		0x30
88*25c28e83SPiotr Jasiukajtis
89*25c28e83SPiotr Jasiukajtis#define ZERO		%f28
90*25c28e83SPiotr Jasiukajtis#define K3		%f30
91*25c28e83SPiotr Jasiukajtis#define K2		%f32
92*25c28e83SPiotr Jasiukajtis#define K1		%f34
93*25c28e83SPiotr Jasiukajtis#define K0		%f36
94*25c28e83SPiotr Jasiukajtis#define LN2		%f38
95*25c28e83SPiotr Jasiukajtis
96*25c28e83SPiotr Jasiukajtis#define stridex		%o0
97*25c28e83SPiotr Jasiukajtis#define stridex2	%o1
98*25c28e83SPiotr Jasiukajtis#define stridey		%o2
99*25c28e83SPiotr Jasiukajtis#define x0		%o3
100*25c28e83SPiotr Jasiukajtis#define x1		%o4
101*25c28e83SPiotr Jasiukajtis#define y		%o5
102*25c28e83SPiotr Jasiukajtis
103*25c28e83SPiotr Jasiukajtis#define ind0		%i0
104*25c28e83SPiotr Jasiukajtis#define ind1		%i1
105*25c28e83SPiotr Jasiukajtis#define ind2		%i2
106*25c28e83SPiotr Jasiukajtis#define ind3		%i3
107*25c28e83SPiotr Jasiukajtis#define MASK_0x007fffff	%i4
108*25c28e83SPiotr Jasiukajtis#define MASK_0xfffc0000	%i5
109*25c28e83SPiotr Jasiukajtis#define CONST_0x20000	%o7
110*25c28e83SPiotr Jasiukajtis#define MASK_0x7f800000	%l3
111*25c28e83SPiotr Jasiukajtis
112*25c28e83SPiotr Jasiukajtis#define ival0		%l0
113*25c28e83SPiotr Jasiukajtis#define iy0		%l1
114*25c28e83SPiotr Jasiukajtis#define ival1		%l2
115*25c28e83SPiotr Jasiukajtis#define iy1		%l1
116*25c28e83SPiotr Jasiukajtis#define ival2		%l4
117*25c28e83SPiotr Jasiukajtis#define iy2		%l5
118*25c28e83SPiotr Jasiukajtis#define ival3		%l6
119*25c28e83SPiotr Jasiukajtis#define iy3		%l2
120*25c28e83SPiotr Jasiukajtis#define counter		%l7
121*25c28e83SPiotr Jasiukajtis
122*25c28e83SPiotr Jasiukajtis#define LOGFTBL		%g5
123*25c28e83SPiotr Jasiukajtis#define LOGFTBL_P8	%g1
124*25c28e83SPiotr Jasiukajtis
125*25c28e83SPiotr Jasiukajtis! register use
126*25c28e83SPiotr Jasiukajtis
127*25c28e83SPiotr Jasiukajtis! i0  ind0
128*25c28e83SPiotr Jasiukajtis! i1  ind1
129*25c28e83SPiotr Jasiukajtis! i2  ind2
130*25c28e83SPiotr Jasiukajtis! i3  ind3
131*25c28e83SPiotr Jasiukajtis! i4  0x007fffff
132*25c28e83SPiotr Jasiukajtis! i5  0xfffc0000
133*25c28e83SPiotr Jasiukajtis
134*25c28e83SPiotr Jasiukajtis! l0  ival0
135*25c28e83SPiotr Jasiukajtis! l1  iy0, iy1
136*25c28e83SPiotr Jasiukajtis! l2  ival1, iy3
137*25c28e83SPiotr Jasiukajtis! l3  0x7f800000
138*25c28e83SPiotr Jasiukajtis! l4  ival2
139*25c28e83SPiotr Jasiukajtis! l5  iy2
140*25c28e83SPiotr Jasiukajtis! l6  ival3
141*25c28e83SPiotr Jasiukajtis! l7  cycle counter
142*25c28e83SPiotr Jasiukajtis
143*25c28e83SPiotr Jasiukajtis! o0  stridex
144*25c28e83SPiotr Jasiukajtis! o1  stridex * 2
145*25c28e83SPiotr Jasiukajtis! o2  stridey
146*25c28e83SPiotr Jasiukajtis! o3  x
147*25c28e83SPiotr Jasiukajtis! o4  x
148*25c28e83SPiotr Jasiukajtis! o5  y
149*25c28e83SPiotr Jasiukajtis! o7  0x20000
150*25c28e83SPiotr Jasiukajtis
151*25c28e83SPiotr Jasiukajtis! g1  CONST_TBL
152*25c28e83SPiotr Jasiukajtis! g5  CONST_TBL + 8
153*25c28e83SPiotr Jasiukajtis
154*25c28e83SPiotr Jasiukajtis! f2
155*25c28e83SPiotr Jasiukajtis! f4
156*25c28e83SPiotr Jasiukajtis! f6
157*25c28e83SPiotr Jasiukajtis! f8
158*25c28e83SPiotr Jasiukajtis! f9
159*25c28e83SPiotr Jasiukajtis! f10
160*25c28e83SPiotr Jasiukajtis! f12
161*25c28e83SPiotr Jasiukajtis! f14
162*25c28e83SPiotr Jasiukajtis! f16
163*25c28e83SPiotr Jasiukajtis! f18
164*25c28e83SPiotr Jasiukajtis! f19
165*25c28e83SPiotr Jasiukajtis! f20
166*25c28e83SPiotr Jasiukajtis! f22
167*25c28e83SPiotr Jasiukajtis! f24
168*25c28e83SPiotr Jasiukajtis! f26
169*25c28e83SPiotr Jasiukajtis! f28 ZERO = 0
170*25c28e83SPiotr Jasiukajtis! f30 K3 = -2.49850123953105416108e-01
171*25c28e83SPiotr Jasiukajtis! f32 K2 =  3.33380614127478394992e-01
172*25c28e83SPiotr Jasiukajtis! f34 K1 = -5.00000021234343492201e-01
173*25c28e83SPiotr Jasiukajtis! f36 K0 =  9.99999998601683029714e-01
174*25c28e83SPiotr Jasiukajtis! f38 LN2 = 6.931471805599452862e-01
175*25c28e83SPiotr Jasiukajtis! f40
176*25c28e83SPiotr Jasiukajtis! f42
177*25c28e83SPiotr Jasiukajtis! f44
178*25c28e83SPiotr Jasiukajtis! f46
179*25c28e83SPiotr Jasiukajtis! f48
180*25c28e83SPiotr Jasiukajtis! f50
181*25c28e83SPiotr Jasiukajtis! f52
182*25c28e83SPiotr Jasiukajtis! f54
183*25c28e83SPiotr Jasiukajtis! f56
184*25c28e83SPiotr Jasiukajtis! f58
185*25c28e83SPiotr Jasiukajtis! f60
186*25c28e83SPiotr Jasiukajtis! f62
187*25c28e83SPiotr Jasiukajtis
188*25c28e83SPiotr Jasiukajtis
189*25c28e83SPiotr Jasiukajtis!  !!!!!  Algorithm   !!!!!
190*25c28e83SPiotr Jasiukajtis!
191*25c28e83SPiotr Jasiukajtis!  double exp, ty, yy, ldtmp0, ldtmp1;
192*25c28e83SPiotr Jasiukajtis!  double dtmp0, dtmp1, dtmp2, dtmp3, dtmp4, dtmp5;
193*25c28e83SPiotr Jasiukajtis!  float  value;
194*25c28e83SPiotr Jasiukajtis!  int    ival, iy, i, ind, iexp;
195*25c28e83SPiotr Jasiukajtis!  double K3   = -2.49850123953105416108e-01;
196*25c28e83SPiotr Jasiukajtis!  double K2   =  3.33380614127478394992e-01;
197*25c28e83SPiotr Jasiukajtis!  double K1   = -5.00000021234343492201e-01;
198*25c28e83SPiotr Jasiukajtis!  double K0   =  9.99999998601683029714e-01;
199*25c28e83SPiotr Jasiukajtis!  double LN2  =  6.931471805599452862e-01;
200*25c28e83SPiotr Jasiukajtis!  double ZERO =  0;
201*25c28e83SPiotr Jasiukajtis!  float  INF;
202*25c28e83SPiotr Jasiukajtis!
203*25c28e83SPiotr Jasiukajtis!  ival = *(int*)(x);
204*25c28e83SPiotr Jasiukajtis!  if (ival >= 0x7f800000) goto spec;
205*25c28e83SPiotr Jasiukajtis!  if (ival <= 0x7fffff) goto spec;
206*25c28e83SPiotr Jasiukajtis!  *(float*)&*(float*)&exp = *(float*)(x);
207*25c28e83SPiotr Jasiukajtis!  exp = vis_fpack32(ZERO, exp);
208*25c28e83SPiotr Jasiukajtis!  iy = ival & 0x007fffff;
209*25c28e83SPiotr Jasiukajtis!  ival = iy + 0x20000;
210*25c28e83SPiotr Jasiukajtis!  ival = ival & 0xfffc0000;
211*25c28e83SPiotr Jasiukajtis!  i  = ival >> 14;
212*25c28e83SPiotr Jasiukajtis!  ind  = i & (-8);
213*25c28e83SPiotr Jasiukajtis!  iy = iy - ival;
214*25c28e83SPiotr Jasiukajtis!  ty = LN2 * (double)(*(int*)&exp);
215*25c28e83SPiotr Jasiukajtis!  ldtmp0 = *(double*)((char*)CONST_TBL+ind);
216*25c28e83SPiotr Jasiukajtis!  ldtmp1 = *(double*)((char*)CONST_TBL+ind+8);
217*25c28e83SPiotr Jasiukajtis!  ty = ty - ldtmp0;
218*25c28e83SPiotr Jasiukajtis!  yy = (double) iy;
219*25c28e83SPiotr Jasiukajtis!  yy = yy * ldtmp1;
220*25c28e83SPiotr Jasiukajtis!  dtmp0 = K3 * yy;
221*25c28e83SPiotr Jasiukajtis!  dtmp1 = dtmp0 + K2;
222*25c28e83SPiotr Jasiukajtis!  dtmp2 = dtmp1 * yy;
223*25c28e83SPiotr Jasiukajtis!  dtmp3 = dtmp2 + K1;
224*25c28e83SPiotr Jasiukajtis!  dtmp4 = dtmp3 * yy;
225*25c28e83SPiotr Jasiukajtis!  dtmp5 = dtmp4 + K0;
226*25c28e83SPiotr Jasiukajtis!  yy    = dtmp5 * yy;
227*25c28e83SPiotr Jasiukajtis!  yy    = yy + ty;
228*25c28e83SPiotr Jasiukajtis!  y[0] = (float)(yy);
229*25c28e83SPiotr Jasiukajtis!  return;
230*25c28e83SPiotr Jasiukajtis!
231*25c28e83SPiotr Jasiukajtis!spec:
232*25c28e83SPiotr Jasiukajtis!  if ((ival & 0x7fffffff) >= 0x7f800000) { /* X = NaN or Inf */
233*25c28e83SPiotr Jasiukajtis!    value = *(float*) &ival;
234*25c28e83SPiotr Jasiukajtis!    y[0] = (value < 0.0f? 0.0f : value) * value;
235*25c28e83SPiotr Jasiukajtis!    return;
236*25c28e83SPiotr Jasiukajtis!  } else if (ival <= 0) {
237*25c28e83SPiotr Jasiukajtis!    y[0] = ((ival & 0x7fffffff) == 0) ?
238*25c28e83SPiotr Jasiukajtis!      -1.0f / 0f. : 0f. /0f.;      /* X = +-0 : X < 0 */
239*25c28e83SPiotr Jasiukajtis!    return;
240*25c28e83SPiotr Jasiukajtis!  } else { /* Denom. number */
241*25c28e83SPiotr Jasiukajtis!    value = (float) ival;
242*25c28e83SPiotr Jasiukajtis!    ival = *(int*) &value;
243*25c28e83SPiotr Jasiukajtis!    iexp = (ival >> 23) - 149;
244*25c28e83SPiotr Jasiukajtis!    iy = ival & 0x007fffff;
245*25c28e83SPiotr Jasiukajtis!    ival = iy + 0x20000;
246*25c28e83SPiotr Jasiukajtis!    ival = ival & 0xfffc0000;
247*25c28e83SPiotr Jasiukajtis!    i  = ival >> 14;
248*25c28e83SPiotr Jasiukajtis!    ind  = i & (-8);
249*25c28e83SPiotr Jasiukajtis!    iy = iy - ival;
250*25c28e83SPiotr Jasiukajtis!    ty = LN2 * (double)iexp;
251*25c28e83SPiotr Jasiukajtis!    ldtmp0 = *(double*)((char*)CONST_TBL+ind);
252*25c28e83SPiotr Jasiukajtis!    ldtmp1 = *(double*)((char*)CONST_TBL+ind+8);
253*25c28e83SPiotr Jasiukajtis!    ty = ty - ldtmp0;
254*25c28e83SPiotr Jasiukajtis!    yy = (double) iy;
255*25c28e83SPiotr Jasiukajtis!    yy = yy * ldtmp1;
256*25c28e83SPiotr Jasiukajtis!    dtmp0 = K3 * yy;
257*25c28e83SPiotr Jasiukajtis!    dtmp1 = dtmp0 + K2;
258*25c28e83SPiotr Jasiukajtis!    dtmp2 = dtmp1 * yy;
259*25c28e83SPiotr Jasiukajtis!    dtmp3 = dtmp2 + K1;
260*25c28e83SPiotr Jasiukajtis!    dtmp4 = dtmp3 * yy;
261*25c28e83SPiotr Jasiukajtis!    dtmp5 = dtmp4 + K0;
262*25c28e83SPiotr Jasiukajtis!    yy    = dtmp5 * yy;
263*25c28e83SPiotr Jasiukajtis!    yy    = yy + ty;
264*25c28e83SPiotr Jasiukajtis!    y[0] = (float)(yy);
265*25c28e83SPiotr Jasiukajtis!    return;
266*25c28e83SPiotr Jasiukajtis!  }
267*25c28e83SPiotr Jasiukajtis!--------------------------------------------------------------------
268*25c28e83SPiotr Jasiukajtis
269*25c28e83SPiotr Jasiukajtis	ENTRY(__vlogf)
270*25c28e83SPiotr Jasiukajtis	save	%sp,-SA(MINFRAME)-tmps,%sp
271*25c28e83SPiotr Jasiukajtis	PIC_SETUP(l7)
272*25c28e83SPiotr Jasiukajtis	PIC_SET(l7,.CONST_TBL,g5)
273*25c28e83SPiotr Jasiukajtis	wr	%g0,0,%gsr
274*25c28e83SPiotr Jasiukajtis
275*25c28e83SPiotr Jasiukajtis	st	%i0,[%fp+tmp0]
276*25c28e83SPiotr Jasiukajtis	stx	%i1,[%fp+tmp5]
277*25c28e83SPiotr Jasiukajtis
278*25c28e83SPiotr Jasiukajtis	sra	%i2,0,%l4
279*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+528],K3
280*25c28e83SPiotr Jasiukajtis	add	%i3,0,y
281*25c28e83SPiotr Jasiukajtis	sllx	%l4,2,stridex
282*25c28e83SPiotr Jasiukajtis	sllx	%l4,3,stridex2
283*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+536],K2
284*25c28e83SPiotr Jasiukajtis	sra	%i4,0,%l3
285*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+544],K1
286*25c28e83SPiotr Jasiukajtis	sllx	%l3,2,stridey
287*25c28e83SPiotr Jasiukajtis	sethi	%hi(0x7ffc00),MASK_0x007fffff
288*25c28e83SPiotr Jasiukajtis	add	MASK_0x007fffff,1023,MASK_0x007fffff
289*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+552],K0
290*25c28e83SPiotr Jasiukajtis	sethi	%hi(0xfffc0000),MASK_0xfffc0000
291*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+560],LN2
292*25c28e83SPiotr Jasiukajtis	sethi	%hi(0x20000),CONST_0x20000
293*25c28e83SPiotr Jasiukajtis	fzero	ZERO
294*25c28e83SPiotr Jasiukajtis	sethi	%hi(0x7f800000),MASK_0x7f800000
295*25c28e83SPiotr Jasiukajtis	sub	y,stridey,y
296*25c28e83SPiotr Jasiukajtis
297*25c28e83SPiotr Jasiukajtis.begin:
298*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp0],counter
299*25c28e83SPiotr Jasiukajtis	ldx	[%fp+tmp5],x0
300*25c28e83SPiotr Jasiukajtis	st	%g0,[%fp+tmp0]
301*25c28e83SPiotr Jasiukajtis.begin1:
302*25c28e83SPiotr Jasiukajtis	add	x0,stridex2,x1! x += 2*stridex
303*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter
304*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end
305*25c28e83SPiotr Jasiukajtis	lda	[x0]0x82,ival0			! (Y0_0) ival = *(int*)(x)
306*25c28e83SPiotr Jasiukajtis
307*25c28e83SPiotr Jasiukajtis	add	LOGFTBL,8,LOGFTBL_P8
308*25c28e83SPiotr Jasiukajtis	lda	[stridex+x0]0x82,ival1		! (Y1_0) ival = *(int*)(x)
309*25c28e83SPiotr Jasiukajtis
310*25c28e83SPiotr Jasiukajtis	cmp	ival0,MASK_0x7f800000		! (Y0_0) if (ival >= 0x7f800000)
311*25c28e83SPiotr Jasiukajtis	lda	[x1]0x82,ival2			! (Y2_0) ival = *(int*)(x);
312*25c28e83SPiotr Jasiukajtis
313*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.spec			! (Y0_0) if (ival >= 0x7f800000)
314*25c28e83SPiotr Jasiukajtis	nop
315*25c28e83SPiotr Jasiukajtis
316*25c28e83SPiotr Jasiukajtis	cmp	ival0,MASK_0x007fffff		! (Y0_0) if (ival <= 0x7fffff)
317*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.spec			! (Y0_0) if (ival <= 0x7fffff)
318*25c28e83SPiotr Jasiukajtis	nop
319*25c28e83SPiotr Jasiukajtis
320*25c28e83SPiotr Jasiukajtis	cmp	ival1,MASK_0x7f800000		! (Y1_0) if (ival >= 0x7f800000)
321*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0x007fffff,iy0	! (Y0_0) iy = ival & 0x007fffff
322*25c28e83SPiotr Jasiukajtis
323*25c28e83SPiotr Jasiukajtis
324*25c28e83SPiotr Jasiukajtis	add	iy0,CONST_0x20000,ival0		! (Y0_0) ival = iy + 0x20000
325*25c28e83SPiotr Jasiukajtis
326*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0xfffc0000,ival0	! (Y0_0) ival = ival & 0xfffc0000
327*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update2			! (Y1_0) if (ival >= 0x7f800000)
328*25c28e83SPiotr Jasiukajtis	nop
329*25c28e83SPiotr Jasiukajtis.cont2:
330*25c28e83SPiotr Jasiukajtis	sub	iy0,ival0,iy0			! (Y0_0) iy = iy - ival
331*25c28e83SPiotr Jasiukajtis	cmp	ival1,MASK_0x007fffff		! (Y1_0) if (ival <= 0x7fffff)
332*25c28e83SPiotr Jasiukajtis	lda	[stridex+x1]0x82,ival3		! (Y3_0) ival = *(int*)(x)
333*25c28e83SPiotr Jasiukajtis
334*25c28e83SPiotr Jasiukajtis	st	iy0,[%fp+tmp1]			! (Y0_0) (double) iy
335*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update3			! (Y1_0) if (ival <= 0x7fffff)
336*25c28e83SPiotr Jasiukajtis	nop
337*25c28e83SPiotr Jasiukajtis.cont3:
338*25c28e83SPiotr Jasiukajtis	cmp	ival2,MASK_0x7f800000		! (Y2_0) if (ival >= 0x7f800000)
339*25c28e83SPiotr Jasiukajtis	and	ival1,MASK_0x007fffff,iy1	! (Y1_0) iy = ival & 0x007fffff
340*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update4			! (Y2_0) if (ival >= 0x7f800000)
341*25c28e83SPiotr Jasiukajtis	nop
342*25c28e83SPiotr Jasiukajtis.cont4:
343*25c28e83SPiotr Jasiukajtis	cmp	ival2,MASK_0x007fffff		! (Y2_0) if (ival <= 0x7fffff)
344*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update5			! (Y2_0) if (ival <= 0x7fffff)
345*25c28e83SPiotr Jasiukajtis	nop
346*25c28e83SPiotr Jasiukajtis.cont5:
347*25c28e83SPiotr Jasiukajtis	add	iy1,CONST_0x20000,ival1		! (Y1_0) ival = iy + 0x20000
348*25c28e83SPiotr Jasiukajtis	and	ival2,MASK_0x007fffff,iy2	! (Y2_0) iy = ival & 0x007fffff
349*25c28e83SPiotr Jasiukajtis
350*25c28e83SPiotr Jasiukajtis	and	ival1,MASK_0xfffc0000,ival1	! (Y1_0) ival = ival & 0xfffc0000
351*25c28e83SPiotr Jasiukajtis	add	iy2,CONST_0x20000,ival2		! (Y2_0) ival = iy + 0x20000
352*25c28e83SPiotr Jasiukajtis
353*25c28e83SPiotr Jasiukajtis	sub	iy1,ival1,iy1			! (Y1_0) iy = iy - ival
354*25c28e83SPiotr Jasiukajtis	and	ival2,MASK_0xfffc0000,ival2	! (Y2_0) ival = ival & 0xfffc0000
355*25c28e83SPiotr Jasiukajtis
356*25c28e83SPiotr Jasiukajtis	cmp	ival3,MASK_0x7f800000		! (Y3_0) (ival >= 0x7f800000)
357*25c28e83SPiotr Jasiukajtis	sub	iy2,ival2,iy2			! (Y2_0) iy = iy - ival
358*25c28e83SPiotr Jasiukajtis	st 	iy1,[%fp+tmp3]			! (Y1_0) (double) iy
359*25c28e83SPiotr Jasiukajtis
360*25c28e83SPiotr Jasiukajtis	st	iy2,[%fp+tmp2]			! (Y2_0) (double) iy
361*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update6			! (Y3_0) (ival >= 0x7f800000)
362*25c28e83SPiotr Jasiukajtis	nop
363*25c28e83SPiotr Jasiukajtis.cont6:
364*25c28e83SPiotr Jasiukajtis	cmp	ival3,MASK_0x007fffff		! (Y3_0) if (ival <= 0x7fffff)
365*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp1],%f2			! (Y0_0) (double) iy
366*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update7			! (Y3_0) if (ival <= 0x7fffff)
367*25c28e83SPiotr Jasiukajtis	sra	ival0,14,ival0			! (Y0_0) i  = ival >> 14;
368*25c28e83SPiotr Jasiukajtis.cont7:
369*25c28e83SPiotr Jasiukajtis	sra	ival1,14,ind1			! (Y1_0) i  = ival >> 14;
370*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp3],%f4			! (Y1_0) (double) iy
371*25c28e83SPiotr Jasiukajtis
372*25c28e83SPiotr Jasiukajtis	sra	ival2,14,ival2			! (Y2_0) i  = ival >> 14;
373*25c28e83SPiotr Jasiukajtis	and	ival0,-8,ind0			! (Y0_0) ind  = i & (-8)
374*25c28e83SPiotr Jasiukajtis	lda	[x0]0x82,%f6			! (Y0_0) *(float*)&exp = *(float*)(x)
375*25c28e83SPiotr Jasiukajtis
376*25c28e83SPiotr Jasiukajtis	and	ind1,-8,ind1			! (Y1_0) ind  = i & (-8)
377*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind0],%f14		! (Y0_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
378*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			! (Y0_0) yy = (double) iy
379*25c28e83SPiotr Jasiukajtis
380*25c28e83SPiotr Jasiukajtis	and	ival3,MASK_0x007fffff,iy3	! (Y3_0) iy = ival & 0x007fffff
381*25c28e83SPiotr Jasiukajtis	lda	[stridex+x0]0x82,%f8		! (Y1_0) *(float*)&exp = *(float*)(x)
382*25c28e83SPiotr Jasiukajtis
383*25c28e83SPiotr Jasiukajtis	add	iy3,CONST_0x20000,ival3		! (Y3_0) iy + 0x20000
384*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind1],%f16		! (Y1_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
385*25c28e83SPiotr Jasiukajtis	fitod	%f4,%f26			! (Y1_0) yy = (double) iy
386*25c28e83SPiotr Jasiukajtis
387*25c28e83SPiotr Jasiukajtis	sub	y,stridey,y			! y += stridey
388*25c28e83SPiotr Jasiukajtis	and	ival3,MASK_0xfffc0000,ival3	! (Y3_0) ival = ival & 0xfffc0000
389*25c28e83SPiotr Jasiukajtis	lda	[x1]0x82,%f10			! (Y2_0) *(float*)&exp = *(float*)(x)
390*25c28e83SPiotr Jasiukajtis
391*25c28e83SPiotr Jasiukajtis	add	x1,stridex2,x0			! x += 2*stridex
392*25c28e83SPiotr Jasiukajtis	sub	iy3,ival3,iy3			! (Y3_0) iy = iy - ival
393*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp2],%f2			! (Y2_0) (double) iy
394*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f46			! (Y0_0) yy = yy * ldtmp1
395*25c28e83SPiotr Jasiukajtis
396*25c28e83SPiotr Jasiukajtis	lda	[stridex+x1]0x82,%f12		! (Y3_0) *(float*)&exp = *(float*)(x)
397*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f16,%f62			! (Y1_0) yy = yy * ldtmp1
398*25c28e83SPiotr Jasiukajtis
399*25c28e83SPiotr Jasiukajtis	sra	ival3,14,ival3			! (Y3_0) i  = ival >> 14;
400*25c28e83SPiotr Jasiukajtis	lda	[x0]0x82,ival0			! (Y0_1) ival = *(int*)(x)
401*25c28e83SPiotr Jasiukajtis
402*25c28e83SPiotr Jasiukajtis	add	x0,stridex2,x1			! x += 2*stridex
403*25c28e83SPiotr Jasiukajtis	st	iy3,[%fp+tmp3]			! (Y3_0) (double) iy
404*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f46,%f22			! (Y0_0) dtmp0 = K3 * yy
405*25c28e83SPiotr Jasiukajtis
406*25c28e83SPiotr Jasiukajtis	and	ival2,-8,ind2			! (Y2_0) ind  = i & (-8)
407*25c28e83SPiotr Jasiukajtis	lda	[stridex+x0]0x82,ival1		! (Y1_1) ival = *(int*)(x)
408*25c28e83SPiotr Jasiukajtis
409*25c28e83SPiotr Jasiukajtis	cmp	ival0,MASK_0x7f800000		! (Y0_1) if (ival >= 0x7f800000)
410*25c28e83SPiotr Jasiukajtis	lda	[x1]0x82,ival2			! (Y2_1) ival = *(int*)(x);
411*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f62,%f50			! (Y1_0) dtmp0 = K3 * yy
412*25c28e83SPiotr Jasiukajtis
413*25c28e83SPiotr Jasiukajtis	bge,pn  %icc,.update8			! (Y0_1) if (ival >= 0x7f800000)
414*25c28e83SPiotr Jasiukajtis	nop
415*25c28e83SPiotr Jasiukajtis.cont8:
416*25c28e83SPiotr Jasiukajtis	cmp	ival0,MASK_0x007fffff		! (Y0_1) if (ival <= 0x7fffff)
417*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update9			! (Y0_1) if (ival <= 0x7fffff)
418*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			! (Y0_0) dtmp1 = dtmp0 + K2
419*25c28e83SPiotr Jasiukajtis
420*25c28e83SPiotr Jasiukajtis.cont9:
421*25c28e83SPiotr Jasiukajtis	cmp	ival1,MASK_0x7f800000		! (Y1_1) if (ival >= 0x7f800000)
422*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0x007fffff,iy0	! (Y0_1) iy = ival & 0x007fffff
423*25c28e83SPiotr Jasiukajtis
424*25c28e83SPiotr Jasiukajtis	add	iy0,CONST_0x20000,ival0		! (Y0_1) ival = iy + 0x20000
425*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind2],%f14		! (Y2_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8);
426*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f6,%f6			! (Y0_0) exp = vis_fpack32(ZERO, exp)
427*25c28e83SPiotr Jasiukajtis
428*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0xfffc0000,ival0	! (Y0_1) ival = ival & 0xfffc0000
429*25c28e83SPiotr Jasiukajtis	faddd	%f50,K2,%f26			! (Y1_0) dtmp1 = dtmp0 + K2
430*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update10			! (Y1_1) if (ival >= 0x7f800000)
431*25c28e83SPiotr Jasiukajtis	nop
432*25c28e83SPiotr Jasiukajtis.cont10:
433*25c28e83SPiotr Jasiukajtis	sub	iy0,ival0,iy0			! (Y0_1) iy = iy - ival
434*25c28e83SPiotr Jasiukajtis	and	ival3,-8,ind3			! (Y3_0) ind  = i & (-8)
435*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp3],%f4			! (Y3_0) (double) iy
436*25c28e83SPiotr Jasiukajtis
437*25c28e83SPiotr Jasiukajtis	cmp	ival1,MASK_0x007fffff		! (Y1_1) if (ival <= 0x7fffff)
438*25c28e83SPiotr Jasiukajtis	lda	[stridex+x1]0x82,ival3		! (Y3_1) ival = *(int*)(x)
439*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f46,%f50			! (Y0_0) dtmp2 = dtmp1 * yy
440*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			! (Y2_0) yy = (double) iy
441*25c28e83SPiotr Jasiukajtis
442*25c28e83SPiotr Jasiukajtis	st	iy0,[%fp+tmp1]			! (Y0_1) (double) iy
443*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update11			! (Y1_1) if (ival <= 0x7fffff)
444*25c28e83SPiotr Jasiukajtis	nop
445*25c28e83SPiotr Jasiukajtis.cont11:
446*25c28e83SPiotr Jasiukajtis	cmp	ival2,MASK_0x7f800000		! (Y2_1) if (ival >= 0x7f800000)
447*25c28e83SPiotr Jasiukajtis	and	ival1,MASK_0x007fffff,iy1	! (Y1_1) iy = ival & 0x007fffff
448*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update12			! (Y2_1) if (ival >= 0x7f800000)
449*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f62,%f42			! (Y1_0) dtmp2 = dtmp1 * yy
450*25c28e83SPiotr Jasiukajtis.cont12:
451*25c28e83SPiotr Jasiukajtis	cmp	ival2,MASK_0x007fffff		! (Y2_1) if (ival <= 0x7fffff)
452*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind3],%f16		! (Y3_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
453*25c28e83SPiotr Jasiukajtis	ble,pn 	%icc,.update13			! (Y2_1) if (ival <= 0x7fffff)
454*25c28e83SPiotr Jasiukajtis	fitod	%f4,%f26			! (Y3_0) yy = (double) iy
455*25c28e83SPiotr Jasiukajtis.cont13:
456*25c28e83SPiotr Jasiukajtis	add	iy1,CONST_0x20000,ival1		! (Y1_1) ival = iy + 0x20000
457*25c28e83SPiotr Jasiukajtis	and	ival2,MASK_0x007fffff,iy2	! (Y2_1) iy = ival & 0x007fffff
458*25c28e83SPiotr Jasiukajtis
459*25c28e83SPiotr Jasiukajtis	and	ival1,MASK_0xfffc0000,ival1	! (Y1_1) ival = ival & 0xfffc0000
460*25c28e83SPiotr Jasiukajtis	add	iy2,CONST_0x20000,ival2		! (Y2_1) ival = iy + 0x20000
461*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f44			! (Y2_0) yy = yy * ldtmp1
462*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			! (Y0_0) dtmp3 = dtmp2 + K1
463*25c28e83SPiotr Jasiukajtis
464*25c28e83SPiotr Jasiukajtis	cmp	ival3,MASK_0x7f800000		! (Y3_1) if (ival >= 0x7f800000)
465*25c28e83SPiotr Jasiukajtis	sub	iy1,ival1,iy1			! (Y1_1) iy = iy - ival
466*25c28e83SPiotr Jasiukajtis	and	ival2,MASK_0xfffc0000,ival2	! (Y2_1) ival = ival & 0xfffc0000
467*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f8,%f8			! (Y1_0) exp = vis_fpack32(ZERO, exp)
468*25c28e83SPiotr Jasiukajtis
469*25c28e83SPiotr Jasiukajtis	sub	iy2,ival2,iy2			! (Y2_1) iy = iy - ival
470*25c28e83SPiotr Jasiukajtis	st	iy1,[%fp+tmp3]			! (Y1_1) (double) iy
471*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f16,%f60			! (Y3_0) yy = yy * ldtmp1
472*25c28e83SPiotr Jasiukajtis	faddd	%f42,K1,%f54			! (Y1_0) dtmp3 = dtmp2 + K1
473*25c28e83SPiotr Jasiukajtis
474*25c28e83SPiotr Jasiukajtis	st	iy2,[%fp+tmp2]			! (Y2_1) (double) iy
475*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f44,%f22			! (Y2_0) dtmp0 = K3 * yy
476*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update14			! (Y3_1) if (ival >= 0x7f800000)
477*25c28e83SPiotr Jasiukajtis	fitod	%f6,%f40			! (Y0_0) (double)(*(int*)&exp)
478*25c28e83SPiotr Jasiukajtis.cont14:
479*25c28e83SPiotr Jasiukajtis	cmp	ival3,MASK_0x007fffff		! (Y3_1) if (ival <= 0x7fffff)
480*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind1],%f58		! (Y1_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
481*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f46,%f52			! (Y0_0) dtmp4 = dtmp3 * yy
482*25c28e83SPiotr Jasiukajtis	fitod	%f8,%f56			! (Y1_0) (double)(*(int*)&exp)
483*25c28e83SPiotr Jasiukajtis
484*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp1],%f2			! (Y0_1) (double) iy
485*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f60,%f50			! (Y3_0) dtmp0 = K3 * yy
486*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update15			! (Y3_1) if (ival <= 0x7fffff)
487*25c28e83SPiotr Jasiukajtis	nop
488*25c28e83SPiotr Jasiukajtis.cont15:
489*25c28e83SPiotr Jasiukajtis	subcc	counter,7,counter
490*25c28e83SPiotr Jasiukajtis	fmuld	%f54,%f62,%f54			! (Y1_0) dtmp4 = dtmp3 * yy
491*25c28e83SPiotr Jasiukajtis
492*25c28e83SPiotr Jasiukajtis	sra	ival0,14,ival0			! (Y0_1) i  = ival >> 14;
493*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.tail
494*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			! (Y2_0) dtmp1 = dtmp0 + K2
495*25c28e83SPiotr Jasiukajtis
496*25c28e83SPiotr Jasiukajtis	ba	.main_loop
497*25c28e83SPiotr Jasiukajtis	nop
498*25c28e83SPiotr Jasiukajtis
499*25c28e83SPiotr Jasiukajtis	.align	16
500*25c28e83SPiotr Jasiukajtis.main_loop:
501*25c28e83SPiotr Jasiukajtis	sra	ival2,14,ival2			! (Y2_1) i  = ival >> 14;
502*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind0],%f42		! (Y0_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
503*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			! (Y0_0) ty = LN2 * (double)(*(int*)&exp)
504*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			! (Y0_0) dtmp5 = dtmp4 + K0
505*25c28e83SPiotr Jasiukajtis
506*25c28e83SPiotr Jasiukajtis	sra	ival1,14,ind1			! (Y1_1) i  = ival >> 14;
507*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp3],%f4			! (Y1_1) (double) iy
508*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f10,%f18			! (Y2_0) exp = vis_fpack32(ZERO, exp)
509*25c28e83SPiotr Jasiukajtis	faddd	%f50,K2,%f26			! (Y3_0) dtmp1 = dtmp0 + K2
510*25c28e83SPiotr Jasiukajtis
511*25c28e83SPiotr Jasiukajtis	and	ival0,-8,ind0			! (Y0_1) ind  = i & (-8)
512*25c28e83SPiotr Jasiukajtis	lda	[x0]0x82,%f6			! (Y0_1) *(float*)&exp = *(float*)(x)
513*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f56,%f56			! (Y1_0) LN2 * (double)(*(int*)&exp)
514*25c28e83SPiotr Jasiukajtis	faddd	%f54,K0,%f24			! (Y1_0) dtmp5 = dtmp4 + K0
515*25c28e83SPiotr Jasiukajtis
516*25c28e83SPiotr Jasiukajtis	and	ind1,-8,ind1			! (Y1_1) ind  = i & (-8)
517*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind0],%f14		! (Y0_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
518*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f44,%f50			! (Y2_0) dtmp2 = dtmp1 * yy
519*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			! (Y0_1) yy = (double) iy
520*25c28e83SPiotr Jasiukajtis
521*25c28e83SPiotr Jasiukajtis	and	ival3,MASK_0x007fffff,iy3	! (Y3_1) iy = ival & 0x007fffff
522*25c28e83SPiotr Jasiukajtis	lda	[stridex+x0]0x82,%f8		! (Y1_1) *(float*)&exp = *(float*)(x)
523*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f46,%f22			! (Y0_0) yy = dtmp5 * yy
524*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			! (Y0_0) ty = ty - ldtmp0
525*25c28e83SPiotr Jasiukajtis
526*25c28e83SPiotr Jasiukajtis	add	iy3,CONST_0x20000,ival3		! (Y3_1) iy + 0x20000
527*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind1],%f16		! (Y1_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
528*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f60,%f42			! (Y3_0) dtmp2 = dtmp1 * yy
529*25c28e83SPiotr Jasiukajtis	fitod	%f4,%f26			! (Y1_1) yy = (double) iy
530*25c28e83SPiotr Jasiukajtis
531*25c28e83SPiotr Jasiukajtis	and	ival3,MASK_0xfffc0000,ival3	! (Y3_1) ival = ival & 0xfffc0000
532*25c28e83SPiotr Jasiukajtis	lda	[x1]0x82,%f10			! (Y2_1) *(float*)&exp = *(float*)(x)
533*25c28e83SPiotr Jasiukajtis	fmuld	%f24,%f62,%f24			! (Y1_0) yy = dtmp5 * yy
534*25c28e83SPiotr Jasiukajtis	fsubd	%f56,%f58,%f58			! (Y1_0) ty = ty - ldtmp0
535*25c28e83SPiotr Jasiukajtis
536*25c28e83SPiotr Jasiukajtis	sub	iy3,ival3,iy3			! (Y3_1) iy = iy - ival
537*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp2],%f2			! (Y2_1) (double) iy
538*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f46			! (Y0_1) yy = yy * ldtmp1
539*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			! (Y2_0) dtmp3 = dtmp2 + K1
540*25c28e83SPiotr Jasiukajtis
541*25c28e83SPiotr Jasiukajtis	add	x1,stridex2,x0			! x += 2*stridex
542*25c28e83SPiotr Jasiukajtis	st	iy3,[%fp+tmp3]			! (Y3_1) (double) iy
543*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f12,%f20			! (Y3_0) exp = vis_fpack32(ZERO, exp)
544*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			! (Y0_0) yy = yy + ty
545*25c28e83SPiotr Jasiukajtis
546*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
547*25c28e83SPiotr Jasiukajtis	lda	[stridex+x1]0x82,%f12		! (Y3_1) *(float*)&exp = *(float*)(x)
548*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f16,%f62			! (Y1_1) yy = yy * ldtmp1
549*25c28e83SPiotr Jasiukajtis	faddd	%f42,K1,%f54			! (Y3_0) dtmp3 = dtmp2 + K1
550*25c28e83SPiotr Jasiukajtis
551*25c28e83SPiotr Jasiukajtis	sra	ival3,14,ival3			! (Y3_1) i  = ival >> 14;
552*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
553*25c28e83SPiotr Jasiukajtis	lda	[x0]0x82,ival0			! (Y0_2) ival = *(int*)(x)
554*25c28e83SPiotr Jasiukajtis	faddd	%f24,%f58,%f24			! (Y1_0) yy = yy + ty
555*25c28e83SPiotr Jasiukajtis
556*25c28e83SPiotr Jasiukajtis	add	x0,stridex2,x1			! x += 2*stridex
557*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind2],%f42		! (Y2_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
558*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f46,%f22			! (Y0_1) dtmp0 = K3 * yy
559*25c28e83SPiotr Jasiukajtis	fitod	%f18,%f40			! (Y2_0) (double)(*(int*)&exp)
560*25c28e83SPiotr Jasiukajtis
561*25c28e83SPiotr Jasiukajtis	and	ival2,-8,ind2			! (Y2_1) ind  = i & (-8)
562*25c28e83SPiotr Jasiukajtis	lda	[stridex+x0]0x82,ival1		! (Y1_2) ival = *(int*)(x)
563*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f44,%f52			! (Y2_0) dtmp4 = dtmp3 * yy
564*25c28e83SPiotr Jasiukajtis	fitod	%f20,%f56			! (Y3_0) (double)(*(int*)&exp)
565*25c28e83SPiotr Jasiukajtis
566*25c28e83SPiotr Jasiukajtis	cmp	ival0,MASK_0x7f800000		! (Y0_2) if (ival >= 0x7f800000)
567*25c28e83SPiotr Jasiukajtis	lda	[x1]0x82,ival2			! (Y2_2) ival = *(int*)(x);
568*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f62,%f50			! (Y1_1) dtmp0 = K3 * yy
569*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			! (Y0_0) (float)(yy)
570*25c28e83SPiotr Jasiukajtis
571*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y0_0) write into memory
572*25c28e83SPiotr Jasiukajtis	fmuld	%f54,%f60,%f54			! (Y3_0) dtmp4 = dtmp3 * yy
573*25c28e83SPiotr Jasiukajtis	bge,pn 	%icc,.update16			! (Y0_2) if (ival >= 0x7f800000)
574*25c28e83SPiotr Jasiukajtis	fdtos	%f24,%f4			! (Y1_0) (float)(yy)
575*25c28e83SPiotr Jasiukajtis.cont16:
576*25c28e83SPiotr Jasiukajtis	cmp	ival0,MASK_0x007fffff		! (Y0_2) if (ival <= 0x7fffff
577*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind3],%f58		! (Y3_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
578*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update17			! (Y0_2) if (ival <= 0x7fffff
579*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			! (Y0_1) dtmp1 = dtmp0 + K2
580*25c28e83SPiotr Jasiukajtis.cont17:
581*25c28e83SPiotr Jasiukajtis	cmp	ival1,MASK_0x7f800000		! (Y1_2) if (ival >= 0x7f800000)
582*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0x007fffff,iy0	! (Y0_2) iy = ival & 0x007fffff
583*25c28e83SPiotr Jasiukajtis	st	%f4,[stridey+y]			! (Y1_0) write into memory
584*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			! (Y2_0) ty = LN2 * (double)(*(int*)&exp)
585*25c28e83SPiotr Jasiukajtis
586*25c28e83SPiotr Jasiukajtis	add	iy0,CONST_0x20000,ival0		! (Y0_2) ival = iy + 0x20000
587*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind2],%f14		! (Y2_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8);
588*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			! (Y2_0) dtmp5 = dtmp4 + K0
589*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f6,%f6			! (Y0_1) exp = vis_fpack32(ZERO, exp)
590*25c28e83SPiotr Jasiukajtis
591*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0xfffc0000,ival0	! (Y0_2) ival = ival & 0xfffc0000
592*25c28e83SPiotr Jasiukajtis	faddd	%f50,K2,%f26			! (Y1_1) dtmp1 = dtmp0 + K2
593*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update18			! (Y1_2) if (ival >= 0x7f800000)
594*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f56,%f56			! (Y3_0) ty = LN2 * (double)(*(int*)&exp)
595*25c28e83SPiotr Jasiukajtis.cont18:
596*25c28e83SPiotr Jasiukajtis	sub	iy0,ival0,iy0			! (Y0_2) iy = iy - ival
597*25c28e83SPiotr Jasiukajtis	and	ival3,-8,ind3			! (Y3_1) ind  = i & (-8)
598*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp3],%f4			! (Y3_1) (double) iy
599*25c28e83SPiotr Jasiukajtis	faddd	%f54,K0,%f24			! (Y3_0) dtmp5 = dtmp4 + K0
600*25c28e83SPiotr Jasiukajtis
601*25c28e83SPiotr Jasiukajtis	cmp	ival1,MASK_0x007fffff		! (Y1_2) if (ival <= 0x7fffff)
602*25c28e83SPiotr Jasiukajtis	lda	[stridex+x1]0x82,ival3		! (Y3_2) ival = *(int*)(x)
603*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f46,%f50			! (Y0_1) dtmp2 = dtmp1 * yy
604*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			! (Y2_1) yy = (double) iy
605*25c28e83SPiotr Jasiukajtis
606*25c28e83SPiotr Jasiukajtis	st	iy0,[%fp+tmp1]			! (Y0_2) (double) iy
607*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f44,%f22			! (Y2_0) yy = dtmp5 * yy
608*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update19			! (Y1_2) if (ival <= 0x7fffff)
609*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			! (Y2_0) ty = ty - ldtmp0
610*25c28e83SPiotr Jasiukajtis.cont19:
611*25c28e83SPiotr Jasiukajtis	cmp	ival2,MASK_0x7f800000		! (Y2_2) if (ival >= 0x7f800000)
612*25c28e83SPiotr Jasiukajtis	and	ival1,MASK_0x007fffff,iy1	! (Y1_2) iy = ival & 0x007fffff
613*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update20			! (Y2_2) if (ival >= 0x7f800000)
614*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f62,%f42			! (Y1_1) dtmp2 = dtmp1 * yy
615*25c28e83SPiotr Jasiukajtis.cont20:
616*25c28e83SPiotr Jasiukajtis	cmp	ival2,MASK_0x007fffff		! (Y2_2) if (ival <= 0x7fffff)
617*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind3],%f16		! (Y3_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
618*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update21			! (Y2_2) if (ival <= 0x7fffff)
619*25c28e83SPiotr Jasiukajtis	fitod	%f4,%f26			! (Y3_1) yy = (double) iy
620*25c28e83SPiotr Jasiukajtis.cont21:
621*25c28e83SPiotr Jasiukajtis	add	iy1,CONST_0x20000,ival1		! (Y1_2) ival = iy + 0x20000
622*25c28e83SPiotr Jasiukajtis	and	ival2,MASK_0x007fffff,iy2	! (Y2_2) iy = ival & 0x007fffff
623*25c28e83SPiotr Jasiukajtis	fmuld	%f24,%f60,%f24			! (Y3_0) yy = dtmp5 * yy
624*25c28e83SPiotr Jasiukajtis	fsubd	%f56,%f58,%f58			! (Y3_0) ty = ty - ldtmp0
625*25c28e83SPiotr Jasiukajtis
626*25c28e83SPiotr Jasiukajtis	and	ival1,MASK_0xfffc0000,ival1	! (Y1_2) ival = ival & 0xfffc0000
627*25c28e83SPiotr Jasiukajtis	add	iy2,CONST_0x20000,ival2		! (Y2_2) ival = iy + 0x20000
628*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f44			! (Y2_1) yy = yy * ldtmp1
629*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			! (Y0_1) dtmp3 = dtmp2 + K1
630*25c28e83SPiotr Jasiukajtis
631*25c28e83SPiotr Jasiukajtis	sub	iy1,ival1,iy1			! (Y1_2) iy = iy - ival
632*25c28e83SPiotr Jasiukajtis	and	ival2,MASK_0xfffc0000,ival2	! (Y2_2) ival = ival & 0xfffc0000
633*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f8,%f8			! (Y1_1) exp = vis_fpack32(ZERO, exp)
634*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			! (Y2_0) yy = yy + ty
635*25c28e83SPiotr Jasiukajtis
636*25c28e83SPiotr Jasiukajtis	sub	iy2,ival2,iy2			! (Y2_2) iy = iy - ival
637*25c28e83SPiotr Jasiukajtis	st	iy1,[%fp+tmp3]			! (Y1_2) (double) iy
638*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f16,%f60			! (Y3_1) yy = yy * ldtmp1
639*25c28e83SPiotr Jasiukajtis	faddd	%f42,K1,%f54			! (Y1_1) dtmp3 = dtmp2 + K1
640*25c28e83SPiotr Jasiukajtis
641*25c28e83SPiotr Jasiukajtis	cmp	ival3,MASK_0x7f800000		! (Y3_2) if (ival >= 0x7f800000)
642*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
643*25c28e83SPiotr Jasiukajtis	st	iy2,[%fp+tmp2]			! (Y2_2) (double) iy
644*25c28e83SPiotr Jasiukajtis	faddd	%f24,%f58,%f24			! (Y3_0) yy = yy + ty
645*25c28e83SPiotr Jasiukajtis
646*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
647*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f44,%f22			! (Y2_1) dtmp0 = K3 * yy
648*25c28e83SPiotr Jasiukajtis	bge,pn	%icc,.update22			! (Y3_2) if (ival >= 0x7f800000)
649*25c28e83SPiotr Jasiukajtis	fitod	%f6,%f40			! (Y0_1)(double)(*(int*)&exp)
650*25c28e83SPiotr Jasiukajtis.cont22:
651*25c28e83SPiotr Jasiukajtis	cmp	ival3,MASK_0x007fffff		! (Y3_2) if (ival <= 0x7fffff)
652*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind1],%f58		! (Y1_1) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
653*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f46,%f52			! (Y0_1) dtmp4 = dtmp3 * yy
654*25c28e83SPiotr Jasiukajtis	fitod	%f8,%f56			! (Y1_1) (double)(*(int*)&exp)
655*25c28e83SPiotr Jasiukajtis
656*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp1],%f2			! (Y0_2) (double) iy
657*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f60,%f50			! (Y3_1) dtmp0 = K3 * yy
658*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.update23			! (Y3_2) if (ival <= 0x7fffff)
659*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			! (Y2_0) (float)(yy)
660*25c28e83SPiotr Jasiukajtis.cont23:
661*25c28e83SPiotr Jasiukajtis	subcc	counter,4,counter		! update cycle counter
662*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y2_0) write into memory
663*25c28e83SPiotr Jasiukajtis	fmuld	%f54,%f62,%f54			! (Y1_1) dtmp4 = dtmp3 * yy
664*25c28e83SPiotr Jasiukajtis	fdtos	%f24,%f4			! (Y3_0)(float)(yy)
665*25c28e83SPiotr Jasiukajtis
666*25c28e83SPiotr Jasiukajtis	sra	ival0,14,ival0			! (Y0_2) i  = ival >> 14;
667*25c28e83SPiotr Jasiukajtis	st	%f4,[stridey+y]			! (Y3_0) write into memory
668*25c28e83SPiotr Jasiukajtis	bpos,pt	%icc,.main_loop
669*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			! (Y2_1) dtmp1 = dtmp0 + K2
670*25c28e83SPiotr Jasiukajtis
671*25c28e83SPiotr Jasiukajtis.tail:
672*25c28e83SPiotr Jasiukajtis	addcc	counter,7,counter
673*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
674*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
675*25c28e83SPiotr Jasiukajtis
676*25c28e83SPiotr Jasiukajtis	sra	ival2,14,ival2			! (Y2_1) i  = ival >> 14;
677*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind0],%f42		! (Y0_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
678*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			! (Y0_0) ty = LN2 * (double)(*(int*)&exp)
679*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			! (Y0_0) dtmp5 = dtmp4 + K0
680*25c28e83SPiotr Jasiukajtis
681*25c28e83SPiotr Jasiukajtis	sra	ival1,14,ind1			! (Y1_1) i  = ival >> 14;
682*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp3],%f4			! (Y1_1) (double) iy
683*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f10,%f18			! (Y2_0) exp = vis_fpack32(ZERO, exp)
684*25c28e83SPiotr Jasiukajtis	faddd	%f50,K2,%f26			! (Y3_0) dtmp1 = dtmp0 + K2
685*25c28e83SPiotr Jasiukajtis
686*25c28e83SPiotr Jasiukajtis	and	ival0,-8,ind0			! (Y0_1) ind  = i & (-8)
687*25c28e83SPiotr Jasiukajtis	lda	[x0]0x82,%f6			! (Y0_1) *(float*)&exp = *(float*)(x)
688*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f56,%f56			! (Y1_0) LN2 * (double)(*(int*)&exp)
689*25c28e83SPiotr Jasiukajtis	faddd	%f54,K0,%f24			! (Y1_0) dtmp5 = dtmp4 + K0
690*25c28e83SPiotr Jasiukajtis
691*25c28e83SPiotr Jasiukajtis	and	ind1,-8,ind1			! (Y1_1) ind  = i & (-8)
692*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind0],%f14		! (Y0_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
693*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f44,%f50			! (Y2_0) dtmp2 = dtmp1 * yy
694*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			! (Y0_1) yy = (double) iy
695*25c28e83SPiotr Jasiukajtis
696*25c28e83SPiotr Jasiukajtis	and	ival3,MASK_0x007fffff,ival1	! (Y3_1) iy = ival & 0x007fffff
697*25c28e83SPiotr Jasiukajtis	lda	[stridex+x0]0x82,%f8		! (Y1_1) *(float*)&exp = *(float*)(x)
698*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f46,%f22			! (Y0_0) yy = dtmp5 * yy
699*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			! (Y0_0) ty = ty - ldtmp0
700*25c28e83SPiotr Jasiukajtis
701*25c28e83SPiotr Jasiukajtis	add	iy3,CONST_0x20000,ival3		! (Y3_1) iy + 0x20000
702*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind1],%f16		! (Y1_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
703*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f60,%f42			! (Y3_0) dtmp2 = dtmp1 * yy
704*25c28e83SPiotr Jasiukajtis	fitod	%f4,%f26			! (Y1_1) yy = (double) iy
705*25c28e83SPiotr Jasiukajtis
706*25c28e83SPiotr Jasiukajtis	and	ival3,MASK_0xfffc0000,ival3	! (Y3_1) ival = ival & 0xfffc0000
707*25c28e83SPiotr Jasiukajtis	lda	[x1]0x82,%f10			! (Y2_1) *(float*)&exp = *(float*)(x)
708*25c28e83SPiotr Jasiukajtis	fmuld	%f24,%f62,%f24			! (Y1_0) yy = dtmp5 * yy
709*25c28e83SPiotr Jasiukajtis	fsubd	%f56,%f58,%f58			! (Y1_0) ty = ty - ldtmp0
710*25c28e83SPiotr Jasiukajtis
711*25c28e83SPiotr Jasiukajtis	sub	iy3,ival3,iy3			! (Y3_1) iy = iy - ival
712*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp2],%f2			! (Y2_1) (double) iy
713*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f46			! (Y0_1) yy = yy * ldtmp1
714*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			! (Y2_0) dtmp3 = dtmp2 + K1
715*25c28e83SPiotr Jasiukajtis
716*25c28e83SPiotr Jasiukajtis	add	x1,stridex2,x0			! x += 2*stridex
717*25c28e83SPiotr Jasiukajtis	st	iy3,[%fp+tmp3]			! (Y3_1) (double) iy
718*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f12,%f20			! (Y3_0) exp = vis_fpack32(ZERO, exp)
719*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			! (Y0_0) yy = yy + ty
720*25c28e83SPiotr Jasiukajtis
721*25c28e83SPiotr Jasiukajtis	lda	[stridex+x1]0x82,%f12		! (Y3_1) *(float*)&exp = *(float*)(x)
722*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f16,%f62			! (Y1_1) yy = yy * ldtmp1
723*25c28e83SPiotr Jasiukajtis	faddd	%f42,K1,%f54			! (Y3_0) dtmp3 = dtmp2 + K1
724*25c28e83SPiotr Jasiukajtis
725*25c28e83SPiotr Jasiukajtis	sra	ival3,14,ival3			! (Y3_1) i  = ival >> 14;
726*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
727*25c28e83SPiotr Jasiukajtis	faddd	%f24,%f58,%f24			! (Y1_0) yy = yy + ty
728*25c28e83SPiotr Jasiukajtis
729*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter
730*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind2],%f42		! (Y2_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
731*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f46,%f22			! (Y0_1) dtmp0 = K3 * yy
732*25c28e83SPiotr Jasiukajtis	fitod	%f18,%f40			! (Y2_0) (double)(*(int*)&exp)
733*25c28e83SPiotr Jasiukajtis
734*25c28e83SPiotr Jasiukajtis	and	ival2,-8,ind2			! (Y2_1) ind  = i & (-8)
735*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f44,%f52			! (Y2_0) dtmp4 = dtmp3 * yy
736*25c28e83SPiotr Jasiukajtis	fitod	%f20,%f56			! (Y3_0) (double)(*(int*)&exp)
737*25c28e83SPiotr Jasiukajtis
738*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f62,%f50			! (Y1_1) dtmp0 = K3 * yy
739*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			! (Y0_0) (float)(yy)
740*25c28e83SPiotr Jasiukajtis
741*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y0_0) write into memory
742*25c28e83SPiotr Jasiukajtis	fmuld	%f54,%f60,%f54			! (Y3_0) dtmp4 = dtmp3 * yy
743*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
744*25c28e83SPiotr Jasiukajtis	fdtos	%f24,%f4			! (Y1_0) (float)(yy)
745*25c28e83SPiotr Jasiukajtis
746*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
747*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter
748*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind3],%f58		! (Y3_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
749*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			! (Y0_1) dtmp1 = dtmp0 + K2
750*25c28e83SPiotr Jasiukajtis
751*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y1_0) write into memory
752*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
753*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			! (Y2_0) ty = LN2 * (double)(*(int*)&exp)
754*25c28e83SPiotr Jasiukajtis
755*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind2],%f14		! (Y2_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8);
756*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			! (Y2_0) dtmp5 = dtmp4 + K0
757*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f6,%f6			! (Y0_1) exp = vis_fpack32(ZERO, exp)
758*25c28e83SPiotr Jasiukajtis
759*25c28e83SPiotr Jasiukajtis	faddd	%f50,K2,%f26			! (Y1_1) dtmp1 = dtmp0 + K2
760*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f56,%f56			! (Y3_0) ty = LN2 * (double)(*(int*)&exp)
761*25c28e83SPiotr Jasiukajtis
762*25c28e83SPiotr Jasiukajtis	and	ival3,-8,ind3			! (Y3_1) ind  = i & (-8)
763*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp3],%f4			! (Y3_1) (double) iy
764*25c28e83SPiotr Jasiukajtis	faddd	%f54,K0,%f24			! (Y3_0) dtmp5 = dtmp4 + K0
765*25c28e83SPiotr Jasiukajtis
766*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f46,%f50			! (Y0_1) dtmp2 = dtmp1 * yy
767*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			! (Y2_1) yy = (double) iy
768*25c28e83SPiotr Jasiukajtis
769*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f44,%f22			! (Y2_0) yy = dtmp5 * yy
770*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			! (Y2_0) ty = ty - ldtmp0
771*25c28e83SPiotr Jasiukajtis
772*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f62,%f42			! (Y1_1) dtmp2 = dtmp1 * yy
773*25c28e83SPiotr Jasiukajtis
774*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind3],%f16		! (Y3_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
775*25c28e83SPiotr Jasiukajtis	fitod	%f4,%f26			! (Y3_1) yy = (double) iy
776*25c28e83SPiotr Jasiukajtis
777*25c28e83SPiotr Jasiukajtis	fmuld	%f24,%f60,%f24			! (Y3_0) yy = dtmp5 * yy
778*25c28e83SPiotr Jasiukajtis	fsubd	%f56,%f58,%f58			! (Y3_0) ty = ty - ldtmp0
779*25c28e83SPiotr Jasiukajtis
780*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f44			! (Y2_1) yy = yy * ldtmp1
781*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			! (Y0_1) dtmp3 = dtmp2 + K1
782*25c28e83SPiotr Jasiukajtis
783*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f8,%f8			! (Y1_1) exp = vis_fpack32(ZERO, exp)
784*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			! (Y2_0) yy = yy + ty
785*25c28e83SPiotr Jasiukajtis
786*25c28e83SPiotr Jasiukajtis	fmuld	%f26,%f16,%f60			! (Y3_1) yy = yy * ldtmp1
787*25c28e83SPiotr Jasiukajtis	faddd	%f42,K1,%f54			! (Y1_1) dtmp3 = dtmp2 + K1
788*25c28e83SPiotr Jasiukajtis
789*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
790*25c28e83SPiotr Jasiukajtis	faddd	%f24,%f58,%f24			! (Y3_0) yy = yy + ty
791*25c28e83SPiotr Jasiukajtis
792*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter
793*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f44,%f22			! (Y2_1) dtmp0 = K3 * yy
794*25c28e83SPiotr Jasiukajtis	fitod	%f6,%f40			! (Y0_1)(double)(*(int*)&exp)
795*25c28e83SPiotr Jasiukajtis
796*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind1],%f58		! (Y1_1) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
797*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f46,%f52			! (Y0_1) dtmp4 = dtmp3 * yy
798*25c28e83SPiotr Jasiukajtis	fitod	%f8,%f56			! (Y1_1) (double)(*(int*)&exp)
799*25c28e83SPiotr Jasiukajtis
800*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f60,%f50			! (Y3_1) dtmp0 = K3 * yy
801*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			! (Y2_0) (float)(yy)
802*25c28e83SPiotr Jasiukajtis
803*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y2_0) write into memory
804*25c28e83SPiotr Jasiukajtis	fmuld	%f54,%f62,%f54			! (Y1_1) dtmp4 = dtmp3 * yy
805*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
806*25c28e83SPiotr Jasiukajtis	fdtos	%f24,%f4			! (Y3_0)(float)(yy)
807*25c28e83SPiotr Jasiukajtis
808*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter		! update cycle counter
809*25c28e83SPiotr Jasiukajtis	add	y,stridey,y
810*25c28e83SPiotr Jasiukajtis
811*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y3_0) write into memory
812*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
813*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			! (Y2_1) dtmp1 = dtmp0 + K2
814*25c28e83SPiotr Jasiukajtis
815*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind0],%f42		! (Y0_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
816*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			! (Y0_0) ty = LN2 * (double)(*(int*)&exp)
817*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			! (Y0_0) dtmp5 = dtmp4 + K0
818*25c28e83SPiotr Jasiukajtis
819*25c28e83SPiotr Jasiukajtis	fpack32	ZERO,%f10,%f18			! (Y2_0) exp = vis_fpack32(ZERO, exp)
820*25c28e83SPiotr Jasiukajtis
821*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f56,%f56			! (Y1_0) LN2 * (double)(*(int*)&exp)
822*25c28e83SPiotr Jasiukajtis	faddd	%f54,K0,%f24			! (Y1_0) dtmp5 = dtmp4 + K0
823*25c28e83SPiotr Jasiukajtis
824*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f44,%f50			! (Y2_0) dtmp2 = dtmp1 * yy
825*25c28e83SPiotr Jasiukajtis
826*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f46,%f22			! (Y0_0) yy = dtmp5 * yy
827*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			! (Y0_0) ty = ty - ldtmp0
828*25c28e83SPiotr Jasiukajtis
829*25c28e83SPiotr Jasiukajtis	fmuld	%f24,%f62,%f24			! (Y1_0) yy = dtmp5 * yy
830*25c28e83SPiotr Jasiukajtis	fsubd	%f56,%f58,%f58			! (Y1_0) ty = ty - ldtmp0
831*25c28e83SPiotr Jasiukajtis
832*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter
833*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			! (Y2_0) dtmp3 = dtmp2 + K1
834*25c28e83SPiotr Jasiukajtis
835*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			! (Y0_0) yy = yy + ty
836*25c28e83SPiotr Jasiukajtis
837*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
838*25c28e83SPiotr Jasiukajtis	faddd	%f24,%f58,%f24			! (Y1_0) yy = yy + ty
839*25c28e83SPiotr Jasiukajtis
840*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind2],%f42		! (Y2_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind)
841*25c28e83SPiotr Jasiukajtis	fitod	%f18,%f40			! (Y2_0) (double)(*(int*)&exp)
842*25c28e83SPiotr Jasiukajtis
843*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f44,%f52			! (Y2_0) dtmp4 = dtmp3 * yy
844*25c28e83SPiotr Jasiukajtis
845*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			! (Y0_0) (float)(yy)
846*25c28e83SPiotr Jasiukajtis
847*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y0_0) write into memory
848*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
849*25c28e83SPiotr Jasiukajtis	fdtos	%f24,%f4			! (Y1_0) (float)(yy)
850*25c28e83SPiotr Jasiukajtis
851*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
852*25c28e83SPiotr Jasiukajtis	subcc	counter,1,counter
853*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y1_0) write into memory
854*25c28e83SPiotr Jasiukajtis	bneg,pn	%icc,.end_loop
855*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			! (Y2_0) ty = LN2 * (double)(*(int*)&exp)
856*25c28e83SPiotr Jasiukajtis
857*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			! (Y2_0) dtmp5 = dtmp4 + K0
858*25c28e83SPiotr Jasiukajtis
859*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f44,%f22			! (Y2_0) yy = dtmp5 * yy
860*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			! (Y2_0) ty = ty - ldtmp0
861*25c28e83SPiotr Jasiukajtis
862*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
863*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			! (Y2_0) yy = yy + ty
864*25c28e83SPiotr Jasiukajtis
865*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			! (Y2_0) (float)(yy)
866*25c28e83SPiotr Jasiukajtis
867*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! (Y2_0) write into memory
868*25c28e83SPiotr Jasiukajtis.end_loop:
869*25c28e83SPiotr Jasiukajtis	ba	.begin
870*25c28e83SPiotr Jasiukajtis	nop
871*25c28e83SPiotr Jasiukajtis
872*25c28e83SPiotr Jasiukajtis.end:
873*25c28e83SPiotr Jasiukajtis	ret
874*25c28e83SPiotr Jasiukajtis	restore	%g0,0,%o0
875*25c28e83SPiotr Jasiukajtis
876*25c28e83SPiotr Jasiukajtis	.align	16
877*25c28e83SPiotr Jasiukajtis.update2:
878*25c28e83SPiotr Jasiukajtis	cmp	counter,0
879*25c28e83SPiotr Jasiukajtis	ble	.cont2
880*25c28e83SPiotr Jasiukajtis	nop
881*25c28e83SPiotr Jasiukajtis
882*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0
883*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
884*25c28e83SPiotr Jasiukajtis	sub	x0,stridex,x0
885*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
886*25c28e83SPiotr Jasiukajtis	or	%g0,0,counter
887*25c28e83SPiotr Jasiukajtis	ba	.cont2
888*25c28e83SPiotr Jasiukajtis	nop
889*25c28e83SPiotr Jasiukajtis
890*25c28e83SPiotr Jasiukajtis	.align	16
891*25c28e83SPiotr Jasiukajtis.update3:
892*25c28e83SPiotr Jasiukajtis	cmp	counter,0
893*25c28e83SPiotr Jasiukajtis	ble	.cont3
894*25c28e83SPiotr Jasiukajtis	nop
895*25c28e83SPiotr Jasiukajtis
896*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0
897*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
898*25c28e83SPiotr Jasiukajtis	sub	x0,stridex,x0
899*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
900*25c28e83SPiotr Jasiukajtis	or	%g0,0,counter
901*25c28e83SPiotr Jasiukajtis	ba	.cont3
902*25c28e83SPiotr Jasiukajtis	nop
903*25c28e83SPiotr Jasiukajtis
904*25c28e83SPiotr Jasiukajtis	.align	16
905*25c28e83SPiotr Jasiukajtis.update4:
906*25c28e83SPiotr Jasiukajtis	cmp	counter,1
907*25c28e83SPiotr Jasiukajtis	ble	.cont4
908*25c28e83SPiotr Jasiukajtis	nop
909*25c28e83SPiotr Jasiukajtis
910*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
911*25c28e83SPiotr Jasiukajtis	sub	counter,1,counter
912*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
913*25c28e83SPiotr Jasiukajtis	or	%g0,1,counter
914*25c28e83SPiotr Jasiukajtis	ba	.cont4
915*25c28e83SPiotr Jasiukajtis	nop
916*25c28e83SPiotr Jasiukajtis
917*25c28e83SPiotr Jasiukajtis	.align	16
918*25c28e83SPiotr Jasiukajtis.update5:
919*25c28e83SPiotr Jasiukajtis	cmp	counter,1
920*25c28e83SPiotr Jasiukajtis	ble	.cont5
921*25c28e83SPiotr Jasiukajtis	nop
922*25c28e83SPiotr Jasiukajtis
923*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
924*25c28e83SPiotr Jasiukajtis	sub	counter,1,counter
925*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
926*25c28e83SPiotr Jasiukajtis	or	%g0,1,counter
927*25c28e83SPiotr Jasiukajtis	ba	.cont5
928*25c28e83SPiotr Jasiukajtis	nop
929*25c28e83SPiotr Jasiukajtis
930*25c28e83SPiotr Jasiukajtis	.align	16
931*25c28e83SPiotr Jasiukajtis.update6:
932*25c28e83SPiotr Jasiukajtis	cmp	counter,2
933*25c28e83SPiotr Jasiukajtis	ble	.cont6
934*25c28e83SPiotr Jasiukajtis	nop
935*25c28e83SPiotr Jasiukajtis
936*25c28e83SPiotr Jasiukajtis	add	x1,stridex,x1
937*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
938*25c28e83SPiotr Jasiukajtis	sub	x1,stridex,x1
939*25c28e83SPiotr Jasiukajtis	sub	counter,2,counter
940*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
941*25c28e83SPiotr Jasiukajtis	or	%g0,2,counter
942*25c28e83SPiotr Jasiukajtis	ba	.cont6
943*25c28e83SPiotr Jasiukajtis	nop
944*25c28e83SPiotr Jasiukajtis
945*25c28e83SPiotr Jasiukajtis	.align	16
946*25c28e83SPiotr Jasiukajtis.update7:
947*25c28e83SPiotr Jasiukajtis	cmp	counter,2
948*25c28e83SPiotr Jasiukajtis	ble	.cont7
949*25c28e83SPiotr Jasiukajtis	nop
950*25c28e83SPiotr Jasiukajtis
951*25c28e83SPiotr Jasiukajtis	add	x1,stridex,x1
952*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
953*25c28e83SPiotr Jasiukajtis	sub	x1,stridex,x1
954*25c28e83SPiotr Jasiukajtis	sub	counter,2,counter
955*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
956*25c28e83SPiotr Jasiukajtis	or	%g0,2,counter
957*25c28e83SPiotr Jasiukajtis	ba	.cont7
958*25c28e83SPiotr Jasiukajtis	nop
959*25c28e83SPiotr Jasiukajtis
960*25c28e83SPiotr Jasiukajtis	.align	16
961*25c28e83SPiotr Jasiukajtis.update8:
962*25c28e83SPiotr Jasiukajtis	cmp	counter,3
963*25c28e83SPiotr Jasiukajtis	ble	.cont8
964*25c28e83SPiotr Jasiukajtis	nop
965*25c28e83SPiotr Jasiukajtis
966*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
967*25c28e83SPiotr Jasiukajtis	sub	counter,3,counter
968*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
969*25c28e83SPiotr Jasiukajtis	or	%g0,3,counter
970*25c28e83SPiotr Jasiukajtis	ba	.cont8
971*25c28e83SPiotr Jasiukajtis	nop
972*25c28e83SPiotr Jasiukajtis
973*25c28e83SPiotr Jasiukajtis	.align	16
974*25c28e83SPiotr Jasiukajtis.update9:
975*25c28e83SPiotr Jasiukajtis	cmp	counter,3
976*25c28e83SPiotr Jasiukajtis	ble	.cont9
977*25c28e83SPiotr Jasiukajtis	nop
978*25c28e83SPiotr Jasiukajtis
979*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
980*25c28e83SPiotr Jasiukajtis	sub	counter,3,counter
981*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
982*25c28e83SPiotr Jasiukajtis	or	%g0,3,counter
983*25c28e83SPiotr Jasiukajtis	ba	.cont9
984*25c28e83SPiotr Jasiukajtis	nop
985*25c28e83SPiotr Jasiukajtis
986*25c28e83SPiotr Jasiukajtis	.align	16
987*25c28e83SPiotr Jasiukajtis.update10:
988*25c28e83SPiotr Jasiukajtis	cmp	counter,4
989*25c28e83SPiotr Jasiukajtis	ble	.cont10
990*25c28e83SPiotr Jasiukajtis	nop
991*25c28e83SPiotr Jasiukajtis
992*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0
993*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
994*25c28e83SPiotr Jasiukajtis	sub	x0, stridex, x0
995*25c28e83SPiotr Jasiukajtis	sub	counter,4,counter
996*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
997*25c28e83SPiotr Jasiukajtis	or	%g0,4,counter
998*25c28e83SPiotr Jasiukajtis	ba	.cont10
999*25c28e83SPiotr Jasiukajtis	nop
1000*25c28e83SPiotr Jasiukajtis
1001*25c28e83SPiotr Jasiukajtis	.align	16
1002*25c28e83SPiotr Jasiukajtis.update11:
1003*25c28e83SPiotr Jasiukajtis	cmp	counter,4
1004*25c28e83SPiotr Jasiukajtis	ble	.cont11
1005*25c28e83SPiotr Jasiukajtis	nop
1006*25c28e83SPiotr Jasiukajtis
1007*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0
1008*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
1009*25c28e83SPiotr Jasiukajtis	sub	x0,stridex,x0
1010*25c28e83SPiotr Jasiukajtis	sub	counter,4,counter
1011*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1012*25c28e83SPiotr Jasiukajtis	or	%g0,4,counter
1013*25c28e83SPiotr Jasiukajtis	ba	.cont11
1014*25c28e83SPiotr Jasiukajtis	nop
1015*25c28e83SPiotr Jasiukajtis
1016*25c28e83SPiotr Jasiukajtis	.align	16
1017*25c28e83SPiotr Jasiukajtis.update12:
1018*25c28e83SPiotr Jasiukajtis	cmp	counter,5
1019*25c28e83SPiotr Jasiukajtis	ble	.cont12
1020*25c28e83SPiotr Jasiukajtis	nop
1021*25c28e83SPiotr Jasiukajtis
1022*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1023*25c28e83SPiotr Jasiukajtis	sub	counter,5,counter
1024*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1025*25c28e83SPiotr Jasiukajtis	or	%g0,5,counter
1026*25c28e83SPiotr Jasiukajtis	ba	.cont12
1027*25c28e83SPiotr Jasiukajtis	nop
1028*25c28e83SPiotr Jasiukajtis
1029*25c28e83SPiotr Jasiukajtis	.align	16
1030*25c28e83SPiotr Jasiukajtis.update13:
1031*25c28e83SPiotr Jasiukajtis	cmp	counter,5
1032*25c28e83SPiotr Jasiukajtis	ble	.cont13
1033*25c28e83SPiotr Jasiukajtis	nop
1034*25c28e83SPiotr Jasiukajtis
1035*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1036*25c28e83SPiotr Jasiukajtis	sub	counter,5,counter
1037*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1038*25c28e83SPiotr Jasiukajtis	or	%g0,5,counter
1039*25c28e83SPiotr Jasiukajtis	ba	.cont13
1040*25c28e83SPiotr Jasiukajtis	nop
1041*25c28e83SPiotr Jasiukajtis
1042*25c28e83SPiotr Jasiukajtis	.align	16
1043*25c28e83SPiotr Jasiukajtis.update14:
1044*25c28e83SPiotr Jasiukajtis	cmp	counter,6
1045*25c28e83SPiotr Jasiukajtis	ble	.cont14
1046*25c28e83SPiotr Jasiukajtis	nop
1047*25c28e83SPiotr Jasiukajtis
1048*25c28e83SPiotr Jasiukajtis	add	x1,stridex,x1
1049*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1050*25c28e83SPiotr Jasiukajtis	sub	x1, stridex, x1
1051*25c28e83SPiotr Jasiukajtis	sub	counter,6,counter
1052*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1053*25c28e83SPiotr Jasiukajtis	or	%g0,6,counter
1054*25c28e83SPiotr Jasiukajtis	ba 	.cont14
1055*25c28e83SPiotr Jasiukajtis	nop
1056*25c28e83SPiotr Jasiukajtis
1057*25c28e83SPiotr Jasiukajtis	.align	16
1058*25c28e83SPiotr Jasiukajtis.update15:
1059*25c28e83SPiotr Jasiukajtis	cmp	counter,6
1060*25c28e83SPiotr Jasiukajtis	ble	.cont15
1061*25c28e83SPiotr Jasiukajtis	nop
1062*25c28e83SPiotr Jasiukajtis
1063*25c28e83SPiotr Jasiukajtis	add	x1,stridex,x1
1064*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1065*25c28e83SPiotr Jasiukajtis	sub	x1, stridex, x1
1066*25c28e83SPiotr Jasiukajtis	sub	counter,6,counter
1067*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1068*25c28e83SPiotr Jasiukajtis	or	%g0,6,counter
1069*25c28e83SPiotr Jasiukajtis	ba	.cont15
1070*25c28e83SPiotr Jasiukajtis	nop
1071*25c28e83SPiotr Jasiukajtis
1072*25c28e83SPiotr Jasiukajtis	.align	16
1073*25c28e83SPiotr Jasiukajtis.update16:
1074*25c28e83SPiotr Jasiukajtis	cmp	counter,0
1075*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont16
1076*25c28e83SPiotr Jasiukajtis	nop
1077*25c28e83SPiotr Jasiukajtis
1078*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
1079*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1080*25c28e83SPiotr Jasiukajtis	or	%g0,0,counter
1081*25c28e83SPiotr Jasiukajtis	ba	.cont16
1082*25c28e83SPiotr Jasiukajtis	nop
1083*25c28e83SPiotr Jasiukajtis
1084*25c28e83SPiotr Jasiukajtis	.align	16
1085*25c28e83SPiotr Jasiukajtis.update17:
1086*25c28e83SPiotr Jasiukajtis	cmp	counter,0
1087*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont17
1088*25c28e83SPiotr Jasiukajtis	nop
1089*25c28e83SPiotr Jasiukajtis
1090*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
1091*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1092*25c28e83SPiotr Jasiukajtis	or	%g0,0,counter
1093*25c28e83SPiotr Jasiukajtis	ba	.cont17
1094*25c28e83SPiotr Jasiukajtis	nop
1095*25c28e83SPiotr Jasiukajtis
1096*25c28e83SPiotr Jasiukajtis	.align	16
1097*25c28e83SPiotr Jasiukajtis.update18:
1098*25c28e83SPiotr Jasiukajtis	cmp	counter,1
1099*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont18
1100*25c28e83SPiotr Jasiukajtis	nop
1101*25c28e83SPiotr Jasiukajtis
1102*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0
1103*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
1104*25c28e83SPiotr Jasiukajtis	sub	x0,stridex,x0
1105*25c28e83SPiotr Jasiukajtis	sub	counter,1,counter
1106*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1107*25c28e83SPiotr Jasiukajtis	or	%g0,1,counter
1108*25c28e83SPiotr Jasiukajtis	ba	.cont18
1109*25c28e83SPiotr Jasiukajtis	nop
1110*25c28e83SPiotr Jasiukajtis
1111*25c28e83SPiotr Jasiukajtis	.align	16
1112*25c28e83SPiotr Jasiukajtis.update19:
1113*25c28e83SPiotr Jasiukajtis	cmp	counter,1
1114*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont19
1115*25c28e83SPiotr Jasiukajtis	nop
1116*25c28e83SPiotr Jasiukajtis
1117*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0
1118*25c28e83SPiotr Jasiukajtis	sub	counter,1,counter
1119*25c28e83SPiotr Jasiukajtis	stx	x0,[%fp+tmp5]
1120*25c28e83SPiotr Jasiukajtis	sub	x0, stridex, x0
1121*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1122*25c28e83SPiotr Jasiukajtis	or	%g0,1,counter
1123*25c28e83SPiotr Jasiukajtis	ba	.cont19
1124*25c28e83SPiotr Jasiukajtis	nop
1125*25c28e83SPiotr Jasiukajtis
1126*25c28e83SPiotr Jasiukajtis	.align	16
1127*25c28e83SPiotr Jasiukajtis.update20:
1128*25c28e83SPiotr Jasiukajtis	cmp	counter,2
1129*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont20
1130*25c28e83SPiotr Jasiukajtis	nop
1131*25c28e83SPiotr Jasiukajtis
1132*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1133*25c28e83SPiotr Jasiukajtis	sub	counter,2,counter
1134*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1135*25c28e83SPiotr Jasiukajtis	or	%g0,2,counter
1136*25c28e83SPiotr Jasiukajtis	ba	.cont20
1137*25c28e83SPiotr Jasiukajtis	nop
1138*25c28e83SPiotr Jasiukajtis
1139*25c28e83SPiotr Jasiukajtis	.align	16
1140*25c28e83SPiotr Jasiukajtis.update21:
1141*25c28e83SPiotr Jasiukajtis	cmp	counter,2
1142*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont21
1143*25c28e83SPiotr Jasiukajtis	nop
1144*25c28e83SPiotr Jasiukajtis
1145*25c28e83SPiotr Jasiukajtis	stx x1,[%fp+tmp5]
1146*25c28e83SPiotr Jasiukajtis	sub	counter, 2, counter
1147*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1148*25c28e83SPiotr Jasiukajtis	or	%g0,2,counter
1149*25c28e83SPiotr Jasiukajtis	ba	.cont21
1150*25c28e83SPiotr Jasiukajtis	nop
1151*25c28e83SPiotr Jasiukajtis
1152*25c28e83SPiotr Jasiukajtis	.align	16
1153*25c28e83SPiotr Jasiukajtis.update22:
1154*25c28e83SPiotr Jasiukajtis	cmp	counter,3
1155*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont22
1156*25c28e83SPiotr Jasiukajtis	nop
1157*25c28e83SPiotr Jasiukajtis
1158*25c28e83SPiotr Jasiukajtis	add	x1,stridex,x1
1159*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1160*25c28e83SPiotr Jasiukajtis	sub	x1,stridex,x1
1161*25c28e83SPiotr Jasiukajtis	sub	counter,3,counter
1162*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1163*25c28e83SPiotr Jasiukajtis	or	%g0,3,counter
1164*25c28e83SPiotr Jasiukajtis	ba	.cont22
1165*25c28e83SPiotr Jasiukajtis	nop
1166*25c28e83SPiotr Jasiukajtis
1167*25c28e83SPiotr Jasiukajtis	.align	16
1168*25c28e83SPiotr Jasiukajtis.update23:
1169*25c28e83SPiotr Jasiukajtis	cmp	counter,3
1170*25c28e83SPiotr Jasiukajtis	ble,pt	%icc, .cont23
1171*25c28e83SPiotr Jasiukajtis	nop
1172*25c28e83SPiotr Jasiukajtis
1173*25c28e83SPiotr Jasiukajtis	add	x1,stridex,x1
1174*25c28e83SPiotr Jasiukajtis	stx	x1,[%fp+tmp5]
1175*25c28e83SPiotr Jasiukajtis	sub	x1,stridex,x1
1176*25c28e83SPiotr Jasiukajtis	sub	counter,3,counter
1177*25c28e83SPiotr Jasiukajtis	st	counter,[%fp+tmp0]
1178*25c28e83SPiotr Jasiukajtis	or	%g0,3,counter
1179*25c28e83SPiotr Jasiukajtis	ba	.cont23
1180*25c28e83SPiotr Jasiukajtis	nop
1181*25c28e83SPiotr Jasiukajtis
1182*25c28e83SPiotr Jasiukajtis	.align	16
1183*25c28e83SPiotr Jasiukajtis.spec:
1184*25c28e83SPiotr Jasiukajtis	or	%g0,1,ind3			! ind3 = 1
1185*25c28e83SPiotr Jasiukajtis	sll	ind3,31,ind3			! ind3 = 0x8000000
1186*25c28e83SPiotr Jasiukajtis	add	x0,stridex,x0			! x += stridex
1187*25c28e83SPiotr Jasiukajtis	sub	ind3,1,ind3			! ind3 = 0x7ffffff
1188*25c28e83SPiotr Jasiukajtis	add	y,stridey,y			! y += stridey
1189*25c28e83SPiotr Jasiukajtis	and	ival0,ind3,iy0			! ival & 0x7fffffff
1190*25c28e83SPiotr Jasiukajtis	cmp	iy0,MASK_0x7f800000		! if ((ival & 0x7fffffff) >= 0x7f800000)
1191*25c28e83SPiotr Jasiukajtis	bge,pn	%icc, .spec0			! if ((ival & 0x7fffffff) >= 0x7f800000)
1192*25c28e83SPiotr Jasiukajtis	st	ival0,[%fp+tmp1]
1193*25c28e83SPiotr Jasiukajtis	cmp	ival0,0				! if (ival <= 0)
1194*25c28e83SPiotr Jasiukajtis	ble,pn	%icc,.spec1			! if (ival <= 0)
1195*25c28e83SPiotr Jasiukajtis	nop
1196*25c28e83SPiotr Jasiukajtis
1197*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp1],%f12
1198*25c28e83SPiotr Jasiukajtis	fitos	%f12,%f14			! value = (float) ival
1199*25c28e83SPiotr Jasiukajtis	st	%f14,[%fp+tmp2]			! ival = *(int*) &value
1200*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp2],ival0		! ival = *(int*) &value
1201*25c28e83SPiotr Jasiukajtis
1202*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0x007fffff,iy0	!  iy = ival & 0x007fffff
1203*25c28e83SPiotr Jasiukajtis	sra	ival0,23,ival2			!  iexp = ival >> 23
1204*25c28e83SPiotr Jasiukajtis
1205*25c28e83SPiotr Jasiukajtis	add	iy0,CONST_0x20000,ival0		!  ival = iy + 0x20000
1206*25c28e83SPiotr Jasiukajtis	sub	ival2,149,ival2			!  iexp = iexp - 149
1207*25c28e83SPiotr Jasiukajtis
1208*25c28e83SPiotr Jasiukajtis	and	ival0,MASK_0xfffc0000,ival0	!  ival = ival & 0xfffc0000
1209*25c28e83SPiotr Jasiukajtis	st 	ival2,[%fp+tmp2]		!  (double) iexp
1210*25c28e83SPiotr Jasiukajtis
1211*25c28e83SPiotr Jasiukajtis	sub	iy0,ival0,iy0			!  iy = iy - ival
1212*25c28e83SPiotr Jasiukajtis
1213*25c28e83SPiotr Jasiukajtis	sra	ival0,14,ival0			!  i  = ival >> 14;
1214*25c28e83SPiotr Jasiukajtis	st	iy0,[%fp+tmp1]			!  (double) iy
1215*25c28e83SPiotr Jasiukajtis
1216*25c28e83SPiotr Jasiukajtis	and	ival0,-8,ind0			!  ind  = i & (-8)
1217*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp1],%f2			!  (double) iy
1218*25c28e83SPiotr Jasiukajtis
1219*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL_P8+ind0],%f14		!  ldtmp1 = *(double*)((char*)CONST_TBL+ind+8)
1220*25c28e83SPiotr Jasiukajtis	fitod	%f2,%f48			!  yy = (double) iy
1221*25c28e83SPiotr Jasiukajtis
1222*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f14,%f46			!  yy = yy * ldtmp1
1223*25c28e83SPiotr Jasiukajtis
1224*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp2],%f6			!  (double) iexp
1225*25c28e83SPiotr Jasiukajtis	fmuld	K3,%f46,%f22			!  dtmp0 = K3 * yy
1226*25c28e83SPiotr Jasiukajtis
1227*25c28e83SPiotr Jasiukajtis	ldd	[LOGFTBL+ind0],%f42		!  ldtmp0 = *(double*)((char*)CONST_TBL+ind)
1228*25c28e83SPiotr Jasiukajtis	faddd	%f22,K2,%f48			!  dtmp1 = dtmp0 + K2
1229*25c28e83SPiotr Jasiukajtis
1230*25c28e83SPiotr Jasiukajtis	fmuld	%f48,%f46,%f50			!  dtmp2 = dtmp1 * yy
1231*25c28e83SPiotr Jasiukajtis
1232*25c28e83SPiotr Jasiukajtis	faddd	%f50,K1,%f50			!  dtmp3 = dtmp2 + K1
1233*25c28e83SPiotr Jasiukajtis
1234*25c28e83SPiotr Jasiukajtis	fitod	%f6,%f40			!  (double) iexp
1235*25c28e83SPiotr Jasiukajtis	fmuld	%f50,%f46,%f52			!  dtmp4 = dtmp3 * yy
1236*25c28e83SPiotr Jasiukajtis
1237*25c28e83SPiotr Jasiukajtis	fmuld	LN2,%f40,%f40			!  ty = LN2 * (double) iexp
1238*25c28e83SPiotr Jasiukajtis	faddd	%f52,K0,%f22			!  dtmp5 = dtmp4 + K0
1239*25c28e83SPiotr Jasiukajtis
1240*25c28e83SPiotr Jasiukajtis	fmuld	%f22,%f46,%f22			!  yy = dtmp5 * yy
1241*25c28e83SPiotr Jasiukajtis	fsubd	%f40,%f42,%f40			!  ty = ty - ldtmp0
1242*25c28e83SPiotr Jasiukajtis
1243*25c28e83SPiotr Jasiukajtis	faddd	%f22,%f40,%f48			!  yy = yy + ty
1244*25c28e83SPiotr Jasiukajtis
1245*25c28e83SPiotr Jasiukajtis	fdtos	%f48,%f4			!  (float)(yy)
1246*25c28e83SPiotr Jasiukajtis
1247*25c28e83SPiotr Jasiukajtis	ba	.begin1
1248*25c28e83SPiotr Jasiukajtis	st	%f4,[y]				! write into memory
1249*25c28e83SPiotr Jasiukajtis
1250*25c28e83SPiotr Jasiukajtis	.align	16
1251*25c28e83SPiotr Jasiukajtis.spec0:
1252*25c28e83SPiotr Jasiukajtis	ld	[%fp+tmp1],%f12			! value = *(float*) &ival
1253*25c28e83SPiotr Jasiukajtis	fzeros	%f2				! y[0] = (value < 0.0f?
1254*25c28e83SPiotr Jasiukajtis	fcmps	%fcc0,%f12,%f2			!   0.0f : value) * value
1255*25c28e83SPiotr Jasiukajtis	fmovsug	%fcc0,%f12,%f2
1256*25c28e83SPiotr Jasiukajtis	fmuls	%f12,%f2,%f2
1257*25c28e83SPiotr Jasiukajtis	ba	.begin1
1258*25c28e83SPiotr Jasiukajtis	st	%f2,[y]				! write into memory
1259*25c28e83SPiotr Jasiukajtis
1260*25c28e83SPiotr Jasiukajtis	.align	16
1261*25c28e83SPiotr Jasiukajtis.spec1:
1262*25c28e83SPiotr Jasiukajtis	cmp	iy0,0				! if ((ival & 0x7fffffff) == 0)
1263*25c28e83SPiotr Jasiukajtis	bne,pn	%icc,.spec2			! if ((ival & 0x7fffffff) == 0)
1264*25c28e83SPiotr Jasiukajtis	nop
1265*25c28e83SPiotr Jasiukajtis	ld	[LOGFTBL+568],%f4
1266*25c28e83SPiotr Jasiukajtis	fdivs	%f4,ZERO,%f6			! y[0] = -1.0f / 0f
1267*25c28e83SPiotr Jasiukajtis	ba	.begin1
1268*25c28e83SPiotr Jasiukajtis	st	%f6,[y]				! write into memory
1269*25c28e83SPiotr Jasiukajtis
1270*25c28e83SPiotr Jasiukajtis	.align	16
1271*25c28e83SPiotr Jasiukajtis.spec2:
1272*25c28e83SPiotr Jasiukajtis	fdivs	ZERO,ZERO,%f6			! y[0] = 0f / 0f
1273*25c28e83SPiotr Jasiukajtis	ba	.begin1
1274*25c28e83SPiotr Jasiukajtis	st	%f6,[y]				! write into memory
1275*25c28e83SPiotr Jasiukajtis
1276*25c28e83SPiotr Jasiukajtis	SET_SIZE(__vlogf)
1277*25c28e83SPiotr Jasiukajtis
1278