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

📄 s_tanl.s

📁 Glibc 2.3.2源代码(解压后有100多M)
💻 S
📖 第 1 页 / 共 5 页
字号:
(p0)  addl           table_ptr1   = @ltoff(TANL_BASE_CONSTANTS), gp	nop.f 999      nop.i 0};;{ .mmi(p0)  ld8 table_ptr1 = [table_ptr1]      setf.sig fp_tmp = gr_tmp   // Make a constant so fmpy produces inexact      nop.i 999};;////     Check for NatVals, Infs , NaNs, and Zeros //     Check for everything - if false, then must be pseudo-zero//     or pseudo-nan.//     Local table pointer//{ .mbb(p0)   add table_ptr2 = 96, table_ptr1(p6)   br.cond.spnt L(TANL_SPECIAL) (p7)   br.cond.spnt L(TANL_SPECIAL) ;;}////     Point to Inv_P_0//     Branch out to deal with unsupporteds and special values. //{ .mmf(p0)   ldfs TWO_TO_24 = [table_ptr1],4(p0)   ldfs TWO_TO_63 = [table_ptr2],4////     Load -2**24, load -2**63.//(p0)   fcmp.eq.s0 p0, p6 = Arg, f1 ;;}{ .mfi(p0)   ldfs NEGTWO_TO_63 = [table_ptr2],12(p0)   fnorm.s1     Arg = Arg	nop.i 999}////     Load 2**24, Load 2**63.//{ .mmi(p0)   ldfs NEGTWO_TO_24 = [table_ptr1],12 ;;////     Do fcmp to generate Denormal exception //     - can't do FNORM (will generate Underflow when U is unmasked!)//     Normalize input argument.//(p0)   ldfe two_by_PI = [table_ptr1],16	nop.i 999}{ .mmi(p0)   ldfe Inv_P_0 = [table_ptr2],16 ;;(p0)   ldfe d_1 = [table_ptr2],16	nop.i 999}////     Decide about the paths to take://     PR_1 and PR_3 set if -2**24 < Arg < 2**24 - CASE 1 OR 2//     OTHERWISE - CASE 3 OR 4//     Load inverse of P_0 .//     Set PR_6 if Arg <= -2**63//     Are there any Infs, NaNs, or zeros?//{ .mmi(p0)   ldfe P_0 = [table_ptr1],16 ;;(p0)   ldfe d_2 = [table_ptr2],16	nop.i 999}////     Set PR_8 if Arg <= -2**24//     Set PR_6 if Arg >=  2**63//{ .mmi(p0)   ldfe P_1 = [table_ptr1],16 ;;(p0)   ldfe PI_BY_4 = [table_ptr2],16	nop.i 999}////     Set PR_8 if Arg >= 2**24//{ .mmi(p0)   ldfe P_2 = [table_ptr1],16 ;;(p0)   ldfe   MPI_BY_4 = [table_ptr2],16	nop.i 999}////     Load  P_2 and PI_BY_4//{ .mfi(p0)   ldfe   P_3 = [table_ptr1],16	nop.f 999	nop.i 999 ;;}{ .mfi	nop.m 999(p0)   fcmp.le.unc.s1 p6,p7 = Arg,NEGTWO_TO_63	nop.i 999}{ .mfi	nop.m 999(p0)   fcmp.le.unc.s1 p8,p9 = Arg,NEGTWO_TO_24	nop.i 999 ;;}{ .mfi	nop.m 999(p7)   fcmp.ge.s1 p6,p0 = Arg,TWO_TO_63	nop.i 999}{ .mfi	nop.m 999(p9)   fcmp.ge.s1 p8,p0 = Arg,TWO_TO_24	nop.i 999 ;;}{ .mib	nop.m 999	nop.i 999////     Load  P_3 and -PI_BY_4//(p6)   br.cond.spnt L(TANL_ARG_TOO_LARGE) ;;}{ .mib	nop.m 999	nop.i 999////     Load 2**(-2).//     Load -2**(-2).//     Branch out if we have a special argument.//     Branch out if the magnitude of the input argument is too large//     - do this branch before the next.//(p8)   br.cond.spnt L(TANL_LARGER_ARG) ;;}////     Branch to Cases 3 or 4 if Arg <= -2**24 or Arg >= 2**24//{ .mfi(p0)   ldfs TWO_TO_NEG2 = [table_ptr2],4//     ARGUMENT REDUCTION CODE - CASE 1 and 2//     Load 2**(-2).//     Load -2**(-2).(p0)   fmpy.s1 N = Arg,two_by_PI	nop.i 999 ;;}{ .mfi(p0)   ldfs NEGTWO_TO_NEG2 = [table_ptr2],12////     N = Arg * 2/pi//(p0)   fcmp.lt.unc.s1 p8,p9= Arg,PI_BY_4	nop.i 999 ;;}{ .mfi	nop.m 999////     if Arg < pi/4,  set PR_8.//(p8)   fcmp.gt.s1 p8,p9= Arg,MPI_BY_4	nop.i 999 ;;}////     Case 1: Is |r| < 2**(-2).//     Arg is the same as r in this case.//     r = Arg//     c = 0//{ .mfi(p8)   mov N_fix_gr = r0////     if Arg > -pi/4, reset PR_8.//     Select the case when |Arg| < pi/4 - set PR[8] = true.//     Else Select the case when |Arg| >= pi/4 - set PR[9] = true.//(p0)   fcvt.fx.s1 N_fix = N	nop.i 999 ;;}{ .mfi	nop.m 999////     Grab the integer part of N .//(p8)   mov r = Arg	nop.i 999}{ .mfi	nop.m 999(p8)   mov c = f0	nop.i 999 ;;}{ .mfi	nop.m 999(p8)   fcmp.lt.unc.s1 p10, p11 = Arg, TWO_TO_NEG2	nop.i 999 ;;}{ .mfi	nop.m 999(p10)  fcmp.gt.s1 p10,p0 = Arg, NEGTWO_TO_NEG2	nop.i 999 ;;}{ .mfi	nop.m 999////     Case 2: Place integer part of N in GP register.//(p9)   fcvt.xf N = N_fix	nop.i 999 ;;}{ .mib(p9)   getf.sig N_fix_gr = N_fix	nop.i 999////     Case 2: Convert integer N_fix back to normalized floating-point value.//(p10)  br.cond.spnt L(TANL_SMALL_R) ;;}{ .mib	nop.m 999	nop.i 999(p8)   br.cond.sptk L(TANL_NORMAL_R) ;;}////     Case 1: PR_3 is only affected  when PR_1 is set.//{ .mmi(p9)   ldfs TWO_TO_NEG33 = [table_ptr2], 4 ;;////     Case 2: Load 2**(-33).//(p9)   ldfs NEGTWO_TO_NEG33 = [table_ptr2], 4	nop.i 999 ;;}{ .mfi	nop.m 999////     Case 2: Load -2**(-33).//(p9)   fnma.s1 s_val = N, P_1, Arg	nop.i 999}{ .mfi	nop.m 999(p9)   fmpy.s1 w = N, P_2	nop.i 999 ;;}{ .mfi	nop.m 999////     Case 2: w = N * P_2//     Case 2: s_val = -N * P_1  + Arg//(p0)   fcmp.lt.unc.s1 p9,p8 = s_val, TWO_TO_NEG33	nop.i 999 ;;}{ .mfi	nop.m 999////     Decide between case_1 and case_2 reduce://(p9)   fcmp.gt.s1 p9, p8 = s_val, NEGTWO_TO_NEG33	nop.i 999 ;;}{ .mfi	nop.m 999////     Case 1_reduce:  s <= -2**(-33) or s >= 2**(-33)//     Case 2_reduce: -2**(-33) < s < 2**(-33)//(p8)   fsub.s1 r = s_val, w	nop.i 999}{ .mfi	nop.m 999(p9)   fmpy.s1 w = N, P_3	nop.i 999 ;;}{ .mfi	nop.m 999(p9)   fma.s1  U_1 = N, P_2, w	nop.i 999}{ .mfi	nop.m 999////     Case 1_reduce: Is |r| < 2**(-2), if so set PR_10//     else set PR_11.//(p8)   fsub.s1 c = s_val, r	nop.i 999 ;;}{ .mfi	nop.m 999////     Case 1_reduce: r = s + w (change sign)//     Case 2_reduce: w = N * P_3 (change sign)//(p8)   fcmp.lt.unc.s1 p10, p11 = r, TWO_TO_NEG2	nop.i 999 ;;}{ .mfi	nop.m 999(p10)  fcmp.gt.s1 p10, p11 = r, NEGTWO_TO_NEG2	nop.i 999 ;;}{ .mfi	nop.m 999(p9)   fsub.s1 r = s_val, U_1	nop.i 999}{ .mfi	nop.m 999////     Case 1_reduce: c is complete here.//     c = c + w (w has not been negated.)//     Case 2_reduce: r is complete here - continue to calculate c .//     r = s - U_1//(p9)   fms.s1 U_2 = N, P_2, U_1	nop.i 999 ;;}{ .mfi	nop.m 999////     Case 1_reduce: c = s - r//     Case 2_reduce: U_1 = N * P_2 + w//(p8)   fsub.s1 c = c, w	nop.i 999 ;;}{ .mfi	nop.m 999(p9)   fsub.s1 s_val = s_val, r	nop.i 999}{ .mfb	nop.m 999////     Case 2_reduce://     U_2 = N * P_2 - U_1//     Not needed until later.//(p9)   fadd.s1 U_2 = U_2, w////     Case 2_reduce://     s = s - r//     U_2 = U_2 + w//(p10)  br.cond.spnt L(TANL_SMALL_R) ;;}{ .mib	nop.m 999	nop.i 999(p11)  br.cond.sptk L(TANL_NORMAL_R) ;;}{ .mii	nop.m 999////     Case 2_reduce://     c = c - U_2//     c is complete here//     Argument reduction ends here.//(p9)   extr.u i_1 = N_fix_gr, 0, 1 ;;(p9)   cmp.eq.unc p11, p12 = 0x0000,i_1 ;;}{ .mfi	nop.m 999////     Is i_1  even or odd?//     if i_1 == 0, set p11, else set p12.//(p11)  fmpy.s1 rsq = r, r	nop.i 999 ;;}{ .mfi	nop.m 999(p12)  frcpa.s1 S_hi,p0 = f1, r	nop.i 999}////     Case 1: Branch to SMALL_R or NORMAL_R.//     Case 1 is done now.//{ .mfi(p9)   addl           table_ptr1   = @ltoff(TANL_BASE_CONSTANTS), gp(p9)   fsub.s1 c = s_val, U_1       nop.i 999 ;;};;{ .mmi(p9)  ld8 table_ptr1 = [table_ptr1]      nop.m 999      nop.i 999};;{ .mmi(p9)   add table_ptr1 = 224, table_ptr1 ;;(p9)   ldfe P1_1 = [table_ptr1],144	nop.i 999 ;;}////     Get [i_1] -  lsb of N_fix_gr .//     Load P1_1 and point to Q1_1 .//{ .mfi(p9)   ldfe Q1_1 = [table_ptr1] , 0////     N even: rsq = r * Z//     N odd:  S_hi = frcpa(r)//(p12)  fmerge.ns S_hi = S_hi, S_hi	nop.i 999}{ .mfi	nop.m 999////     Case 2_reduce://     c = s - U_1//(p9)   fsub.s1 c = c, U_2	nop.i 999 ;;}{ .mfi	nop.m 999(p12)  fma.s1  poly1 = S_hi, r, f1	nop.i 999 ;;}{ .mfi	nop.m 999////     N odd:  Change sign of S_hi//(p11)  fmpy.s1 rsq = rsq, P1_1	nop.i 999 ;;}{ .mfi	nop.m 999(p12)  fma.s1 S_hi = S_hi, poly1, S_hi	nop.i 999 ;;}{ .mfi	nop.m 999////     N even: rsq = rsq * P1_1//     N odd:  poly1 =  1.0 +  S_hi * r    16 bits partial  account for necessary//(p11)  fma.s1 Result = r, rsq, c	nop.i 999 ;;}{ .mfi	nop.m 999////     N even: Result = c  + r * rsq//     N odd:  S_hi  = S_hi + S_hi*poly1  16 bits account for necessary//(p12)  fma.s1 poly1 = S_hi, r, f1	nop.i 999 ;;}{ .mfi	nop.m 999////     N even: Result = Result + r//     N odd:  poly1  = 1.0 + S_hi * r        32 bits partial//(p11)  fadd.s0 Result = r, Result	nop.i 999 ;;}{ .mfi	nop.m 999(p12)  fma.s1  S_hi = S_hi, poly1, S_hi	nop.i 999 ;;}{ .mfi	nop.m 999////     N even: Result1 = Result + r//     N odd:   S_hi  = S_hi * poly1 + S_hi   32 bits//(p12)  fma.s1 poly1 = S_hi, r, f1	nop.i 999 ;;}{ .mfi	nop.m 999////     N odd:  poly1  =  S_hi * r + 1.0       64 bits partial//(p12)  fma.s1 S_hi = S_hi, poly1, S_hi	nop.i 999 ;;}{ .mfi	nop.m 999////     N odd:  poly1  =  S_hi * poly + 1.0    64 bits//(p12)  fma.s1 poly1 = S_hi, r, f1	nop.i 999 ;;}{ .mfi	nop.m 999////     N odd:  poly1  =  S_hi * r + 1.0//(p12)  fma.s1 poly1 = S_hi, c, poly1	nop.i 999 ;;}{ .mfi	nop.m 999////     N odd:  poly1  =  S_hi * c + poly1//(p12)  fmpy.s1 S_lo = S_hi, poly1	nop.i 999 ;;}{ .mfi	nop.m 999//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -