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 + -
显示快捷键?