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

📄 fir16_emac.s.list

📁 freescale MAC DSP的算法库(FFT
💻 LIST
📖 第 1 页 / 共 3 页
字号:

0x000001e4: 2e2f004c                            move.l       76(a7), d7       ;i = n;

0x000001e8: 5386                                subq.l       #1, d6           ;tmp--;
0x000001ea: 9e86                                sub.l        d6, d7           ;i -= tmp;

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

0x000001ee: 67000090                            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 ==--
0x000001f2: 2410                                move.l       (a0), d2         ;iCurX0 = pX[0]; iCurX1 = pX[1];
0x000001f4: 26280004                            move.l       4(a0), d3        ;iCurX2 = pX[2]; iCurX3 = pX[3];
0x000001f8: 2848                                movea.l      a0, a4           ;pCurX = pX;
0x000001fa: 41e80008                            lea          8(a0), a0        ;pX += 4;

0x000001fe: 264e                                move.l       a6, a3           ;pCurCoef = pIirCoef;
                             ;--== Next coefficient loading	==--
0x00000200: 381b                                move.w       (a3)+, d4        ;iCurA0 = *pCurCoef;

                             ;--== Input samples and first coefficient multiplications ==--
0x00000202: a4040280                            mac.w        d4.l, d2.u, <<, ACC0 ;iOut0 = iCurA0 * iCurX0
0x00000206: a4840200                            mac.w        d4.l, d2.l, <<, ACC1 ;iOut1 = iCurA0 * iCurX1
0x0000020a: a6040290                            mac.w        d4.l, d3.u, <<, ACC2 ;iOut2 = iCurA0 * iCurX2
0x0000020e: a6840210                            mac.w        d4.l, d3.l, <<, ACC3 ;iOut3 = iCurA0 * iCurX3

                             ;--== The count of inner loops calculation ==-- 
0x00000212: 2a06                                move.l       d6, d5           ;j = tmp
0x00000214: 08050000                            btst         #0, d5           ;
0x00000218: 67000022                            beq          .ForIn1EBeg      ;if(j & 1)
                                                                              ;{

                             ;--== This multiplications executed only when j is odd ==--
                             ;--== Next coefficient loading	==--
0x0000021c: 381b                                move.w       (a3)+, d4        ;iCurA0 = *pCurCoef++;

0x0000021e: 3602                                move.w       d2, d3           ;iCurX3 = iCurX2;
0x00000220: 3424                                move.w       -(a4), d2        ;iCurX2 = iCurX1;
0x00000222: 4842                                swap         d2               ;iCurX1 = iCurX0;
0x00000224: 4843                                swap         d3               ;iCurX0 = *--pCurHistory;

0x00000226: a4040280                            mac.w        d4.l, d2.u, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x0000022a: a4840200                            mac.w        d4.l, d2.l, <<, ACC1 ;iOut1 += iCurA0 * iCurX1
0x0000022e: a6040290                            mac.w        d4.l, d3.u, <<, ACC2 ;iOut2 += iCurA0 * iCurX2
0x00000232: a6840210                            mac.w        d4.l, d3.l, <<, ACC3 ;iOut3 += iCurA0 * iCurX3

0x00000236: 5385                                subq.l       #1, d5           ;j -= 1;
0x00000238: 67000030                            beq          .EndIn1E         ;}
                             .ForIn1EBeg                                      
                             ;--== Next coefficients loading	==--
0x0000023c: 281b                                move.l       (a3)+, d4        ;iCurA0 = *pCurCoef++; iCurA1 = *pCurCoef++;
                             .ForIn1E                                         
0x0000023e: 5585                                subq.l       #2, d5           ;for(;j >= 0; j -=2)
0x00000240: 6d000028                            blt          .EndIn1E         ;{

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

                             ;--== Loading two next input samples ==--	
0x00000250: 2602                                move.l       d2, d3           ;iCurX3 = iCurX1; 	iCurX2 = iCurX0;
0x00000252: 2424                                move.l       -(a4), d2        ;iCurX1 = *--pCurX; iCurX0 = *--pCurX;

                             ;--== Fourth input sample and coefficient multiplication ==--
0x00000254: a4040240                            mac.w        d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX1

                             ;--== Next Four input sample and coefficients multiplication ==--
0x00000258: a4040280                            mac.w        d4.l, d2.u, <<, ACC0 ;iOut0 += iCurA1 * iCurX0
0x0000025c: a4840200                            mac.w        d4.l, d2.l, <<, ACC1 ;iOut1 += iCurA1 * iCurX1
0x00000260: a6040290                            mac.w        d4.l, d3.u, <<, ACC2 ;iOut2 += iCurA1 * iCurX2
                             ;--== Last mac instruction with next coefficients loading ==--
0x00000264: a81b3214                            mac.w        d4.l, d3.l, <<, (a3)+, d4, ACC3 ;iOut3 += iCurA1 * iCurX3
                                                                              ;iCurA0 = *pCurCoef++;iCurA1 = *pCurCoef++;

0x00000268: 60d4                                bra          .ForIn1E         ;}

                             .EndIn1E                                         

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

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

0x0000026e: a3c0                                movclr.l     ACC1, d0         ;*pY++ = iOut1
                             ;#ifndef __FRACT_M	
                             ;	swap	d0						;
                             ;#endif	
0x00000270: 32c0                                move.w       d0, (a1)+        ;

0x00000272: a5c2                                movclr.l     ACC2, d2         ;*pY++ = iOut2
                             ;#ifndef __FRACT_M	
                             ;	swap	d2						;
                             ;#endif	
0x00000274: 32c2                                move.w       d2, (a1)+        ;
0x00000276: a7c0                                movclr.l     ACC3, d0         ;*pY++ = iOut3
                             ;#ifndef __FRACT_M	
                             ;	swap	d0						;
                             ;#endif	
0x00000278: 32c0                                move.w       d0, (a1)+        ;
0x0000027a: 5387                                subq.l       #1, d7           ;i --;
0x0000027c: 6600ff74                            bne          .BegD4E          ;}

                             .EndD4E                                          
                             ;---=Computation of N % 4 last output samples==--
                             .BegTail2                                        
0x00000280: 2c2a0004                            move.l       4(a2), d6        ;tmp = IIR->iIirCoefCount;
0x00000284: 2e2f004c                            move.l       76(a7), d7       ;i = n;

0x00000288: 5386                                subq.l       #1, d6           ;tmp--;
0x0000028a: 9e86                                sub.l        d6, d7           ;i -= tmp;

0x0000028c: 028700000003                        andi.l       #3, d7           ;i &= 3;

0x00000292: 67000046                            beq          .EndTail2        ;while(i)
                                                                              ;{
                             .BegOutTail2                                     

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

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

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

                             ;--== The count of inner loops calculation ==-- 
0x000002aa: 2a06                                move.l       d6, d5           ;j = tmp;
0x000002ac: 08050000                            btst.l       #0, d5           
0x000002b0: 67000010                            beq          .ForInTail2      

                             ;--== This part is executed only if j is odd ==--	
                             ;--== Next coefficients loading	==--
0x000002b4: 381b                                move.w       (a3)+, d4        ;iCurA0 = *pCurCoef++; iCurA1 = *pCurCoef++;

                             ;--== Next input samples loading	==--
0x000002b6: 3424                                move.w       -(a4), d2        ;iCurX = *--pCurX;

0x000002b8: a4040200                            mac.w        d4.l, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x000002bc: 5385                                subq.l       #1, d5           
0x000002be: 67000012                            beq          .EndInTail2      

                             .ForInTail2                                      ;do{

                             ;--== Next coefficients loading	==--
0x000002c2: 281b                                move.l       (a3)+, d4        ;iCurA0 = *pCurCoef++; iCurA1 = *pCurCoef++;

                             ;--== Next input samples loading	==--
0x000002c4: 2424                                move.l       -(a4), d2        ;iCurX0 = *--pCurX;iCurX1 = *--pCurX;

                             ;--== Two multiplications for each output sample ==--
0x000002c6: a4040240                            mac.w        d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x000002ca: a4040280                            mac.w        d4.l, d2.u, <<, ACC0 ;iOut0 += iCurA1 * iCurX1

0x000002ce: 5585                                subq.l       #2, d5           ;j--;
0x000002d0: 66f0                                bne          .ForInTail2      ;}while(j);

                             .EndInTail2                                      

                             ;--==Storing computed sample into the memory==--
0x000002d2: a1c0                                movclr.l     ACC0, d0         ;*pY++ = iOut0;
                             ;#ifndef __FRACT_M	
                             ;	swap	d0						;
                             ;#endif	
0x000002d4: 32c0                                move.w       d0, (a1)+        ;

0x000002d6: 5387                                subq.l       #1, d7           ;i--;
0x000002d8: 66bc                                bne          .BegOutTail2     ;}

                             .EndTail2                                        
                             ;--==Filling history buffer==--
0x000002da: 266a0008                            move.l       8(a2), a3        ;pCurHistory = IIR->pIirHistory;
0x000002de: 202a0004                            move.l       4(a2), d0        ;i = IIR->iIirCoefCount;
0x000002e2: 5380                                subq.l       #1, d0           ;i--;
0x000002e4: 2540000c                            move.l       d0, 12(a2)       ;IIR->iIirHistoryCount = i;
0x000002e8: d7c0                                adda.l       d0, a3           ;pCurHistory += i;
0x000002ea: d7c0                                adda.l       d0, a3           ;
                                                                              ;do{
                             .NextHist                                        
0x000002ec: 3720                                move.w       -(a0), -(a3)     ;*--pCurHistory = *--pX;

0x000002ee: 5380                                subq.l       #1, d0           ;i ++;
0x000002f0: 66fa                                bne          .NextHist        ;}while(i);

                             ;--==Restoring old MAC status register==--
0x000002f2: a901                                move.l       d1, MACSR        

0x000002f4: 4cd77fff                            movem.l      (a7), d0-d7/a0-a6 
0x000002f8: 4fef003c                            lea          60(a7), a7       
0x000002fc: 4e75                                rts                           

⌨️ 快捷键说明

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