📄 e_logf.s
字号:
{ .mfb ldfd log_T = [log_AD_2](p10) fmerge.s f8 = f0, f0(p10) br.ret.spnt b0 // Exit for x=1.0;;}{ .mfi getf.exp log_GR_signexp_w = log_w fclass.m.unc p12,p0 = f8, 0x3a // Test for x neg norm, unorm, inf nop.i 999};;{ .mmb nop.m 999 nop.m 999(p6) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x=0;;} { .mfi and log_GR_exp_w = log_GR_exp_17_ones, log_GR_signexp_w nop.f 999 nop.i 999}{ .mfb nop.m 999 fma.s1 log_rsq = log_r, log_r, f0 (p12) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x<0;;}{ .mfi nop.m 999 fma.s1 log_rp_p32 = log_P3, log_r, log_P2 nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_q32 = log_P3, log_w, log_P2 nop.i 999;;}{ .mfi nop.m 999 fcvt.xf log_Nfloat = log_int_Nfloat nop.i 999 ;;}{ .mfi nop.m 999 fma.s1 log_rp_p10 = log_P1, log_r, f1 nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_q10 = log_P1, log_w, f1 nop.i 999;;}// p13 <== large w log// p14 <== small w log{ .mfi(p8) cmp.ge.unc p13,p14 = log_GR_exp_w, log_GR_fff7 fcmp.eq.s0 p6,p0 = f8,f0 // Sets flag on +denormal input nop.i 999;;}// p10 <== large w log10// p11 <== small w log10{ .mfi(p7) cmp.ge.unc p10,p11 = log_GR_exp_w, log_GR_fff7 nop.f 999 nop.i 999 ;;}{ .mfi nop.m 999 fma.s1 log_T_plus_Nlog2 = log_Nfloat,log_log2, log_T nop.i 999 ;;}{ .mfi nop.m 999 fma.s1 log_rp_p2 = log_rp_p32, log_rsq, log_rp_p10 nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_q2 = log_rp_q32, log_wsq, log_rp_q10 nop.i 999;;}// small w, log <== p14{ .mfi nop.m 999(p14) fma.s f8 = log_rp_q2, log_w, f0 nop.i 999}{ .mfi nop.m 999(p11) fma.s1 log_Q = log_rp_q2, log_w, f0 nop.i 999 ;;}// large w, log <== p13.pred.rel "mutex",p13,p10{ .mfi nop.m 999(p13) fma.s f8 = log_rp_p2, log_r, log_T_plus_Nlog2 nop.i 999 }{ .mfi nop.m 999(p10) fma.s1 log_Q = log_rp_p2, log_r, log_T_plus_Nlog2 nop.i 999 ;;}// log10{ .mfb nop.m 999(p7) fma.s f8 = log_inv_ln10,log_Q,f0 br.ret.sptk b0 ;;}L(LOG_DENORM):{ .mmi getf.exp log_GR_signexp_f8 = log_NORM_f8 nop.m 999 nop.i 999};;{ .mmb getf.sig log_GR_significand_f8 = log_NORM_f8 and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones br.cond.sptk L(LOG_COMMON)};;L(LOG_ZERO_NEG): // qnan snan inf norm unorm 0 -+// 0 0 0 0 0 1 11 0x7// 0 0 1 1 1 0 10 0x3a// Save x (f8) in f10{ .mfi nop.m 999 fmerge.s f10 = f8,f8 nop.i 999 ;;}// p8 p9 means ln(+-0) = -inf// p7 p10 means log(+-0) = -inf// p13 means ln(-)// p14 means log(-){ .mfi nop.m 999 fmerge.ns f6 = f1,f1 // Form -1.0 nop.i 999 ;;}// p9 means ln(+-0) = -inf// p10 means log(+-0) = -inf// Log(+-0) = -inf { .mfi nop.m 999(p8) fclass.m.unc p9,p0 = f10, 0x07 nop.i 999}{ .mfi nop.m 999(p7) fclass.m.unc p10,p0 = f10, 0x07 nop.i 999 ;;}// p13 ln(-)// p14 log(-)// Log(-inf, -normal, -unnormal) = QNAN indefinite{ .mfi nop.m 999(p8) fclass.m.unc p13,p0 = f10, 0x3a nop.i 999 }{ .mfi nop.m 999(p7) fclass.m.unc p14,p0 = f10, 0x3a nop.i 999 ;;}.pred.rel "mutex",p9,p10{ .mfi(p9) mov log_GR_tag = 4 (p9) frcpa f8,p11 = f6,f0 nop.i 999}{ .mfi(p10) mov log_GR_tag = 10 (p10) frcpa f8,p12 = f6,f0 nop.i 999 ;;}.pred.rel "mutex",p13,p14{ .mfi(p13) mov log_GR_tag = 5 (p13) frcpa f8,p11 = f0,f0 nop.i 999}{ .mfb(p14) mov log_GR_tag = 11 (p14) frcpa f8,p12 = f0,f0 br.cond.sptk __libm_error_region ;; }.endp logfASM_SIZE_DIRECTIVE(logf)ASM_SIZE_DIRECTIVE(__ieee754_logf)// Stack operations when calling error support.// (1) (2) (3) (call) (4)// sp -> + psp -> + psp -> + sp -> +// | | | |// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8// | | | |// | <-GR_Y Y2->| Y2 ->| <- GR_Y |// | | | |// | | <- GR_X X1 ->| |// | | | |// sp-64 -> + sp -> + sp -> + +// save ar.pfs save b0 restore gp// save gp restore ar.pfs.proc __libm_error_region__libm_error_region:.prologue// (1){ .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};;// (2){ .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// (3){ .mib stfs [GR_Parameter_X] = f10 // STORE Parameter 1 on stack add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address 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 nop.m 0 nop.m 0 add GR_Parameter_RESULT = 48,sp};;// (4){ .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};;.endp __libm_error_regionASM_SIZE_DIRECTIVE(__libm_error_region).type __libm_error_support#,@function.global __libm_error_support#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -