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

📄 dzqatan2float.asm

📁 用TIGER SHARC DSP201实现反正切函数,atan2(y,x) 高精度
💻 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 + -