?? libm_tan.s
字號(hào):
}{ .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 TAN_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 TAN_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 TAN_SMALL_R ;;}{ .mib nop.m 999 nop.i 999(p8) br.cond.sptk TAN_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 TAN_SMALL_R ;;}{ .mib nop.m 999 nop.i 999(p11) br.cond.sptk TAN_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, Z 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(TAN_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//// N odd: S_lo = S_hi * poly1//(p12) fma.s1 S_lo = Q1_1, r, S_lo nop.i 999}{ .mfi nop.m 999//// N odd: Result = S_hi + S_lo//(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact nop.i 999 ;;}{ .mfb nop.m 999//// N odd: S_lo = S_lo + Q1_1 * r//(p12) fadd.s0 Result = S_hi, S_lo(p0) br.ret.sptk b0 ;;}TAN_LARGER_ARG: { .mmf(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp nop.m 999(p0) fmpy.s1 N_0 = Arg, Inv_P_0 }
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -