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

📄 w_tgamma.s

📁 glibc 库, 不仅可以学习使用库函数,还可以学习函数的具体实现,是提高功力的好资料
💻 S
📖 第 1 页 / 共 4 页
字号:
}{ .mfi(p6)  cmp.ltu.unc   p11,p0 = GR_Sign_Exp,GR_NzOvfBound // p11 <- overflow      nop.f         0(p6)  cmp.eq.unc    p12,p0 = GR_Sign_Exp,GR_NzOvfBound};;.pred.rel "mutex",p8,p9{ .mfi(p8)  add           GR_ad_Co = 0x200,GR_ad_Co(p6)  fma.d.s0      FR_X = f1,f1,f8 // set deno & inexact flags(p9)  add           GR_ad_Co = 0x100,GR_ad_Co}{ .mib(p8)  add           GR_ad_Ce = 0x200,GR_ad_Ce(p9)  add           GR_ad_Ce = 0x100,GR_ad_Ce(p11) br.cond.spnt  tgamma_ovf_near_0 //tgamma_spec_res};;{ .mfi      ldfe          FR_A15 = [GR_ad_Co],32       nop.f         0(p12) cmp.eq.unc    p13,p0 = GR_Sig,GR_Sig2}{ .mfb      ldfe          FR_A14 = [GR_ad_Ce],32       nop.f         0(p13) br.cond.spnt  tgamma_ovf_near_0_boundary //tgamma_spec_res};;{ .mfi      ldfe          FR_A13 = [GR_ad_Co],32       nop.f         0      nop.i         0}{ .mfi      ldfe          FR_A12 = [GR_ad_Ce],32       nop.f         0      nop.i         0};;.pred.rel "mutex",p9,p10{ .mfi      ldfe          FR_A11 = [GR_ad_Co],32 (p10) fma.s1        FR_r2 = FR_r02,FR_r02,f0       nop.i         0}{ .mfi      ldfe          FR_A10 = [GR_ad_Ce],32 (p9)  fma.s1        FR_r2 = FR_r,FR_r,f0       nop.i         0};;{ .mfi      ldfe          FR_A9 = [GR_ad_Co],32 (p6)  fma.s1        FR_Rcp1 = FR_Rcp0,FR_Rcp1,FR_Rcp0      nop.i         0}{ .mfi      ldfe          FR_A8 = [GR_ad_Ce],32 (p10) fma.s1        FR_r = f0,f0,FR_r02      nop.i         0};;{ .mfi      ldfe          FR_A7 = [GR_ad_Co],32       nop.f         0      nop.i         0}{ .mfi      ldfe          FR_A6 = [GR_ad_Ce],32       nop.f         0       nop.i         0};;{ .mfi      ldfe          FR_A5 = [GR_ad_Co],32       nop.f         0      nop.i         0}{ .mfi      ldfe          FR_A4 = [GR_ad_Ce],32       nop.f         0      nop.i         0};;{ .mfi      ldfe          FR_A3 = [GR_ad_Co],32       nop.f         0      nop.i         0}{ .mfi      ldfe          FR_A2 = [GR_ad_Ce],32       nop.f         0      nop.i         0};;{ .mfi      ldfe          FR_A1 = [GR_ad_Co],32       fma.s1        FR_r4 = FR_r2,FR_r2,f0       nop.i         0}{ .mfi      ldfe          FR_A0 = [GR_ad_Ce],32       nop.f         0      nop.i         0};;{ .mfi      nop.m         0(p6)  fnma.s1       FR_Rcp2 = FR_Rcp1,FR_NormX,f1 // t = 1 - r1*x      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A15 = FR_A15,FR_r,FR_A14      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A11 = FR_A11,FR_r,FR_A10      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_r8 = FR_r4,FR_r4,f0       nop.i         0};;{ .mfi      nop.m         0(p6)  fma.s1        FR_Rcp2 = FR_Rcp1,FR_Rcp2,FR_Rcp1      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A7 = FR_A7,FR_r,FR_A6      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A3 = FR_A3,FR_r,FR_A2      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A15 = FR_A15,FR_r,FR_A13      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A11 = FR_A11,FR_r,FR_A9      nop.i         0};;{ .mfi      nop.m         0(p6)  fnma.s1       FR_Rcp3 = FR_Rcp2,FR_NormX,f1 // t = 1 - r1*x      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A7 = FR_A7,FR_r,FR_A5      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A3 = FR_A3,FR_r,FR_A1      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A15 = FR_A15,FR_r,FR_A12      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A11 = FR_A11,FR_r,FR_A8      nop.i         0};;{ .mfi      nop.m         0(p6)  fma.s1        FR_Rcp3 = FR_Rcp2,FR_Rcp3,FR_Rcp2      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A7 = FR_A7,FR_r,FR_A4      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A3 = FR_A3,FR_r,FR_A0      nop.i         0};;{ .mfi      nop.m         0      fma.s1        FR_A15 = FR_A15,FR_r4,FR_A11      nop.i         0}{ .mfi      nop.m         0      fma.s1        FR_A7 = FR_A7,FR_r4,FR_A3      nop.i         0};;.pred.rel "mutex",p6,p7{ .mfi      nop.m         0 (p6)  fma.s1        FR_A15 = FR_A15,FR_r8,FR_A7      nop.i         0}{ .mfi      nop.m         0 (p7)  fma.d.s0      f8 = FR_A15,FR_r8,FR_A7      nop.i         0};;{ .mfb      nop.m         0 (p6)  fma.d.s0      f8 = FR_A15,FR_Rcp3,f0      br.ret.sptk   b0};;// overflow//--------------------------------------------------------------------.align 32tgamma_ovf_near_0_boundary:.pred.rel "mutex",p14,p15{ .mfi	  mov           GR_fpsr = ar.fpsr	  nop.f         0(p15) mov           r8 = 0x7ff}{ .mfi      nop.m         0      nop.f         0(p14) mov           r8 = 0xfff};;{ .mfi	  nop.m         0	  nop.f         0	  shl           r8 = r8,52 };;{ .mfi      sub           r8 = r8,r0,1      nop.f         0	  extr.u        GR_fpsr = GR_fpsr,10,2 // rounding mode};;.pred.rel "mutex",p14,p15{ .mfi      // set p8 to 0 in case of overflow and to 1 otherwise	  // for negative arg: 	  //    no overflow if rounding mode either Z or +Inf, i.e.	  //    GR_fpsr > 1(p14) cmp.lt        p8,p0 = 1,GR_fpsr      nop.f         0	  // for positive arg: 	  //    no overflow if rounding mode either Z or -Inf, i.e.	  //    (GR_fpsr & 1) == 0(p15) tbit.z        p0,p8 = GR_fpsr,0};;{ .mib(p8)  setf.d        f8 = r8 // set result to 0x7fefffffffffffff without                            // OVERFLOW flag raising      nop.i         0(p8)  br.ret.sptk   b0};;.align 32tgamma_ovf_near_0:{ .mfi      mov           r8 = 0x1FFFE      nop.f         0        nop.i         0};;{ .mfi      setf.exp      f9 = r8      fmerge.s      FR_X = f8,f8      mov           GR_TAG = 258 // overflow};;.pred.rel "mutex",p14,p15{ .mfi      nop.m         0 (p15) fma.d.s0      f8 = f9,f9,f0 // Set I,O and +INF result      nop.i         0 }{ .mfb      nop.m         0 (p14) fnma.d.s0     f8 = f9,f9,f0 // Set I,O and -INF result      br.cond.sptk  tgamma_libm_err};;// overflow or absolute value of x is too big//--------------------------------------------------------------------.align 32tgamma_spec_res:{ .mfi      mov           GR_0x30033 = 0x30033(p14) fcmp.eq.unc.s1 p10,p11 = f8,FR_Xt(p15) mov           r8 = 0x1FFFE};;{ .mfi(p15) setf.exp      f9 = r8      nop.f         0      nop.i         0};;{ .mfb(p11) cmp.ltu.unc   p7,p8 = GR_0x30033,GR_Sign_Exp      nop.f         0 (p10) br.cond.spnt  tgamma_singularity};;.pred.rel "mutex",p7,p8{ .mbb      nop.m         0(p7)  br.cond.spnt  tgamma_singularity(p8)  br.cond.spnt  tgamma_underflow};;{ .mfi      nop.m         0      fmerge.s      FR_X = f8,f8      mov           GR_TAG = 258 // overflow}{ .mfb      nop.m         0 (p15) fma.d.s0      f8 = f9,f9,f0 // Set I,O and +INF result      br.cond.sptk  tgamma_libm_err};;// x is negative integer or +/-0//--------------------------------------------------------------------.align 32tgamma_singularity:{ .mfi      nop.m         0      fmerge.s      FR_X = f8,f8      mov           GR_TAG = 259 // negative}{ .mfb      nop.m         0      frcpa.s0      f8,p0 = f0,f0      br.cond.sptk  tgamma_libm_err};;// x is negative noninteger with big absolute value//--------------------------------------------------------------------.align 32tgamma_underflow:{ .mmi      getf.sig      GR_Sig = FR_iXt      mov           r11 = 0x00001      nop.i         0};;{ .mfi      setf.exp      f9 = r11      nop.f         0      nop.i         0};;{ .mfi      nop.m         0      nop.f         0      tbit.z        p6,p7 = GR_Sig,0};;.pred.rel "mutex",p6,p7{ .mfi      nop.m         0(p6)  fms.d.s0      f8 = f9,f9,f9      nop.i         0}{ .mfb      nop.m         0(p7)  fma.d.s0      f8 = f9,f9,f9      br.ret.sptk   b0};;//  x for natval, nan, +/-inf or +/-0//--------------------------------------------------------------------.align 32tgamma_spec:{ .mfi      nop.m         0      fclass.m      p6,p0 =  f8,0x1E1 // Test x for natval, nan, +inf      nop.i         0};;{ .mfi      nop.m         0      fclass.m      p7,p8 =  f8,0x7 // +/-0      nop.i         0};;{ .mfi      nop.m         0      fmerge.s      FR_X = f8,f8      nop.i         0}{ .mfb      nop.m         0(p6)  fma.d.s0      f8 = f8,f1,f8(p6)  br.ret.spnt   b0};;.pred.rel "mutex",p7,p8{ .mfi(p7)  mov           GR_TAG = 259 // negative(p7)  frcpa.s0      f8,p0 = f1,f8      nop.i         0 }{ .mib      nop.m         0      nop.i         0(p8)  br.cond.spnt  tgamma_singularity};;.align 32tgamma_libm_err:{ .mfi       alloc        r32 = ar.pfs,1,4,4,0       nop.f        0       mov          GR_Parameter_TAG = GR_TAG};;GLOBAL_LIBM_END(tgamma)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        stfd [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{ .mib        stfd [GR_Parameter_X] = FR_X                  // STORE Parameter 1 on stack         add   GR_Parameter_RESULT = 0,GR_Parameter_Y  // Parameter 3 address         nop.b 0}{ .mib        stfd [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        ldfd  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 + -