⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e_exp2l.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 2 页
字号:
       // GR_CONST1 = bias+15       mov GR_CONST1 = 0xffff+15       nop.f 0       mov GR_CONST3 = 0x1ffff ;;}{.mfi       // load start address for C_1...C_6 followed by T_table       ld8 GR_ADDR = [ GR_ADDR0 ]       nop.f 0       // get sign of argument       andcm GR_SGN = GR_EBIAS, GR_CONST3}{.mfi       // GR_D_ADDR = pointer to D_table       ld8 GR_D_ADDR = [ GR_D_ADDR0 ]       nop.f 0       // get argument exponent       and GR_ARGEXP = GR_CONST3, GR_EBIAS ;;}{.mfi       alloc GR_SREG = ar.pfs, 1, 4, 4, 0       nop.f 0       // p6 = 1 if sign = 1       cmp.ne p6, p8 = GR_SGN, r0}{.mfi       // p7 = 1 if exponent> = 15 (argument out of range)       cmp.ge p7, p0 = GR_ARGEXP, GR_CONST1       nop.f 0       sub GR_EXPON = GR_CONST2, GR_ARGEXP ;;}{.mib       // load C_3, C_4       ldfpd FR_COEFF3, FR_COEFF4 = [ GR_ADDR ], 16       // get first exponent+8 bits       shr.u GR_LEADBITS = GR_SIGNIF, GR_EXPON (p12) br.cond.spnt SPECIAL_exp2l}{.mib       mov GR_256 = 256       // exponent- = 63       sub GR_EM63 = GR_EBIAS, GR_63  (p7) br.cond.spnt OUT_RANGE_exp2l ;;}{.mlx       // load C_5, C_6       ldfpd FR_COEFF5, FR_COEFF6 = [ GR_ADDR ], 16       // GR_2P14 = 2^14       movl GR_2P14 = 0x46800000 ;;}{.mfi       // load C_1       ldfe FR_COEFF1 = [ GR_ADDR ], 16       fma.s0 f8 = f8, f1, f0       // GR_BM63 = bias-63       mov GR_BM63 = 0xffff-63 ;;}{.mlx       setf.s FR_2P14 = GR_2P14       // GR_UF_TEST = -2^14-62       movl GR_UF_TEST = 0xc6807c00}{.mfi       // load C_2       ldfe FR_COEFF2 = [ GR_ADDR ], 16       nop.f 0       mov GR_255 = 255 ;;}{.mib       // get 8-bit index       and GR_INDEX = GR_255, GR_LEADBITS       // get K = integer part       shr.u GR_K = GR_LEADBITS, 8       nop.b 0 ;;}{.mmi       // if sign = 1 && f>0, set p7 = 1  (p6) cmp.gt.unc p7, p0 = GR_INDEX, r0       setf.s FR_UF_TEST = GR_UF_TEST       shl GR_KF = GR_LEADBITS, GR_EXPON ;;}{.mfi       // if sign = 1 && f>0, set f = 1-f  (p7) sub GR_INDEX = GR_256, GR_INDEX       nop.f 0       // if sign = 1 && f>0, set K = K+1  (p7) add GR_K = GR_K, r0, 1 ;;}{.mfi       // FR_EXP63 = 2^{expon-63}       setf.exp FR_EXP63 = GR_EM63       nop.f 0       nop.i 0 ;;}.pred.rel "mutex", p6, p8{.mfi       // if sign = 0, set scale factor exponent S = K+bias-63  (p8) add GR_K = GR_K, GR_BM63       nop.f 0       // if sign = 1, set scale factor exponent S = -K+bias-63  (p6) sub GR_K = GR_BM63, GR_K ;;}{.mmi       // FR_KF0 = 2^{63-expon}*(K+f)       setf.sig FR_KF0 = GR_KF       nop.m 0       // GR_EMIN = EMIN = 2-2^14       mov GR_EMIN = 0x18cfff ;;}{.mfi       // get T_table index       shladd GR_IT = GR_INDEX, 3, GR_ADDR       // p7 = 1 if x> = 2^10       fcmp.ge.s1 p7, p12 = f8, FR_2P14       // get D_table index       shladd GR_ID = GR_INDEX, 2, GR_D_ADDR ;;}{.mfi       // load T_table value       ldf8 FR_T = [ GR_IT ]       // p7 = 1 if x<-2^10-50 (p12) fcmp.lt.s1 p7, p0 = f8, FR_UF_TEST       // GR_EMIN1 = EMIN = 2-2^14       shl GR_EMIN1 = GR_EMIN, 11 ;;}{.mmb       // f50 = scale factor = 2^{K-63}       setf.exp FR_2EXP = GR_K       // load D_table value       ldfs FR_D = [ GR_ID ]  (p7) br.cond.spnt OUT_RANGE_exp2l ;;}{.mfi       nop.m 0       // get r = x-(K+f)       fnma.s1 FR_R = FR_KF0, FR_EXP63, f8       nop.i 0 ;;}{.mfi       // FR_EMIN = EMIN       setf.s FR_EMIN = GR_EMIN1       // P34 = C_4*r+C_3       fma.s1 FR_P34 = FR_COEFF4, FR_R, FR_COEFF3       nop.i 0}{.mfi       nop.m 0       // P56 = C_6*r+C_5       fma.s1 FR_P56 = FR_COEFF6, FR_R, FR_COEFF5       nop.i 0 ;;}{.mfi       nop.m 0       //  r*r       fma.s1 FR_R2 = FR_R, FR_R, f0       nop.i 0}{.mfi       nop.m 0       // P12 = C_2*r+C_1       fma.s1 FR_P12 = FR_COEFF2, FR_R, FR_COEFF1       nop.i 0 ;;}{.mfi       nop.m 0       // T* = scaling factor       fma.s1 FR_TS = FR_T, FR_2EXP, f0       nop.i 0}{.mfi       nop.m 0       // P36 = P34+r2*P56       fma.s1 FR_P36 = FR_P56, FR_R2, FR_P34       nop.i 0 ;;}{.mfi       nop.m 0       // P02 = D+r*P12       fma.s1 FR_P02 = FR_P12, FR_R, FR_D       nop.i 0}{.mfi       nop.m 0       // GR_ID = r*r2       fma.s1 FR_R3 = FR_R2, FR_R, f0       nop.i 0 ;;}{.mfi       nop.m 0       // P06 = P02+r3*P36       fma.s1 FR_P06 = FR_P36, FR_R3, FR_P02       nop.i 0 ;;}{.mfi       nop.m 0       // underflow (x<EMIN) ?       fcmp.lt.s0 p6, p8 = f8, FR_EMIN       nop.i 0 ;;}{.mfb       nop.m 0       // result = T+T*P06       fma.s0 f8 = FR_TS, FR_P06, FR_TS       // return  (p8) br.ret.sptk b0}{.mfb  (p6) mov GR_Parameter_TAG = 160       nop.f 0  (p6) br.cond.sptk __libm_error_region ;;}SPECIAL_exp2l:{.mfi       nop.m 0       // x = -Infinity ?       fclass.m p6, p0 = f8, 0x22       nop.i 0 ;;}{.mfi       nop.m 0       // x = +Infinity ?       fclass.m p7, p0 = f8, 0x21       nop.i 0 ;;}{.mfi       nop.m 0       // x = +/-Zero ?       fclass.m p8, p0 = f8, 0x7       nop.i 0}{.mfb       nop.m 0       // exp2l(-Infinity) = 0  (p6) mov f8 = f0  (p6) br.ret.spnt b0 ;;}{.mfb       nop.m 0       // exp2l(+Infinity) = +Infinity       nop.f 0  (p7) br.ret.spnt b0 ;;}{.mfb       nop.m 0       // exp2l(+/-0) = 1  (p8) mov f8 = f1  (p8) br.ret.spnt b0 ;;}{.mfb       nop.m 0       // Remaining cases: NaNs       fma.s0 f8 = f8, f1, f0       br.ret.sptk b0 ;;}OUT_RANGE_exp2l:{.mfi       // overflow: p8 = 1  (p8) mov GR_EM63 = 0x1fffe       // normalize input, to detect pseudo-zeroes       fma.s0 f8 = f8, f1, f0       nop.i 0 ;;}{.mfi       nop.m 0       // f8 = 0?       fcmp.eq.s1 p7, p0 = f8, f0       nop.i 0 ;;}{.mmb  (p8) mov GR_Parameter_TAG = 159  (p8) setf.exp FR_TS = GR_EM63       nop.b 999 ;;}{.mfb       nop.m 0       // pseudo-zero  (p7) mov f8 = f1  (p7) br.ret.sptk b0 ;;}{.mfi       nop.m 999  (p8) fma.s0 f8 = FR_TS, FR_TS, f0       nop.i 999}{.mii       nop.m 0       // underflow: p6 = 1  (p6) mov GR_EM63 = 1       nop.i 0 ;;}{.mmb  (p6) mov GR_Parameter_TAG = 160  (p6) setf.exp FR_TS = GR_EM63       nop.b 999 ;;}{.mfb       nop.m 999  (p6) fma.s0 f8 = FR_TS, FR_TS, f0       nop.b 0 ;;}GLOBAL_LIBM_END(exp2l)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       stfe [ 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       stfe [ 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       stfe [ 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       ldfe 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 + -