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

📄 s_asinhl.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 3 页
字号:
FR_Q3           = f64  FR_Q2           = f65 FR_1LN10_hi     = f66 FR_Q1           = f67 FR_1LN10_lo     = f68 FR_P5           = f69 FR_rcub         = f70 FR_Neg_One      = f71 FR_Z            = f72 FR_AA           = f73 FR_BB           = f74 FR_S_lo         = f75 FR_2_to_minus_N = f76     // Huge & Main path prolog registersFR_Half         = f77FR_Two          = f78FR_X2           = f79FR_P2           = f80FR_P2L          = f81FR_Rcp          = f82FR_GG           = f83FR_HH           = f84FR_EE           = f85FR_DD           = f86FR_GL           = f87FR_A            = f88FR_AL           = f89FR_B            = f90FR_BL           = f91FR_Tmp          = f92    // Near 0 & Huges path prolog registersFR_C3           = f93FR_C5           = f94FR_C7           = f95FR_C9           = f96FR_X3           = f97FR_X4           = f98FR_P9           = f99FR_P5           = f100FR_P3           = f101// General Purpose Registers    // General prolog registersGR_PFS          = r32GR_TwoN7        = r40GR_TwoP63       = r41GR_ExpMask      = r42GR_ArgExp       = r43GR_Half         = r44    // Near 0 path prolog registersGR_Poly_C_35    = r45GR_Poly_C_79    = r46    // Special logl registersGR_Index1       = r34 GR_Index2       = r35 GR_signif       = r36 GR_X_0          = r37 GR_X_1          = r38 GR_X_2          = r39 GR_Z_1          = r40 GR_Z_2          = r41 GR_N            = r42 GR_Bias         = r43 GR_M            = r44 GR_Index3       = r45 GR_exp_2tom80   = r45 GR_exp_mask     = r47 GR_exp_2tom7    = r48 GR_ad_ln10      = r49 GR_ad_tbl_1     = r50GR_ad_tbl_2     = r51GR_ad_tbl_3     = r52GR_ad_q         = r53GR_ad_z_1       = r54GR_ad_z_2       = r55GR_ad_z_3       = r56GR_minus_N      = r57.section .textGLOBAL_LIBM_ENTRY(asinhl){ .mfi      alloc     GR_PFS        = ar.pfs,0,27,0,0      fma.s1    FR_P2         = FR_Arg, FR_Arg, f1  // p2 = x^2 + 1      mov   	GR_Half       = 0xfffe              // 0.5's exp}{ .mfi      addl      GR_Poly_C_79  = @ltoff(Poly_C_near_0_79), gp // C7, C9 coeffs      fma.s1    FR_X2         = FR_Arg, FR_Arg, f0           // Obtain x^2      addl      GR_Poly_C_35  = @ltoff(Poly_C_near_0_35), gp // C3, C5 coeffs};;{ .mfi      getf.exp  GR_ArgExp     = FR_Arg        // get arument's exponent      fabs      FR_AX         = FR_Arg        // absolute value of argument      mov       GR_TwoN7      = 0xfff8        // 2^-7 exp}{ .mfi      ld8       GR_Poly_C_79  = [GR_Poly_C_79] // get actual coeff table address      fma.s0       FR_Two        = f1, f1, f1        // construct 2.0      mov       GR_ExpMask    = 0x1ffff        // mask for exp};;{ .mfi      ld8       GR_Poly_C_35  = [GR_Poly_C_35] // get actual coeff table address      fclass.m  p6,p0         = FR_Arg, 0xe7   // if arg NaN inf zero      mov       GR_TwoP63     = 0x1003e        // 2^63 exp}{ .mfi      addl      GR_ad_z_1     = @ltoff(Constants_Z_1#),gp      nop.f 0      nop.i 0};;{ .mfi      setf.exp	FR_Half       = GR_Half              // construct 0.5      fclass.m  p7,p0         = FR_Arg, 0x09  //  if arg + denorm      and       GR_ArgExp     = GR_ExpMask, GR_ArgExp // select exp}{ .mfb      ld8       GR_ad_z_1     = [GR_ad_z_1]   // Get pointer to Constants_Z_1      nop.f 0      nop.b 0};;{ .mfi      ldfe      FR_C9         = [GR_Poly_C_79],16 // load C9      fclass.m  p10,p0        = FR_Arg, 0x0a    //  if arg - denorm      cmp.gt    p8, p0        = GR_TwoN7,  GR_ArgExp // if arg < 2^-7 ('near 0')}{ .mfb      cmp.le    p9, p0        = GR_TwoP63, GR_ArgExp  // if arg > 2^63 ('huges')(p6)  fma.s0    FR_Res        = FR_Arg,f1,FR_Arg     // r = a + a(p6)  br.ret.spnt b0                            // return       };;// (X^2 + 1) computation{ .mfi(p8)  ldfe      FR_C5         = [GR_Poly_C_35],16        // load C5      fms.s1    FR_Tmp        = f1, f1, FR_P2           // Tmp = 1 - p2      add       GR_ad_tbl_1   = 0x040, GR_ad_z_1    // Point to Constants_G_H_h1}{ .mfb(p8)  ldfe      FR_C7         = [GR_Poly_C_79],16        // load C7(p7)  fnma.s0   FR_Res        =  FR_Arg,FR_Arg,FR_Arg // r = a - a*a(p7)  br.ret.spnt b0                              // return};;{ .mfi(p8)  ldfe      FR_C3         = [GR_Poly_C_35],16     // load C3      fcmp.lt.s1 p11, p12      = FR_Arg, f0     // if arg is negative      add       GR_ad_q       = -0x60, GR_ad_z_1    // Point to Constants_P}{ .mfb      add       GR_ad_z_2     = 0x140, GR_ad_z_1    // Point to Constants_Z_2(p10) fma.s0    FR_Res        =  FR_Arg,FR_Arg,FR_Arg // r = a + a*a(p10) br.ret.spnt b0                             // return};;{ .mfi      add       GR_ad_tbl_2   = 0x180, GR_ad_z_1    // Point to Constants_G_H_h2      frsqrta.s1 FR_Rcp, p0   = FR_P2           // Rcp = 1/p2 reciprocal appr.      add       GR_ad_tbl_3   = 0x280, GR_ad_z_1    // Point to Constants_G_H_h3}{ .mfi      nop.m 0      fms.s1    FR_P2L        = FR_AX, FR_AX, FR_X2 //low part of p2=fma(X*X-p2)      mov       GR_Bias       = 0x0FFFF            // Create exponent bias};;{ .mfb      nop.m 0(p9)  fms.s1    FR_XLog_Hi    = FR_Two, FR_AX, f0  // Hi  of log1p arg = 2*X - 1(p9)  br.cond.spnt huges_logl                      // special version of log1p};;{ .mfb      ldfe      FR_log2_hi    = [GR_ad_q],16      // Load log2_hi(p8)  fma.s1    FR_X3         = FR_X2, FR_Arg, f0        // x^3 = x^2 * x(p8)  br.cond.spnt near_0                                // Go to near 0 branch};;{ .mfi      ldfe      FR_log2_lo    = [GR_ad_q],16      // Load log2_lo      nop.f 0      nop.i 0};;{ .mfi      ldfe      FR_Q4         = [GR_ad_q],16          // Load Q4      fma.s1    FR_Tmp        = FR_Tmp, f1, FR_X2       // Tmp = Tmp + x^2      mov       GR_exp_mask   = 0x1FFFF        // Create exponent mask};;{ .mfi      ldfe      FR_Q3         = [GR_ad_q],16   // Load Q3      fma.s1    FR_GG         = FR_Rcp, FR_P2, f0        // g = Rcp * p2                                               // 8 bit Newton Raphson iteration      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_HH         = FR_Half, FR_Rcp, f0      // h = 0.5 * Rcp      nop.i 0};;{ .mfi      ldfe      FR_Q2         = [GR_ad_q],16      // Load Q2      fnma.s1   FR_EE         = FR_GG, FR_HH, FR_Half   // e = 0.5 - g * h      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_P2L        = FR_Tmp, f1, FR_P2L // low part of p2 = Tmp + p2l      nop.i 0};;{ .mfi      ldfe      FR_Q1         = [GR_ad_q]                // Load Q1      fma.s1    FR_GG         = FR_GG, FR_EE, FR_GG     // g = g * e + g                                               // 16 bit Newton Raphson iteration      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_HH         = FR_HH, FR_EE, FR_HH     // h = h * e + h      nop.i 0};;{ .mfi      nop.m 0      fnma.s1   FR_EE         = FR_GG, FR_HH, FR_Half   // e = 0.5 - g * h      nop.i 0};;{ .mfi      nop.m 0      fma.s1    FR_GG         = FR_GG, FR_EE, FR_GG     // g = g * e + g                                               // 32 bit Newton Raphson iteration      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_HH         = FR_HH, FR_EE, FR_HH     // h = h * e + h      nop.i 0};;{ .mfi      nop.m 0      fnma.s1   FR_EE         = FR_GG, FR_HH, FR_Half   // e = 0.5 - g * h      nop.i 0};;{ .mfi      nop.m 0      fma.s1    FR_GG         = FR_GG, FR_EE, FR_GG     // g = g * e + g                                               // 64 bit Newton Raphson iteration      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_HH         = FR_HH, FR_EE, FR_HH     // h = h * e + h      nop.i 0};;{ .mfi      nop.m 0      fnma.s1   FR_DD         = FR_GG, FR_GG, FR_P2  // Remainder d = g * g - p2      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_XLog_Hi     = FR_AX, f1, FR_GG // bh = z + gh      nop.i 0};;{ .mfi      nop.m 0      fma.s1    FR_DD         = FR_DD, f1, FR_P2L       // add p2l: d = d + p2l      nop.i 0};;{ .mfi      getf.sig  GR_signif     = FR_XLog_Hi     // Get significand of x+1      fmerge.ns FR_Neg_One    = f1, f1         // Form -1.0      mov       GR_exp_2tom7  = 0x0fff8        // Exponent of 2^-7};;{ .mfi      nop.m 0      fma.s1    FR_GL         = FR_DD, FR_HH, f0        // gl = d * h      extr.u    GR_Index1     = GR_signif, 59, 4    // Get high 4 bits of signif}{ .mfi      nop.m 0      fma.s1    FR_XLog_Hi     = FR_DD,  FR_HH, FR_XLog_Hi // bh = bh + gl      nop.i 0};;{ .mmi      shladd    GR_ad_z_1     = GR_Index1, 2, GR_ad_z_1  // Point to Z_1      shladd    GR_ad_tbl_1   = GR_Index1, 4, GR_ad_tbl_1  // Point to G_1      extr.u    GR_X_0        = GR_signif, 49, 15 // Get high 15 bits of signif.};;{ .mmi      ld4       GR_Z_1        = [GR_ad_z_1]    // Load Z_1      nop.m 0      nop.i 0};;{ .mmi      ldfps     FR_G, FR_H    = [GR_ad_tbl_1],8     // Load G_1, H_1      nop.m 0      nop.i 0};;{ .mfi      nop.m 0      fms.s1    FR_XLog_Lo     = FR_GG,  f1,   FR_XLog_Hi // bl = gh - bh      pmpyshr2.u GR_X_1       = GR_X_0,GR_Z_1,15  // Get bits 30-15 of X_0 * Z_1};;// WE CANNOT USE GR_X_1 IN NEXT 3 CYCLES BECAUSE OF POSSIBLE 10 CLOCKS STALL!// "DEAD" ZONE!{ .mfi      nop.m 0      nop.f 0      nop.i 0};;{ .mfi      nop.m 0      fmerge.se FR_S_hi       =  f1,FR_XLog_Hi            // Form |x+1|      nop.i 0};;{ .mmi      getf.exp  GR_N          =  FR_XLog_Hi    // Get N = exponent of x+1      ldfd      FR_h          = [GR_ad_tbl_1]        // Load h_1      nop.i 0};;{ .mfi      nop.m 0      nop.f 0      extr.u    GR_Index2     = GR_X_1, 6, 4      // Extract bits 6-9 of X_1 };;{ .mfi      shladd    GR_ad_tbl_2   = GR_Index2, 4, GR_ad_tbl_2  // Point to G_2      fma.s1    FR_XLog_Lo    = FR_XLog_Lo, f1, FR_AX // bl = bl + x      mov       GR_exp_2tom80 = 0x0ffaf           // Exponent of 2^-80}{ .mfi      shladd    GR_ad_z_2     = GR_Index2, 2, GR_ad_z_2  // Point to Z_2      nop.f 0      sub       GR_N          = GR_N, GR_Bias // sub bias from exp};;{ .mmi      ldfps     FR_G2, FR_H2  = [GR_ad_tbl_2],8       // Load G_2, H_2      ld4       GR_Z_2        = [GR_ad_z_2]                // Load Z_2      sub       GR_minus_N    = GR_Bias, GR_N         // Form exponent of 2^(-N)};;{ .mmi      ldfd      FR_h2         = [GR_ad_tbl_2]             // Load h_2      nop.m 0      nop.i 0};;{ .mmi      setf.sig  FR_float_N    = GR_N        // Put integer N into rightmost sign      setf.exp  FR_2_to_minus_N = GR_minus_N   // Form 2^(-N)      pmpyshr2.u GR_X_2       = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1 * Z_2};;// WE CANNOT USE GR_X_2 IN NEXT 3 CYCLES ("DEAD" ZONE!) // BECAUSE OF POSSIBLE 10 CLOCKS STALL!// So we can negate Q coefficients there for negative values{ .mfi      nop.m 0(p11) fma.s1    FR_Q1         = FR_Q1, FR_Neg_One, f0 // Negate Q1      nop.i 0}{ .mfi      nop.m 0      fma.s1    FR_XLog_Lo     = FR_XLog_Lo, f1, FR_GL // bl = bl + gl      nop.i 0};;{ .mfi      nop.m 0(p11) fma.s1    FR_Q2         = FR_Q2, FR_Neg_One, f0 // Negate Q2      nop.i 0};;{ .mfi      nop.m 0(p11) fma.s1    FR_Q3         = FR_Q3, FR_Neg_One, f0 // Negate Q3      nop.i 0};;{ .mfi      nop.m 0(p11) fma.s1    FR_Q4         = FR_Q4, FR_Neg_One, f0 // Negate Q4      extr.u    GR_Index3     = GR_X_2, 1, 5         // Extract bits 1-5 of X_2};;{ .mfi      shladd    GR_ad_tbl_3   = GR_Index3, 4, GR_ad_tbl_3  // Point to G_3      nop.f 0      nop.i 0};;{ .mfi      ldfps     FR_G3, FR_H3  = [GR_ad_tbl_3],8   // Load G_3, H_3      nop.f 0      nop.i 0};;{ .mfi      ldfd      FR_h3         = [GR_ad_tbl_3]            // Load h_3	  fcvt.xf   FR_float_N    = FR_float_N      nop.i 0};;{ .mfi      nop.m 0      fmpy.s1   FR_G          = FR_G, FR_G2              // G = G_1 * G_2      nop.i 0}{ .mfi      nop.m 0      fadd.s1   FR_H          = FR_H, FR_H2              // H = H_1 + H_2

⌨️ 快捷键说明

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