📄 amf_agcrmsn_render.asm
字号:
#include "asm_sprt.h"
#include <processor.h>
#include "AMF_AGCRmsN.h"
.global _AMF_AGCRmsN_Render;
.segment /pm SEG_MOD_FAST_CODE;
_AMF_AGCRmsN_Render:
leaf_entry;
puts = f3;
puts = f7;
puts = f6;
r0 = b2; puts = r0;
r0 = i2; puts = r0;
r0 = i3; puts = r0;
r0 = i5; puts = r0;
puts = f9;
puts = f5;
puts = f15;
r0 = l2; puts = r0;
r0 = l4; puts = r0;
i4 = r4;
r3 = dm(AMF_AGCRmsN_inputPinCount,i4); //numIn
m4 = r3; //numIn
i5 = r8; //buffers
f15 = dm(AMF_AGCRmsN_recipN, i4); //instance->recipN
f9 = dm(i5,m4); //dummy read
f9 = dm(i5,m6);
f3 = 0;
b4 = f9; //base address for out buffer for circular buffering
l4 = r12; //length of out buffer for circular buffering
lcntr = r12, do AGC_RMS_inner_loop until lce;
AGC_RMS_inner_loop:dm(i4,m6) = f3;
i5 = r8;
b2 = dm(m4,i5); //base address for storing out buffer for circular buffering
l2 = r12; //length of out buffer for circular buffering
b4 = dm(m4,i5); //base address for out buffer for circular buffering
l4 = r12; //length of out buffer for circular buffering
lcntr = m4, do AGC_Rms_num_Chan_loopend until lce; //outer loop for numIn times
f3 = dm(i5,m6); //dummy read
i3 = r3; //in
f6 = dm(i3,m6); //input sample
f5 = dm(i4,m6); //output sample
lcntr = r12, do AGC_Rms_Tick_Loopend until lce; //inner loop for tickSize times
f7 = f6 * f6, f6 = dm(i3,m6);
f7 = f7 + f5, f5 = dm(i4,m6);
AGC_Rms_Tick_Loopend: dm(i2,m6) = f7; //end of inner loop
AGC_Rms_num_Chan_loopend: f3 = dm(i4,m7); //end of outer loop with dummy read
r7 = 0x7F800000; // Floating point -inf that is RSQRTS 0;
f8=3.0;
f1=0.5;
f0=dm(i4,m6); // get first input
f0 = f0 * f15;
LCNTR=r12, DO AMF_RmsN_Sqrt_loop_end UNTIL LCE;
f4=RSQRTS f0;
r5 = r4 - r7; // check for zero input
if eq r4 = r4 - r4; // check for zero input
f12=f4*f4; // f12=X0^2
f12=f12*f0; // f12=C*X0^2
f4=f1*f4, f12=f8-f12; // f4=.5*X0, f12=3-C*X0^2 } repeat this block
f4=f4*f12; // f4=X1=.5*X0(3-C*X0^2) } of instructions to get
f12=f4*f4; // f12=X1^2 } the full 40-bit accuracy
f12=f12*f0; // f12=C*X1^2 } as mentioned in the docs
f4=f1*f4, f12=f8-f12; // f4=.5*X1, f12=3-C*X1^2
f4=f4*f12; // f4=X2=.5*X1(3-C*X1^2), this is 1/sqrt(in)
f4=f0*f4, f0=dm(i4,m6); // f4=in*f4=sqrt(in), get next input
f0 = f0 * f15, dm(i2,m6)=f4; // get seed for next iter, write output
AMF_RmsN_Sqrt_loop_end:
l4 = gets(1);
l2 = gets(2);
f15 = gets(3);
f5 = gets(4);
f9 = gets(5);
i5 = gets(6);
i3 = gets(7);
i2 = gets(8);
b2 = gets(9);
f6 = gets(10);
f7 = gets(11);
f3 = gets(12);
alter(12);
leaf_exit;
_AMF_AGCRmsN_Render.end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -