?? e_exp10.s
字號(hào):
};;{.mfi ldfe FR_COEFF2= [ GR_COEFF_START ], 16 // load C_2 fma.s1 FR_LOG2_10= f8, FR_L2_10_high, f0 // y0= x*log2(10)_hi mov GR_MASK_low= 31};;{.mlx getf.sig GR_KF0= FR_KF0 // (K+f)*2^10= round_to_int(y) (p8) movl GR_exact_limit= 0x41b00000 // Largest x for exact result, // +22.0};;{.mfi add GR_LOG_TBL= 256, GR_COEFF_START // Pointer to high T_table fcmp.gt.s1 p12, p7= f8, FR_OF_LIMIT // x>overflow threshold ? nop.i 0};;{.mfi (p8) setf.s FR_exact_limit = GR_exact_limit // Largest x for exact result (p8) fcvt.xf FR_int_x = FR_int_x // Integral part of x shr GR_K= GR_KF0, 10 // K}{.mfi and GR_F_high= GR_MASK, GR_KF0 // f_high*32 fnma.s1 FR_R= FR_KF, FR_2P53, FR_LOG2_10 // r= x*log2(10)-2^{63-10}* // [ (K+f)*2^{10-63} ] and GR_F_low= GR_KF0, GR_MASK_low // f_low};;{.mmi shladd GR_Flow_ADDR= GR_F_low, 3, GR_COEFF_START // address of 2^{f_low} add GR_BIAS= GR_K, GR_EXP_CORR // K= bias-2*63 shr GR_Fh= GR_F_high, 5 // f_high};;{.mfi setf.exp FR_2_TO_K= GR_BIAS // 2^{K-126} (p7) fcmp.lt.s1 p12, p7= f8, FR_UF_LIMIT // x<underflow threshold ? shladd GR_Fh_ADDR= GR_Fh, 3, GR_LOG_TBL // address of 2^{f_high}}{.mfi ldf8 FR_T_low= [ GR_Flow_ADDR ] // load T_low= 2^{f_low} fms.s1 FR_DX_L210= f8, FR_L2_10_high, FR_LOG2_10 // x*log2(10)_hi- // RN(x*log2(10)_hi) nop.i 0};;{.mfi ldf8 FR_T_high= [ GR_Fh_ADDR ] // load T_high= 2^{f_high} fma.s1 FR_P34= FR_COEFF4, FR_R, FR_COEFF3 // P34= C_3+C_4*r nop.i 0}{.mfb nop.m 0 fma.s1 FR_R2= FR_R, FR_R, f0 // r*r (p12) br.cond.spnt OUT_RANGE_exp10};;{.mfi nop.m 0 // e= (x*log2(10)_hi-RN(x*log2(10)_hi))+log2(10)_lo*x fma.s1 FR_E0= f8, FR_L2_10_low, FR_DX_L210 cmp.eq p7,p9= r0,r0 // Assume inexact result}{.mfi nop.m 0 fma.s1 FR_P12= FR_COEFF2, FR_R, FR_COEFF1 // P12= C_1+C_2*r nop.i 0};;{.mfi nop.m 0 (p8) fcmp.eq.s1 p9,p7= FR_int_x, f8 // Test x positive integer nop.i 0}{.mfi nop.m 0 fma.s1 FR_T_low_K= FR_T_low, FR_2_TO_K, f0 // T= 2^{K-126}*T_low nop.i 0};;{.mfi nop.m 0 fcmp.ge.s1 p11,p0= f8, FR_SNORM_LIMIT // Test x for normal range nop.i 0};;{.mfi nop.m 0 fma.s1 FR_E= FR_E0, FR_COEFF1, f0 // E= C_1*e nop.i 0}{.mfi nop.m 0 fma.s1 FR_P14= FR_R2, FR_P34, FR_P12 // P14= P12+r2*P34 nop.i 0};;// If x a positive integer, will it produce an exact result?// p7 result will be inexact// p9 result will be exact{.mfi nop.m 0 (p9) fcmp.le.s1 p9,p7= f8, FR_exact_limit // Test x gives exact result nop.i 0}{.mfi nop.m 0 fma.s1 FR_T= FR_T_low_K, FR_T_high, f0 // T= T*T_high nop.i 0};;{.mfi nop.m 0 fma.s1 FR_P= FR_P14, FR_R, FR_E // P= P14*r+E nop.i 0};;.pred.rel "mutex",p7,p9{.mfi nop.m 0 (p7) fma.d.s0 f8= FR_P, FR_T, FR_T // result= T+T*P, inexact set nop.i 0}{.mfb nop.m 0 (p9) fma.d.s1 f8= FR_P, FR_T, FR_T // result= T+T*P, exact use s1 (p11) br.ret.sptk b0 // return, if result normal};;// Here if result in denormal range (and not zero){.mib nop.m 0 mov GR_Parameter_TAG= 265 br.cond.sptk __libm_error_region // Branch to error handling};;SPECIAL_exp10:{.mfi nop.m 0 fclass.m p6, p0= f8, 0x22 // x= -Infinity ? nop.i 0};;{.mfi nop.m 0 fclass.m p7, p0= f8, 0x21 // x= +Infinity ? nop.i 0};;{.mfi nop.m 0 fclass.m p8, p0= f8, 0x7 // x= +/-Zero ? nop.i 0}{.mfb nop.m 0 (p6) mov f8= f0 // exp10(-Infinity)= 0 (p6) br.ret.spnt b0};;{.mfb nop.m 0 nop.f 0 (p7) br.ret.spnt b0 // exp10(+Infinity)= +Infinity};;{.mfb nop.m 0 (p8) mov f8= f1 // exp10(+/-0)= 1 (p8) br.ret.spnt b0};;{.mfb nop.m 0 fma.d.s0 f8= f8, f1, f0 // Remaining cases: NaNs br.ret.sptk b0};;OUT_RANGE_exp10:// underflow: p6= 1// overflow: p8= 1.pred.rel "mutex",p6,p8{.mmi (p8) mov GR_EXPMAX= 0x1fffe (p6) mov GR_EXPMAX= 1 nop.i 0};;{.mii setf.exp FR_R= GR_EXPMAX (p8) mov GR_Parameter_TAG= 166 (p6) mov GR_Parameter_TAG= 265};;{.mfb nop.m 0 fma.d.s0 f8= FR_R, FR_R, f0 // Create overflow/underflow br.cond.sptk __libm_error_region // Branch to error handling};;GLOBAL_IEEE754_END(exp10)weak_alias (exp10, pow10)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 stfd [ GR_Parameter_Y ]= FR_Y, 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 stfd [ GR_Parameter_X ]= FR_X // STORE Parameter 1 on stack add GR_Parameter_RESULT= 0, GR_Parameter_Y // Parameter 3 address nop.b 0}{.mib stfd [ GR_Parameter_Y ]= FR_RESULT // 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 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};;LOCAL_LIBM_END(__libm_error_region).type __libm_error_support#, @function.global __libm_error_support#
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -