__vlogf.S revision 25c28e83beb90e7c80452a7c818c5e6f73a07dc8
/*
* 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)