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

📄 amf_agcrmsn_render.asm

📁 ADI SHARC DSP 音频算法标准模块库
💻 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 + -