📄 libm_lgammaf.s
字号:
shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data fma.s1 FR_Xf4 = FR_Xf2,FR_Xf2,f0 nop.i 0};;{ .mfi(p14) sub GR_SignOfGamma = r0,GR_SignOfGamma // set signgam to -1 fma.s1 FR_S6 = FR_S8,FR_Xf2,FR_S6 nop.i 0}{ .mfi // set p9 if signgum is 32-bit int // set p10 if signgum is 64-bit int cmp.eq p10,p9 = 8,r34 fma.s1 FR_S2 = FR_S4,FR_Xf2,FR_S2 nop.i 0};;{ .mfi ldfd FR_Tf = [GR_ad_T] fma.s1 FR_Ln = FR_P32,FR_r,FR_T nop.i 0}{ .mfi nop.m 0 fma.s1 FR_LnSqrt2Pi = FR_LnSqrt2Pi,f1,FR_NormX nop.i 0};;.pred.rel "mutex",p9,p10{ .mfi(p9) st4 [r33] = GR_SignOfGamma // as 32-bit int fma.s1 FR_rf2 = FR_rf,FR_rf,f0 nop.i 0}{ .mfi(p10) st8 [r33] = GR_SignOfGamma // as 64-bit int fma.s1 FR_S10 = FR_S14,FR_Xf4,FR_S10 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_P32f = FR_P3,FR_rf,FR_P2 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_Xf8 = FR_Xf4,FR_Xf4,f0 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_P10f = FR_P1,FR_rf,f1 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_S2 = FR_S6,FR_Xf4,FR_S2 nop.i 0};;{ .mfi nop.m 0 fms.s1 FR_Ln = FR_Ln,FR_xm05,FR_LnSqrt2Pi nop.i 0};;{ .mfi nop.m 0 fcvt.xf FR_Nf = FR_int_Ln nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_S2 = FR_S10,FR_Xf8,FR_S2 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_Tf = FR_Nf,FR_Ln2,FR_Tf nop.i 0}{ .mfi nop.m 0 fma.s1 FR_P32f = FR_P32f,FR_rf2,FR_P10f // ?????? nop.i 0};;{ .mfi nop.m 0 fnma.s1 FR_Ln = FR_S2,FR_Xf2,FR_Ln nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_Lnf = FR_P32f,FR_rf,FR_Tf nop.i 0};;{ .mfb nop.m 0 fms.s.s0 f8 = FR_Ln,f1,FR_Lnf br.ret.sptk b0};;// branch for calculating of ln(GAMMA(x)) for -2^13 < x < -9//---------------------------------------------------------------------.align 32lgammaf_negpoly:{ .mfi getf.d GR_Arg = FR_Xf frcpa.s1 FR_InvXf,p0 = f1,FR_Xf mov GR_ExpBias = 0x3FF}{ .mfi nop.m 0 fma.s1 FR_Xf2 = FR_Xf,FR_Xf,f0 nop.i 0};;{ .mfi getf.sig GR_N = FR_int_Ntrunc fcvt.xf FR_N = FR_int_Ln mov GR_SignOfGamma = 1}{ .mfi nop.m 0 fma.s1 FR_A9 = FR_A10,FR_x,FR_A9 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_P10 = FR_P1,FR_r,f1 extr.u GR_Exp = GR_Arg,52,11}{ .mfi nop.m 0 fma.s1 FR_x4 = FR_x2,FR_x2,f0 nop.i 0};;{ .mfi sub GR_PureExp = GR_Exp,GR_ExpBias fma.s1 FR_A7 = FR_A8,FR_x,FR_A7 tbit.z p14,p0 = GR_N,0}{ .mfi nop.m 0 fma.s1 FR_A5 = FR_A6,FR_x,FR_A5 nop.i 0};;{ .mfi setf.sig FR_int_Ln = GR_PureExp fma.s1 FR_A3 = FR_A4,FR_x,FR_A3 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_A1 = FR_A2,FR_x,FR_A1(p14) sub GR_SignOfGamma = r0,GR_SignOfGamma};;{ .mfi nop.m 0 fms.s1 FR_rf = FR_InvXf,FR_Xf,f1 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_Xf4 = FR_Xf2,FR_Xf2,f0 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_S14 = FR_S16,FR_Xf2,FR_S14 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_S10 = FR_S12,FR_Xf2,FR_S10 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_T = FR_N,FR_Ln2,FR_T nop.i 0}{ .mfi nop.m 0 fma.s1 FR_P32 = FR_P32,FR_r2,FR_P10 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_S6 = FR_S8,FR_Xf2,FR_S6 extr.u GR_Ind4T = GR_Arg,44,8}{ .mfi nop.m 0 fma.s1 FR_S2 = FR_S4,FR_Xf2,FR_S2 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_A7 = FR_A9,FR_x2,FR_A7 nop.i 0}{ .mfi shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data fma.s1 FR_A3 = FR_A5,FR_x2,FR_A3 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_Xf8 = FR_Xf4,FR_Xf4,f0 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_rf2 = FR_rf,FR_rf,f0 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_P32f = FR_P3,FR_rf,FR_P2 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_P10f = FR_P1,FR_rf,f1 nop.i 0};;{ .mfi ldfd FR_Tf = [GR_ad_T] fma.s1 FR_Ln = FR_P32,FR_r,FR_T nop.i 0}{ .mfi nop.m 0 fma.s1 FR_A0 = FR_A1,FR_x,FR_A0 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_S10 = FR_S14,FR_Xf4,FR_S10 nop.i 0}{ .mfi nop.m 0 fma.s1 FR_S2 = FR_S6,FR_Xf4,FR_S2 nop.i 0};;{ .mfi nop.m 0 fcvt.xf FR_Nf = FR_int_Ln nop.i 0}{ .mfi nop.m 0 fma.s1 FR_A3 = FR_A7,FR_x4,FR_A3 nop.i 0};;{ .mfi nop.m 0 fcmp.eq.s1 p13,p0 = FR_NormX,FR_Ntrunc nop.i 0}{ .mfi nop.m 0 fnma.s1 FR_x3 = FR_x2,FR_x,f0 // -x^3 nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_P32f = FR_P32f,FR_rf2,FR_P10f nop.i 0};;{ .mfb // set p9 if signgum is 32-bit int // set p10 if signgum is 64-bit int cmp.eq p10,p9 = 8,r34 fma.s1 FR_S2 = FR_S10,FR_Xf8,FR_S2(p13) br.cond.spnt lgammaf_singularity};;.pred.rel "mutex",p9,p10{ .mmf(p9) st4 [r33] = GR_SignOfGamma // as 32-bit int(p10) st8 [r33] = GR_SignOfGamma // as 64-bit int fms.s1 FR_A0 = FR_A3,FR_x3,FR_A0 // -A3*x^3-A0};;{ .mfi nop.m 0 fma.s1 FR_Tf = FR_Nf,FR_Ln2,FR_Tf nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_Ln = FR_S2,FR_Xf2,FR_Ln // S2*Xf^2+Ln nop.i 0};;{ .mfi nop.m 0 fma.s1 FR_Lnf = FR_P32f,FR_rf,FR_Tf nop.i 0};;{ .mfi nop.m 0 fms.s1 FR_Ln = FR_A0,f1,FR_Ln nop.i 0};;{ .mfb nop.m 0 fms.s.s0 f8 = FR_Ln,f1,FR_Lnf br.ret.sptk b0};;// branch for handling +/-0, NaT, QNaN, +/-INF and denormalised numbers//---------------------------------------------------------------------.align 32lgammaf_spec:{ .mfi getf.exp GR_SignExp = FR_NormX fclass.m p6,p0 = f8,0x21 // is arg +INF? mov GR_SignOfGamma = 1 // set signgam to 1};;{ .mfi getf.sig GR_Sig = FR_NormX fclass.m p7,p0 = f8,0xB // is x deno? // set p11 if signgum is 32-bit int // set p12 if signgum is 64-bit int cmp.eq p12,p11 = 8,r34};;.pred.rel "mutex",p11,p12{ .mfi // store sign of gamma(x) as 32-bit int(p11) st4 [r33] = GR_SignOfGamma fclass.m p8,p0 = f8,0x1C0 // is arg NaT or NaN? dep.z GR_Ind = GR_SignExp,3,4}{ .mib // store sign of gamma(x) as 64-bit int(p12) st8 [r33] = GR_SignOfGamma and GR_Exp = GR_ExpMask,GR_SignExp(p6) br.ret.spnt b0 // exit for +INF};;{ .mfi sub GR_PureExp = GR_Exp,GR_ExpBias fclass.m p9,p0 = f8,0x22 // is arg -INF? extr.u GR_Ind4T = GR_Sig,55,8}{ .mfb nop.m 0(p7) fma.s0 FR_tmp = f1,f1,f8(p7) br.cond.sptk lgammaf_core};;{ .mfb nop.m 0(p8) fms.s.s0 f8 = f8,f1,f8(p8) br.ret.spnt b0 // exit for NaT and NaN};;{ .mfb nop.m 0(p9) fmerge.s f8 = f1,f8(p9) br.ret.spnt b0 // exit -INF};;// branch for handling negative integers and +/-0//---------------------------------------------------------------------.align 32lgammaf_singularity:{ .mfi mov GR_SignOfGamma = 1 // set signgam to 1 fclass.m p6,p0 = f8,0x6 // is x -0? mov GR_TAG = 109 // negative}{ .mfi mov GR_ad_SignGam = r33 fma.s1 FR_X = f0,f0,f8 nop.i 0};;{ .mfi nop.m 0 frcpa.s0 f8,p0 = f1,f0 // set p9 if signgum is 32-bit int // set p10 if signgum is 64-bit int cmp.eq p10,p9 = 8,r34}{ .mib nop.m 0(p6) sub GR_SignOfGamma = r0,GR_SignOfGamma br.cond.sptk lgammaf_libm_err};;// overflow (x > OVERFLOV_BOUNDARY)//---------------------------------------------------------------------.align 32lgammaf_overflow:{ .mfi nop.m 0 nop.f 0 mov r8 = 0x1FFFE};;{ .mfi setf.exp f9 = r8 fmerge.s FR_X = f8,f8 mov GR_TAG = 108 // overflow};;{ .mfi mov GR_ad_SignGam = r33 nop.f 0 // set p9 if signgum is 32-bit int // set p10 if signgum is 64-bit int cmp.eq p10,p9 = 8,r34}{ .mfi nop.m 0 fma.s.s0 f8 = f9,f9,f0 // Set I,O and +INF result nop.i 0};;// gate to __libm_error_support#//---------------------------------------------------------------------.align 32lgammaf_libm_err:{ .mmi alloc r32 = ar.pfs,1,4,4,0 mov GR_Parameter_TAG = GR_TAG nop.i 0};;.pred.rel "mutex",p9,p10{ .mmi // store sign of gamma(x) as 32-bit int(p9) st4 [GR_ad_SignGam] = GR_SignOfGamma // store sign of gamma(x) as 64-bit int(p10) st8 [GR_ad_SignGam] = GR_SignOfGamma nop.i 0};;GLOBAL_LIBM_END(__libm_lgammaf)LOCAL_LIBM_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -