/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2011 Nexenta Systems, Inc. All rights reserved. */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .file "__vlogf.S" #include "libm.h" RO_DATA .align 64 !! CONST_TBL[2*i] = 127*log(2) - log(1+i/32), i = [0, 32] !! CONST_TBL[2*i+1] = 2**(-23)/(1+i/32), i = [0, 32] .CONST_TBL: .word 0x405601e6, 0x78fc457b, 0x3e800000, 0x00000000, .word 0x4055ffee, 0x4f4b5df8, 0x3e7f07c1, 0xf07c1f08, .word 0x4055fe05, 0x32e4434f, 0x3e7e1e1e, 0x1e1e1e1e, .word 0x4055fc2a, 0x44598c21, 0x3e7d41d4, 0x1d41d41d, .word 0x4055fa5c, 0xb720babf, 0x3e7c71c7, 0x1c71c71c, .word 0x4055f89b, 0xcf803581, 0x3e7bacf9, 0x14c1bad0, .word 0x4055f6e6, 0xe0c3f1b1, 0x3e7af286, 0xbca1af28, .word 0x4055f53d, 0x4badcb50, 0x3e7a41a4, 0x1a41a41a, .word 0x4055f39e, 0x7d18782e, 0x3e799999, 0x9999999a, .word 0x4055f209, 0xecc5965c, 0x3e78f9c1, 0x8f9c18fa, .word 0x4055f07f, 0x1c5099d5, 0x3e786186, 0x18618618, .word 0x4055eefd, 0x9641645e, 0x3e77d05f, 0x417d05f4, .word 0x4055ed84, 0xed3a291d, 0x3e7745d1, 0x745d1746, .word 0x4055ec14, 0xbb3ced72, 0x3e76c16c, 0x16c16c17, .word 0x4055eaac, 0xa10589ab, 0x3e7642c8, 0x590b2164, .word 0x4055e94c, 0x45758439, 0x3e75c988, 0x2b931057, .word 0x4055e7f3, 0x550f85e3, 0x3e755555, 0x55555555, .word 0x4055e6a1, 0x818078ec, 0x3e74e5e0, 0xa72f0539, .word 0x4055e556, 0x8134aae1, 0x3e747ae1, 0x47ae147b, .word 0x4055e412, 0x0ef783b7, 0x3e741414, 0x14141414, .word 0x4055e2d3, 0xe99c9674, 0x3e73b13b, 0x13b13b14, .word 0x4055e19b, 0xd3b0f9d9, 0x3e73521c, 0xfb2b78c1, .word 0x4055e069, 0x9333fb26, 0x3e72f684, 0xbda12f68, .word 0x4055df3c, 0xf1565bd0, 0x3e729e41, 0x29e4129e, .word 0x4055de15, 0xba3f64fa, 0x3e724924, 0x92492492, .word 0x4055dcf3, 0xbcd73219, 0x3e71f704, 0x7dc11f70, .word 0x4055dbd6, 0xca95a75a, 0x3e71a7b9, 0x611a7b96, .word 0x4055dabe, 0xb7559927, 0x3e715b1e, 0x5f75270d, .word 0x4055d9ab, 0x592bb896, 0x3e711111, 0x11111111, .word 0x4055d89c, 0x8840e4fe, 0x3e70c971, 0x4fbcda3b, .word 0x4055d792, 0x1eaf8df0, 0x3e708421, 0x08421084, .word 0x4055d68b, 0xf863da3d, 0x3e704104, 0x10410410, .word 0x4055d589, 0xf2fe5107, 0x3e700000, 0x00000000, .word 0xbfcffb16, 0xbfa3db6e, ! K3 = -2.49850123953105416108e-01 .word 0x3fd5561b, 0xa4b3110b, ! K2 = 3.33380614127478394992e-01 .word 0xbfe00000, 0x0b666d0b, ! K1 = -5.00000021234343492201e-01 .word 0x3fefffff, 0xff3fd118, ! K0 = 9.99999998601683029714e-01 .word 0x3fe62e42, 0xfefa39ef, ! LN2 = 6.931471805599452862e-01 .word 0xbf800000, 0x7f800000, ! MONE = -1.0f ; INF ! local storage indices #define tmp0 STACK_BIAS-0x8 #define tmp1 STACK_BIAS-0x10 #define tmp2 STACK_BIAS-0x18 #define tmp3 STACK_BIAS-0x20 #define tmp4 STACK_BIAS-0x28 #define tmp5 STACK_BIAS-0x30 ! sizeof temp storage - must be a multiple of 16 for V9 #define tmps 0x30 #define ZERO %f28 #define K3 %f30 #define K2 %f32 #define K1 %f34 #define K0 %f36 #define LN2 %f38 #define stridex %o0 #define stridex2 %o1 #define stridey %o2 #define x0 %o3 #define x1 %o4 #define y %o5 #define ind0 %i0 #define ind1 %i1 #define ind2 %i2 #define ind3 %i3 #define MASK_0x007fffff %i4 #define MASK_0xfffc0000 %i5 #define CONST_0x20000 %o7 #define MASK_0x7f800000 %l3 #define ival0 %l0 #define iy0 %l1 #define ival1 %l2 #define iy1 %l1 #define ival2 %l4 #define iy2 %l5 #define ival3 %l6 #define iy3 %l2 #define counter %l7 #define LOGFTBL %g5 #define LOGFTBL_P8 %g1 ! register use ! i0 ind0 ! i1 ind1 ! i2 ind2 ! i3 ind3 ! i4 0x007fffff ! i5 0xfffc0000 ! l0 ival0 ! l1 iy0, iy1 ! l2 ival1, iy3 ! l3 0x7f800000 ! l4 ival2 ! l5 iy2 ! l6 ival3 ! l7 cycle counter ! o0 stridex ! o1 stridex * 2 ! o2 stridey ! o3 x ! o4 x ! o5 y ! o7 0x20000 ! g1 CONST_TBL ! g5 CONST_TBL + 8 ! f2 ! f4 ! f6 ! f8 ! f9 ! f10 ! f12 ! f14 ! f16 ! f18 ! f19 ! f20 ! f22 ! f24 ! f26 ! f28 ZERO = 0 ! f30 K3 = -2.49850123953105416108e-01 ! f32 K2 = 3.33380614127478394992e-01 ! f34 K1 = -5.00000021234343492201e-01 ! f36 K0 = 9.99999998601683029714e-01 ! f38 LN2 = 6.931471805599452862e-01 ! f40 ! f42 ! f44 ! f46 ! f48 ! f50 ! f52 ! f54 ! f56 ! f58 ! f60 ! f62 ! !!!!! Algorithm !!!!! ! ! double exp, ty, yy, ldtmp0, ldtmp1; ! double dtmp0, dtmp1, dtmp2, dtmp3, dtmp4, dtmp5; ! float value; ! int ival, iy, i, ind, iexp; ! double K3 = -2.49850123953105416108e-01; ! double K2 = 3.33380614127478394992e-01; ! double K1 = -5.00000021234343492201e-01; ! double K0 = 9.99999998601683029714e-01; ! double LN2 = 6.931471805599452862e-01; ! double ZERO = 0; ! float INF; ! ! ival = *(int*)(x); ! if (ival >= 0x7f800000) goto spec; ! if (ival <= 0x7fffff) goto spec; ! *(float*)&*(float*)&exp = *(float*)(x); ! exp = vis_fpack32(ZERO, exp); ! iy = ival & 0x007fffff; ! ival = iy + 0x20000; ! ival = ival & 0xfffc0000; ! i = ival >> 14; ! ind = i & (-8); ! iy = iy - ival; ! ty = LN2 * (double)(*(int*)&exp); ! ldtmp0 = *(double*)((char*)CONST_TBL+ind); ! ldtmp1 = *(double*)((char*)CONST_TBL+ind+8); ! ty = ty - ldtmp0; ! yy = (double) iy; ! yy = yy * ldtmp1; ! dtmp0 = K3 * yy; ! dtmp1 = dtmp0 + K2; ! dtmp2 = dtmp1 * yy; ! dtmp3 = dtmp2 + K1; ! dtmp4 = dtmp3 * yy; ! dtmp5 = dtmp4 + K0; ! yy = dtmp5 * yy; ! yy = yy + ty; ! y[0] = (float)(yy); ! return; ! !spec: ! if ((ival & 0x7fffffff) >= 0x7f800000) { /* X = NaN or Inf */ ! value = *(float*) &ival; ! y[0] = (value < 0.0f? 0.0f : value) * value; ! return; ! } else if (ival <= 0) { ! y[0] = ((ival & 0x7fffffff) == 0) ? ! -1.0f / 0f. : 0f. /0f.; /* X = +-0 : X < 0 */ ! return; ! } else { /* Denom. number */ ! value = (float) ival; ! ival = *(int*) &value; ! iexp = (ival >> 23) - 149; ! iy = ival & 0x007fffff; ! ival = iy + 0x20000; ! ival = ival & 0xfffc0000; ! i = ival >> 14; ! ind = i & (-8); ! iy = iy - ival; ! ty = LN2 * (double)iexp; ! ldtmp0 = *(double*)((char*)CONST_TBL+ind); ! ldtmp1 = *(double*)((char*)CONST_TBL+ind+8); ! ty = ty - ldtmp0; ! yy = (double) iy; ! yy = yy * ldtmp1; ! dtmp0 = K3 * yy; ! dtmp1 = dtmp0 + K2; ! dtmp2 = dtmp1 * yy; ! dtmp3 = dtmp2 + K1; ! dtmp4 = dtmp3 * yy; ! dtmp5 = dtmp4 + K0; ! yy = dtmp5 * yy; ! yy = yy + ty; ! y[0] = (float)(yy); ! return; ! } !-------------------------------------------------------------------- ENTRY(__vlogf) save %sp,-SA(MINFRAME)-tmps,%sp PIC_SETUP(l7) PIC_SET(l7,.CONST_TBL,g5) wr %g0,0,%gsr st %i0,[%fp+tmp0] stx %i1,[%fp+tmp5] sra %i2,0,%l4 ldd [LOGFTBL+528],K3 add %i3,0,y sllx %l4,2,stridex sllx %l4,3,stridex2 ldd [LOGFTBL+536],K2 sra %i4,0,%l3 ldd [LOGFTBL+544],K1 sllx %l3,2,stridey sethi %hi(0x7ffc00),MASK_0x007fffff add MASK_0x007fffff,1023,MASK_0x007fffff ldd [LOGFTBL+552],K0 sethi %hi(0xfffc0000),MASK_0xfffc0000 ldd [LOGFTBL+560],LN2 sethi %hi(0x20000),CONST_0x20000 fzero ZERO sethi %hi(0x7f800000),MASK_0x7f800000 sub y,stridey,y .begin: ld [%fp+tmp0],counter ldx [%fp+tmp5],x0 st %g0,[%fp+tmp0] .begin1: add x0,stridex2,x1! x += 2*stridex subcc counter,1,counter bneg,pn %icc,.end lda [x0]0x82,ival0 ! (Y0_0) ival = *(int*)(x) add LOGFTBL,8,LOGFTBL_P8 lda [stridex+x0]0x82,ival1 ! (Y1_0) ival = *(int*)(x) cmp ival0,MASK_0x7f800000 ! (Y0_0) if (ival >= 0x7f800000) lda [x1]0x82,ival2 ! (Y2_0) ival = *(int*)(x); bge,pn %icc,.spec ! (Y0_0) if (ival >= 0x7f800000) nop cmp ival0,MASK_0x007fffff ! (Y0_0) if (ival <= 0x7fffff) ble,pn %icc,.spec ! (Y0_0) if (ival <= 0x7fffff) nop cmp ival1,MASK_0x7f800000 ! (Y1_0) if (ival >= 0x7f800000) and ival0,MASK_0x007fffff,iy0 ! (Y0_0) iy = ival & 0x007fffff add iy0,CONST_0x20000,ival0 ! (Y0_0) ival = iy + 0x20000 and ival0,MASK_0xfffc0000,ival0 ! (Y0_0) ival = ival & 0xfffc0000 bge,pn %icc,.update2 ! (Y1_0) if (ival >= 0x7f800000) nop .cont2: sub iy0,ival0,iy0 ! (Y0_0) iy = iy - ival cmp ival1,MASK_0x007fffff ! (Y1_0) if (ival <= 0x7fffff) lda [stridex+x1]0x82,ival3 ! (Y3_0) ival = *(int*)(x) st iy0,[%fp+tmp1] ! (Y0_0) (double) iy ble,pn %icc,.update3 ! (Y1_0) if (ival <= 0x7fffff) nop .cont3: cmp ival2,MASK_0x7f800000 ! (Y2_0) if (ival >= 0x7f800000) and ival1,MASK_0x007fffff,iy1 ! (Y1_0) iy = ival & 0x007fffff bge,pn %icc,.update4 ! (Y2_0) if (ival >= 0x7f800000) nop .cont4: cmp ival2,MASK_0x007fffff ! (Y2_0) if (ival <= 0x7fffff) ble,pn %icc,.update5 ! (Y2_0) if (ival <= 0x7fffff) nop .cont5: add iy1,CONST_0x20000,ival1 ! (Y1_0) ival = iy + 0x20000 and ival2,MASK_0x007fffff,iy2 ! (Y2_0) iy = ival & 0x007fffff and ival1,MASK_0xfffc0000,ival1 ! (Y1_0) ival = ival & 0xfffc0000 add iy2,CONST_0x20000,ival2 ! (Y2_0) ival = iy + 0x20000 sub iy1,ival1,iy1 ! (Y1_0) iy = iy - ival and ival2,MASK_0xfffc0000,ival2 ! (Y2_0) ival = ival & 0xfffc0000 cmp ival3,MASK_0x7f800000 ! (Y3_0) (ival >= 0x7f800000) sub iy2,ival2,iy2 ! (Y2_0) iy = iy - ival st iy1,[%fp+tmp3] ! (Y1_0) (double) iy st iy2,[%fp+tmp2] ! (Y2_0) (double) iy bge,pn %icc,.update6 ! (Y3_0) (ival >= 0x7f800000) nop .cont6: cmp ival3,MASK_0x007fffff ! (Y3_0) if (ival <= 0x7fffff) ld [%fp+tmp1],%f2 ! (Y0_0) (double) iy ble,pn %icc,.update7 ! (Y3_0) if (ival <= 0x7fffff) sra ival0,14,ival0 ! (Y0_0) i = ival >> 14; .cont7: sra ival1,14,ind1 ! (Y1_0) i = ival >> 14; ld [%fp+tmp3],%f4 ! (Y1_0) (double) iy sra ival2,14,ival2 ! (Y2_0) i = ival >> 14; and ival0,-8,ind0 ! (Y0_0) ind = i & (-8) lda [x0]0x82,%f6 ! (Y0_0) *(float*)&exp = *(float*)(x) and ind1,-8,ind1 ! (Y1_0) ind = i & (-8) ldd [LOGFTBL_P8+ind0],%f14 ! (Y0_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fitod %f2,%f48 ! (Y0_0) yy = (double) iy and ival3,MASK_0x007fffff,iy3 ! (Y3_0) iy = ival & 0x007fffff lda [stridex+x0]0x82,%f8 ! (Y1_0) *(float*)&exp = *(float*)(x) add iy3,CONST_0x20000,ival3 ! (Y3_0) iy + 0x20000 ldd [LOGFTBL_P8+ind1],%f16 ! (Y1_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fitod %f4,%f26 ! (Y1_0) yy = (double) iy sub y,stridey,y ! y += stridey and ival3,MASK_0xfffc0000,ival3 ! (Y3_0) ival = ival & 0xfffc0000 lda [x1]0x82,%f10 ! (Y2_0) *(float*)&exp = *(float*)(x) add x1,stridex2,x0 ! x += 2*stridex sub iy3,ival3,iy3 ! (Y3_0) iy = iy - ival ld [%fp+tmp2],%f2 ! (Y2_0) (double) iy fmuld %f48,%f14,%f46 ! (Y0_0) yy = yy * ldtmp1 lda [stridex+x1]0x82,%f12 ! (Y3_0) *(float*)&exp = *(float*)(x) fmuld %f26,%f16,%f62 ! (Y1_0) yy = yy * ldtmp1 sra ival3,14,ival3 ! (Y3_0) i = ival >> 14; lda [x0]0x82,ival0 ! (Y0_1) ival = *(int*)(x) add x0,stridex2,x1 ! x += 2*stridex st iy3,[%fp+tmp3] ! (Y3_0) (double) iy fmuld K3,%f46,%f22 ! (Y0_0) dtmp0 = K3 * yy and ival2,-8,ind2 ! (Y2_0) ind = i & (-8) lda [stridex+x0]0x82,ival1 ! (Y1_1) ival = *(int*)(x) cmp ival0,MASK_0x7f800000 ! (Y0_1) if (ival >= 0x7f800000) lda [x1]0x82,ival2 ! (Y2_1) ival = *(int*)(x); fmuld K3,%f62,%f50 ! (Y1_0) dtmp0 = K3 * yy bge,pn %icc,.update8 ! (Y0_1) if (ival >= 0x7f800000) nop .cont8: cmp ival0,MASK_0x007fffff ! (Y0_1) if (ival <= 0x7fffff) ble,pn %icc,.update9 ! (Y0_1) if (ival <= 0x7fffff) faddd %f22,K2,%f48 ! (Y0_0) dtmp1 = dtmp0 + K2 .cont9: cmp ival1,MASK_0x7f800000 ! (Y1_1) if (ival >= 0x7f800000) and ival0,MASK_0x007fffff,iy0 ! (Y0_1) iy = ival & 0x007fffff add iy0,CONST_0x20000,ival0 ! (Y0_1) ival = iy + 0x20000 ldd [LOGFTBL_P8+ind2],%f14 ! (Y2_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8); fpack32 ZERO,%f6,%f6 ! (Y0_0) exp = vis_fpack32(ZERO, exp) and ival0,MASK_0xfffc0000,ival0 ! (Y0_1) ival = ival & 0xfffc0000 faddd %f50,K2,%f26 ! (Y1_0) dtmp1 = dtmp0 + K2 bge,pn %icc,.update10 ! (Y1_1) if (ival >= 0x7f800000) nop .cont10: sub iy0,ival0,iy0 ! (Y0_1) iy = iy - ival and ival3,-8,ind3 ! (Y3_0) ind = i & (-8) ld [%fp+tmp3],%f4 ! (Y3_0) (double) iy cmp ival1,MASK_0x007fffff ! (Y1_1) if (ival <= 0x7fffff) lda [stridex+x1]0x82,ival3 ! (Y3_1) ival = *(int*)(x) fmuld %f48,%f46,%f50 ! (Y0_0) dtmp2 = dtmp1 * yy fitod %f2,%f48 ! (Y2_0) yy = (double) iy st iy0,[%fp+tmp1] ! (Y0_1) (double) iy ble,pn %icc,.update11 ! (Y1_1) if (ival <= 0x7fffff) nop .cont11: cmp ival2,MASK_0x7f800000 ! (Y2_1) if (ival >= 0x7f800000) and ival1,MASK_0x007fffff,iy1 ! (Y1_1) iy = ival & 0x007fffff bge,pn %icc,.update12 ! (Y2_1) if (ival >= 0x7f800000) fmuld %f26,%f62,%f42 ! (Y1_0) dtmp2 = dtmp1 * yy .cont12: cmp ival2,MASK_0x007fffff ! (Y2_1) if (ival <= 0x7fffff) ldd [LOGFTBL_P8+ind3],%f16 ! (Y3_0) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) ble,pn %icc,.update13 ! (Y2_1) if (ival <= 0x7fffff) fitod %f4,%f26 ! (Y3_0) yy = (double) iy .cont13: add iy1,CONST_0x20000,ival1 ! (Y1_1) ival = iy + 0x20000 and ival2,MASK_0x007fffff,iy2 ! (Y2_1) iy = ival & 0x007fffff and ival1,MASK_0xfffc0000,ival1 ! (Y1_1) ival = ival & 0xfffc0000 add iy2,CONST_0x20000,ival2 ! (Y2_1) ival = iy + 0x20000 fmuld %f48,%f14,%f44 ! (Y2_0) yy = yy * ldtmp1 faddd %f50,K1,%f50 ! (Y0_0) dtmp3 = dtmp2 + K1 cmp ival3,MASK_0x7f800000 ! (Y3_1) if (ival >= 0x7f800000) sub iy1,ival1,iy1 ! (Y1_1) iy = iy - ival and ival2,MASK_0xfffc0000,ival2 ! (Y2_1) ival = ival & 0xfffc0000 fpack32 ZERO,%f8,%f8 ! (Y1_0) exp = vis_fpack32(ZERO, exp) sub iy2,ival2,iy2 ! (Y2_1) iy = iy - ival st iy1,[%fp+tmp3] ! (Y1_1) (double) iy fmuld %f26,%f16,%f60 ! (Y3_0) yy = yy * ldtmp1 faddd %f42,K1,%f54 ! (Y1_0) dtmp3 = dtmp2 + K1 st iy2,[%fp+tmp2] ! (Y2_1) (double) iy fmuld K3,%f44,%f22 ! (Y2_0) dtmp0 = K3 * yy bge,pn %icc,.update14 ! (Y3_1) if (ival >= 0x7f800000) fitod %f6,%f40 ! (Y0_0) (double)(*(int*)&exp) .cont14: cmp ival3,MASK_0x007fffff ! (Y3_1) if (ival <= 0x7fffff) ldd [LOGFTBL+ind1],%f58 ! (Y1_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld %f50,%f46,%f52 ! (Y0_0) dtmp4 = dtmp3 * yy fitod %f8,%f56 ! (Y1_0) (double)(*(int*)&exp) ld [%fp+tmp1],%f2 ! (Y0_1) (double) iy fmuld K3,%f60,%f50 ! (Y3_0) dtmp0 = K3 * yy ble,pn %icc,.update15 ! (Y3_1) if (ival <= 0x7fffff) nop .cont15: subcc counter,7,counter fmuld %f54,%f62,%f54 ! (Y1_0) dtmp4 = dtmp3 * yy sra ival0,14,ival0 ! (Y0_1) i = ival >> 14; bneg,pn %icc,.tail faddd %f22,K2,%f48 ! (Y2_0) dtmp1 = dtmp0 + K2 ba .main_loop nop .align 16 .main_loop: sra ival2,14,ival2 ! (Y2_1) i = ival >> 14; ldd [LOGFTBL+ind0],%f42 ! (Y0_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld LN2,%f40,%f40 ! (Y0_0) ty = LN2 * (double)(*(int*)&exp) faddd %f52,K0,%f22 ! (Y0_0) dtmp5 = dtmp4 + K0 sra ival1,14,ind1 ! (Y1_1) i = ival >> 14; ld [%fp+tmp3],%f4 ! (Y1_1) (double) iy fpack32 ZERO,%f10,%f18 ! (Y2_0) exp = vis_fpack32(ZERO, exp) faddd %f50,K2,%f26 ! (Y3_0) dtmp1 = dtmp0 + K2 and ival0,-8,ind0 ! (Y0_1) ind = i & (-8) lda [x0]0x82,%f6 ! (Y0_1) *(float*)&exp = *(float*)(x) fmuld LN2,%f56,%f56 ! (Y1_0) LN2 * (double)(*(int*)&exp) faddd %f54,K0,%f24 ! (Y1_0) dtmp5 = dtmp4 + K0 and ind1,-8,ind1 ! (Y1_1) ind = i & (-8) ldd [LOGFTBL_P8+ind0],%f14 ! (Y0_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fmuld %f48,%f44,%f50 ! (Y2_0) dtmp2 = dtmp1 * yy fitod %f2,%f48 ! (Y0_1) yy = (double) iy and ival3,MASK_0x007fffff,iy3 ! (Y3_1) iy = ival & 0x007fffff lda [stridex+x0]0x82,%f8 ! (Y1_1) *(float*)&exp = *(float*)(x) fmuld %f22,%f46,%f22 ! (Y0_0) yy = dtmp5 * yy fsubd %f40,%f42,%f40 ! (Y0_0) ty = ty - ldtmp0 add iy3,CONST_0x20000,ival3 ! (Y3_1) iy + 0x20000 ldd [LOGFTBL_P8+ind1],%f16 ! (Y1_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fmuld %f26,%f60,%f42 ! (Y3_0) dtmp2 = dtmp1 * yy fitod %f4,%f26 ! (Y1_1) yy = (double) iy and ival3,MASK_0xfffc0000,ival3 ! (Y3_1) ival = ival & 0xfffc0000 lda [x1]0x82,%f10 ! (Y2_1) *(float*)&exp = *(float*)(x) fmuld %f24,%f62,%f24 ! (Y1_0) yy = dtmp5 * yy fsubd %f56,%f58,%f58 ! (Y1_0) ty = ty - ldtmp0 sub iy3,ival3,iy3 ! (Y3_1) iy = iy - ival ld [%fp+tmp2],%f2 ! (Y2_1) (double) iy fmuld %f48,%f14,%f46 ! (Y0_1) yy = yy * ldtmp1 faddd %f50,K1,%f50 ! (Y2_0) dtmp3 = dtmp2 + K1 add x1,stridex2,x0 ! x += 2*stridex st iy3,[%fp+tmp3] ! (Y3_1) (double) iy fpack32 ZERO,%f12,%f20 ! (Y3_0) exp = vis_fpack32(ZERO, exp) faddd %f22,%f40,%f48 ! (Y0_0) yy = yy + ty add y,stridey,y ! y += stridey lda [stridex+x1]0x82,%f12 ! (Y3_1) *(float*)&exp = *(float*)(x) fmuld %f26,%f16,%f62 ! (Y1_1) yy = yy * ldtmp1 faddd %f42,K1,%f54 ! (Y3_0) dtmp3 = dtmp2 + K1 sra ival3,14,ival3 ! (Y3_1) i = ival >> 14; add y,stridey,y ! y += stridey lda [x0]0x82,ival0 ! (Y0_2) ival = *(int*)(x) faddd %f24,%f58,%f24 ! (Y1_0) yy = yy + ty add x0,stridex2,x1 ! x += 2*stridex ldd [LOGFTBL+ind2],%f42 ! (Y2_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld K3,%f46,%f22 ! (Y0_1) dtmp0 = K3 * yy fitod %f18,%f40 ! (Y2_0) (double)(*(int*)&exp) and ival2,-8,ind2 ! (Y2_1) ind = i & (-8) lda [stridex+x0]0x82,ival1 ! (Y1_2) ival = *(int*)(x) fmuld %f50,%f44,%f52 ! (Y2_0) dtmp4 = dtmp3 * yy fitod %f20,%f56 ! (Y3_0) (double)(*(int*)&exp) cmp ival0,MASK_0x7f800000 ! (Y0_2) if (ival >= 0x7f800000) lda [x1]0x82,ival2 ! (Y2_2) ival = *(int*)(x); fmuld K3,%f62,%f50 ! (Y1_1) dtmp0 = K3 * yy fdtos %f48,%f4 ! (Y0_0) (float)(yy) st %f4,[y] ! (Y0_0) write into memory fmuld %f54,%f60,%f54 ! (Y3_0) dtmp4 = dtmp3 * yy bge,pn %icc,.update16 ! (Y0_2) if (ival >= 0x7f800000) fdtos %f24,%f4 ! (Y1_0) (float)(yy) .cont16: cmp ival0,MASK_0x007fffff ! (Y0_2) if (ival <= 0x7fffff ldd [LOGFTBL+ind3],%f58 ! (Y3_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) ble,pn %icc,.update17 ! (Y0_2) if (ival <= 0x7fffff faddd %f22,K2,%f48 ! (Y0_1) dtmp1 = dtmp0 + K2 .cont17: cmp ival1,MASK_0x7f800000 ! (Y1_2) if (ival >= 0x7f800000) and ival0,MASK_0x007fffff,iy0 ! (Y0_2) iy = ival & 0x007fffff st %f4,[stridey+y] ! (Y1_0) write into memory fmuld LN2,%f40,%f40 ! (Y2_0) ty = LN2 * (double)(*(int*)&exp) add iy0,CONST_0x20000,ival0 ! (Y0_2) ival = iy + 0x20000 ldd [LOGFTBL_P8+ind2],%f14 ! (Y2_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8); faddd %f52,K0,%f22 ! (Y2_0) dtmp5 = dtmp4 + K0 fpack32 ZERO,%f6,%f6 ! (Y0_1) exp = vis_fpack32(ZERO, exp) and ival0,MASK_0xfffc0000,ival0 ! (Y0_2) ival = ival & 0xfffc0000 faddd %f50,K2,%f26 ! (Y1_1) dtmp1 = dtmp0 + K2 bge,pn %icc,.update18 ! (Y1_2) if (ival >= 0x7f800000) fmuld LN2,%f56,%f56 ! (Y3_0) ty = LN2 * (double)(*(int*)&exp) .cont18: sub iy0,ival0,iy0 ! (Y0_2) iy = iy - ival and ival3,-8,ind3 ! (Y3_1) ind = i & (-8) ld [%fp+tmp3],%f4 ! (Y3_1) (double) iy faddd %f54,K0,%f24 ! (Y3_0) dtmp5 = dtmp4 + K0 cmp ival1,MASK_0x007fffff ! (Y1_2) if (ival <= 0x7fffff) lda [stridex+x1]0x82,ival3 ! (Y3_2) ival = *(int*)(x) fmuld %f48,%f46,%f50 ! (Y0_1) dtmp2 = dtmp1 * yy fitod %f2,%f48 ! (Y2_1) yy = (double) iy st iy0,[%fp+tmp1] ! (Y0_2) (double) iy fmuld %f22,%f44,%f22 ! (Y2_0) yy = dtmp5 * yy ble,pn %icc,.update19 ! (Y1_2) if (ival <= 0x7fffff) fsubd %f40,%f42,%f40 ! (Y2_0) ty = ty - ldtmp0 .cont19: cmp ival2,MASK_0x7f800000 ! (Y2_2) if (ival >= 0x7f800000) and ival1,MASK_0x007fffff,iy1 ! (Y1_2) iy = ival & 0x007fffff bge,pn %icc,.update20 ! (Y2_2) if (ival >= 0x7f800000) fmuld %f26,%f62,%f42 ! (Y1_1) dtmp2 = dtmp1 * yy .cont20: cmp ival2,MASK_0x007fffff ! (Y2_2) if (ival <= 0x7fffff) ldd [LOGFTBL_P8+ind3],%f16 ! (Y3_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) ble,pn %icc,.update21 ! (Y2_2) if (ival <= 0x7fffff) fitod %f4,%f26 ! (Y3_1) yy = (double) iy .cont21: add iy1,CONST_0x20000,ival1 ! (Y1_2) ival = iy + 0x20000 and ival2,MASK_0x007fffff,iy2 ! (Y2_2) iy = ival & 0x007fffff fmuld %f24,%f60,%f24 ! (Y3_0) yy = dtmp5 * yy fsubd %f56,%f58,%f58 ! (Y3_0) ty = ty - ldtmp0 and ival1,MASK_0xfffc0000,ival1 ! (Y1_2) ival = ival & 0xfffc0000 add iy2,CONST_0x20000,ival2 ! (Y2_2) ival = iy + 0x20000 fmuld %f48,%f14,%f44 ! (Y2_1) yy = yy * ldtmp1 faddd %f50,K1,%f50 ! (Y0_1) dtmp3 = dtmp2 + K1 sub iy1,ival1,iy1 ! (Y1_2) iy = iy - ival and ival2,MASK_0xfffc0000,ival2 ! (Y2_2) ival = ival & 0xfffc0000 fpack32 ZERO,%f8,%f8 ! (Y1_1) exp = vis_fpack32(ZERO, exp) faddd %f22,%f40,%f48 ! (Y2_0) yy = yy + ty sub iy2,ival2,iy2 ! (Y2_2) iy = iy - ival st iy1,[%fp+tmp3] ! (Y1_2) (double) iy fmuld %f26,%f16,%f60 ! (Y3_1) yy = yy * ldtmp1 faddd %f42,K1,%f54 ! (Y1_1) dtmp3 = dtmp2 + K1 cmp ival3,MASK_0x7f800000 ! (Y3_2) if (ival >= 0x7f800000) add y,stridey,y ! y += stridey st iy2,[%fp+tmp2] ! (Y2_2) (double) iy faddd %f24,%f58,%f24 ! (Y3_0) yy = yy + ty add y,stridey,y ! y += stridey fmuld K3,%f44,%f22 ! (Y2_1) dtmp0 = K3 * yy bge,pn %icc,.update22 ! (Y3_2) if (ival >= 0x7f800000) fitod %f6,%f40 ! (Y0_1)(double)(*(int*)&exp) .cont22: cmp ival3,MASK_0x007fffff ! (Y3_2) if (ival <= 0x7fffff) ldd [LOGFTBL+ind1],%f58 ! (Y1_1) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld %f50,%f46,%f52 ! (Y0_1) dtmp4 = dtmp3 * yy fitod %f8,%f56 ! (Y1_1) (double)(*(int*)&exp) ld [%fp+tmp1],%f2 ! (Y0_2) (double) iy fmuld K3,%f60,%f50 ! (Y3_1) dtmp0 = K3 * yy ble,pn %icc,.update23 ! (Y3_2) if (ival <= 0x7fffff) fdtos %f48,%f4 ! (Y2_0) (float)(yy) .cont23: subcc counter,4,counter ! update cycle counter st %f4,[y] ! (Y2_0) write into memory fmuld %f54,%f62,%f54 ! (Y1_1) dtmp4 = dtmp3 * yy fdtos %f24,%f4 ! (Y3_0)(float)(yy) sra ival0,14,ival0 ! (Y0_2) i = ival >> 14; st %f4,[stridey+y] ! (Y3_0) write into memory bpos,pt %icc,.main_loop faddd %f22,K2,%f48 ! (Y2_1) dtmp1 = dtmp0 + K2 .tail: addcc counter,7,counter add y,stridey,y ! y += stridey bneg,pn %icc,.end_loop sra ival2,14,ival2 ! (Y2_1) i = ival >> 14; ldd [LOGFTBL+ind0],%f42 ! (Y0_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld LN2,%f40,%f40 ! (Y0_0) ty = LN2 * (double)(*(int*)&exp) faddd %f52,K0,%f22 ! (Y0_0) dtmp5 = dtmp4 + K0 sra ival1,14,ind1 ! (Y1_1) i = ival >> 14; ld [%fp+tmp3],%f4 ! (Y1_1) (double) iy fpack32 ZERO,%f10,%f18 ! (Y2_0) exp = vis_fpack32(ZERO, exp) faddd %f50,K2,%f26 ! (Y3_0) dtmp1 = dtmp0 + K2 and ival0,-8,ind0 ! (Y0_1) ind = i & (-8) lda [x0]0x82,%f6 ! (Y0_1) *(float*)&exp = *(float*)(x) fmuld LN2,%f56,%f56 ! (Y1_0) LN2 * (double)(*(int*)&exp) faddd %f54,K0,%f24 ! (Y1_0) dtmp5 = dtmp4 + K0 and ind1,-8,ind1 ! (Y1_1) ind = i & (-8) ldd [LOGFTBL_P8+ind0],%f14 ! (Y0_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fmuld %f48,%f44,%f50 ! (Y2_0) dtmp2 = dtmp1 * yy fitod %f2,%f48 ! (Y0_1) yy = (double) iy and ival3,MASK_0x007fffff,ival1 ! (Y3_1) iy = ival & 0x007fffff lda [stridex+x0]0x82,%f8 ! (Y1_1) *(float*)&exp = *(float*)(x) fmuld %f22,%f46,%f22 ! (Y0_0) yy = dtmp5 * yy fsubd %f40,%f42,%f40 ! (Y0_0) ty = ty - ldtmp0 add iy3,CONST_0x20000,ival3 ! (Y3_1) iy + 0x20000 ldd [LOGFTBL_P8+ind1],%f16 ! (Y1_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fmuld %f26,%f60,%f42 ! (Y3_0) dtmp2 = dtmp1 * yy fitod %f4,%f26 ! (Y1_1) yy = (double) iy and ival3,MASK_0xfffc0000,ival3 ! (Y3_1) ival = ival & 0xfffc0000 lda [x1]0x82,%f10 ! (Y2_1) *(float*)&exp = *(float*)(x) fmuld %f24,%f62,%f24 ! (Y1_0) yy = dtmp5 * yy fsubd %f56,%f58,%f58 ! (Y1_0) ty = ty - ldtmp0 sub iy3,ival3,iy3 ! (Y3_1) iy = iy - ival ld [%fp+tmp2],%f2 ! (Y2_1) (double) iy fmuld %f48,%f14,%f46 ! (Y0_1) yy = yy * ldtmp1 faddd %f50,K1,%f50 ! (Y2_0) dtmp3 = dtmp2 + K1 add x1,stridex2,x0 ! x += 2*stridex st iy3,[%fp+tmp3] ! (Y3_1) (double) iy fpack32 ZERO,%f12,%f20 ! (Y3_0) exp = vis_fpack32(ZERO, exp) faddd %f22,%f40,%f48 ! (Y0_0) yy = yy + ty lda [stridex+x1]0x82,%f12 ! (Y3_1) *(float*)&exp = *(float*)(x) fmuld %f26,%f16,%f62 ! (Y1_1) yy = yy * ldtmp1 faddd %f42,K1,%f54 ! (Y3_0) dtmp3 = dtmp2 + K1 sra ival3,14,ival3 ! (Y3_1) i = ival >> 14; add y,stridey,y ! y += stridey faddd %f24,%f58,%f24 ! (Y1_0) yy = yy + ty subcc counter,1,counter ldd [LOGFTBL+ind2],%f42 ! (Y2_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld K3,%f46,%f22 ! (Y0_1) dtmp0 = K3 * yy fitod %f18,%f40 ! (Y2_0) (double)(*(int*)&exp) and ival2,-8,ind2 ! (Y2_1) ind = i & (-8) fmuld %f50,%f44,%f52 ! (Y2_0) dtmp4 = dtmp3 * yy fitod %f20,%f56 ! (Y3_0) (double)(*(int*)&exp) fmuld K3,%f62,%f50 ! (Y1_1) dtmp0 = K3 * yy fdtos %f48,%f4 ! (Y0_0) (float)(yy) st %f4,[y] ! (Y0_0) write into memory fmuld %f54,%f60,%f54 ! (Y3_0) dtmp4 = dtmp3 * yy bneg,pn %icc,.end_loop fdtos %f24,%f4 ! (Y1_0) (float)(yy) add y,stridey,y ! y += stridey subcc counter,1,counter ldd [LOGFTBL+ind3],%f58 ! (Y3_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) faddd %f22,K2,%f48 ! (Y0_1) dtmp1 = dtmp0 + K2 st %f4,[y] ! (Y1_0) write into memory bneg,pn %icc,.end_loop fmuld LN2,%f40,%f40 ! (Y2_0) ty = LN2 * (double)(*(int*)&exp) ldd [LOGFTBL_P8+ind2],%f14 ! (Y2_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8); faddd %f52,K0,%f22 ! (Y2_0) dtmp5 = dtmp4 + K0 fpack32 ZERO,%f6,%f6 ! (Y0_1) exp = vis_fpack32(ZERO, exp) faddd %f50,K2,%f26 ! (Y1_1) dtmp1 = dtmp0 + K2 fmuld LN2,%f56,%f56 ! (Y3_0) ty = LN2 * (double)(*(int*)&exp) and ival3,-8,ind3 ! (Y3_1) ind = i & (-8) ld [%fp+tmp3],%f4 ! (Y3_1) (double) iy faddd %f54,K0,%f24 ! (Y3_0) dtmp5 = dtmp4 + K0 fmuld %f48,%f46,%f50 ! (Y0_1) dtmp2 = dtmp1 * yy fitod %f2,%f48 ! (Y2_1) yy = (double) iy fmuld %f22,%f44,%f22 ! (Y2_0) yy = dtmp5 * yy fsubd %f40,%f42,%f40 ! (Y2_0) ty = ty - ldtmp0 fmuld %f26,%f62,%f42 ! (Y1_1) dtmp2 = dtmp1 * yy ldd [LOGFTBL_P8+ind3],%f16 ! (Y3_1) ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fitod %f4,%f26 ! (Y3_1) yy = (double) iy fmuld %f24,%f60,%f24 ! (Y3_0) yy = dtmp5 * yy fsubd %f56,%f58,%f58 ! (Y3_0) ty = ty - ldtmp0 fmuld %f48,%f14,%f44 ! (Y2_1) yy = yy * ldtmp1 faddd %f50,K1,%f50 ! (Y0_1) dtmp3 = dtmp2 + K1 fpack32 ZERO,%f8,%f8 ! (Y1_1) exp = vis_fpack32(ZERO, exp) faddd %f22,%f40,%f48 ! (Y2_0) yy = yy + ty fmuld %f26,%f16,%f60 ! (Y3_1) yy = yy * ldtmp1 faddd %f42,K1,%f54 ! (Y1_1) dtmp3 = dtmp2 + K1 add y,stridey,y ! y += stridey faddd %f24,%f58,%f24 ! (Y3_0) yy = yy + ty subcc counter,1,counter fmuld K3,%f44,%f22 ! (Y2_1) dtmp0 = K3 * yy fitod %f6,%f40 ! (Y0_1)(double)(*(int*)&exp) ldd [LOGFTBL+ind1],%f58 ! (Y1_1) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld %f50,%f46,%f52 ! (Y0_1) dtmp4 = dtmp3 * yy fitod %f8,%f56 ! (Y1_1) (double)(*(int*)&exp) fmuld K3,%f60,%f50 ! (Y3_1) dtmp0 = K3 * yy fdtos %f48,%f4 ! (Y2_0) (float)(yy) st %f4,[y] ! (Y2_0) write into memory fmuld %f54,%f62,%f54 ! (Y1_1) dtmp4 = dtmp3 * yy bneg,pn %icc,.end_loop fdtos %f24,%f4 ! (Y3_0)(float)(yy) subcc counter,1,counter ! update cycle counter add y,stridey,y st %f4,[y] ! (Y3_0) write into memory bneg,pn %icc,.end_loop faddd %f22,K2,%f48 ! (Y2_1) dtmp1 = dtmp0 + K2 ldd [LOGFTBL+ind0],%f42 ! (Y0_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fmuld LN2,%f40,%f40 ! (Y0_0) ty = LN2 * (double)(*(int*)&exp) faddd %f52,K0,%f22 ! (Y0_0) dtmp5 = dtmp4 + K0 fpack32 ZERO,%f10,%f18 ! (Y2_0) exp = vis_fpack32(ZERO, exp) fmuld LN2,%f56,%f56 ! (Y1_0) LN2 * (double)(*(int*)&exp) faddd %f54,K0,%f24 ! (Y1_0) dtmp5 = dtmp4 + K0 fmuld %f48,%f44,%f50 ! (Y2_0) dtmp2 = dtmp1 * yy fmuld %f22,%f46,%f22 ! (Y0_0) yy = dtmp5 * yy fsubd %f40,%f42,%f40 ! (Y0_0) ty = ty - ldtmp0 fmuld %f24,%f62,%f24 ! (Y1_0) yy = dtmp5 * yy fsubd %f56,%f58,%f58 ! (Y1_0) ty = ty - ldtmp0 subcc counter,1,counter faddd %f50,K1,%f50 ! (Y2_0) dtmp3 = dtmp2 + K1 faddd %f22,%f40,%f48 ! (Y0_0) yy = yy + ty add y,stridey,y ! y += stridey faddd %f24,%f58,%f24 ! (Y1_0) yy = yy + ty ldd [LOGFTBL+ind2],%f42 ! (Y2_0) ldtmp0 = *(double*)((char*)CONST_TBL+ind) fitod %f18,%f40 ! (Y2_0) (double)(*(int*)&exp) fmuld %f50,%f44,%f52 ! (Y2_0) dtmp4 = dtmp3 * yy fdtos %f48,%f4 ! (Y0_0) (float)(yy) st %f4,[y] ! (Y0_0) write into memory bneg,pn %icc,.end_loop fdtos %f24,%f4 ! (Y1_0) (float)(yy) add y,stridey,y ! y += stridey subcc counter,1,counter st %f4,[y] ! (Y1_0) write into memory bneg,pn %icc,.end_loop fmuld LN2,%f40,%f40 ! (Y2_0) ty = LN2 * (double)(*(int*)&exp) faddd %f52,K0,%f22 ! (Y2_0) dtmp5 = dtmp4 + K0 fmuld %f22,%f44,%f22 ! (Y2_0) yy = dtmp5 * yy fsubd %f40,%f42,%f40 ! (Y2_0) ty = ty - ldtmp0 add y,stridey,y ! y += stridey faddd %f22,%f40,%f48 ! (Y2_0) yy = yy + ty fdtos %f48,%f4 ! (Y2_0) (float)(yy) st %f4,[y] ! (Y2_0) write into memory .end_loop: ba .begin nop .end: ret restore %g0,0,%o0 .align 16 .update2: cmp counter,0 ble .cont2 nop add x0,stridex,x0 stx x0,[%fp+tmp5] sub x0,stridex,x0 st counter,[%fp+tmp0] or %g0,0,counter ba .cont2 nop .align 16 .update3: cmp counter,0 ble .cont3 nop add x0,stridex,x0 stx x0,[%fp+tmp5] sub x0,stridex,x0 st counter,[%fp+tmp0] or %g0,0,counter ba .cont3 nop .align 16 .update4: cmp counter,1 ble .cont4 nop stx x1,[%fp+tmp5] sub counter,1,counter st counter,[%fp+tmp0] or %g0,1,counter ba .cont4 nop .align 16 .update5: cmp counter,1 ble .cont5 nop stx x1,[%fp+tmp5] sub counter,1,counter st counter,[%fp+tmp0] or %g0,1,counter ba .cont5 nop .align 16 .update6: cmp counter,2 ble .cont6 nop add x1,stridex,x1 stx x1,[%fp+tmp5] sub x1,stridex,x1 sub counter,2,counter st counter,[%fp+tmp0] or %g0,2,counter ba .cont6 nop .align 16 .update7: cmp counter,2 ble .cont7 nop add x1,stridex,x1 stx x1,[%fp+tmp5] sub x1,stridex,x1 sub counter,2,counter st counter,[%fp+tmp0] or %g0,2,counter ba .cont7 nop .align 16 .update8: cmp counter,3 ble .cont8 nop stx x0,[%fp+tmp5] sub counter,3,counter st counter,[%fp+tmp0] or %g0,3,counter ba .cont8 nop .align 16 .update9: cmp counter,3 ble .cont9 nop stx x0,[%fp+tmp5] sub counter,3,counter st counter,[%fp+tmp0] or %g0,3,counter ba .cont9 nop .align 16 .update10: cmp counter,4 ble .cont10 nop add x0,stridex,x0 stx x0,[%fp+tmp5] sub x0, stridex, x0 sub counter,4,counter st counter,[%fp+tmp0] or %g0,4,counter ba .cont10 nop .align 16 .update11: cmp counter,4 ble .cont11 nop add x0,stridex,x0 stx x0,[%fp+tmp5] sub x0,stridex,x0 sub counter,4,counter st counter,[%fp+tmp0] or %g0,4,counter ba .cont11 nop .align 16 .update12: cmp counter,5 ble .cont12 nop stx x1,[%fp+tmp5] sub counter,5,counter st counter,[%fp+tmp0] or %g0,5,counter ba .cont12 nop .align 16 .update13: cmp counter,5 ble .cont13 nop stx x1,[%fp+tmp5] sub counter,5,counter st counter,[%fp+tmp0] or %g0,5,counter ba .cont13 nop .align 16 .update14: cmp counter,6 ble .cont14 nop add x1,stridex,x1 stx x1,[%fp+tmp5] sub x1, stridex, x1 sub counter,6,counter st counter,[%fp+tmp0] or %g0,6,counter ba .cont14 nop .align 16 .update15: cmp counter,6 ble .cont15 nop add x1,stridex,x1 stx x1,[%fp+tmp5] sub x1, stridex, x1 sub counter,6,counter st counter,[%fp+tmp0] or %g0,6,counter ba .cont15 nop .align 16 .update16: cmp counter,0 ble,pt %icc, .cont16 nop stx x0,[%fp+tmp5] st counter,[%fp+tmp0] or %g0,0,counter ba .cont16 nop .align 16 .update17: cmp counter,0 ble,pt %icc, .cont17 nop stx x0,[%fp+tmp5] st counter,[%fp+tmp0] or %g0,0,counter ba .cont17 nop .align 16 .update18: cmp counter,1 ble,pt %icc, .cont18 nop add x0,stridex,x0 stx x0,[%fp+tmp5] sub x0,stridex,x0 sub counter,1,counter st counter,[%fp+tmp0] or %g0,1,counter ba .cont18 nop .align 16 .update19: cmp counter,1 ble,pt %icc, .cont19 nop add x0,stridex,x0 sub counter,1,counter stx x0,[%fp+tmp5] sub x0, stridex, x0 st counter,[%fp+tmp0] or %g0,1,counter ba .cont19 nop .align 16 .update20: cmp counter,2 ble,pt %icc, .cont20 nop stx x1,[%fp+tmp5] sub counter,2,counter st counter,[%fp+tmp0] or %g0,2,counter ba .cont20 nop .align 16 .update21: cmp counter,2 ble,pt %icc, .cont21 nop stx x1,[%fp+tmp5] sub counter, 2, counter st counter,[%fp+tmp0] or %g0,2,counter ba .cont21 nop .align 16 .update22: cmp counter,3 ble,pt %icc, .cont22 nop add x1,stridex,x1 stx x1,[%fp+tmp5] sub x1,stridex,x1 sub counter,3,counter st counter,[%fp+tmp0] or %g0,3,counter ba .cont22 nop .align 16 .update23: cmp counter,3 ble,pt %icc, .cont23 nop add x1,stridex,x1 stx x1,[%fp+tmp5] sub x1,stridex,x1 sub counter,3,counter st counter,[%fp+tmp0] or %g0,3,counter ba .cont23 nop .align 16 .spec: or %g0,1,ind3 ! ind3 = 1 sll ind3,31,ind3 ! ind3 = 0x8000000 add x0,stridex,x0 ! x += stridex sub ind3,1,ind3 ! ind3 = 0x7ffffff add y,stridey,y ! y += stridey and ival0,ind3,iy0 ! ival & 0x7fffffff cmp iy0,MASK_0x7f800000 ! if ((ival & 0x7fffffff) >= 0x7f800000) bge,pn %icc, .spec0 ! if ((ival & 0x7fffffff) >= 0x7f800000) st ival0,[%fp+tmp1] cmp ival0,0 ! if (ival <= 0) ble,pn %icc,.spec1 ! if (ival <= 0) nop ld [%fp+tmp1],%f12 fitos %f12,%f14 ! value = (float) ival st %f14,[%fp+tmp2] ! ival = *(int*) &value ld [%fp+tmp2],ival0 ! ival = *(int*) &value and ival0,MASK_0x007fffff,iy0 ! iy = ival & 0x007fffff sra ival0,23,ival2 ! iexp = ival >> 23 add iy0,CONST_0x20000,ival0 ! ival = iy + 0x20000 sub ival2,149,ival2 ! iexp = iexp - 149 and ival0,MASK_0xfffc0000,ival0 ! ival = ival & 0xfffc0000 st ival2,[%fp+tmp2] ! (double) iexp sub iy0,ival0,iy0 ! iy = iy - ival sra ival0,14,ival0 ! i = ival >> 14; st iy0,[%fp+tmp1] ! (double) iy and ival0,-8,ind0 ! ind = i & (-8) ld [%fp+tmp1],%f2 ! (double) iy ldd [LOGFTBL_P8+ind0],%f14 ! ldtmp1 = *(double*)((char*)CONST_TBL+ind+8) fitod %f2,%f48 ! yy = (double) iy fmuld %f48,%f14,%f46 ! yy = yy * ldtmp1 ld [%fp+tmp2],%f6 ! (double) iexp fmuld K3,%f46,%f22 ! dtmp0 = K3 * yy ldd [LOGFTBL+ind0],%f42 ! ldtmp0 = *(double*)((char*)CONST_TBL+ind) faddd %f22,K2,%f48 ! dtmp1 = dtmp0 + K2 fmuld %f48,%f46,%f50 ! dtmp2 = dtmp1 * yy faddd %f50,K1,%f50 ! dtmp3 = dtmp2 + K1 fitod %f6,%f40 ! (double) iexp fmuld %f50,%f46,%f52 ! dtmp4 = dtmp3 * yy fmuld LN2,%f40,%f40 ! ty = LN2 * (double) iexp faddd %f52,K0,%f22 ! dtmp5 = dtmp4 + K0 fmuld %f22,%f46,%f22 ! yy = dtmp5 * yy fsubd %f40,%f42,%f40 ! ty = ty - ldtmp0 faddd %f22,%f40,%f48 ! yy = yy + ty fdtos %f48,%f4 ! (float)(yy) ba .begin1 st %f4,[y] ! write into memory .align 16 .spec0: ld [%fp+tmp1],%f12 ! value = *(float*) &ival fzeros %f2 ! y[0] = (value < 0.0f? fcmps %fcc0,%f12,%f2 ! 0.0f : value) * value fmovsug %fcc0,%f12,%f2 fmuls %f12,%f2,%f2 ba .begin1 st %f2,[y] ! write into memory .align 16 .spec1: cmp iy0,0 ! if ((ival & 0x7fffffff) == 0) bne,pn %icc,.spec2 ! if ((ival & 0x7fffffff) == 0) nop ld [LOGFTBL+568],%f4 fdivs %f4,ZERO,%f6 ! y[0] = -1.0f / 0f ba .begin1 st %f6,[y] ! write into memory .align 16 .spec2: fdivs ZERO,ZERO,%f6 ! y[0] = 0f / 0f ba .begin1 st %f6,[y] ! write into memory SET_SIZE(__vlogf)