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

📄 amf_msmatrix_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_MSMatrix_Render.asm#3 $ 
// Part of : VisualAudio V2.5.0 
// Updated : $Date: 2006/10/12 $ by $Author: Fernando $



//    Module Name     : AMF_MSMatrix.asm 
//    DSP Processor   : ADSP21161
//    Original Author : Sean Costello    
//    Date               : 2/10/04
//====================================================================================
// Processor resources used:
//    23 words pmem INTERNAL
// 285 cycles, tickSize=128 (29 + 4*tickSize/2)
//====================================================================================


#if 1

#include <processor.h>
#include "AMF_MSMatrix.h"
#include "asm_macros.h"
#include "asm_sprt.h"

.global    _AMF_MSMatrix_Render;            ;

.segment /pm SEG_MOD_FAST_CODE;
_AMF_MSMatrix_Render:

//====================================================================================
    entry;   
    
//module entry arguments passed in registers: 
//  r4  = instance    (AMF_MSMatrix * restrict)
//  r8  = * buffers (float * restrict)
//  r12 = int tickSize

    puts=mode1;
    puts=r5;
    r0=i0; puts=r0;
    r0=i1; puts=r0;
    r0=i2; puts=r0;
    
    r0=lshift r12 by -1;        // half loop count for SIMD 
                                // tickSize now passed in r12
    m4=2;                        // SIMD loop increment
    
    i4=r8;                        //i4->*buffers
    bit set mode1 PEYEN;        // Enable PEy:SIMD

    i0=dm(0,i4);                // i0=float *in1
    i1=dm(1,i4);                // i1=float *in2
    i2=dm(2,i4);                // i2=float *out1
    i4=dm(3,i4);                // i4=float *out2

    f1=dm(i0,m4);                // f1=in1
    f2=dm(i1,m4);                // f2=in2
    
    f12=0.7071;                    // 1/sqrt(2)

                                
AMF_MSMatrix_Render_loop_start:
    // for (i=0; i<tickSize; i++) 
    LCNTR=r0, DO AMF_MSMatrix_Render_loop_end UNTIL LCE;
        f0=f1+f2, f8=f1-f2, f1=dm(i0,m4);    // f0=in1+in2, f8=f1-f2, f1=in1[i++]
        f4=f0*f12, f2=dm(i1,m4);            // f4=sum*(1/sqrt(2)), f2=in2[i++]
        f5=f8*f12, dm(i2,m4)=f4;            // f5*diff*scale, f1=out1[i++]
AMF_MSMatrix_Render_loop_end: 
        dm(i4,m4)=f5;                        // out2[i++]=f5

    bit clr mode1 PEYEN;    // Disable PEy:SIMD
        
//====================================================================================

    
    i2=gets(1);
    i1=gets(2);
    i0=gets(3);
    r5=gets(4);
    mode1=gets(5);
    alter(5);

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

⌨️ 快捷键说明

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