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

📄 iir32_emac.s.list

📁 freescale MAC DSP的算法库(FFT
💻 LIST
📖 第 1 页 / 共 4 页
字号:
                             ;************************************************************************
                             ;*
                             ;* Copyright:
                             ;*	Freescale Semiconductor, INC. All Rights Reserved.  
                             ;*  You are hereby granted a copyright license to use, modify, and
                             ;*  distribute the SOFTWARE so long as this entire notice is
                             ;*  retained without alteration in any modified and/or redistributed
                             ;*  versions, and that such modified versions are clearly identified
                             ;*  as such. No licenses are granted by implication, estoppel or
                             ;*  otherwise under any patents or trademarks of Freescale Semiconductor, 
                             ;*  Inc. This software is provided on an "AS IS" basis and without warranty.
                             ;*
                             ;*  To the maximum extent permitted by applicable law, FREESCALE 
                             ;*  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING 
                             ;*  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
                             ;*  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE 
                             ;*  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY 
                             ;*  ACCOMPANYING WRITTEN MATERIALS.
                             ;* 
                             ;*  To the maximum extent permitted by applicable law, IN NO EVENT
                             ;*  SHALL FREESCALE BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING 
                             ;*  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS 
                             ;*  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
                             ;*  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.   
                             ;* 
                             ;*  Freescale assumes no responsibility for the maintenance and support
                             ;*  of this software
                             ;*********************************************
                             ;* FILENAME: iir32.s
                             ;*
                             ;* PURPOSE: IIR32 module source file, containing functions for allocating/deallocating 
                             ;*	        data structures for filter and computing an Infinite Impulse
                             ;*	        Responce filter.
                             ;*
                             ;* AUTHOR: original code was written by Andrey Butok,
                             ;*		   optimized for eMAC unit by Dmitriy Karpenko	        
                             ;*********************************************
                                                .section     .text            ;-=Locate the code in the ".text" section.=-
                             ;#define __EMAC_H
                             ;#include "emac.h"
                                                .align       4                
                                                .xdef        _IIR32_EMAC      
                                                .extern      _malloc          
                                                .extern      _free            



                             ;******************************************************
                             ;* NAME: void IIR32( struct tIirStruct *pIIR, Frac32* pX, Frac32* pY, unsigned int n)
                             ;*
                             ;* DESCRIPTION: Computes a Infinite Impulse Response (IIR) filter for a array of 32-bit fractional data values.
                             ;******************************************************
                             ;* a2          pIIR        - Pointer to a data structure containing private data for the iir filter
                             ;* 68(a7)      pX          - Pointer to the input vector of n data elements
                             ;* 72(a7)      pY          - Pointer to the output vector of n data elements
                             ;* d2          k           - Counter for inner loop
                             ;* d1          i           - Counter for outer loop
                             ;* d0          N           - Length of coefficients vector(N<=n)
                             ;* a0          pCurY       - Pointer to the current Y
                             ;* a1          pCurX       - Pointer to the current X
                             ;* a3          pCurCoef    - Pointer to the current coefficient
                             ;* a4          pCurHistory - Pointer to the current element of history buffer
                             ;* a5          pPredY      - Pointer to the previous Y
                             ;******************************************************
                             _IIR32_EMAC                                      
                             ;---=Saving values of used registers=---
0x00000000: 4fefffc4                            lea          -60(a7),a7       
0x00000004: 48d77fff                            movem.l      d0-d7/a0-a6,(a7) 
                             ;
0x00000008: 4feffffc                            lea          -4(a7),a7        
0x0000000c: a980                                move.l       MACSR,d0         
0x0000000e: 2e80                                move.l       d0,(a7)          
0x00000010: 4fef0004                            lea          4(a7),a7         

                             ;
                             ;#ifdef __FRACT_M
0x00000014: a93c00000030                        move.l       #0x00000030,MACSR 
                             ;#else
                             ;move.l 		#0x00000000,MACSR
                             ;#endif
                             ;---=Most useful parameters are moved from stack to registers.=--- 
0x0000001a: 206f0048                            move.l       72(a7),a0        ;  pCurY=pY;       -= Pointer to the current Y.=-
0x0000001e: 226f0044                            move.l       68(a7),a1        ;  pCurX=pX;       -= Pointer to the current X.=-
0x00000022: 246f0040                            move.l       64(a7),a2        ;  N=pIIR->iIirCoefCount/2+1;
0x00000026: 202a0004                            move.l       4(a2),d0         
0x0000002a: e288                                lsr.l        #1,d0            
0x0000002c: 5280                                addq.l       #1,d0            
                             ;---====== Begin of getting Y[1]..Y[N] ======---
0x0000002e: a13c00000000                        move.l       #0,ACC0          ;-=accumulators initialization=-
0x00000034: a33c00000000                        move.l       #0,ACC1          
0x0000003a: a53c00000000                        move.l       #0,ACC2          
0x00000040: a73c00000000                        move.l       #0,ACC3          
                                                                              ;
0x00000046: 7204                                moveq.l      #4,d1            ;  for(i=4;i<=N;i+=4) {
                             .FORi1                                           
0x00000048: b280                                cmp.l        d0,d1            ;
0x0000004a: 62000410                            bhi          .ENDFORi1        ;

0x0000004e: 2c6f0044                            move.l       68(a7),a6        ; pCurX=pX+i-4;
0x00000052: 43f61cf0                            lea          (-16,a6,d1.l*4),a1 
0x00000056: 2652                                move.l       (a2),a3          ; pCurCoef=pIIR->pIirCoef;

0x00000058: 4cd10078                            movem.l      (a1),d3-d6       ;d3=*pCurX++; d4=*pCurX++; d5=*pCurX++; d6=*pCurX; pCurX-=3;
0x0000005c: 2c5b                                move.l       (a3)+,a6         ;a6=*pCurCoef++;

0x0000005e: ac216ade                            mac.l        a6,d6,<<,-(a1),d6,ACC3 ;ACC3+=a6*d6; d6=*--pCurX;
0x00000062: aa0e0ad0                            mac.l        a6,d5,<<,ACC2    ;ACC2+=a6*d5;
0x00000066: a88e0ac0                            mac.l        a6,d4,<<,ACC1    ;ACC1+=a6*d4;
0x0000006a: acdb3ace                            mac.l        a6,d3,<<,(a3)+,a6,ACC0 ;ACC0+=a6*d3; a6=*pCurCoef++;
                                                                              ;
0x0000006e: 243c00000004                        move.l       #4,d2            ;for(k=4; k<i; k+=4) {
                             .FORk1                                           
0x00000074: b481                                cmp.l        d1,d2            ;
0x00000076: 6400005e                            bcc          .ENDFORk1        ;

0x0000007a: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x00000080: aa215ade                            mac.l        a6,d5,<<,-(a1),d5,ACC3 ;ACC3+=a6*d5; d5=*--pCurX;
0x00000084: a80e0ad0                            mac.l        a6,d4,<<,ACC2    ;ACC2+=a6*d4;
0x00000088: a68e0ac0                            mac.l        a6,d3,<<,ACC1    ;ACC1+=a6*d3;
0x0000008c: acdb6ace                            mac.l        a6,d6,<<,(a3)+,a6,ACC0 ;ACC0+=a6*d6; a6=*pCurCoef++;

0x00000090: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x00000096: a8214ade                            mac.l        a6,d4,<<,-(a1),d4,ACC3 ;ACC3+=a6*d4; d4=*--pCurX;
0x0000009a: a60e0ad0                            mac.l        a6,d3,<<,ACC2    ;ACC2+=a6*d3;
0x0000009e: ac8e0ac0                            mac.l        a6,d6,<<,ACC1    ;ACC1+=a6*d6;
0x000000a2: acdb5ace                            mac.l        a6,d5,<<,(a3)+,a6,ACC0 ;ACC0+=a6*d5; a6=*pCurCoef++;

0x000000a6: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x000000ac: a6213ade                            mac.l        a6,d3,<<,-(a1),d3,ACC3 ;ACC3+=a6*d3; d3=*--pCurX;
0x000000b0: ac0e0ad0                            mac.l        a6,d6,<<,ACC2    ;ACC2+=a6*d6;
0x000000b4: aa8e0ac0                            mac.l        a6,d5,<<,ACC1    ;ACC1+=d6*d5;
0x000000b8: acdb4ace                            mac.l        a6,d4,<<,(a3)+,a6,ACC0 ;ACC0+=a6*d4; a6=*pCurCoef++;
0x000000bc: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x000000c2: ac216ade                            mac.l        a6,d6,<<,-(a1),d6,ACC3 ;ACC3+=a6*d6; d6=*--pCurX;
0x000000c6: aa0e0ad0                            mac.l        a6,d5,<<,ACC2    ;ACC2+=a6*d5;
0x000000ca: a88e0ac0                            mac.l        a6,d4,<<,ACC1    ;ACC1+=a6*d4;
0x000000ce: acdb3ace                            mac.l        a6,d3,<<,(a3)+,a6,ACC0 ;ACC0+=a6*d3; a6=*pCurCoef++;
0x000000d2: 5882                                addq.l       #4,d2            ;
0x000000d4: 609e                                bra          .FORk1           ;

                             .ENDFORk1                                        ;}
                             ;
0x000000d6: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x000000dc: a68e0ac0                            mac.l        a6,d3,<<,ACC1    ;ACC1+=a6*d3;
0x000000e0: a80e0ad0                            mac.l        a6,d4,<<,ACC2    ;ACC2+=a6*d4;
0x000000e4: ac5b5ade                            mac.l        a6,d5,<<,(a3)+,a6,ACC3 ;ACC3+=a6*d5; a6=*pCurCoef++;

0x000000e8: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x000000ee: a60e0ad0                            mac.l        a6,d3,<<,ACC2    ;ACC2+=a6*d3;
0x000000f2: ac5b4ade                            mac.l        a6,d4,<<,(a3)+,a6,ACC3 ;ACC3+=a6*d4; a6=*pCurCoef++;

0x000000f6: d7fc00000004                        adda.l       #4,a3            ;pCurCoef++;

0x000000fc: a68e0ad0                            mac.l        a6,d3,<<,ACC3    ;ACC3+=a6*d3;

                                                                              ;
0x00000100: 4aaa000c                            tst.l        12(a2)           ;if (pIIR=>iIirHistoryCount>0) {
0x00000104: 6700027c                            beq          .ENDBUFy         ;
0x00000108: 2c6a0008                            move.l       8(a2),a6         ;pCurX=pIIR->pIirHistory+i*2-7;
0x0000010c: e389                                lsl.l        #1,d1            
0x0000010e: 43f61ce4                            lea          (-28,a6,d1.l*4),a1 
0x00000112: e289                                lsr.l        #1,d1            
0x00000114: 2c52                                move.l       (a2),a6          ;pCurCoef=pIIR->pIirCoef+N*2-2;
0x00000116: e388                                lsl.l        #1,d0            
0x00000118: 47f60cf8                            lea          (-8, a6, d0.l*4), a3 
0x0000011c: e288                                lsr.l        #1,d0            

0x0000011e: 2619                                move.l       (a1)+,d3         ;d3=*pCurX++;
0x00000120: d3fc00000004                        adda.l       #4,a1            ;pCurX++;
0x00000126: 2819                                move.l       (a1)+,d4         ;d4=*pCurX++;
0x00000128: d3fc00000004                        adda.l       #4,a1            ;pCurX++;
0x0000012e: 2a19                                move.l       (a1)+,d5         ;d5=*pCurX++;
0x00000130: d3fc00000004                        adda.l       #4,a1            ;pCurX++;
0x00000136: 2c19                                move.l       (a1)+,d6         ;d6=*pCurX++;
0x00000138: d3fc00000004                        adda.l       #4,a1            ;pCurX++;
0x0000013e: 2c63                                move.l       -(a3),a6         ;a6=*--pCurCoef;
0x00000140: 97fc00000004                        suba.l       #4,a3            ;pCurCoef--;

0x00000146: b280                                cmp.l        d0,d1            ;if (N==i) {
0x00000148: 6600002a                            bne          .CONT            ;
                             ;
0x0000014c: a60e0ac0                            mac.l        a6,d3,<<,ACC0    ;ACC0+=a6*d3;
0x00000150: a88e0ac0                            mac.l        a6,d4,<<,ACC1    ;ACC1+=a6*d4;

⌨️ 快捷键说明

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