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

📄 s_expm1f.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 2 页
字号:
(p14) fms.s.s0        f8 = f0, f0, f1       // result if x = -inf(p14) br.ret.spnt     b0                    // exit here if x = -inf};;{ .mfb      ldfpd           fA4, fA3 = [rTblAddr], 16      fclass.m        p15, p0 = f8 , 0x1e1  // test for NaT,NaN,+Inf(p13) br.ret.spnt     b0                    // exit here if x =0.0, result is x};;{ .mfi      // overflow thresholds      ldfps           fMIN_SGL_OFLOW_ARG, fMAX_SGL_NORM_ARG = [rTblAddr], 8      fma.s1          fXsq = fNormX, fNormX, f0      // x^2 for small path      and             rExp_x = rExp_mask, rSignexp_x // Biased exponent of x}{ .mlx      nop.m           0      movl            rM1_lim = 0xc1c00000  // Minus -1 limit (-24.0), SP};;{ .mfi      setf.exp        fA2 = rExp_half      // x*(64/ln(2)) + Right Shifter      fma.s1          fNint = fNormX, f64DivLn2, fRightShifter      sub             rExp_x = rExp_x, rExp_bias     // True exponent of x}{ .mfb      nop.m           0(p15) fma.s.s0        f8 = f8, f1, f0       // result if x = NaT,NaN,+Inf(p15) br.ret.spnt     b0                    // exit here if x = NaT,NaN,+Inf};;{ .mfi      setf.s          fMAX_SGL_MINUS_1_ARG = rM1_lim // -1 threshold, -24.0      nop.f           0      cmp.gt          p7, p8 = -2, rExp_x      // Test |x| < 2^(-2)};;{ .mfi(p7)  cmp.gt.unc      p6, p7 = -40, rExp_x     // Test |x| < 2^(-40)      fma.s1          fA87 = fA8, fNormX, fA7  // Small path, A8*x+A7      nop.i           0}{ .mfi      nop.m           0      fma.s1          fA65 = fA6, fNormX, fA5  // Small path, A6*x+A5      nop.i           0};;{ .mfb      nop.m           0(p6)  fma.s.s0        f8 = f8, f8, f8          // If x < 2^-40, result=x+x*x(p6)  br.ret.spnt     b0                       // Exit if x < 2^-40};;{ .mfi      nop.m           0      // check for overflow      fcmp.gt.s1      p15, p14 = fNormX, fMIN_SGL_OFLOW_ARG      nop.i           0}{ .mfi      nop.m           0      fms.s1          fN = fNint, f1, fRightShifter // n in FP register      nop.i           0};;{ .mfi      nop.m           0(p7)  fma.s1          fA43 = fA4, fNormX, fA3   // Small path, A4*x+A3      nop.i           0};;{ .mfi      getf.sig        rNJ = fNint               // bits of n, j(p7)  fma.s1          fA8765 = fA87, fXsq, fA65 // Small path, A87*xsq+A65      nop.i           0}{ .mfb      nop.m           0(p7)  fma.s1          fX3 = fXsq, fNormX, f0    // Small path, x^3      // branch out if overflow(p15) br.cond.spnt    EXPM1_CERTAIN_OVERFLOW};;{ .mfi      addl            rN = 0xffff-63, rNJ    // biased and shifted n      fnma.s1         fR = fLn2Div64, fN, fNormX // R = x - N*ln(2)/64      extr.u          rJ = rNJ , 0 , 6       // bits of j};;{ .mfi      shladd          rJ = rJ, 3, rTblAddr   // address in the 2^(j/64) table      // check for certain -1      fcmp.le.s1      p13, p0 = fNormX, fMAX_SGL_MINUS_1_ARG      shr             rN = rN, 6             // biased n}{ .mfi      nop.m           0(p7)  fma.s1          fA432 = fA43, fNormX, fA2 // Small path, A43*x+A2      nop.i           0};;{ .mfi      ld8             rJ = [rJ]      nop.f           0      shl             rN = rN , 52           // 2^n bits in DP format};;{ .mmi      or              rN = rN, rJ        // bits of 2^n * 2^(j/64) in DP format(p13) mov             rTmp = 1           // Make small value for -1 path      nop.i           0};;{ .mfi      setf.d          fT = rN            // 2^n      // check for possible overflow (only happens if input higher precision)(p14) fcmp.gt.s1      p14, p0 = fNormX, fMAX_SGL_NORM_ARG      nop.i           0}{ .mfi      nop.m           0(p7)  fma.s1          fA8765432 = fA8765, fX3, fA432 // A8765*x^3+A432      nop.i           0};;{ .mfi(p13) setf.exp        fTmp = rTmp        // Make small value for -1 path      fma.s1          fP = fA3, fR, fA2  // A3*R + A2      nop.i           0}{ .mfb      nop.m           0      fma.s1          fRSqr = fR, fR, f0 // R^2(p13) br.cond.spnt    EXPM1_CERTAIN_MINUS_ONE // Branch if x < -24.0};;{ .mfb      nop.m           0(p7)  fma.s.s0        f8 = fA8765432, fXsq, fNormX // Small path,                                          // result=xsq*A8765432+x(p7)  br.ret.spnt     b0                 // Exit if 2^-40 <= |x| < 2^-2};;{ .mfi      nop.m           0      fma.s1          fP = fP, fRSqr, fR // P = (A3*R + A2)*Rsqr + R      nop.i           0};;{ .mfb      nop.m           0      fms.s1          fTm1 = fT, f1, f1  // T - 1.0(p14) br.cond.spnt    EXPM1_POSSIBLE_OVERFLOW};;{ .mfb      nop.m           0      fma.s.s0        f8 = fP, fT, fTm1      br.ret.sptk     b0                 // Result for main path                                         // minus_one_limit < x < -2^-2                                         // and +2^-2 <= x < overflow_limit};;// Here if x unormEXPM1_UNORM:{ .mfb      getf.exp        rSignexp_x = fNormX // Must recompute if x unorm      fcmp.eq.s0      p6, p0 = f8, f0     // Set D flag      br.cond.sptk    EXPM1_COMMON};;// here if result will be -1 and inexact, x <= -24.0EXPM1_CERTAIN_MINUS_ONE:{ .mfb      nop.m           0      fms.s.s0        f8 = fTmp, fTmp, f1  // Result -1, and Inexact set      br.ret.sptk     b0};;EXPM1_POSSIBLE_OVERFLOW:// Here if fMAX_SGL_NORM_ARG < x < fMIN_SGL_OFLOW_ARG// This cannot happen if input is a single, only if input higher precision.// Overflow is a possibility, not a certainty.// Recompute result using status field 2 with user's rounding mode,// and wre set.  If result is larger than largest single, then we have// overflow{ .mfi      mov             rGt_ln  = 0x1007f // Exponent for largest sgl + 1 ulp      fsetc.s2        0x7F,0x42         // Get user's round mode, set wre      nop.i           0};;{ .mfi      setf.exp        fGt_pln = rGt_ln  // Create largest single + 1 ulp      fma.s.s2        fWre_urm_f8 = fP, fT, fTm1  // Result with wre set      nop.i           0};;{ .mfi      nop.m           0      fsetc.s2        0x7F,0x40                   // Turn off wre in sf2      nop.i           0};;{ .mfi      nop.m           0      fcmp.ge.s1      p6, p0 =  fWre_urm_f8, fGt_pln // Test for overflow      nop.i           0};;{ .mfb      nop.m           0      nop.f           0(p6)  br.cond.spnt    EXPM1_CERTAIN_OVERFLOW // Branch if overflow};;{ .mfb      nop.m           0      fma.s.s0        f8 = fP, fT, fTm1      br.ret.sptk     b0                     // Exit if really no overflow};;// here if overflowEXPM1_CERTAIN_OVERFLOW:{ .mmi      addl            rTmp = 0x1FFFE, r0;;      setf.exp        fTmp = rTmp      nop.i 999};;{ .mfi      alloc           r32 = ar.pfs, 0, 3, 4, 0 // get some registers      fmerge.s        FR_X = fNormX,fNormX      nop.i           0}{ .mfb      mov             GR_Parameter_TAG = 43      fma.s.s0        FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result      br.cond.sptk    __libm_error_region};;GLOBAL_IEEE754_END(expm1f)LOCAL_LIBM_ENTRY(__libm_error_region).prologue{ .mfi      add   GR_Parameter_Y=-32,sp             // Parameter 2 value      nop.f 999.save   ar.pfs,GR_SAVE_PFS      mov  GR_SAVE_PFS=ar.pfs                 // Save ar.pfs}{ .mfi.fframe 64      add sp=-64,sp                           // Create new stack      nop.f 0      mov GR_SAVE_GP=gp                       // Save gp};;{ .mmi      stfs [GR_Parameter_Y] = FR_Y,16         // Store Parameter 2 on stack      add GR_Parameter_X = 16,sp              // Parameter 1 address.save   b0, GR_SAVE_B0      mov GR_SAVE_B0=b0                       // Save b0};;.body{ .mfi      stfs [GR_Parameter_X] = FR_X            // Store Parameter 1 on stack      nop.f 0      add   GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address}{ .mib      stfs [GR_Parameter_Y] = FR_RESULT       // Store Parameter 3 on stack      add   GR_Parameter_Y = -16,GR_Parameter_Y      br.call.sptk b0=__libm_error_support#   // Call error handling function};;{ .mmi      add   GR_Parameter_RESULT = 48,sp      nop.m 0      nop.i 0};;{ .mmi      ldfs  f8 = [GR_Parameter_RESULT]       // Get return result off stack.restore sp      add   sp = 64,sp                       // Restore stack pointer      mov   b0 = GR_SAVE_B0                  // Restore return address};;{ .mib      mov   gp = GR_SAVE_GP                  // Restore gp      mov   ar.pfs = GR_SAVE_PFS             // Restore ar.pfs      br.ret.sptk     b0                     // Return};;LOCAL_LIBM_END(__libm_error_region).type   __libm_error_support#,@function.global __libm_error_support#

⌨️ 快捷键说明

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