?? amf_delayallpassoffchip_4coef_render.asm
字號:
// Copyright(c) 2005 Analog Devices, Inc. All Rights Reserved. ADI Confidential.
// Module Name : AMF_DelayAllpassOffChip_4Coef_Render.asm
// DSP Processor : ADSP21367,368,369 (LX3)
// Description : Delay-based Allpass, off chip, 4 coefficients, audio module ASM file.
// Owner : Analog Devices
// Original Author : Tim Stilson
// Date : 10/3/05
//====================================================================================
// Processor resources used:
// words pmem INTERNAL
// cycles (off-chip delay buf, 21369 (TickSize=64) ( + *tickSize)
// (SIMD used)
//====================================================================================
#if 1
#include "processor.h"
#include "asm_sprt.h"
#include "AudioProcessing.h"
.import "AMF_DelayAllpassOffChip_4Coef.h";
// global routines
.global _AMF_DelayAllpassOffChip_4Coef_Render;
.segment /pm SEG_MOD_FAST_CODE;
_AMF_DelayAllpassOffChip_4Coef_Render:
// push context on stack
r0=i2; puts=r0;
r0=i1; puts=r0;
r0=i0; puts=r0;
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
s11=dm(2,i4); // buffers[2], scratch (tmpbuf)
i4=r4; //i4->testModuleInstance[0]
// initialize delay buffer pointer
l12=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,delay),i4); // length of delay buffer in samples
b12=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,delayBuffer),i4); // buffer base
s12=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,delayWritePtr),i4); // current delay pointer
i12=s12;
i2 = s10;
// copy from delay buff into output
r0=pm(i12,m14); // r0 = delay[index++];
lcntr=r12, do AMF_DelayAllpassOffChip_4Coef_Loop1 until lce;
AMF_DelayAllpassOffChip_4Coef_Loop1:
dm(i2,m6)=r0, r0=pm(i12,m14); // out[i++] = r0, r0 = delay[index++];
r4 = ashift r12 by -1;
f2=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,AL2),i4);
f3=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,AL3),i4);
s2=f2;
s3=f3;
bit set MODE1 PEYEN;
m4 = 2;
i0 = s9; // in[]
i1 = s11; // tmpbuf[]
i2 = s10; // out[]
// compute tmpbuf (input to delayline) = al2*in + al3*out
f0 = dm(i0,m4);
f0 = f0*f2, f1 = dm(i2,m4);
lcntr=r4, do AMF_DelayAllpassOffChip_4Coef_Loop2 until lce;
f8 = f1*f3, f1 = dm(i2,m4);
f8 = f0+f8, f0 = dm(i0,m4);
AMF_DelayAllpassOffChip_4Coef_Loop2:
f0 = f0*f2, dm(i1,m4) = f8;
bit clr MODE1 PEYEN;
i12 = s12;// reset back to where delayptr was at start of tick
i0 = s11; // tmpbuf[]
// copy from tmpbuf into delay buff
r0=dm(i0,m6); // r0 = tmpbuf[i++];
lcntr=r12, do AMF_DelayAllpassOffChip_4Coef_Loop3 until lce;
AMF_DelayAllpassOffChip_4Coef_Loop3:
r0=dm(i0,m6), pm(i12,m14)=r0; // delay[index++] = r0, r0 = tmpbuf[i++];
r0=i12;
dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,delayWritePtr),i4)=r0; // store away current delay pointer
f2=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,AL1),i4);
f3=dm(OFFSETOF(AMF_DelayAllpassOffChip_4Coef,AL0),i4);
s2=f2;
s3=f3;
bit set MODE1 PEYEN;
i2 = s10;
i0 = s9; // in[]
i1 = s10; // out[]
// compute output = al0*in + al1*out
f0 = dm(i2, m4);
f0 = f0*f2, f1 = dm(i0, m4);
lcntr=r4, do AMF_DelayAllpassOffChip_4Coef_Loop4 until lce;
f8 = f1*f3, f1 = dm(i0,m4);
f8 = f0+f8, f0 = dm(i2,m4);
AMF_DelayAllpassOffChip_4Coef_Loop4:
f0 = f0*f2, dm(i1,m4) = f8;
bit clr MODE1 PEYEN;
l12 = 0;
// pop context off stack
r3=gets(1);
i0=gets(2);
i1=gets(3);
i2=gets(4);
alter(4);
//------------------------------------------------------------------------------------
_AMF_DelayAllpassOffChip_4Coef_Render.END:
leaf_exit; // C-rth requires this instead of rts
//------------------------------------------------------------------------------------
.endseg;
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -