📄 amf_panner_s_render.asm
字号:
// Copyright(c) 2005 Analog Devices, Inc. All Rights Reserved.
// This software is proprietary and confidential to Analog Devices, Inc. and its licensors.
// File : $Id: //depot/development/visualaudio/modules/2.5.0/SHARC/Source/AMF_Panner_S_Render.asm#3 $
// Part of : VisualAudio V2.5.0
// Updated : $Date: 2006/10/12 $ by $Author: Fernando $
// Module Name : AMF_Panner_S_Render.asm
// DSP Processor : ADSP21161
// Original Author : Tim Stilson
// Date : 4/21/03
//====================================================================================
// Processor resources used:
// 44 words pmem INTERNAL
// 683 cycles, tickSize=128 (43 + 5*tickSize)
//====================================================================================
// Revision History:
// 8/27/2003 Tim Stilson Created, based on Panner
#if 1
#include "processor.h"
#include "AMF_Panner_S.h"
#include "asm_macros.h"
#include "asm_sprt.h"
.global _AMF_Panner_S_Render;
.segment /pm SEG_MOD_FAST_CODE ;
_AMF_Panner_S_Render:
//====================================================================================
puts=mode1;
r0=i1; puts=r0;
r0=i0; puts=r0;
puts=r5;
puts=r13;
puts=r14;
//------------------------------------------------------------------------------------
i0=r8; //i0->*buffers
i1=dm(0,i0); //i1=float *in
i4=dm(1,i0); //i4=float *out
i0=r4; //i0->testModuleInstance[0]
f4=dm(AMF_Panner_S_CosSinSmoothing,i0); // f4/s4 = float cosSinSmoothing = instance->cosSinSmoothing
s4=f4;
// can't do SIMD reads here because may be off chip
f1=dm(AMF_Panner_S_CosSin,i0); // f1 = instance->CosSin[0]
s1=dm(AMF_Panner_S_CosSin+1,i0); // s1 = instance->CosSin[1]
f8=dm(AMF_Panner_S_CosSinTarget,i0); // i0= &instance->cosSinTarget[0]
s8=dm(AMF_Panner_S_CosSinTarget+1,i0); // i0= &instance->cosSinTarget[1]
f0=1.0;
s0=-1.0;
bit set mode1 PEYEN; // Enable PEy:SIMD
m4=2;
f5=1.0; // f5/s5 = 1.0
f5=f5-f4; // f5/s5=(1-r)
f13=f8*f4; // f13/s13 = target*r
/////////////////////////////////////////////////////
// out[i] = in[i] * c0 - in[i+1] * c1;
// out[i+1] = in[i] * c1 + in[i+1] * c0;
//
// outl = inl*cos - inr*sin
// outr = inl*sin + inr*cos
//
// out = [inl*cos-inr*sin inl*sin+inr*cos]
// = [inl*cos inl*sin] + [-inr*sin inr*cos]
/////////////////////////////////////////////////////
f8=f1*f5, f4=dm(i1,m4); // f8/s8 = cur*(1-r), f4/s4 = [inl inr]
f2=f0*f4; // f2/s2 = [inl -inr]
LCNTR=r12, DO AMF_Panner_S_Render_loop_end UNTIL LCE;
f2<->s4; // f2/s2 = [inr -inr], f4/s4 = [inl inl]
f14=f1*f2; // f14 = [inr*curcos -inr*cursin]
f8=f1*f4, f1=f8+f13, f14<->s14; // f2 = [inl*curcos inl*cursin], f1=nextcur=cur*(1-r)+t*r, f14=[-inr*cursin inr*curcos]
f8=f1*f5, f14=f8+f14, f4=dm(i1,m4); // f8=next[cur*(1-r)], f14 = [inl*curcos-inr*cursin inl*cursin+inr*curcos], f4=next[inl inr]
AMF_Panner_S_Render_loop_end:
f2=f0*f4, dm(i4,m4)=f14; // f2=next[inl -inr], write out
bit clr mode1 PEYEN; // Disable PEy : SIMD
nop;
dm(AMF_Panner_S_CosSin,i0)=f1; // f1 = instance->cosSin[0]
dm(AMF_Panner_S_CosSin+1,i0)=s1; // s1 = instance->cosSin[1]
//====================================================================================
AMF_Panner_S_Render_epilogue:
r14=gets(1);
r13=gets(2);
r5=gets(3);
i0=gets(4);
i1=gets(5);
mode1=gets(6);
alter(6);
//------------------------------------------------------------------------------------
_AMF_Panner_S_Render.END:
leaf_exit; // C-rth requires this instead of rts
//------------------------------------------------------------------------------------
.endseg;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -