📄 libm_atan2_reg.s
字号:
// poly1 = P_4 + zsq*poly1//(p0) fmpy.s1 f63 = f63, f60 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// poly1 = P_4 + zsq * poly1// swap = xor(swap,sign_X)//(p0) fma.s1 f62 = f60, f62, f72 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// poly = z8*poly1 + poly2 (Typo in writeup)// Is (swap) != 0 ?////// z_lo = V - A_temp * U// if (p7) sigma = 1.0// Writeup shows A_temp as A_hi////// z_lo = z_lo * E// if (p6) sigma = -1.0// z_lo = (V - A_temp * U) *E////// Fixup added to force inexact later -// A_hi = A_temp + z_lo// z_lo = (A_temp - A_hi) + z_lo// z_lo = A_hi - z_lo -A_hi + z_lo = about 0//(p0) fma.s1 f47 = f61, f62, f63 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// A_lo = z * poly + z_lo//(p0) fma.s1 f53 = f59, f47, f64 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fadd.s1 f52 = f65, f53 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fsub.s1 f65 = f65, f52 nop 999 // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fmpy.s1 f52 = f34, f52 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fadd.s1 f53 = f65, f53 nop 999 // EMbo added ... } { .mfi(p0) setf.exp f65 = r47(p0) fma.s1 f56 = f54, f52, f50 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fclass.m.unc p6,p0 = f53,0x007 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// P_hi = s_Y * P_hi// A_hi = s_Y * A_hi////// result_hi = P_hi + sigma * A_hi//(p6) mov f53 = f65 nop 999 // EMbo added ... } { .mfi nop 999 // EMbo added ...//// tmp = P_hi - result_hi//(p0) fsub.s1 f65 = f50, f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fma.s1 f65 = f52, f54, f65 nop 999 // EMbo added ... } { .mfi nop 999 // EMbo added ...//// tmp = sigma * A_hi + tmp// sigma = A_lo * sigma + P_lo//(p0) fma.s1 f54 = f53, f54, f51 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// result_lo = s_Y * sigma + tmp//(p0) fma.s1 f55 = f34, f54, f65 nop 999;; // EMbo added ... } { .mfb nop.m 0 mov f34 = f1(p0) br.cond.sptk L(RETURN_ATAN);;}//// result = result_hi + result_lo (User Supplied Rounding Mode)//// (p0) fadd.d.s0 f57 = f55, f56L(ATAN_UNSUPPORTED):L(ATAN_NATVAL): { .mfb nop 999 // EMbo added ...//// Deal with the NatVal and unsupported cases.// Raise invalid if warrented.//(p0) fmpy.d.s0 f57 = f8, f9br.cond.sptk L(RETURN_ATAN);; }L(ATAN_NAN): { .mfb nop 999 // EMbo added ...//// If only one NaN, then generate the resulting// NaN and return - may raise invalid.//(p0) fmpy.d.s0 f57 = f8, f9(p0) br.cond.sptk L(RETURN_ATAN);; }L(ATAN_SPECIAL_HANDLING): { .mmf(p0) addl r39 = @ltoff(Constants_atan#), gp nop.m 999(p0) fcmp.lt.s0 p0,p7 = f8,f1 } ;;//// Raise denormal operand faults if necessary//{ .mfi ld8 r39 = [r39](p0) fcmp.lt.s0 p0,p6 = f9,f1 nop 999;; // EMbo added ...} ;;{ .mfi nop 999 // EMbo added ...(p0) fclass.m.unc p6,p7 = f32,0x007 nop 999;; // EMbo added ... } { .mlx nop 999 // EMbo added ...(p0) movl r47 = 992;; } { .mib(p0) add r39 = r39, r47 nop 999 // EMbo added ...(p7) br.cond.sptk L(ATAN_ArgY_Not_ZERO);; } { .mfi nop 999 // EMbo added ...(p6) fclass.m.unc p14,p0 = f33,0x035 nop 999 // EMbo added ... } { .mfi nop 999 // EMbo added ...(p6) fclass.m.unc p15,p0 = f33,0x036 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p6) fclass.m.unc p13,p0 = f33,0x007 nop 999 // EMbo added ... } { .mfi(p0) ldfd f56 = [r39],8 nop 999 // EMbo added ... nop 999;; // EMbo added ... } { .mfi(p0) ldfd f55 = [r39],-8(p14) fmerge.s f56 = f32,f0 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// Return sign_Y * 0 when Y = +/-0 and X > 0//(p14) fmerge.s f55 = f32,f0 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p15) fmerge.s f56 = f32,f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// Return sign_Y * PI when X < -0////(p15) fmerge.s f55 = f32,f55 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fadd.d.s0 f57 = f56,f55 nop.i 0 } { .bbb//// Call error support function for atan(0,0)// - expected value already computed.// nop.b 0 nop.b 0(p0) br.cond.sptk L(RETURN_ATAN) }L(ATAN_ArgY_Not_ZERO): { .mfi nop 999 // EMbo added ...(p0) fclass.m.unc p9,p10 = f32,0x023 nop 999;; // EMbo added ... } { .mfb nop 999 // EMbo added ...(p9) fclass.m.unc p6,p0 = f33,0x017(p10) br.cond.sptk L(ATAN_ArgY_Not_INF);; } { .mfi(p6) add r39 = 16,r39(p9) fclass.m.unc p7,p0 = f33,0x021 nop 999;; // EMbo added ... } { .mmf nop 999 // EMbo added ...(p0) ldfd f56 = [r39],8(p9) fclass.m.unc p8,p0 = f33,0x022;; } { .mbb(p0) ldfd f55 = [r39],-8 nop 999 // EMbo added ... nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p6) fmerge.s f56 = f32,f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p6) fmerge.s f55 = f32,f55 nop 999;; // EMbo added ... } { .mfb nop 999 // EMbo added ...//// Load I/2 and adjust its sign.// Return +I/2 when ArgY = +Inf and ArgX = +/-0,normal// Return -I/2 when ArgY = -Inf and ArgX = +/-0,normal//(p6) fadd.d.s0 f57 = f56, f55(p6) br.cond.sptk L(RETURN_ATAN);; } { .mmi(p7) add r39 = 32,r39;;(p7) ldfd f56 = [r39],8 nop 999;; // EMbo added ... } { .mmi nop 999;; // EMbo added ...(p7) ldfd f55 = [r39],-8 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p7) fmerge.s f56 = f32,f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p7) fmerge.s f55 = f32,f55 nop 999;; // EMbo added ... } { .mfb nop 999 // EMbo added ...//// Load PI/4 and adjust its sign.// Return +PI/4 when ArgY = +Inf and ArgX = +Inf// Return -PI/4 when ArgY = -Inf and ArgX = +Inf//(p7) fadd.d.s0 f57 = f56, f55(p7) br.cond.sptk L(RETURN_ATAN);; } { .mmi(p8) add r39 = 48,r39;;(p8) ldfd f56 =[r39],8 nop 999;; // EMbo added ... } { .mmi nop 999;; // EMbo added ...(p8) ldfd f55 =[r39],-8 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p8) fmerge.s f56 = f32,f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p8) fmerge.s f55 = f32,f55 nop 999;; // EMbo added ... } { .mfb nop 999 // EMbo added ...//// Load I/4 and adjust its sign.// Return +3I/4 when ArgY = +Inf and ArgX = -Inf// Return -3I/4 when ArgY = -Inf and ArgX = -Inf//(p8) fadd.d.s0 f57 = f56, f55(p8) br.cond.sptk L(RETURN_ATAN);; }L(ATAN_ArgY_Not_INF): { .mfi nop 999 // EMbo added ...(p0) fclass.m.unc p6,p0 = f33,0x007 nop 999 // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fclass.m.unc p7,p0 = f33,0x021 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p0) fclass.m.unc p8,p0 = f33,0x022(p6) add r39 = 16,r39;; } { .mfi(p6) ldfd f56 =[r39],8 nop 999 // EMbo added ... nop 999;; // EMbo added ... } { .mmi nop 999;; // EMbo added ...(p6) ldfd f55 =[r39],-8 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p6) fmerge.s f56 = f32,f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p6) fmerge.s f55 = f32,f55 nop 999;; // EMbo added ... } { .mfb nop 999 // EMbo added ...//// return = sign_Y * I/2 when ArgX = +/-0//(p6) fadd.d.s0 f57 = f56, f55(p6) br.cond.sptk L(RETURN_ATAN);; } { .mfi nop 999 // EMbo added ...(p7) fmerge.s f56 = f32,f0 nop 999 // EMbo added ... } { .mfi nop 999 // EMbo added ...(p7) fmerge.s f55 = f32,f0 nop 999;; // EMbo added ... } { .mfb nop 999 // EMbo added ...//// return = sign_Y * 0 when ArgX = Inf//(p7) fadd.d.s0 f57 = f56, f55(p7) br.cond.sptk L(RETURN_ATAN);; } { .mfi(p8) ldfd f56 = [r39],8 nop 999 // EMbo added ... nop 999;; // EMbo added ... } { .mmi nop 999;; // EMbo added ...(p8) ldfd f55 = [r39],-8 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p8) fmerge.s f56 = f32,f56 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...(p8) fmerge.s f55 = f32,f55 nop 999;; // EMbo added ... } { .mfi nop 999 // EMbo added ...//// return = sign_Y * I when ArgX = -Inf//(p8) fadd.d.s0 f57 = f56, f55 nop 999 // EMbo added ... };;L(RETURN_ATAN):// mov f8 = f57 ;;// The answer is in f57.// But Z_hi is f56// Z_lo is f55// s_Y is f34// W is in f9 and untouched{ .mfi nop 999 mov f8 = f56 nop.i 0};;{ .mfi nop 999 mov f10 = f55 nop.i 999}{ .mfb nop 999 mov f11 = f34br.ret.sptk b0};;.endp __libm_atan2_regASM_SIZE_DIRECTIVE(__libm_atan2_reg)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -