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

📄 iir16_emac.s.list

📁 freescale MAC DSP的算法库(FFT
💻 LIST
📖 第 1 页 / 共 4 页
字号:
0x0000020a: 6700006c                            beq          .EndTailH        ;
0x0000020e: 60000008                            bra          .BegTailH        ;

                             .EndD4                                           
0x00000212: 5087                                addq.l       #8, d7           ; i += 8;

0x00000214: 67000062                            beq          .EndTailH        ;while(i)
                                                                              ;{

                             ;---=Computation of N % 4 last output samples==--
                             .BegTailH                                        

                             ;--== Next input samples loading	==--
0x00000218: 3410                                move.w       (a0), d2         ;iCurX0 = *pX;
0x0000021a: 2848                                movea.l      a0, a4           ;pCurX = pX;
0x0000021c: 41e80002                            lea          2(a0), a0        ;pX++;

                             ;--== Setting output samples pointer ==--
0x00000220: 2a49                                movea.l      a1, a5           ;pCurY = pY;

                             ;--== Next coefficients loading	==--
0x00000222: 264e                                move.l       a6, a3           ;pCurCoef = pIirCoef;
0x00000224: 2813                                move.l       (a3), d4         ;iCurA = *pCurCoef;
0x00000226: 47eb0002                            lea          2(a3), a3        ;pCurCoef++;

                             ;--== Input samples and first coefficient multiplications ==--
0x0000022a: a4040240                            mac.w        d4.u, d2.l, <<, ACC0 ;iOut0 = iCurA * iCurX0

                             ;--== The count of inner loops calculation ==-- 
0x0000022e: 2a06                                move.l       d6, d5           ;
0x00000230: 9a87                                sub.l        d7, d5           ;j = tmp - i;
0x00000232: 6f000014                            ble          .EndIn1TailH     ;while(j > 0)
                                                                              ;{
                             .ForIn1TailH                                     

                             ;--== Next coefficients loading	==--
0x00000236: 281b                                move.l       (a3)+, d4        ;iCurA = *pCurCoef++; iCurB = *pCurCoef++;

                             ;--== Next input sample loading	==--
0x00000238: 3424                                move.w       -(a4), d2        ;iCurX0 = *--pCurX;
                             ;--== Next output sample loading	==--
0x0000023a: 3025                                move.w       -(a5), d0        ;iCurY0 = *--pCurY;

                             ;--== Two multiplications for each output sample ==--
0x0000023c: a4040240                            mac.w        d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA * iCurX0
0x00000240: a0040200                            mac.w        d4.l, d0.l, <<, ACC0 ;iOut0 += iCurB * iCurY0

0x00000244: 5585                                subq.l       #2, d5           ;j-= 2;
0x00000246: 6eee                                bgt          .ForIn1TailH     ;}

                             .EndIn1TailH                                     

0x00000248: 2a2a000c                            move.l       12(a2), d5       ;if(pIIR->iIirHistoryCount)
0x0000024c: 67000022                            beq          .EndInHTail      ;{
                             ;--== The count of inner loops calculation ==-- 
0x00000250: 2a07                                move.l       d7, d5           ;j = i
0x00000252: 6f00001c                            ble          .EndInHTail      ;if(j > 0)
                                                                              ;{
                             ;--== Current history buffer pointer initialization==--
0x00000256: 286a0008                            move.l       8(a2), a4        ;pCurHustory = pIirHistory + tmp * 2
0x0000025a: d9c6                                adda.l       d6, a4           ;
0x0000025c: d9c6                                adda.l       d6, a4           ;while(j > 0)
                                                                              ;{

                             .ForInHTail                                      

                             ;--== Next coefficients loading	==--
0x0000025e: 281b                                move.l       (a3)+, d4        ;iCurA = *pCurCoef++; iCurB = *pCurCoef++;

                             ;--== Next input sample loading	==--
0x00000260: 3424                                move.w       -(a4), d2        ;iCurX0 = *--pCurHistory;
                             ;--== Next output sample loading	==--
0x00000262: 3024                                move.w       -(a4), d0        ;iCurY0 = *--pCurHistory;

                             ;--== Two multiplications for each output sample ==--
0x00000264: a4040240                            mac.w        d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA * iCurX0
0x00000268: a0040200                            mac.w        d4.l, d0.l, <<, ACC0 ;iOut0 += iCurB * iCurY0

0x0000026c: 5585                                subq.l       #2, d5           ;j -= 2;
0x0000026e: 6eee                                bgt          .ForInHTail      ;}

                             .EndInHTail                                      ;}

                             ;--==Storing computed sample into the memory==--

0x00000270: a1c0                                movclr.l     ACC0, d0         ;
                             ;#ifndef __FRACT_M	
                             ;	swap	d0						;*pY++ = iOut0;
                             ;#endif	
0x00000272: 32c0                                move.w       d0, (a1)+        ;

0x00000274: 5587                                subq.l       #2, d7           ;i -= 2;
0x00000276: 6ea0                                bgt          .BegTailH        ;}

                             .EndTailH                                        ;}
                             ;---====== Begin of cycle of getting Y[N+1]..Y[n] (N = (pIIR->iIirCoefCount - 1) / 2)======---
0x00000278: 2c2a0004                            move.l       4(a2), d6        ;tmp = IIR->iIirCoefCount;

0x0000027c: 2e2f0050                            move.l       80(a7), d7       ;i = n;

0x00000280: 5386                                subq.l       #1, d6           ;tmp = (tmp - 1) / 2;
0x00000282: e286                                asr.l        #1, d6           ;
0x00000284: 9e86                                sub.l        d6, d7           ;i -= tmp;

0x00000286: e487                                asr.l        #2, d7           ; i /= 4

0x00000288: 6700013c                            beq          .BegTail2        ;while(i != 0)
                                                                              ;{
                             ;--==Y[N+1]..Y[k] computation, where k is (N + 1) + ((n - N - 1) % 4)

                             .BegD4E                                          ;Begin of inner loop

                             ;--== Next input samples loading ==--
0x0000028c: 2410                                move.l       (a0), d2         ;iCurX0 = pX[0]; iCurX1 = pX[1];
0x0000028e: 26280004                            move.l       4(a0), d3        ;iCurX2 = pX[2]; iCurX3 = pX[3];
0x00000292: 2848                                movea.l      a0, a4           ;pCurX = pX;
0x00000294: 41e80008                            lea          8(a0), a0        ;pX += 4;

                             ;--== Make four previous output samples	zero==--
0x00000298: 4280                                clr.l        d0               ;iCurY0 = iCurY1 = 0;
0x0000029a: 4281                                clr.l        d1               ;iCurY2 = iCurY3 = 0;
0x0000029c: 2a49                                movea.l      a1, a5           ;pCurY = pY;

                             ;--== Next coefficient loading	==--
0x0000029e: 264e                                move.l       a6, a3           ;pCurCoef = pIirCoef;
0x000002a0: 2813                                move.l       (a3), d4         ;iCurA = *pCurCoef;
0x000002a2: 47eb0002                            lea          2(a3), a3        ;pCurCoef++;

                             ;--== Input samples and first coefficient multiplications ==--
0x000002a6: a40402c0                            mac.w        d4.u, d2.u, <<, ACC0 ;iOut0 = iCurA * iCurX0
0x000002aa: a4840240                            mac.w        d4.u, d2.l, <<, ACC1 ;iOut1 = iCurA * iCurX1
0x000002ae: a60402d0                            mac.w        d4.u, d3.u, <<, ACC2 ;iOut2 = iCurA * iCurX2
0x000002b2: a6840250                            mac.w        d4.u, d3.l, <<, ACC3 ;iOut3 = iCurA * iCurX3

                             ;--== The count of inner loops calculation ==-- 
0x000002b6: 2a06                                move.l       d6, d5           ;
0x000002b8: 08050000                            btst         #0, d5           ;j = tmp - i - 8;
0x000002bc: 6700003a                            beq          .ForIn1EBeg      ;if(j & 1)
                                                                              ;{

                             ;--== This multiplications executed only when j is odd ==--
                             ;--== Next coefficient loading	==--
0x000002c0: 281b                                move.l       (a3)+, d4        ;iCurA = *pCurCoef++; iCurB = *pCurCoef++;

                             ;--== Next input sample loading	==--
0x000002c2: 3602                                move.w       d2, d3           ;iCurX3 = iCurX2;
0x000002c4: 3424                                move.w       -(a4), d2        ;iCurX2 = iCurX1;
0x000002c6: 4842                                swap         d2               ;iCurX1 = iCurX0;
0x000002c8: 4843                                swap         d3               ;iCurX0 = *--pCurHistory;

                             ;--== Next output sample loading	==--
0x000002ca: 3200                                move.w       d0, d1           ;iCurY3 = iCurY2;
0x000002cc: 3025                                move.w       -(a5), d0        ;iCurY2 = iCurY1;
0x000002ce: 4840                                swap         d0               ;iCurY1 = iCurY0;
0x000002d0: 4841                                swap         d1               ;iCurY0 = *--pCurHistory;

0x000002d2: a40402c0                            mac.w        d4.u, d2.u, <<, ACC0 ;iOut0 += iCurA * iCurX0
0x000002d6: a4840240                            mac.w        d4.u, d2.l, <<, ACC1 ;iOut1 += iCurA * iCurX1
0x000002da: a60402d0                            mac.w        d4.u, d3.u, <<, ACC2 ;iOut2 += iCurA * iCurX2
0x000002de: a6840250                            mac.w        d4.u, d3.l, <<, ACC3 ;iOut3 += iCurA * iCurX3

0x000002e2: a0040280                            mac.w        d4.l, d0.u, <<, ACC0 ;iOut0 += iCurB * iCurY0
0x000002e6: a0840200                            mac.w        d4.l, d0.l, <<, ACC1 ;iOut1 += iCurB * iCurY1
0x000002ea: a2040290                            mac.w        d4.l, d1.u, <<, ACC2 ;iOut2 += iCurB * iCurY2
0x000002ee: a2840210                            mac.w        d4.l, d1.l, <<, ACC3 ;iOut3 += iCurB * iCurY3

0x000002f2: 5385                                subq.l       #1, d5           ;j -= 2;
0x000002f4: 67000056                            beq          .EndIn1E         ;}
                             .ForIn1EBeg                                      
                             ;--== Next coefficients loading	==--
0x000002f8: 281b                                move.l       (a3)+, d4        ;iCurA = *pCurCoef++; iCurB = *pCurCoef++;
                             .ForIn1E                                         
0x000002fa: 5585                                subq.l       #2, d5           ;for(;j >= 0; j -=2)
0x000002fc: 6d00004e                            blt          .EndIn1E         ;{


                             ;--== Three first input samples and coefficients multiplication ==--
0x00000300: a48402c0                            mac.w        d4.u, d2.u, <<, ACC1 ;iOut1 += iCurA * iCurX0
0x00000304: a4040250                            mac.w        d4.u, d2.l, <<, ACC2 ;iOut2 += iCurA * iCurX1
0x00000308: a68402d0                            mac.w        d4.u, d3.u, <<, ACC3 ;iOut3 += iCurA * iCurX2

                             ;--== Three first output samples and coefficients multiplication ==--
0x0000030c: a0840280                            mac.w        d4.l, d0.u, <<, ACC1 ;iOut1 += iCurB * iCurY0
0x00000310: a0040210                            mac.w        d4.l, d0.l, <<, ACC2 ;iOut2 += iCurB * iCurY1
0x00000314: a2840290                            mac.w        d4.l, d1.u, <<, ACC3 ;iOut3 += iCurB * iCurY2


                             ;--== Loading two next input samples ==--	
0x00000318: 2602                                move.l       d2, d3           ;iCurX3 = iCurX1; 	iCurX2 = iCurX0;
0x0000031a: 2424                                move.l       -(a4), d2        ;iCurX1 = *--pCurX; iCurX0 = *--pCurX;
                             ;--== Loading two next output samples ==--	
0x0000031c: 2200                                move.l       d0, d1           ;iCurY3 = iCurY1; 	iCurY2 = iCurY0;

⌨️ 快捷键说明

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