📄 e_asinl.s
字号:
(p8) br.ret.spnt b0 ;; }// case 3: 2^-2 <= |x| < 1 // 1- X*X is computed as B + b// Step 1.1: Get B and b// atan2 will return// f8 = Z_hi// f10 = Z_lo// f11 = s_lo{ .mfi(p0) mov asin_GR_fffe = 0xfffe (p0) fmerge.se f8 = asin_ABS_NORM_f8, asin_ABS_NORM_f8 nop.i 0};;{ .mmfnop.m 0(p0) setf.exp asin_HALF = asin_GR_fffe (p0) fmerge.se f12 = asin_NORM_f8, asin_NORM_f8 ;; }{ .mfi nop.m 999(p0) fcmp.lt.unc.s1 p6,p7 = asin_ABS_NORM_f8, asin_HALF nop.i 999 ;;}{ .mfi nop.m 999(p7) fma.s1 asin_D = f1,f1,asin_ABS_NORM_f8 nop.i 999}{ .mfi nop.m 999(p7) fms.s1 asin_C = f1,f1,asin_ABS_NORM_f8 nop.i 999 ;;}{ .mfi nop.m 999(p7) fma.s1 asin_B = asin_C, asin_D, f0 nop.i 999}{ .mfi nop.m 999(p7) fms.s1 asin_1mD = f1,f1,asin_D nop.i 999 ;;}{ .mfi nop.m 999(p7) fma.s1 asin_Dd = asin_1mD,f1, asin_ABS_NORM_f8 nop.i 999}{ .mfi nop.m 999(p7) fms.s1 asin_Bb = asin_C, asin_D, asin_B nop.i 999 ;;}{ .mfi nop.m 999(p7) fma.s1 asin_Bb = asin_C, asin_Dd, asin_Bb nop.i 999}{ .mfi nop.m 999(p6) fma.s1 asin_C = asin_ABS_NORM_f8, asin_ABS_NORM_f8, f0 nop.i 999 ;;}{ .mfi nop.m 999(p6) fms.s1 asin_B = f1, f1, asin_C nop.i 999}{ .mfi nop.m 999(p6) fms.s1 asin_Cc = asin_ABS_NORM_f8, asin_ABS_NORM_f8, asin_C nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_Hh = asin_HALF, asin_B, f0 nop.i 999}{ .mfi nop.m 999(p6) fms.s1 asin_1mB = f1, f1, asin_B nop.i 999 ;;}// Step 1.2: // sqrt(B + b) is computed as W + w// Get W{ .mfi nop.m 999(p0) frsqrta.s1 asin_y0,p8 = asin_B nop.i 999 ;;}{ .mfi nop.m 999(p6) fms.s1 asin_1mBmC = asin_1mB, f1, asin_C nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_t1 = asin_y0, asin_y0, f0 nop.i 999 ;;}{ .mfi nop.m 999(p6) fms.s1 asin_Bb = asin_1mBmC, f1, asin_Cc nop.i 999 ;;}{ .mfi nop.m 999(p0) fnma.s1 asin_t2 = asin_t1, asin_Hh, asin_HALF nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_y1 = asin_t2, asin_y0, asin_y0 nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_t3 = asin_y1, asin_Hh, f0 nop.i 999 ;;}{ .mfi nop.m 999(p0) fnma.s1 asin_t4 = asin_t3, asin_y1, asin_HALF nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_y2 = asin_t4, asin_y1, asin_y1 nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_S = asin_B, asin_y2, f0 nop.i 999}{ .mfi nop.m 999(p0) fma.s1 asin_H = asin_y2, asin_HALF, f0 nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_t5 = asin_Hh, asin_y2, f0 nop.i 999 ;;}{ .mfi nop.m 999(p0) fnma.s1 asin_Dd = asin_S, asin_S, asin_B nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_W = asin_Dd, asin_H, asin_S nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_2W = asin_W, f1, asin_W nop.i 999}// Step 1.3// Get w{ .mfi nop.m 999(p0) fnma.s1 asin_BmWW = asin_W, asin_W, asin_B nop.i 999 ;;}// Step 2// asin(x) = atan2(X,sqrt(1-X*X))// = atan2(X, W) -Xw// corr = Xw// asin(x) = Z_hi + (s_lo*Z_lo - corr)// Call atan2(X, W)// Save W in f9 // Save X in f12 // Save w in f13{ .mfi nop.m 999(p0) fmerge.se f9 = asin_W, asin_W nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_BmWWpb = asin_BmWW, f1, asin_Bb nop.i 999 ;;}{ .mfi nop.m 999(p0) frcpa.s1 asin_1d2W,p9 = f1, asin_2W nop.i 999 ;;}{ .mfi nop.m 999(p0) fma.s1 asin_Ww = asin_BmWWpb, asin_1d2W, f0 nop.i 999 ;;}.endp asinlASM_SIZE_DIRECTIVE(asinl).proc __libm_callout__libm_callout:.prologue{ .mfi nop.m 0 nop.f 0.save ar.pfs,GR_SAVE_PFS mov GR_SAVE_PFS=ar.pfs // Save ar.pfs};;{ .mfi mov GR_SAVE_GP=gp // Save gp nop.f 0.save b0, GR_SAVE_B0 mov GR_SAVE_B0=b0 // Save b0}.body{.mfb nop.m 0(p0) fmerge.se f13 = asin_Ww, asin_Ww (p0) br.call.sptk.many b0=__libm_atan2_reg# };;{ .mfi mov gp = GR_SAVE_GP // Restore gp(p0) fma.s1 asin_XWw = asin_ABS_NORM_f8,f13,f0 mov b0 = GR_SAVE_B0 // Restore return address};;// asin_XWw = Xw = corr// asin_low = (s_lo * Z_lo - corr)// f8 = Z_hi + (s_lo * Z_lo - corr){ .mfi nop.m 999(p0) fms.s1 asin_low = f11, f10, asin_XWw mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs};;{ .mfi nop.m 999(p0) fma.s0 f8 = f8, f1, asin_low nop.i 999 ;;}{ .mfb nop.m 999(p0) fmerge.s f8 = f12,f8 (p0) br.ret.sptk b0 ;; }.endp __libm_calloutASM_SIZE_DIRECTIVE(__libm_callout).proc SPECIALSPECIAL:L(ASIN_ERROR_RETURN): // If X is 1, return (sign of X)pi/2{ .mfi nop.m 999(p0) fcmp.eq.unc p6,p7 = asin_ABS_NORM_f8,f1 nop.i 999 ;;}{ .mfb(p6) ldfe asin_pi_by_2_lo = [r40] (p6) fmerge.s asin_pi_by_2 = f8,asin_pi_by_2 nop.b 0;;}// If X is a NAN, leave// qnan snan inf norm unorm 0 -+// 1 1 0 0 0 0 11{ .mfb nop.m 999(p6) fma.s0 f8 = f8,asin_pi_by_2_lo,asin_pi_by_2 (p6) br.ret.spnt b0 }{ .mfi nop.m 999(p0) fclass.m.unc p12,p0 = f8, 0xc3 nop.i 999 ;;}{ .mfb nop.m 999(p12) fma.s0 f8 = f8,f1,f0 (p12) br.ret.spnt b0 ;; }{ .mfi(p0) mov GR_Parameter_TAG = 60 (p0) frcpa f10, p6 = f0, f0 nop.i 0};;.endp SPECIALASM_SIZE_DIRECTIVE(SPECIAL).proc __libm_error_region__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 nop.b 0 // Parameter 3 address}{ .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 nop.m 0 nop.m 0 add GR_Parameter_RESULT = 48,sp};;{ .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};; .endp __libm_error_regionASM_SIZE_DIRECTIVE(__libm_error_region).type __libm_error_support#,@function.global __libm_error_support#.type __libm_atan2_reg#,@function.global __libm_atan2_reg#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -