📄 dzqatan2float.asm
字号:
.extern dzq_atan2_const;
.global dzq_atan2f;
/////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
////// entrance parameters: xr4=imag part,xr5=real part///
////// return value store in xr8.
////// eg: xr4=10.5;; xr5=2.7;; call dzq_atan2f(np);; nop;;
.section program;
dzq_atan2f:
xr4=lshift r4 by 0;;
xr5=lshift r5 by 0;;
yr4 = xr4; xr8 = r8 - r8;;
xr23 = 0X3FC90FDB; xfr5 = PASS r5;;
IF nxaeq, JUMP dzq_end_if1; yr5 = xr5;;
yfr4 = PASS r4;;
IF nyale; do, xr8 = r23 AND r23;;
IF yalt; do, xfr8 = -r23; nop;;
IF true, JUMP dzq_atan2f_exit;;
dzq_end_if1:
j0 = dzq_atan2_const; fr13:12 = EXTD r4;;
j2 = cjmp; fr15:14 = EXTD r5;; //store the cjmp to j2.
j1 = 0; fr13:12 = ABS r13:12;;
r7:6 = L [j0 + 0X8]; fr15:14 = ABS r15:14; nop; nop;;
IF true, CALL dzq_atanf_body;;
xr1:0 = L [j0 + 0X10]; xfr5 = PASS r5;;
IF xalt; do, xfr9:8 = r1:0 - r9:8;;
cjmp = j2; xfr4 = PASS r4;; //refresh the cjmp.
IF xalt; do, xfr9:8 = -r9:8;;
xfr8 = SNGL r9:8;; //now xr8 is the atan2 result.
dzq_atan2f_exit:
IF true, CJMP (NP)(ABS);; ////////////////////finished!!!!
dzq_atanf_body:
r20 = 0X3F800000; xfr13:12 = PASS r13:12; yfr15:14 = PASS r15:14;;
IF nxaeq; do, xr13 = LSHIFT r20 by 0; xr20 = r20 - r13;;
IF nyaeq; do, yr15 = LSHIFT r20 by 0; yr20 = r20 - r15;;
j1 = j1 + j1; r20 = ASHIFT r20 by 0X29; xfr1:0 = RECIPS r13:12; yfr1:0 = RECIPS r15:14;;
IF njeq, JUMP dzq_skip_division(NP); xfr3:2 = r13:12 * r1:0; yfr3:2 = r15:14 * r1:0;;
xfr19:18 = r1:0 * r15:14; yfr19:18 = r1:0 * r13:12;;
xfr1:0 = r7:6 - r3:2; yfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2; yfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18; yfr19:18 = r1:0 * r19:18;;
xfr1:0 = r7:6 - r3:2; yfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2; yfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18; yfr19:18 = r1:0 * r19:18;;
xfr1:0 = r7:6 - r3:2; yfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2; yfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18; yfr19:18 = r1:0 * r19:18;;
xfr1:0 = r7:6 - r3:2; yfr1:0 = r7:6 - r3:2;;
fr19:18 = SCALB fr19:18 by r20; xfr3:2 = r1:0 * r3:2; yfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18; yfr19:18 = r1:0 * r19:18; j1 = 0X4;;
dzq_skip_division:
xr13:12 = yr13:12;;
xFCOMP(r13:12, r15:14); xr1:0 = L [j0 + 0X12];;
IF xale; do, xr19:18 = yr19:18; do, j1 = j1 - j1;;
j3 = j0 + 0X16; xFCOMP(r19:18, r1:0);;
IF xale, JUMP dzq_end_if2(NP); xr3:0 = Q [j0 + 0XC];;
xr11:10 = L [j0 + 0XA]; xfr15:14 = r3:2 * r19:18; xfr13:12 = r1:0 + r19:18;;
xfr15:14 = r15:14 - r11:10; j1 = j1 + 0X2;;
xfr15:14 = r15:14 - r11:10;;
xfr15:14 = r15:14 + r19:18;;
xr20 = 0X3F800000; xfr19:18 = PASS r13:12;;
IF nxaeq; do, xr13 = LSHIFT r20 by 0; xr20 = r20 - r13;;
xr20 = ASHIFT r20 by 0X29; xfr1:0 = RECIPS r13:12;;
xfr3:2 = r13:12 * r1:0; xfr13:12 = PASS r19:18;;
xfr19:18 = r1:0 * r15:14;;
xfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18;;
xfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18;;
xfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18;;
xfr1:0 = r7:6 - r3:2;;
xfr19:18 = SCALB fr19:18 by r20; xfr3:2 = r1:0 * r3:2;;
xfr19:18 = r1:0 * r19:18;;
dzq_end_if2:
xr1:0 = L [j0 + 0X14]; xfr17:16 = ABS r19:18;;
j3 = j3 + j1; xr9:8 = xr19:18; xFCOMP(r17:16, r1:0);;
IF xalt, JUMP dzq_end_if3(NP); xfr17:16 = r19:18 * r19:18; r3:0 = Q [j0 + 0X4];;
xfr15:14 = r1:0 * r17:16; xfr13:12 = r17:16 + r3:2; r3:0 = Q [j0 + 0];;
xfr15:14 = r15:14 + r1:0; xfr13:12 = r13:12 * r17:16;;
xfr15:14 = r15:14 * r17:16; xfr13:12 = r13:12 + r3:2;;
xr20 = 0X3F800000; xfr9:8 = PASS r13:12;;
IF nxaeq; do, xr13 = LSHIFT r20 by 0; xr20 = r20 - r13;;
xr20 = ASHIFT r20 by 0X29; xfr1:0 = RECIPS r13:12;;
xfr3:2 = r13:12 * r1:0; xfr13:12 = PASS r9:8;;
xfr9:8 = r1:0 * r15:14;;
xfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2;;
xfr9:8 = r1:0 * r9:8;;
xfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2;;
xfr9:8 = r1:0 * r9:8;;
xfr1:0 = r7:6 - r3:2;;
xfr3:2 = r1:0 * r3:2;;
xfr9:8 = r1:0 * r9:8;;
xfr1:0 = r7:6 - r3:2;;
xfr9:8 = SCALB fr9:8 by r20; xfr3:2 = r1:0 * r3:2;;
xfr9:8 = r1:0 * r9:8;;
xfr9:8 = r9:8 * r19:18;;
xfr9:8 = r9:8 + r19:18;;
dzq_end_if3:
j1 = j1 - 0X2;;
IF njle; do, xfr9:8 = -r9:8; xr1:0 = L [j3 + 0];;
xfr9:8 = r9:8 + r1:0;;
dzq_dzq_atanf_body_exit:
IF true, CJMP (NP)(ABS);;
/////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -