📄 amf_delayallpassoffchip1s_4coef_s_render.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 + -