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