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