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

📄 e_pow.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 5 页
字号:
{ .mfb          nop.m 999(p6)      fma.s1    POW_rsq             = POW_r1, POW_r1, f0(p14)     br.cond.spnt POW_X_0          // Branch if x zero and y not nan};;{ .mfi          ldfpd   POW_Q4, POW_RSHF      = [pow_AD_P], 16(p7)      fma.s1 POW_v6                 = POW_r,  POW_P5, POW_P4          nop.i 999}{ .mfi          mov pow_GR_exp_2toM63         = 0xffc0  // Exponent of 2^-63(p6)      fma.s1 POW_v6                 = POW_r1, POW_P5, POW_P4          nop.i 999};;{ .mfi          setf.exp POW_2toM63 = pow_GR_exp_2toM63  // Form 2^-63 for test of q(p7)      fma.s1 POW_v4                 = POW_P3, POW_r,  POW_P2          nop.i 999}{ .mfi          nop.m 999(p6)      fma.s1 POW_v4                 = POW_P3, POW_r1, POW_P2          nop.i 999};;{ .mfi          nop.m 999          fcvt.xf POW_K                 = POW_int_K          nop.i 999};;{ .mfi          getf.sig pow_GR_sig_int_Y     = POW_int_Y          fnma.s1 POW_twoV              = POW_NORM_Y, POW_rsq,f0          and pow_GR_exp_Y              = pow_GR_signexp_Y, pow_GR_17ones}{ .mfb          andcm pow_GR_sign_Y           = pow_GR_signexp_Y, pow_GR_17ones          fma.s1 POW_U                  = POW_NORM_Y,POW_r,f0(p12)     br.cond.spnt POW_Y_0   // Branch if y=zero, x not zero or nan};;// p11 = TRUE ==> X is NEGATIVE but not inf{ .mfi          ldfe      POW_log2_by_128_lo  = [pow_AD_P], 16          fclass.m  p11,p0              = f8, 0x1a          nop.i 999}{ .mfi          ldfe      POW_log2_by_128_hi  = [pow_AD_Q], 16          fma.s1 POW_v2                 = POW_P1, POW_r,  POW_P0          nop.i 999};;{ .mfi          nop.m 999          fcvt.xf   POW_float_int_Y     = POW_int_Y          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_v3                 = POW_v6, POW_rsq,  POW_v4          adds          pow_AD_tbl1     = pow_tbl1 - pow_Tt,  pow_AD_Q};;{ .mfi          nop.m 999(p7)      fma.s1 POW_delta              = POW_K, POW_log2_lo, POW_Tt          nop.i 999}{ .mfi          nop.m 999(p7)      fma.s1 POW_G                  = POW_K, POW_log2_hi, POW_T          adds pow_AD_tbl2              = pow_tbl2 - pow_tbl1,  pow_AD_tbl1};;{ .mfi          nop.m 999          fms.s1 POW_e2                 = POW_NORM_Y, POW_r, POW_U          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_Z2                 = POW_twoV, POW_Q0_half, POW_U          nop.i 999};;{ .mfi          nop.m 999          fma.s1 POW_Yrcub              = POW_rsq, POW_U, f0          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_p                  = POW_rsq, POW_v3, POW_v2          nop.i 999};;// p11 = TRUE ==> X is NEGATIVE but not inf//    p12 = TRUE ==> X is NEGATIVE  AND  Y  already even int//    p13 = TRUE ==> X is NEGATIVE  AND  Y possible int{ .mfi          nop.m 999          fma.s1 POW_Z1                 = POW_NORM_Y, POW_G, f0(p11)     cmp.gt.unc  p12,p13           = pow_GR_exp_Y, pow_GR_10033}{ .mfi          nop.m 999          fma.s1 POW_Gpr                = POW_G, f1, POW_r          nop.i 999};;// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand{ .mfi          nop.m 999          fma.s1 POW_W2  = POW_Z2, POW_inv_log2_by_128, POW_RSHF          nop.i 999}{ .mfi          nop.m 999          fms.s1 POW_UmZ2               = POW_U, f1, POW_Z2          nop.i 999};;{ .mfi          nop.m 999          fma.s1 POW_e3                 = POW_NORM_Y, POW_delta, f0          nop.i 999};;{ .mfi          nop.m 999          fma.s1 POW_Z3                 = POW_p, POW_Yrcub, f0          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_GY_Z2              = POW_G, POW_NORM_Y, POW_Z2          nop.i 999};;// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand{ .mfi          nop.m 999          fms.s1 POW_e1                 = POW_NORM_Y, POW_G, POW_Z1          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_W1  = POW_Z1, POW_inv_log2_by_128, POW_RSHF          nop.i 999};;// p13 = TRUE ==> X is NEGATIVE  AND  Y possible int//     p10 = TRUE ==> X is NEG and Y is an int//     p12 = TRUE ==> X is NEG and Y is not an int{ .mfi          nop.m 999(p13)     fcmp.eq.unc.s1 p10,p12        = POW_float_int_Y,  POW_NORM_Y          mov pow_GR_xneg_yodd = 0}{ .mfi          nop.m 999          fma.s1 POW_Y_Gpr              = POW_NORM_Y, POW_Gpr, f0          nop.i 999};;// By subtracting RSHF we get rounded integer POW_N2float{ .mfi          nop.m 999          fms.s1 POW_N2float  = POW_W2, f1, POW_RSHF          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_UmZ2pV             = POW_twoV,POW_Q0_half,POW_UmZ2          nop.i 999};;{ .mfi          nop.m 999          fma.s1 POW_Z3sq               = POW_Z3, POW_Z3, f0          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_v4                 = POW_Z3, POW_Q3, POW_Q2          nop.i 999};;// Extract rounded integer from rightmost significand of POW_W2// By subtracting RSHF we get rounded integer POW_N1float{ .mfi          getf.sig pow_GR_int_W2        = POW_W2          fms.s1 POW_N1float  = POW_W1, f1, POW_RSHF          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_v2                 = POW_Z3, POW_Q1, POW_Q0_half          nop.i 999};;{ .mfi          nop.m 999          fnma.s1 POW_s2 = POW_N2float, POW_log2_by_128_hi, POW_Z2          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_e2                 = POW_e2,f1,POW_UmZ2pV          nop.i 999};;// Extract rounded integer from rightmost significand of POW_W1// Test if x inf{ .mfi          getf.sig pow_GR_int_W1        = POW_W1          fclass.m p15,p0 = POW_NORM_X,  0x23          nop.i 999}{ .mfb          nop.m 999          fnma.s1 POW_f2  = POW_N2float, POW_log2_by_128_lo, f1(p12)     br.cond.spnt POW_X_NEG_Y_NONINT  // Branch if x neg, y not integer};;// p11 = TRUE ==> X is +1.0// p12 = TRUE ==> X is NEGATIVE  AND Y is an odd integer{ .mfi          getf.exp pow_GR_signexp_Y_Gpr = POW_Y_Gpr          fcmp.eq.s1 p11,p0 = POW_NORM_X, f1(p10)     tbit.nz.unc  p12,p0           = pow_GR_sig_int_Y,0}{ .mfi          nop.m 999          fma.s1 POW_v3                 = POW_Z3sq, POW_Q4, POW_v4          nop.i 999};;{ .mfi          nop.m 999          fnma.s1 POW_f1  = POW_N1float, POW_log2_by_128_lo, f1          nop.i 999}{ .mfb          nop.m 999          fnma.s1 POW_s1  = POW_N1float, POW_log2_by_128_hi, POW_Z1(p15)     br.cond.spnt POW_X_INF};;// Test x and y and flag denormal{ .mfi          nop.m 999          fcmp.eq.s0 p15,p0 = f8,f9          nop.i 999}{ .mfi          nop.m 999          fma.s1 POW_pYrcub_e3          = POW_p, POW_Yrcub, POW_e3          nop.i 999};;{ .mfi          nop.m 999          fcmp.eq.s1 p7,p0 = POW_NORM_Y, f1  // Test for y=1.0          nop.i 999}{ .mfi          nop.m 999          fma.s1  POW_e12               = POW_e1,f1,POW_e2          nop.i 999};;{ .mfi          add pow_GR_int_N              = pow_GR_int_W1, pow_GR_int_W2(p11)     fma.d.s0 f8 = f1,f1,f0    // If x=1, result is +1          nop.i 999}{ .mib(p12)     mov pow_GR_xneg_yodd = 1          nop.i 999(p11)     br.ret.spnt b0            // Early exit if x=1.0, result is +1};;{ .mfi          and pow_GR_index1             = 0x0f, pow_GR_int_N          fma.s1 POW_q                  = POW_Z3sq, POW_v3, POW_v2          shr pow_int_GR_M              = pow_GR_int_N, 7    // M = N/128}{ .mib          and pow_GR_index2             = 0x70, pow_GR_int_N          cmp.eq p6, p0                 = pow_GR_xneg_yodd, r0(p7)      br.ret.spnt b0        // Early exit if y=1.0, result is x};;{ .mfi          shladd pow_AD_T1              = pow_GR_index1, 4, pow_AD_tbl1          fma.s1 POW_s                  = POW_s1, f1, POW_s2          add pow_int_GR_M              = pow_GR_16ones, pow_int_GR_M}{ .mfi          add pow_AD_T2                 = pow_AD_tbl2, pow_GR_index2          fma.s1 POW_f12                = POW_f1, POW_f2,f0          and pow_GR_exp_Y_Gpr          = pow_GR_signexp_Y_Gpr, pow_GR_17ones};;{ .mmi          ldfe POW_T1                   = [pow_AD_T1]          ldfe POW_T2                   = [pow_AD_T2]          sub pow_GR_true_exp_Y_Gpr     = pow_GR_exp_Y_Gpr, pow_GR_16ones};;{ .mfi          setf.exp POW_2M               = pow_int_GR_M          fma.s1 POW_e123               = POW_e12, f1, POW_e3          nop.i 999}{ .mfb(p6)      cmp.gt p6, p0                 = -11, pow_GR_true_exp_Y_Gpr          fma.s1 POW_d                  = POW_GY_Z2, f1, POW_pYrcub_e3(p6)      br.cond.spnt POW_NEAR_ONE // branch if |y*log(x)| < 2^(-11)};;

⌨️ 快捷键说明

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