⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e_powl.s

📁 Glibc 2.3.2源代码(解压后有100多M)
💻 S
📖 第 1 页 / 共 5 页
字号:
	nop.i 999 ;;}{ .mfi(p0)   and GR_Expo_X = GR_Expo_X, GR_Mask  ////     Calculate unBIASed exponent of X//     Point to Table of W1s//     Point to Table of W2s//(p0)   fcvt.fx.s1 FR_N = FR_float_N 	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fadd.s1 FR_P_lo = FR_P_lo, FR_X_lo ////     Float_N = X * L_Inv//     Create exponent BIAS//     Get BIASed exponent of X//(p0)   sub GR_Expo_X = GR_Expo_X, GR_BIAS ;;  }{ .mib(p0)   cmp.gt.unc  p9, p0  =  -6, GR_Expo_X 	nop.i 999////     N = fcvt.fx(float_N)//     If -6 > Expo_X, set P9//(p9)   br.cond.spnt L(EXPL_SMALL) };;////     If expo_X < -6 goto exp_small//{ .mmi      nop.m 999(p0)  addl           GR_T1_ptr   = @ltoff(Constants_exp_64_T1#), gp(p0)  cmp.lt.unc  p10, p0 =  14, GR_Expo_X };;{ .mmi      ld8 GR_T1_ptr = [GR_T1_ptr]      nop.m 999      nop.i 999};;{ .mib	nop.m 999	nop.i 999////     If 14 < Expo_X, set P10//     Create pointer to T1 table//  (p10)  br.cond.spnt L(EXPL_HUGE) ;;}{ .mmi(p0)  addl           GR_Table_Ptr   = @ltoff(Constants_exp_64_Exponents#), gp(p0)  addl           GR_T2_ptr   = @ltoff(Constants_exp_64_T2#), gp      nop.i 999};;{ .mmi      ld8 GR_Table_Ptr = [GR_Table_Ptr]      ld8 GR_T2_ptr = [GR_T2_ptr]      nop.i 999};;{ .mmi(p0)   shladd GR_Table_Ptr = GR_Expo_Range,4,GR_Table_Ptr ;;  ////     Adjust T1_ptr by x 4 for single-precision values//     Adjust T2_ptr by x 4 for single-precision values//(p0)   ld8 GR_Big_Pos_Exp = [GR_Table_Ptr],8	nop.i 999 ;;}////     Load double W1//     Load +max exponent//{ .mfi(p0)   ld8 GR_Big_Neg_Exp = [GR_Table_Ptr],0////     If 14 < Expo_X, goto exp_huge//(p0)   fcvt.xf FR_float_N = FR_N 	nop.i 999 };;////     Load double W2//     Load -max exponent//     Load ptr to A's//{ .mmi(p0)  getf.sig GR_N_fix = FR_N (p0)  addl           GR_Table_Ptr   = @ltoff(Constants_exp_64_A#), gp      nop.i 999};;{ .mmi      ld8 GR_Table_Ptr = [GR_Table_Ptr]      nop.m 999      nop.i 999};;////     Load single T1//     Load single T2//     W_1_p1 = W_1 + 1//{ .mmi(p0)   ldfe FR_A_3 = [GR_Table_Ptr],16 ;; ////     Load A_3//     if k > big_pos_exp, set p14 and Safe=False//(p0)   ldfe FR_A_2 = [GR_Table_Ptr],16 (p0)   extr.u GR_M1 = GR_N_fix, 6, 6  }{ .mmi	nop.m 999 ;;(p0)   shladd GR_W1_ptr = GR_M1,3,GR_W1_ptr  ////     float_N = fcvt.xf(N) //     N_fix = significand of N//     Create pointer to T2 table//(p0)   extr.u GR_M2 = GR_N_fix, 0, 6  }////     r = r + X_cor//     Adjust W1_ptr by x 8 for double-precision values//     Adjust W2_ptr by x 8 for double-precision values//     Adjust Table_ptr by Expo_Rangex16 //{ .mmi(p0)   shladd GR_T1_ptr = GR_M1,2,GR_T1_ptr ;;  (p0)   ldfd  FR_W1 = [GR_W1_ptr],0 (p0)   shladd GR_W2_ptr = GR_M2,3,GR_W2_ptr  }////     Load ptr to A's//{ .mfi(p0)   ldfs  FR_T1 = [GR_T1_ptr],0 (p0)   fnma.s1 FR_r = FR_L_hi, FR_float_N, FR_X (p0)   shladd GR_T2_ptr = GR_M2,2,GR_T2_ptr ;; }{ .mmi(p0)   ldfd  FR_W2 = [GR_W2_ptr],0 (p0)   ldfs  FR_T2 = [GR_T2_ptr],0 ////     r = x - L_hi * float_N//     M2 = extr.u(N_fix,0,6)//     M1 = extr.u(N_fix,6,6)//(p0)   extr GR_k = GR_N_fix, 12, 52 ;;  }////     Load A_1//     poly = A_3 * r + A_2//     rsq = r*r//{ .mii(p0)   add GR_BIAS_p_k = GR_BIAS, GR_k  (p0)   cmp.gt.unc  p14,p15 = GR_k,GR_Big_Pos_Exp ;; (p15)  cmp.lt p14,p15 = GR_k,GR_Big_Neg_Exp}////     BIAS_p_K = BIAS + k//     T = T1 * T2//{ .mfi(p0)   setf.exp FR_Scale = GR_BIAS_p_k  	nop.f 999	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fnma.s1 FR_r = FR_L_lo, FR_float_N, FR_r 	nop.i 999}////     W = W_1_p1 * W2 + W1//{ .mfi(p0)   ldfe FR_A_1 = [GR_Table_Ptr],16 	nop.f 999	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fadd.s1 FR_W_1_p1 = FR_W1, f1 	nop.i 999 ;;}{ .mfi	nop.m 999////     k = extr.u(N_fix,0,6)//     r = r - N * L_lo//     Load ptr to Table of exponent thresholds.//(p0)   fadd.s1 FR_r = FR_r, FR_X_cor 	nop.i 999}{ .mfi	nop.m 999(p0)   fmpy.s1 FR_T = FR_T1, FR_T2 	nop.i 999 ;;}{ .mfi	nop.m 999////     if k < big_neg_exp, set p14 and Safe=False//     Load A_2//(p0)   fma.s1 FR_W = FR_W2, FR_W_1_p1, FR_W1 	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fma.s1 FR_poly = FR_r, FR_A_3, FR_A_2 	nop.i 999}{ .mfi	nop.m 999(p0)   fmpy.s1 FR_rsq = FR_r, FR_r 	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   mov FR_Y_hi = FR_T 	nop.i 999 ;;}{ .mfi	nop.m 999////     Scale = set_exp(BIAS_p_k)//     poly = r * poly + A_1//(p0)   fadd.s1 FR_Wp1 = FR_W, f1 	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fma.s1 FR_poly = FR_r, FR_poly, FR_A_1 	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fma.s1 FR_poly = FR_rsq, FR_poly,FR_r  	nop.i 999 ;;}{ .mfi	nop.m 999////     Wp1 =  W + 1//     poly = rsq * poly + rk//(p0)   fma.s1 FR_Y_lo = FR_Wp1, FR_poly, FR_W 	nop.i 999 ;;}{ .mfb	nop.m 999////     Y_lo = poly * Wp1 + W //     Y_hi = T//(p0)   fmpy.s1 FR_Y_lo = FR_Y_lo, FR_T ////     Y_lo = T * Y_lo//(p0)   br.cond.sptk L(EXPL_RETURN) ;; }L(EXPL_SMALL): ////     r4 = rsq * rsq//{ .mmi      nop.m 999(p0)  addl           GR_Table_Ptr1   = @ltoff(Constants_exp_64_P), gp      nop.i 999};;{ .mmi      ld8 GR_Table_Ptr1 = [GR_Table_Ptr1]      nop.m 999      nop.i 999};;{ .mmf	nop.m 999(p0)   ldfe FR_P_6 = [GR_Table_Ptr1],16 ////     Return  //(p0)   fadd.s1 FR_r = FR_X,f0 ;; }{ .mmi      nop.m 999(p0)  addl           GR_Table_Ptr   = @ltoff(Constants_exp_64_Exponents#), gp      nop.i 999};;{ .mmi      ld8 GR_Table_Ptr = [GR_Table_Ptr](p0)  ldfe FR_P_5 = [GR_Table_Ptr1],16       nop.i 999};;////     Is input very small? //     Load P_5//{ .mii(p0)   ldfe FR_P_4 = [GR_Table_Ptr1],16 (p0)   add GR_Table_Ptr = 0x040,GR_Table_Ptr ;;  (p0)   shladd GR_Table_Ptr = GR_Expo_Range,3,GR_Table_Ptr ;;  }{ .mmb(p0)   ldfe FR_P_3 = [GR_Table_Ptr1],16 ////     Adjust ptr.//(p0)   ld8  GR_vsm_expo = [GR_Table_Ptr],0	nop.b 999 ;;}{ .mfi	nop.m 999////     r = X (don't seem to need X_Cor) //     Load the threshold exponents//(p0)   fmpy.s1 FR_rsq = FR_r, FR_r 	nop.i 999 ;;}////     Load the negative integer//     Load P_5//{ .mfi(p0)   cmp.lt.unc  p12, p0 =  GR_Expo_X, GR_vsm_expo 	nop.f 999	nop.i 999 ;;}{ .mfb	nop.m 999////     rsq = r * r//     Offset into exponents//(p0)   fmpy.s1 FR_r4 = FR_rsq, FR_rsq (p12)  br.cond.spnt L(EXPL_VERY_SMALL) ;; }{ .mfi(p0)   ldfe FR_P_2 = [GR_Table_Ptr1],16 ////     Load p4,p3,p2,p1//(p0)   fma.s1 FR_poly_lo = FR_P_6, FR_r, FR_P_5 ////     Y_lo = r4 * poly_lo + poly_hi//     Scale = 1.0//(p0)   add GR_temp = 0x1,r0 ;;  }{ .mmf	nop.m 999(p0)   ldfe FR_P_1 = [GR_Table_Ptr1],0 (p0)   mov FR_Scale = f1 }////     Begin creating lsb to perturb final result//{ .mfi(p0)   setf.sig FR_temp = GR_temp (p0)   mov FR_Y_hi = f1 	nop.i 999 ;;}{ .mfi	nop.m 999////     poly_lo = p_5 + p_6 * r//     poly_hi = p_1 + p_2 * r//(p0)   fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_P_4 	nop.i 999 ;;}{ .mfi	nop.m 999////     poly_lo = p_4 + poly_lo * r//     poly_hi = r + poly_hi * rsq//(p0)   fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_P_3 	nop.i 999}{ .mfi	nop.m 999(p0)   fma.s1 FR_poly_hi = FR_P_2, FR_r, FR_P_1 	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, FR_r 	nop.i 999 ;;}{ .mfi	nop.m 999//  //     poly_lo = p_3 + poly_lo * r//     Y_hi = 1, always//  (p0)   fma.s1 FR_Y_lo = FR_poly_lo, FR_r4, FR_poly_hi 	nop.i 999 ;;}{ .mfi	nop.m 999////     Set lsb in fp register// (p0)   for FR_temp = FR_Y_lo,FR_temp 	nop.i 999 ;;}{ .mfb	nop.m 999////     Toggle on last bit of Y_lo//(p0)   fmerge.se FR_Y_lo = FR_Y_lo,FR_temp ////     Set lsb of Y_lo to 1//(p0)   br.cond.sptk L(EXPL_RETURN) ;; }L(EXPL_VERY_SMALL): { .mfi	nop.m 999(p0)   mov FR_Y_lo = FR_r (p0)   cmp.eq.unc  p15, p0 =  r0, r0 }{ .mfi       nop.m 999(p0)   mov FR_Scale = f1       nop.i 999};;{ .mfb	nop.m 999(p0)   mov FR_Y_hi = f1 ////     If flag_not_1, //     Y_hi = 1.0 //     Y_lo = X + X_cor//     PR_Safe = true//(p0)   br.cond.sptk L(EXPL_RETURN) ;; }L(EXPL_HUGE): { .mfi	nop.m 999////     Return for flag=2 //(p0)   fcmp.gt.unc.s1 p12, p13 =  FR_X, f0 (p0)   cmp.eq.unc  p14, p15 =  r0, r0 ;; }{ .mlx	nop.m 999////     Set Safe to false//     Is x > 0//(p12)  movl GR_Mask = 0x15DC0 ;; }{ .mlx(p12)  setf.exp FR_Y_hi = GR_Mask (p13)  movl GR_Mask = 0xA240 ;; }{ .mlx(p13)  setf.exp FR_Y_hi = GR_Mask //     //     x > 0: Create mask for Y_hi = 2**(24,000) //     x <= 0: Create mask for Y_hi = 2**(-24,000) //(p13)  movl GR_temp = 0xA1DC ;; }{ .mfi(p13)  setf.exp FR_Y_lo = GR_temp ////     x < =0: Create mask for 2**(-24,100)//     x <= 0: Y_lo = w**(-24,100)//(p12)  mov FR_Y_lo = f1 	nop.i 999 ;;}{ .mfi	nop.m 999(p12)  mov FR_Scale =  FR_Y_hi 	nop.i 999 ;;}{ .mfi	nop.m 999////     x > 0: Y_lo = 1.0//     x > 0: Scale = 2**(24,000) //(p13)  mov FR_Scale = FR_Y_hi 	nop.i 999 ;;}L(EXPL_RETURN): { .mfi	nop.m 999////     Scale = 2**(24,000)//////     exp(y *ln(x)) almost complete //     FR_Scale is Scale//     f34 is Z_hi //     f35 is Z_lo //(p0)   fmpy.s1 FR_Sgn = FR_Scale, FR_Sgn  	nop.i 999 ;;}{ .mfi	nop.m 999////     sgn * scale //(p0)   fmpy.s1 FR_Y_lo = FR_Y_lo,FR_Sgn   	nop.i 999 ;;}{ .mfb	nop.m 999////     Z_lo * (sgn * scale) //(p0)   fma.s0 FR_Result = FR_Y_hi, FR_Sgn, FR_Y_lo  ////     Z_hi * (sgn * scale)  + Z_lo//(p15)  br.cond.sptk L(POWL_64_RETURN) ;;}{ .mfi	nop.m 999(p0)   fsetc.s3 0x7F,0x01	nop.i 999}{ .mlx	nop.m 999////     Z_hi * (sgn * scale)  + Z_lo with wre & td//     Z_hi * (sgn * scale)  + Z_lo with fz  & td//(p0)   movl GR_T1_ptr = 0x00000000013FFF ;;}{ .mfi	nop.m 999(p0)   fma.s3  FR_Result_small = FR_Y_hi, FR_Sgn, FR_Y_lo  	nop.i 999}{ .mfi	nop.m 999(p0)   fsetc.s3 0x7F,0x40	nop.i 999 ;;}{ .mfi	nop.m 999////     Return if no danger of over of underflow.//(p0)   fsetc.s2 0x7F,0x42	nop.i 999;;}{ .mfi	nop.m 999////     S0 user supplied status//     S2 user supplied status + WRE + TD  (Overflows)//     S3 user supplied status + FZ + TD   (Underflows)//(p0)   fma.s2  FR_Result_big = FR_Y_hi, FR_Sgn, FR_Y_lo  	nop.i 999 ;;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -