s_cosf.s
来自「Glibc 2.3.2源代码(解压后有100多M)」· S 代码 · 共 700 行 · 第 1/2 页
S
700 行
}{ .mfi addl SIN_AD_PQ_1 = @ltoff(sin_coeff_1_table),gp fnorm.s0 SIN_NORM_f8 = f8 // Sets denormal or invalid mov sin_GR_sincos_flag = 0x1};;{ .mfi ld8 SIN_AD_PQ_1 = [SIN_AD_PQ_1] fclass.m.unc p8,p0 = f8, 0x07 cmp.ne p9,p0 = r0,r0}{ .mfb nop.m 999 nop.f 999 br.sptk L(SINCOSF_COMMON)};;L(SINCOSF_COMMON):// Here with p6 if sin, p7 if cos, p8 if sin(0), p9 if cos(0){ .mmf ldfpd sin_coeff_Q3, sin_coeff_Q4 = [SIN_AD_PQ_1], 16 nop.m 999 fclass.m.unc p11,p0 = f8, 0x23 // Test for x=inf};;{ .mfb ldfpd sin_coeff_Q5, sin_coeff_Q6 = [SIN_AD_PQ_1], 16 fclass.m.unc p10,p0 = f8, 0xc3 // Test for x=nan(p8) br.ret.spnt b0 // Exit for sin(0)}{ .mfb nop.m 999(p9) fma.s f8 = f1,f1,f0(p9) br.ret.spnt b0 // Exit for cos(0)};;{ .mmf ldfpd sin_coeff_P4, sin_coeff_P5 = [SIN_AD_PQ_1], 16 addl gr_tmp = -1,r0 fcvt.xf sin_Mfloat = sin_Mx};;{ .mfi getf.sig sin_GR_Mint = sin_Mx(p11) frcpa.s0 f8,p13 = f0,f0 // qnan indef if x=inf nop.i 999}{ .mfb ldfpd sin_coeff_P1, sin_coeff_P2 = [SIN_AD_PQ_1], 16 nop.f 999(p11) br.ret.spnt b0 // Exit for x=inf};;{ .mfi ldfpd sin_coeff_Q1, sin_coeff_Q2 = [SIN_AD_PQ_1], 16 nop.f 999 cmp.ge p8,p9 = -33,sin_GR_Mint}{ .mfb add sin_GR_index = 32,sin_GR_Mint(p10) fma.s f8 = f8,f1,f0 // Force qnan if x=nan(p10) br.ret.spnt b0 // Exit for x=nan};;{ .mmi ldfd sin_coeff_P3 = [SIN_AD_PQ_1], 16(p9) cmp.le p8,p0 = 33, sin_GR_Mint shl sin_GR_index = sin_GR_index,4};;{ .mfi setf.sig fp_tmp = gr_tmp // Create constant such that fmpy sets inexact fnma.s1 sin_r = f1,sin_Mfloat,SIN_NORM_f8(p8) cmp.eq.unc p11,p12=sin_GR_sincos_flag,r0 // p11 if must call dbl cos // p12 if must call dbl sin}{ .mbb add SIN_AD_PQ_2 = sin_GR_index,SIN_AD_PQ_1(p11) br.cond.spnt COS_DOUBLE(p12) br.cond.spnt SIN_DOUBLE};;.pred.rel "mutex",p6,p7 //SIN_Sin_Flag, SIN_Cos_Flag{ .mmi(p6) ldfpd sin_tbl_S,sin_tbl_C = [SIN_AD_PQ_2](p7) ldfpd sin_tbl_C,sin_tbl_S = [SIN_AD_PQ_2] nop.i 999};;{ .mfi nop.m 999(p6) fclass.m.unc p8,p0 = f8, 0x0b // If sin, note denormal input to set uflow nop.i 999}{ .mfi nop.m 999 fma.s1 sin_t = sin_r,sin_r,f0 nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_rcube = sin_t,sin_r,f0 nop.i 999}{ .mfi nop.m 999 fma.s1 sin_tsq = sin_t,sin_t,f0 nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_poly_q3 = sin_t,sin_coeff_Q4,sin_coeff_Q3 nop.i 999}{ .mfi nop.m 999 fma.s1 sin_poly_q5 = sin_t,sin_coeff_Q6,sin_coeff_Q5 nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_poly_p1 = sin_t,sin_coeff_P5,sin_coeff_P4 nop.i 999}{ .mfi nop.m 999 fma.s1 sin_poly_p2 = sin_t,sin_coeff_P2,sin_coeff_P1 nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_poly_q1 = sin_t,sin_coeff_Q2,sin_coeff_Q1 nop.i 999}{ .mfi nop.m 999 fma.s1 sin_S_t = sin_t,sin_tbl_S,f0 nop.i 999};;{ .mfi nop.m 999(p8) fmpy.s.s0 fp_tmp2 = f8,f8 // Dummy mult to set underflow if sin(denormal) nop.i 999}{ .mfi nop.m 999 fma.s1 sin_r7 = sin_rcube,sin_tsq,f0 nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_poly_q3456 = sin_tsq,sin_poly_q5,sin_poly_q3 nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_poly_p3 = sin_t,sin_poly_p1,sin_coeff_P3 nop.i 999}{ .mfi nop.m 999 fma.s1 sin_poly_p4 = sin_rcube,sin_poly_p2,sin_r nop.i 999};;{ .mfi nop.m 999 fma.s1 sin_tbl_S_tcube = sin_S_t,sin_tsq,f0 nop.i 999}{ .mfi nop.m 999 fma.s1 sin_poly_q12 = sin_S_t,sin_poly_q1,sin_tbl_S nop.i 999};;{ .mfi nop.m 999 fma.d.s1 sin_of_r = sin_r7,sin_poly_p3,sin_poly_p4 nop.i 999};;{ .mfi nop.m 999 fma.d.s1 sin_tbl_S_cos_of_r = sin_tbl_S_tcube,sin_poly_q3456,sin_poly_q12 nop.i 999}{ .mfi nop.m 999 fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact nop.i 999};;.pred.rel "mutex",p6,p7 //SIN_Sin_Flag, SIN_Cos_Flag{ .mfi nop.m 999//(SIN_Sin_Flag) fma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r(p6) fma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r nop.i 999}{ .mfb nop.m 999//(SIN_Cos_Flag) fnma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r(p7) fnma.s f8 = sin_tbl_C,sin_of_r,sin_tbl_S_cos_of_r br.ret.sptk b0}.endp sinfASM_SIZE_DIRECTIVE(sinf).proc SIN_DOUBLE SIN_DOUBLE:.prologue{ .mfi nop.m 0 nop.f 0.save ar.pfs,GR_SAVE_PFS mov GR_SAVE_PFS=ar.pfs};;{ .mfi mov GR_SAVE_GP=gp nop.f 0.save b0, GR_SAVE_B0 mov GR_SAVE_B0=b0}.body{ .mmb nop.m 999 nop.m 999 br.call.sptk.many b0=sin };;{ .mfi mov gp = GR_SAVE_GP nop.f 999 mov b0 = GR_SAVE_B0};;{ .mfi nop.m 999 fma.s f8 = f8,f1,f0(p0) mov ar.pfs = GR_SAVE_PFS}{ .mib nop.m 999 nop.i 999(p0) br.ret.sptk b0 };;.endp SIN_DOUBLEASM_SIZE_DIRECTIVE(SIN_DOUBLE).proc COS_DOUBLE COS_DOUBLE:.prologue{ .mfi nop.m 0 nop.f 0.save ar.pfs,GR_SAVE_PFS mov GR_SAVE_PFS=ar.pfs};;{ .mfi mov GR_SAVE_GP=gp nop.f 0.save b0, GR_SAVE_B0 mov GR_SAVE_B0=b0}.body{ .mmb nop.m 999 nop.m 999 br.call.sptk.many b0=cos };;{ .mfi mov gp = GR_SAVE_GP nop.f 999 mov b0 = GR_SAVE_B0};;{ .mfi nop.m 999 fma.s f8 = f8,f1,f0(p0) mov ar.pfs = GR_SAVE_PFS}{ .mib nop.m 999 nop.i 999(p0) br.ret.sptk b0 };;.endp COS_DOUBLEASM_SIZE_DIRECTIVE(COS_DOUBLE).type sin,@function.global sin .type cos,@function.global cos
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?