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