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

📄 amf_delayallpassoffchip1s_4coef_s_render.asm

📁 ADI SHARC DSP 音频算法标准模块库
💻 ASM
字号:

// Copyright(c) 2005 Analog Devices, Inc. All Rights Reserved. ADI Confidential.

//    Module Name     : AMF_DelayAllpassOffChip1s_4Coef_S_Render.asm 
//    DSP Processor   : ADSP21367,368,369 (LX3)
//    Description     : Delay-based stereo Allpass, off chip, 4 coefficients, audio module ASM file.
//    Owner           : Analog Devices
//    Original Author : Min Guo, modified from AMF_DelayAllpassOffChip1s_4Coef_Render.asm by Tim Stilson	
//    Date 			  : 11/21/05
//====================================================================================
// Processor resources used:
//  words pmem INTERNAL
//  cycles (off-chip delay buf, 21369 (TickSize=64) ( + *tickSize)
// (SIMD used)
//====================================================================================

//====================================================================================
// This version does everything in a single loop, and thus can get down to a 
//   single sample of delay in the allpass.  This will break synchronous transfers
//   to/from external memory, however, and so the transfers will take more cycles.
//====================================================================================

#if 1


#include "processor.h"
#include "asm_sprt.h"

#include "AudioProcessing.h"
.import "AMF_DelayAllpassOffChip1s_4Coef_S.h";

// global routines
.global	_AMF_DelayAllpassOffChip1s_4Coef_S_Render;			;

.segment /pm SEG_MOD_FAST_CODE;

_AMF_DelayAllpassOffChip1s_4Coef_S_Render:
    
 // push context on stack
    r0=i2; puts=r0;
    r0=i0; puts=r0;
    puts=r13;
    puts=r5;
    puts=r3;

	i4=r8;					// i4->*buffers
	
 // initialize input and output samples pointers
	s9=dm(0,i4);			// buffers[0], input
	s10=dm(1,i4);			// buffers[1], output

	i4=r4;					//i4->testModuleInstance[0]
	   
 // initialize delay buffer pointer
//MG	l12=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,delay),i4);           		// length of delay buffer in samples
	r0=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,delay),i4);           		    // length of delay buffer in samples
	r0=lshift r0 by 1;                                                      // length * 2 for stereo samples
	l12=r0;                                                                 // MG stereo delay length
	
	f4=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,AL0),i4);
	f2=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,AL1),i4); 
	f5=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,AL2),i4);
	f3=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,AL3),i4); 
	b12=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,delayBuffer),i4);              // buffer base
	i12=dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,delayWritePtr),i4); 	        // current delay pointer

    i0 = s9;  // in[]
    i2 = s10; // out[]

    r12=lshift r12 by 1;                // MG tickSize*2

    // compute tmpbuf (input to delayline) = al2*in + al3*out
                                   f1=dm(i0,m6);                  // f1=in[0]
        f13 = f1*f5,                              f0=pm(i12,m13); // al2*in, f0=delay[index]
        f8  = f0*f3;                                              // al3*delay
    lcntr=r12, do AMF_DelayAllpassOffChip1s_4Coef_S_Loop until lce;
        f13 = f1*f4, f8 = f8+f13,  f1=dm(i0,m6);                  // al1*delay, delay-input sum, read next input
        f8  = f0*f2,                              pm(i12,m14)=f8; // al0*in, delay[index++] = al2*in+al3*delay
        f13 = f1*f5, f8 = f8+f13,                 f0=pm(i12,m13); // next al2*in, do output sum, read next delay
AMF_DelayAllpassOffChip1s_4Coef_S_Loop:
        f8  = f0*f3,               dm(i2,m6)=f8;                  // next al3*delay, out[i]=al0*in + al1*delay


	r0=i12;
	dm(OFFSETOF(AMF_DelayAllpassOffChip1s_4Coef_S,delayWritePtr),i4)=r0; 	        // store away current delay pointer

	l12 = 0;

 // pop context off stack
    r3=gets(1);
    r5=gets(2);
    r13=gets(3);
    i0=gets(4);
    i2=gets(5);
    alter(5);

//------------------------------------------------------------------------------------
_AMF_DelayAllpassOffChip1s_4Coef_S_Render.END:
	leaf_exit; // C-rth requires this instead of rts
//------------------------------------------------------------------------------------
    
.endseg;
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -