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

📄 s_atanl.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 4 页
字号:
      nop.i 999}{ .mfi      nop.m 999      fmpy.s1 poly2 = poly2, zsq                // poly2 = zsq * poly2      nop.i 999};;//     Create small GR double in case need to raise underflow{ .mfi      nop.m 999      fma.s1 poly1 = zsq, poly1, P_4            // poly1 = P_4 + zsq * poly1      dep GR_temp = -1,r0,0,53};;//     Create small double in case need to raise underflow{ .mfi      setf.d FR_temp = GR_temp	      fma.s1 poly = z8, poly1, poly2            // poly = poly2 + z8 * poly1      nop.i 999};;{ .mfi      nop.m 999      fma.s1 A_lo = Z, poly, z_lo               // A_lo = z_lo + Z * poly      nop.i 999};;{ .mfi      nop.m 999      fadd.s1      A_hi = tmp, A_lo             // A_hi = tmp + A_lo      nop.i 999};;{ .mfi      nop.m 999      fsub.s1      tmp = tmp, A_hi              // tmp = tmp - A_hi      nop.i 999}{ .mfi      nop.m 999      fmpy.s1 A_hi = s_Y, A_hi                  // A_hi = s_Y * A_hi      nop.i 999};;{ .mfi      nop.m 999      fadd.s1      A_lo = tmp, A_lo             // A_lo = tmp + A_lo      nop.i 999}{ .mfi      nop.m 999      fma.s1 Res_hi = sigma, A_hi, P_hi         // Res_hi = P_hi + sigma * A_hi      nop.i 999};;{ .mfi      nop.m 999      fsub.s1 tmp =  P_hi, Res_hi               // tmp = P_hi - Res_hi      nop.i 999};;////     Test if A_lo is zero//{ .mfi      nop.m 999      fclass.m p6,p0 = A_lo, 0x007              // Test A_lo = 0      nop.i 999};;{ .mfi      nop.m 999(p6)  mov          A_lo = tmp_small             // If A_lo zero, make very small      nop.i 999};;{ .mfi      nop.m 999      fma.s1 tmp = A_hi, sigma, tmp             // tmp = sigma * A_hi  + tmp      nop.i 999}{ .mfi      nop.m 999      fma.s1 sigma =  A_lo, sigma, P_lo         // sigma = A_lo * sigma  + P_lo      nop.i 999};;{ .mfi      nop.m 999      fma.s1 Res_lo = s_Y, sigma, tmp           // Res_lo = s_Y * sigma + tmp      nop.i 999};;////     Test if Res_lo is denormal//{ .mfi      nop.m 999      fclass.m p14, p15 = Res_lo, 0x0b      nop.i 999};;////     Compute Result = Res_lo + Res_hi.  Use s3 if Res_lo is denormal.//{ .mfi      nop.m 999(p14) fadd.s3 Result = Res_lo, Res_hi     // Result for Res_lo denormal      nop.i 999}{ .mfi      nop.m 999(p15) fadd.s0 Result = Res_lo, Res_hi     // Result for Res_lo normal      nop.i 999};;//	//     If Res_lo is denormal test if Result equals zero//	{ .mfi      nop.m 999(p14) fclass.m.unc p14, p0 = Result, 0x07      nop.i 999};;////     If Res_lo is denormal and Result equals zero, raise inexact, underflow//     by squaring small double//{ .mfb      nop.m 999(p14) fmpy.d.s0 FR_temp = FR_temp, FR_temp      br.ret.sptk   b0                     // Exit POLY path, 0 < Q < 2^-3};;ATANL_UNSUPPORTED: { .mfb      nop.m 999      fmpy.s0 Result = ArgX,ArgY       br.ret.sptk   b0};;// Here if y natval, nan, inf, zeroATANL_Y_SPECIAL:// Here if x natval, nan, inf, zeroATANL_X_SPECIAL:{ .mfi      nop.m 999      fclass.m p13,p12 = ArgY_orig, 0x0c3  // Test y nan      nop.i 999};;{ .mfi      nop.m 999      fclass.m p15,p14 = ArgY_orig, 0x103  // Test y natval      nop.i 999};;{ .mfi      nop.m 999(p12) fclass.m p13,p0 = ArgX_orig, 0x0c3  // Test x nan      nop.i 999};;{ .mfi      nop.m 999(p14) fclass.m p15,p0 = ArgX_orig, 0x103  // Test x natval      nop.i 999};;{ .mfb      nop.m 999(p13) fmpy.s0 Result = ArgX_orig, ArgY_orig // Result nan if x or y nan(p13) br.ret.spnt b0                      // Exit if x or y nan};;{ .mfb      nop.m 999(p15) fmpy.s0 Result = ArgX_orig, ArgY_orig // Result natval if x or y natval(p15) br.ret.spnt b0                      // Exit if x or y natval};;// Here if x or y inf or zeroATANL_SPECIAL_HANDLING: { .mfi      nop.m 999      fclass.m p6, p7 = ArgY_orig, 0x007        // Test y zero      mov special = 992                         // Offset to table};;{ .mfb      add table_ptr1 = table_base, special      // Point to 3pi/4      fcmp.eq.s0 p0, p9 = ArgX_orig, ArgY_orig  // Dummy to set denormal flag(p7)  br.cond.spnt ATANL_ArgY_Not_ZERO          // Branch if y not zero};;// Here if y zero{ .mmf      ldfd  Result = [table_ptr1], 8            // Get pi high      nop.m 999      fclass.m p14, p0 = ArgX, 0x035            // Test for x>=+0};;{ .mmf      nop.m 999      ldfd  Result_lo = [table_ptr1], -8        // Get pi lo      fclass.m p15, p0 = ArgX, 0x036            // Test for x<=-0};;////     Return sign_Y * 0 when  ArgX > +0//{ .mfi      nop.m 999(p14) fmerge.s Result = ArgY, f0               // If x>=+0, y=0, hi sgn(y)*0      nop.i 999};;{ .mfi      nop.m 999      fclass.m p13, p0 = ArgX, 0x007           // Test for x=0      nop.i 999};;{ .mfi      nop.m 999(p14) fmerge.s Result_lo = ArgY, f0            // If x>=+0, y=0, lo sgn(y)*0      nop.i 999};;{ .mfi(p13) mov GR_Parameter_TAG = 36                // Error tag for x=0, y=0      nop.f 999      nop.i 999};;////     Return sign_Y * pi when  ArgX < -0//{ .mfi      nop.m 999(p15) fmerge.s Result = ArgY, Result           // If x<0, y=0, hi=sgn(y)*pi      nop.i 999};;{ .mfi      nop.m 999(p15) fmerge.s Result_lo = ArgY, Result_lo     // If x<0, y=0, lo=sgn(y)*pi      nop.i 999};;////     Call error support function for atan(0,0)//{ .mfb      nop.m 999      fadd.s0 Result = Result, Result_lo(p13) br.cond.spnt __libm_error_region         // Branch if atan(0,0)};;{ .mib      nop.m 999      nop.i 999      br.ret.sptk   b0                         // Exit for y=0, x not 0};;// Here if y not zeroATANL_ArgY_Not_ZERO: { .mfi      nop.m 999      fclass.m p0, p10 = ArgY, 0x023           // Test y inf      nop.i 999};;{ .mfb      nop.m 999      fclass.m p6, p0 = ArgX, 0x017            // Test for 0 <= |x| < inf(p10) br.cond.spnt  ATANL_ArgY_Not_INF         // Branch if 0 < |y| < inf};;// Here if y=inf////     Return +PI/2 when ArgY = +Inf and ArgX = +/-0 or normal//     Return -PI/2 when ArgY = -Inf and ArgX = +/-0 or normal//     Return +PI/4 when ArgY = +Inf and ArgX = +Inf//     Return -PI/4 when ArgY = -Inf and ArgX = +Inf//     Return +3PI/4 when ArgY = +Inf and ArgX = -Inf//     Return -3PI/4 when ArgY = -Inf and ArgX = -Inf//{ .mfi      nop.m 999      fclass.m p7, p0 = ArgX, 0x021            // Test for x=+inf      nop.i 999};;{ .mfi(p6)  add table_ptr1 =  16, table_ptr1         // Point to pi/2, if x finite       fclass.m p8, p0 = ArgX, 0x022            // Test for x=-inf      nop.i 999};;{ .mmi(p7)  add table_ptr1 =  32, table_ptr1         // Point to pi/4 if x=+inf;;(p8)  add table_ptr1 =  48, table_ptr1         // Point to 3pi/4 if x=-inf      nop.i 999};;{ .mmi      ldfd Result = [table_ptr1], 8            // Load pi/2, pi/4, or 3pi/4 hi;;      ldfd Result_lo = [table_ptr1], -8        // Load pi/2, pi/4, or 3pi/4 lo      nop.i 999};;{ .mfi      nop.m 999      fmerge.s Result = ArgY, Result           // Merge sgn(y) in hi      nop.i 999};;{ .mfi      nop.m 999      fmerge.s Result_lo = ArgY, Result_lo     // Merge sgn(y) in lo      nop.i 999};;{ .mfb      nop.m 999      fadd.s0 Result = Result, Result_lo       // Compute complete result      br.ret.sptk   b0                         // Exit for y=inf};;// Here if y not INF, and x=0 or INFATANL_ArgY_Not_INF: ////     Return +PI/2 when ArgY NOT Inf, ArgY > 0 and ArgX = +/-0//     Return -PI/2 when ArgY NOT Inf, ArgY < 0 and ArgX = +/-0//     Return +0    when ArgY NOT Inf, ArgY > 0 and ArgX = +Inf//     Return -0    when ArgY NOT Inf, ArgY > 0 and ArgX = +Inf//     Return +PI   when ArgY NOT Inf, ArgY > 0 and ArgX = -Inf//     Return -PI   when ArgY NOT Inf, ArgY > 0 and ArgX = -Inf//{ .mfi      nop.m 999      fclass.m p7, p9 = ArgX, 0x021            // Test for x=+inf      nop.i 999};;{ .mfi      nop.m 999      fclass.m p6, p0 = ArgX, 0x007            // Test for x=0      nop.i 999};;{ .mfi(p6)  add table_ptr1 = 16, table_ptr1          // Point to pi/2      fclass.m p8, p0 = ArgX, 0x022            // Test for x=-inf      nop.i 999};;.pred.rel "mutex",p7,p9{ .mfi(p9)  ldfd Result = [table_ptr1], 8           // Load pi or pi/2 hi(p7)  fmerge.s Result = ArgY, f0              // If y not inf, x=+inf, sgn(y)*0      nop.i 999};;{ .mfi(p9)  ldfd Result_lo = [table_ptr1], -8       // Load pi or pi/2 lo(p7)  fnorm.s0 Result = Result                // If y not inf, x=+inf normalize      nop.i 999};;{ .mfi      nop.m 999(p9)  fmerge.s Result = ArgY, Result          // Merge sgn(y) in hi      nop.i 999};;{ .mfi      nop.m 999(p9)  fmerge.s Result_lo = ArgY, Result_lo    // Merge sgn(y) in lo      nop.i 999};;{ .mfb      nop.m 999(p9)  fadd.s0 Result = Result, Result_lo      // Compute complete result      br.ret.spnt   b0                        // Exit for y not inf, x=0,inf};;GLOBAL_IEEE754_END(atan2l) LOCAL_LIBM_ENTRY(__libm_error_region).prologue{ .mfi        add   GR_Parameter_Y=-32,sp             // Parameter 2 value        nop.f 0.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        stfe [GR_Parameter_Y] = FR_Y,16         // Save 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{ .mib        stfe [GR_Parameter_X] = FR_X            // Store Parameter 1 on stack        add   GR_Parameter_RESULT = 0,GR_Parameter_Y        nop.b 0                                 // Parameter 3 address}{ .mib        stfe [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        nop.m 0        nop.m 0        add   GR_Parameter_RESULT = 48,sp};;{ .mmi        ldfe  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 + -