📄 e_log.s
字号:
nop.m 999(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 shl log_GR_index = log_GR_significand_f8,1 };;{ .mfi ldfe log_log2 = [log_AD_2],16 fnma.s1 log_rp_q10 = log_half, log_wsq, log_w shr.u log_GR_index = log_GR_index,56}{ .mfb nop.m 999 fma.s1 log_w3 = log_wsq, log_w, f0(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 fma.s1 log_w4 = log_wsq, log_wsq, f0 nop.i 999}{ .mfb shladd log_AD_2 = log_GR_index,4,log_AD_2 fma.s1 log_rsq = log_r, log_r, f0 (p12) br.cond.spnt L(LOG_ZERO_NEG) // Branch if x<0;;}{ .mfi ldfe log_T = [log_AD_2] fma.s1 log_rp_p4 = log_P5, log_r, log_P4 nop.i 999}{ .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_q7 = log_Q8, log_w, log_Q7 nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_q65 = log_Q6, log_w, log_Q5 nop.i 999;;}// p13 <== large w log// p14 <== small w log{ .mfi(p8) cmp.ge.unc p13,p14 = log_GR_exp_w, log_GR_fff9 fma.s1 log_rp_q3 = log_Q4, log_w, log_Q3 nop.i 999;;}// p10 <== large w log10// p11 <== small w log10{ .mfi(p7) cmp.ge.unc p10,p11 = log_GR_exp_w, log_GR_fff9 fcvt.xf log_Nfloat = log_int_Nfloat nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_q21 = log_Q2, log_w3, log_rp_q10 nop.i 999 ;;}{ .mfi nop.m 999 fma.s1 log_rcube = log_rsq, log_r, f0 nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_p10 = log_rsq, log_P1, log_r nop.i 999;;}{ .mfi nop.m 999 fcmp.eq.s0 p6,p0 = f8,f0 // Sets flag on +denormal input nop.i 999}{ .mfi nop.m 999 fma.s1 log_rp_p2 = log_rp_p4, log_rsq, log_rp_p32 nop.i 999;;}{ .mfi nop.m 999 fma.s1 log_w6 = log_w3, log_w3, f0 nop.i 999 }{ .mfi nop.m 999 fma.s1 log_Qlo = log_rp_q7, log_wsq, log_rp_q65 nop.i 999 };;{ .mfi nop.m 999 fma.s1 log_Qhi = log_rp_q3, log_w4, log_rp_q21 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_r2P_r = log_rp_p2, log_rcube, log_rp_p10 nop.i 999 ;;}// small w, log <== p14{ .mfi nop.m 999(p14) fma.d f8 = log_Qlo, log_w6, log_Qhi nop.i 999}{ .mfi nop.m 999 fma.s1 log_Q = log_Qlo, log_w6, log_Qhi nop.i 999 ;;}{ .mfi nop.m 999(p10) fma.s1 log_log10_hi = log_T_plus_Nlog2, log_inv_ln10,f0 nop.i 999 ;;}// large w, log <== p13.pred.rel "mutex",p13,p10{ .mfi nop.m 999(p13) fadd.d f8 = log_T_plus_Nlog2, log_r2P_r nop.i 999 }{ .mfi nop.m 999(p10) fma.s1 log_log10_lo = log_inv_ln10, log_r2P_r,f0 nop.i 999 ;;}// small w, log10 <== p11{ .mfi nop.m 999(p11) fma.d f8 = log_inv_ln10,log_Q,f0 nop.i 999 ;;}// large w, log10 <== p10{ .mfb nop.m 999(p10) fma.d f8 = log_log10_hi, f1, log_log10_lo br.ret.sptk b0 ;;}L(LOG_DENORM):{ .mfb getf.exp log_GR_signexp_f8 = log_NORM_f8 nop.f 999 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 = 2 (p9) frcpa f8,p11 = f6,f0 nop.i 999}{ .mfi(p10) mov log_GR_tag = 8 (p10) frcpa f8,p12 = f6,f0 nop.i 999 ;;}.pred.rel "mutex",p13,p14{ .mfi(p13) mov log_GR_tag = 3 (p13) frcpa f8,p11 = f0,f0 nop.i 999}{ .mfb(p14) mov log_GR_tag = 9 (p14) frcpa f8,p12 = f0,f0 br.cond.sptk __libm_error_region ;; }.endp logASM_SIZE_DIRECTIVE(log)ASM_SIZE_DIRECTIVE(__ieee754_log)// 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 stfd [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 stfd [GR_Parameter_X] = f10 // STORE Parameter 1 on stack add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address nop.b 0 }{ .mib stfd [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 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};;.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 + -