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

📄 iir16_mac.s.list

📁 freescale MAC DSP的算法库(FFT
💻 LIST
📖 第 1 页 / 共 2 页
字号:
                                                                              ;-=output+=*pCurHistory--*(*pCurCoef++);=-
0x0000007a: 2624                                move.l       -(a4),d3         ;                                     -=Getting next current element of history buffer=-
0x0000007c: a8030240                            mac.w        d3.u,d4.l,<<     ;                                     -=First MAC=-
                                                                              ;-=output+=*pCurHistory--*(*pCurCoef++);=-
0x00000080: a89b4283                            mac.w        d3.l,d4.u,<<,(a3)+,d4 ; 	                                -=Second MAC and getting next current coefficient=-
0x00000084: 5282                                addq.l       #1,d2            ;                                     -=Incrementing "k"=-
0x00000086: 60ec                                bra          .FORk2           ; 	}
                             .ENDFORk2                                        ; 	}
                             ;---== End of cycle of getting Y[i] ==---	
0x00000088: a187                                move.l       acc,d7           ; 	*pCurY++=output;                -=Moving accumulator to general register=-
                                                                              ;-=we need to transfer only upper word=-
0x0000008a: 4847                                swap         d7               ;                                     -=Aligning most significant 16 bits of acc=
0x0000008c: 30c7                                move.w       d7,(a0)+         ;                                     -=Store Y[i]=-
0x0000008e: 5281                                addq.l       #1,d1            ;	i++                             -=Incrementing "i"=-
0x00000090: 608c                                bra          .FORi1           ;                                     -=Jumping to .FORi1=-
                             .ENDFORi1                                        ; 	}
                             ;---====== End of cycle Y[1]..Y[N-1] ======---
                             ;---====== Begin of cycle of getting Y[N]..Y[n] ======---
0x00000092: 2200                                move.l       d0,d1            ; 	for(i=N;i<=n;i++)               -=Begin of outer loop (number 2)=-
                             .FORi2                                           
0x00000094: b286                                cmp.l        d6,d1            ;                                     -=Comparing "i" with "N"=-
0x00000096: 62000046                            bhi          .ENDFORi2        ; 	{                               -=If (i>n) then jump to .ENDFORi2=-
0x0000009a: a13c00000000                        move.l       #0,acc           ; 	output=0;                       -=Accumulator initialization=-
0x000000a0: 2c6f0044                            move.l       68(a7),a6        ; 	pCurX=pX+i-1;                   -=Current sample pointer initialization=-
0x000000a4: 43f61a00                            lea          (0,a6,d1.l*2),a1 
0x000000a8: 2c6f0048                            move.l       72(a7),a6        ; 	pPredY=pY+i-2;                  -=Previous Y pointer initialization
0x000000ac: 4bf61afe                            lea          (-2,a6,d1.l*2),a5 
0x000000b0: 2652                                move.l       (a2),a3          ; 	pCurCoef=pIIR->pIirCoef;        -=Current coefficient pointer initialization=-
                             ;---== Begin of cycle Getting Y[i] ==---
                                                                              ;  -=output=*pCurX--*(*pCurCoef++);=-
0x000000b2: 3621                                move.w       -(a1),d3         ;                                     -=Getting current sample=-
0x000000b4: 381b                                move.w       (a3)+,d4         ;                                     -=Getting current coefficient=-
0x000000b6: a8030200                            mac.w        d3.l,d4.l,<<     ;                                     -=Getting first iteration of inner loop=-
0x000000ba: 7401                                moveq        #1,d2            ; 	for(k=1;k<N;k++)                -=Begin of inner loop=-
0x000000bc: 281b                                move.l       (a3)+,d4         ;                                     -=Getting next current coefficient=-
                             .FORk3                                           
0x000000be: b480                                cmp.l        d0,d2            ;                                     -=Comparing "k" with "N"=-
0x000000c0: 64000012                            bcc          .ENDFORk3        ; 	{                               -=If (k=>N) then jump to .ENDFORk3=-
                                                                              ;-=use move long, parallel filling register,
                                                                              ;  predecriment and post increment and use left shifting to get fractional multiplication=-
                                                                              ;-=output+=*pCurX--*(*pCurCoef++);=-
0x000000c4: 3621                                move.w       -(a1),d3         ;                                     -=Getting next current sample=-
0x000000c6: a8030280                            mac.w        d3.l,d4.u,<<     ;                                     -=First MAC=-
                                                                              ;-=output+=*pPredY--*(*pCurCoef++);=-
0x000000ca: 3625                                move.w       -(a5),d3         ;                                     -=Getting previous Y=-
0x000000cc: a89b4203                            mac.w        d3.l,d4.l,<<,(a3)+,d4 ;                                  -=Second MAC and getting next current coefficient=-
0x000000d0: 5282                                addq.l       #1,d2            ;                                     -=Incrementing "k"=-
0x000000d2: 60ea                                bra          .FORk3           ;                                     -=Jumping to .FORk3=-
                             .ENDFORk3                                        ; 	}
                             ;---== End of cycle of getting Y[i] ==---
0x000000d4: a187                                move.l       acc,d7           ; 		*pCurY++=output;          -=Moving accumulator to general register=-
                                                                              ;-=we need to transfer only upper word=-
0x000000d6: 4847                                swap         d7               ;                                     -=Aligning most significant 16 bits of acc=-
0x000000d8: 30c7                                move.w       d7,(a0)+         ;                                     -=Store Y[i]=-
0x000000da: 5281                                addq.l       #1,d1            ;	i++                             -=Incrementing "i"=-
0x000000dc: 60b6                                bra          .FORi2           ;                                     -=Jumping to .FORi1=-
                             .ENDFORi2                                        ; 	}
                             ;---====== End of cycle Y[N]..Y[n] ======---
                             ;---====== Begin of History Buffer Loading ======---
0x000000de: 2c6f0044                            move.l       68(a7),a6        ;	-=pCurX=pX+n-N+1;=-
0x000000e2: 2e06                                move.l       d6,d7            
0x000000e4: 9e80                                sub.l        d0,d7            
0x000000e6: 43f67a02                            lea          (2,a6,d7.l*2),a1 
0x000000ea: 2c6f0048                            move.l       72(a7),a6        ; 	pCurY=pY+n-N+1;
0x000000ee: 41f67a02                            lea          (2,a6,d7.l*2),a0 ;
0x000000f2: 286a0008                            move.l       8(a2),a4         ; 	pCurHistory=pIIR->pIirHistory;
0x000000f6: 7201                                moveq        #1,d1            ; 	for(i=1;i<N;i++)               -= i=1 =-
                             .FORbuf                                          
0x000000f8: b280                                cmp.l        d0,d1            ;                                    -=Comparing "i" with "N"=-
0x000000fa: 6400000e                            bcc          .ENDbuf          ; 	{                              -=If (i=>N) then jump to .ENDbuf=-
0x000000fe: 2c48                                move.l       a0,a6            ;        *pCurHistory++=*pCurY++;
0x00000100: 5488                                addq.l       #2,a0            
0x00000102: 38d6                                move.w       (a6),(a4)+       
0x00000104: 38d9                                move.w       (a1)+,(a4)+      ;	*pCurHistory++=*pCurX++;
0x00000106: 5281                                addq.l       #1,d1            ;                                    -=Incrementing "i"=-
0x00000108: 60ee                                bra          .FORbuf          ;                                    -=Jumping to .FORbuf=-
                             .ENDbuf                                          ; 	}
0x0000010a: 2e2a0004                            move.l       4(a2),d7         ;	pIIR->iIirHistoryCount=pIIR->iIirCoefCount-1;
0x0000010e: 5387                                subq.l       #1,d7            
0x00000110: 2547000c                            move.l       d7,12(a2)        ;}
                             ;---====== End of History Buffer Loading ======--
                             ;-=Restoring values of used registers=-
0x00000114: 4cd77fff                            movem.l      (a7),d0-d7/a0-a6 
0x00000118: 4fef003c                            lea          60(a7),a7        
0x0000011c: 4e75                                rts                           

⌨️ 快捷键说明

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