📄 e_atanhf.s
字号:
data8 0x3fd237c1841a502e //log(1/frcpa(1+196/256))/2data8 0x3fd24cfce6f80d9a //log(1/frcpa(1+197/256))/2data8 0x3fd25b2c55cd5762 //log(1/frcpa(1+198/256))/2data8 0x3fd2707f4d5f7c41 //log(1/frcpa(1+199/256))/2data8 0x3fd285e0842ca384 //log(1/frcpa(1+200/256))/2data8 0x3fd294294708b773 //log(1/frcpa(1+201/256))/2data8 0x3fd2a9a2670aff0c //log(1/frcpa(1+202/256))/2data8 0x3fd2b7fb2c8d1cc1 //log(1/frcpa(1+203/256))/2data8 0x3fd2c65a6395f5f5 //log(1/frcpa(1+204/256))/2data8 0x3fd2dbf557b0df43 //log(1/frcpa(1+205/256))/2data8 0x3fd2ea64c3f97655 //log(1/frcpa(1+206/256))/2data8 0x3fd3001823684d73 //log(1/frcpa(1+207/256))/2data8 0x3fd30e97e9a8b5cd //log(1/frcpa(1+208/256))/2data8 0x3fd32463ebdd34ea //log(1/frcpa(1+209/256))/2data8 0x3fd332f4314ad796 //log(1/frcpa(1+210/256))/2data8 0x3fd348d90e7464d0 //log(1/frcpa(1+211/256))/2data8 0x3fd35779f8c43d6e //log(1/frcpa(1+212/256))/2data8 0x3fd36621961a6a99 //log(1/frcpa(1+213/256))/2data8 0x3fd37c299f3c366a //log(1/frcpa(1+214/256))/2data8 0x3fd38ae2171976e7 //log(1/frcpa(1+215/256))/2data8 0x3fd399a157a603e7 //log(1/frcpa(1+216/256))/2data8 0x3fd3afccfe77b9d1 //log(1/frcpa(1+217/256))/2data8 0x3fd3be9d503533b5 //log(1/frcpa(1+218/256))/2data8 0x3fd3cd7480b4a8a3 //log(1/frcpa(1+219/256))/2data8 0x3fd3e3c43918f76c //log(1/frcpa(1+220/256))/2data8 0x3fd3f2acb27ed6c7 //log(1/frcpa(1+221/256))/2data8 0x3fd4019c2125ca93 //log(1/frcpa(1+222/256))/2data8 0x3fd4181061389722 //log(1/frcpa(1+223/256))/2data8 0x3fd42711518df545 //log(1/frcpa(1+224/256))/2data8 0x3fd436194e12b6bf //log(1/frcpa(1+225/256))/2data8 0x3fd445285d68ea69 //log(1/frcpa(1+226/256))/2data8 0x3fd45bcc464c893a //log(1/frcpa(1+227/256))/2data8 0x3fd46aed21f117fc //log(1/frcpa(1+228/256))/2data8 0x3fd47a1527e8a2d3 //log(1/frcpa(1+229/256))/2data8 0x3fd489445efffccc //log(1/frcpa(1+230/256))/2data8 0x3fd4a018bcb69835 //log(1/frcpa(1+231/256))/2data8 0x3fd4af5a0c9d65d7 //log(1/frcpa(1+232/256))/2data8 0x3fd4bea2a5bdbe87 //log(1/frcpa(1+233/256))/2data8 0x3fd4cdf28f10ac46 //log(1/frcpa(1+234/256))/2data8 0x3fd4dd49cf994058 //log(1/frcpa(1+235/256))/2data8 0x3fd4eca86e64a684 //log(1/frcpa(1+236/256))/2data8 0x3fd503c43cd8eb68 //log(1/frcpa(1+237/256))/2data8 0x3fd513356667fc57 //log(1/frcpa(1+238/256))/2data8 0x3fd522ae0738a3d8 //log(1/frcpa(1+239/256))/2data8 0x3fd5322e26867857 //log(1/frcpa(1+240/256))/2data8 0x3fd541b5cb979809 //log(1/frcpa(1+241/256))/2data8 0x3fd55144fdbcbd62 //log(1/frcpa(1+242/256))/2data8 0x3fd560dbc45153c7 //log(1/frcpa(1+243/256))/2data8 0x3fd5707a26bb8c66 //log(1/frcpa(1+244/256))/2data8 0x3fd587f60ed5b900 //log(1/frcpa(1+245/256))/2data8 0x3fd597a7977c8f31 //log(1/frcpa(1+246/256))/2data8 0x3fd5a760d634bb8b //log(1/frcpa(1+247/256))/2data8 0x3fd5b721d295f10f //log(1/frcpa(1+248/256))/2data8 0x3fd5c6ea94431ef9 //log(1/frcpa(1+249/256))/2data8 0x3fd5d6bb22ea86f6 //log(1/frcpa(1+250/256))/2data8 0x3fd5e6938645d390 //log(1/frcpa(1+251/256))/2data8 0x3fd5f673c61a2ed2 //log(1/frcpa(1+252/256))/2data8 0x3fd6065bea385926 //log(1/frcpa(1+253/256))/2data8 0x3fd6164bfa7cc06b //log(1/frcpa(1+254/256))/2data8 0x3fd62643fecf9743 //log(1/frcpa(1+255/256))/2LOCAL_OBJECT_END(atanhf_data2).section .textGLOBAL_LIBM_ENTRY(atanhf){ .mfi getf.exp rArgSExpb = f8 fclass.m p9,p0 = f8, 0x0b // is arg denormal ? mov rExpbMask = 0x1ffff}{ .mfi addl DataPtr = @ltoff(atanhf_data), gp fnma.s1 fOneMx = f8, f1, f1 // 1 - x mov rBias = 0xffff};;{ .mfi nop.m 0 fclass.m p7,p0 = f8, 0xc7 // is arg NaN or +/-0 ? mov rNearZeroBound = 0xffeb // 2^(-20)}{ .mfi ld8 DataPtr = [DataPtr] fma.s1 fOnePx = f8, f1, f1 // 1 + x nop.i 0};;{ .mfb nop.m 0 fnorm.s1 fNormX = f8 // Normalize x(p9) br.cond.spnt ATANH_UNORM // Branch if x=unorm};;ATANH_COMMON:// Return here if x=unorm and not denorm{ .mfi ldfpd fP3, fP2 = [DataPtr], 16 fma.s1 fX2 = f8, f8, f0 // x^2 nop.i 0}{ .mfb nop.m 0(p7) fma.s.s0 f8 = f8,f1,f8 // NaN or +/-0(p7) br.ret.spnt b0};;{ .mfi ldfpd fP1, fHalf = [DataPtr], 16 frcpa.s1 fRcpM, p9 = f1, fOneMx // rcpm = frcpa(1 - x) nop.i 0};;{ .mfi getf.exp rExpbm = fOneMx frcpa.s1 fRcpP, p0 = f1, fOnePx // rcpp = frcpa(1 + x) // biased exponent and rArgExpb = rArgSExpb, rExpbMask};;{ .mmi getf.exp rExpbp = fOnePx // is |x| < 2^(-20) ? cmp.gt p8,p0 = rNearZeroBound, rArgExpb cmp.ge p6,p0 = rArgExpb, rBias // is |x| >= 1 ?};;{ .mmb getf.sig rSigm = fOneMx nop.m 0(p6) br.cond.spnt atanhf_ge_one};;{ .mfb getf.sig rSigp = fOnePx(p8) fma.s.s0 f8 = fX2, f8, f8 // x + x^3(p8) br.ret.spnt b0 // Exit for MAX_DENORM_ABS < |x| < 2^-20};;{ .mfi ldfd fLog2 = [DataPtr], 16 fms.s1 fRm = fRcpM, fOneMx, f1 // rm = rcpm * (1 - x) - 1 nop.i 0};;{ .mmf // (1 - x) is always positive here and we need not mask sign bit sub rNm = rExpbm, rBias // (1 + x) is always positive here and we need not mask sign bit sub rNp = rExpbp, rBias fms.s1 fRp = fRcpP, fOnePx, f1 // rp = rcpp * (1 + x) - 1};;{ .mmi setf.sig fN4CvtM = rNm setf.sig fN4CvtP = rNp extr.u rIndm = rSigm,55,8 // Extract 8 bits};;{ .mmi shladd RcpTablePtrM = rIndm, 3, DataPtr nop.m 0 extr.u rIndp = rSigp,55,8 // Extract 8 bits};;{ .mmi ldfd fLogTm = [RcpTablePtrM] shladd RcpTablePtrP = rIndp, 3, DataPtr nop.i 0};;{ .mfi ldfd fLogTp = [RcpTablePtrP] fma.s1 fRm2 = fRm, fRm, f0 // rm^2 nop.i 0}{ .mfi nop.m 0 fma.s1 fP32m = fP3, fRm, fP2 // P3*rm + P2 nop.i 0};;{ .mfi nop.m 0 fma.s1 fRp2 = fRp, fRp, f0 // rp^2 nop.i 0}{ .mfi nop.m 0 fma.s1 fP10m = fP1, fRm, fHalf // P1*rm + 1 nop.i 0};;{ .mfi nop.m 0 fma.s1 fP32p = fP3, fRp, fP2 // P3*rp + P2 nop.i 0}{ .mfi nop.m 0 fma.s1 fP10p = fP1, fRp, fHalf // P1*rp + 1 nop.i 0};;{ .mfi nop.m 0 fcvt.xf fNm = fN4CvtM nop.i 0}{ .mfi nop.m 0 fcvt.xf fNp = fN4CvtP nop.i 0};;{ .mfi nop.m 0 // (P3*rm + P2)*rm^2 + (P1*rm + 1) fma.s1 fP32m = fP32m, fRm2, fP10m nop.i 0}{ .mfi nop.m 0 // (P3*rp + P2)*rp^2 + (P1*rp + 1) fma.s1 fP32p = fP32p, fRp2, fP10p nop.i 0};;{ .mfi nop.m 0 // Nm*ln(2)/2 + Tm/2 fma.s1 fLogTm = fNm, fLog2, fLogTm nop.i 0}{ .mfi nop.m 0 // Np*ln(2)/2 + Tp/2 fma.s1 fLogTp = fNp, fLog2, fLogTp nop.i 0};;{ .mfi nop.m 0 // ((P3*rm + P2)*rm^2 + (P3*rm + 1))*0.5*rm + (Nm*ln(2)/2 + Tm/2) fma.d.s1 fP32m = fP32m, fRm, fLogTm nop.i 0}{ .mfi nop.m 0 // ((P3*rp + P2)*rp^2 + (P3*rp + 1))*0.5*rp + (Np*ln(2)/2 + Tp/2) fma.d.s1 fP32p = fP32p, fRp, fLogTp nop.i 0};;{ .mfb nop.m 0 // atanhf(x) = 0.5 * (log(1 + x) - log(1 - x)) fnma.s.s0 f8 = fP32m, f1, fP32p br.ret.sptk b0 // Exit for 2^(-20) <= |x| < 1.0};;ATANH_UNORM:// Here if x=unorm{ .mfi getf.exp rArgSExpb = fNormX // Recompute if x unorm fclass.m p0,p9 = fNormX, 0x0b // Test x denorm nop.i 0};;{ .mfb nop.m 0 fcmp.lt.s0 p10,p11 = f8, f0 // Set denormal flag(p9) br.cond.sptk ATANH_COMMON // Continue if x unorm and not denorm};;.pred.rel "mutex",p6,p7{ .mfi nop.m 0(p6) fnma.s.s0 f8 = f8,f8,f8 // Result x-x^2 if x=-denorm nop.i 0}{ .mfb nop.m 0(p7) fma.s.s0 f8 = f8,f8,f8 // Result x+x^2 if x=+denorm br.ret.spnt b0 // Exit if denorm};;// Here if |x| >= 1.0atanhf_ge_one:{ .mfi alloc r32 = ar.pfs,1,3,4,0 fmerge.s fArgAbs = f0, f8 // Form |x| nop.i 0};;{ .mfi nop.m 0 fmerge.s f10 = f8, f8 // Save input for error call nop.i 0};;{ .mfi nop.m 0 fcmp.eq.s1 p6,p7 = fArgAbs, f1 // Test for |x| = 1.0 nop.i 0};;// Set error tag and result, and raise invalid flag if |x| > 1.0{ .mfi(p7) mov atanh_GR_tag = 133(p7) frcpa.s0 f8, p0 = f0, f0 // Get QNaN, and raise invalid nop.i 0};;// Set error tag and result, and raise Z flag if |x| = 1.0{ .mfi nop.m 0(p6) frcpa.s0 fRm, p0 = f1, f0 // Get inf, and raise Z flag nop.i 0};;{ .mfb(p6) mov atanh_GR_tag = 134(p6) fmerge.s f8 = f8, fRm // result is +-inf br.cond.sptk __libm_error_region // Exit if |x| >= 1.0};;GLOBAL_LIBM_END(atanhf)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 stfs [GR_Parameter_Y] = f1,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 stfs [GR_Parameter_X] = f10 // STORE Parameter 1 on stack // Parameter 3 address add GR_Parameter_RESULT = 0,GR_Parameter_Y nop.b 0}{ .mib stfs [GR_Parameter_Y] = f8 // 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 + -