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

📄 amf_panner_s_render.asm

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