📄 fir16_emac.s.list
字号:
;--== Next coefficients loading ==--
0x000000e2: 281b move.l (a3)+, d4 ;iCurA0 = *pCurCoef++; iCurA1 = *pCurCoef++;
.ForInH
;--== Three first input samples and coefficients multiplication ==--
0x000000e4: a48402c0 mac.w d4.u, d2.u, <<, ACC1 ;iOut1 += iCurA0 * iCurX0
0x000000e8: a4040250 mac.w d4.u, d2.l, <<, ACC2 ;iOut2 += iCurA0 * iCurX1
0x000000ec: a68402d0 mac.w d4.u, d3.u, <<, ACC3 ;iOut3 += iCurA0 * iCurX2
;--== Loading two next input samples ==--
0x000000f0: 2602 move.l d2, d3 ;iCurX3 = iCurX1; iCurX2 = iCurX0;
0x000000f2: 2424 move.l -(a4), d2 ;iCurX1 = *--pCurHistory; iCurX0 = *--pCurHistory;
;--== Fourth input sample and coefficient multiplication ==--
0x000000f4: a4040240 mac.w d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
;--== Next Four input sample and coefficients multiplication ==--
0x000000f8: a4040280 mac.w d4.l, d2.u, <<, ACC0 ;iOut0 += iCurA1 * iCurX0
0x000000fc: a4840200 mac.w d4.l, d2.l, <<, ACC1 ;iOut1 += iCurA1 * iCurX1
0x00000100: a6040290 mac.w d4.l, d3.u, <<, ACC2 ;iOut2 += iCurA1 * iCurX2
;--== Last mac instruction with next coefficients loading ==--
0x00000104: a81b3214 mac.w d4.l, d3.l, <<, (a3)+, d4, ACC3 ;iOut3 += iCurA1 * iCurX3
;iCurA0 = *pCurCoef++;iCurA1 = *pCurCoef++;
0x00000108: 5585 subq.l #2, d5 ;j -= 2;
0x0000010a: 6ed8 bgt .ForInH ;}
.EndInH
0x0000010c: 6000001e bra .EndH ;}
;else{
.BegNoHistory
;---=Final computations if history buffer is void==--
;--== Next coefficients loading ==--
0x00000110: 281b move.l (a3)+, d4 ;iCurA0 = *pCurCoef++; iCurA1 = *pCurCoef++;
0x00000112: a48402c0 mac.w d4.u, d2.u, <<, ACC1 ;iOut1 += iCurA0 * iCurX1
0x00000116: a4040250 mac.w d4.u, d2.l, <<, ACC2 ;iOut2 += iCurA0 * iCurX2
0x0000011a: a68402d0 mac.w d4.u, d3.u, <<, ACC3 ;iOut3 += iCurA0 * iCurX3
0x0000011e: a4040290 mac.w d4.l, d2.u, <<, ACC2 ;iOut2 += iCurA1 * iCurX2
0x00000122: a4840210 mac.w d4.l, d2.l, <<, ACC3 ;iOut3 += iCurA1 * iCurX3
;--== Next coefficient loading ==--
0x00000126: 381b move.w (a3)+, d4 ;iCurA0 = *pCurCoef++;
0x00000128: a4840290 mac.w d4.l, d2.u, <<, ACC3 ;iOut3 += iCurA0 * iCurX3
;}
.EndH
;--==Storing computed samples into the memory==--
0x0000012c: 264e move.l a6, a3 ;pCurCoef = pIirCoef
0x0000012e: a1c0 movclr.l ACC0, d0 ;*pY++ = iOut0
;#ifndef __FRACT_M
; swap d0 ;
;#endif
0x00000130: 32c0 move.w d0, (a1)+ ;
0x00000132: a3c0 movclr.l ACC1, d0 ;*pY++ = iOut1
;#ifndef __FRACT_M
; swap d0 ;
;#endif
0x00000134: 32c0 move.w d0, (a1)+ ;
0x00000136: a5c2 movclr.l ACC2, d2 ;*pY++ = iOut2
;#ifndef __FRACT_M
; swap d2 ;
;#endif
0x00000138: 32c2 move.w d2, (a1)+ ;
0x0000013a: a7c0 movclr.l ACC3, d0 ;*pY++ = iOut3
;#ifndef __FRACT_M
; swap d0 ;
;#endif
0x0000013c: 32c0 move.w d0, (a1)+ ;
0x0000013e: 5987 subq.l #4, d7 ;i -= 4;
0x00000140: 6e00ff08 bgt .BegD4 ;}while(i > 0);
0x00000144: 6000000c bra .EndD4
.EndD4Z
0x00000148: 2e06 move.l d6, d7 ;
0x0000014a: 67000094 beq .EndTailH ;
0x0000014e: 60000008 bra .BegTailH ;
.EndD4
0x00000152: 5887 addq.l #4, d7 ; i += 4;
0x00000154: 6700008a beq .EndTailH ;while(i)
;{
;---=Computation of N % 4 last output samples==--
.BegTailH
;--== Next input samples loading ==--
0x00000158: 3410 move.w (a0), d2 ;iCurX0 = *pX;
0x0000015a: 2848 movea.l a0, a4 ;pCurX = pX;
0x0000015c: 41e80002 lea 2(a0), a0 ;pX++;
;--== Next coefficients loading ==--
0x00000160: 264e move.l a6, a3 ;pCurCoef = pIirCoef;
0x00000162: 2813 move.l (a3), d4 ;iCurA0 = *pCurCoef;
0x00000164: 47eb0002 lea 2(a3), a3 ;pCurCoef++;
;--== Input samples and first coefficient multiplications ==--
0x00000168: a4040240 mac.w d4.u, d2.l, <<, ACC0 ;iOut0 = iCurA0 * iCurX0
;--== The count of inner loops calculation ==--
0x0000016c: 2a06 move.l d6, d5 ;
0x0000016e: 9a87 sub.l d7, d5 ;j = tmp - i;
0x00000170: 6f000028 ble .EndIn1TailH ;while(j > 0)
;{
0x00000174: 08050000 btst.l #0, d5
0x00000178: 67000010 beq .ForIn1TailH
;--== This part is executed only if j is odd ==--
;--== Next coefficients loading ==--
0x0000017c: 381b move.w (a3)+, d4 ;iCurA0 = *pCurCoef++;
;--== Next input sample loading ==--
0x0000017e: 3424 move.w -(a4), d2 ;iCurX = *--pCurX;
;--== Input samples and first coefficient multiplications ==--
0x00000180: a4040200 mac.w d4.l, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x00000184: 5385 subq.l #1, d5
0x00000186: 67000012 beq .EndIn1TailH
.ForIn1TailH
;--== Next coefficients loading ==--
0x0000018a: 281b move.l (a3)+, d4 ;iCurA0 = *pCurCoef++; iCurA1 = *pCurCoef++;
;--== Next input samples loading ==--
0x0000018c: 2424 move.l -(a4), d2 ;iCurX0 = *--pCurX;iCurX1 = *--pCurX;
;--== Two multiplications for each output sample ==--
0x0000018e: a4040240 mac.w d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x00000192: a4040280 mac.w d4.l, d2.u, <<, ACC0 ;iOut0 += iCurA1 * iCurX1
0x00000196: 5585 subq.l #2, d5 ;j-= 2;
0x00000198: 6ef0 bgt .ForIn1TailH ;}
.EndIn1TailH
0x0000019a: 2a2a000c move.l 12(a2), d5 ;if(pIIR->iIirHistoryCount)
0x0000019e: 67000036 beq .EndInHTail ;{
;--== The count of inner loops calculation ==--
0x000001a2: 2a07 move.l d7, d5 ;j = i
0x000001a4: 6f000030 ble .EndInHTail ;if(j > 0)
;{
;--== Current history buffer pointer initialization==--
0x000001a8: 286a0008 move.l 8(a2), a4 ;pCurHustory = pIirHistory + tmp * 2
0x000001ac: d9c6 adda.l d6, a4 ;
0x000001ae: d9c6 adda.l d6, a4 ;while(j > 0)
;{
0x000001b0: 08050000 btst.l #0, d5
0x000001b4: 67000010 beq .ForInHTail
;--== This part is executed only if j is odd ==--
;--== Next coefficient loading ==--
0x000001b8: 381b move.w (a3)+, d4 ;iCurA0 = *pCurCoef++;
;--== Next input sample loading ==--
0x000001ba: 3424 move.w -(a4), d2 ;iCurX = *--pCurX;
0x000001bc: a4040200 mac.w d4.l, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x000001c0: 5385 subq.l #1, d5
0x000001c2: 67000012 beq .EndInHTail
.ForInHTail
;--== Next coefficients loading ==--
0x000001c6: 281b move.l (a3)+, d4 ;iCurA0 = *pCurCoef++;iCurA1 = *pCurCoef++;
;--== Next input samples loading ==--
0x000001c8: 2424 move.l -(a4), d2 ;iCurX0 = *--pCurHistory;iCurX1 = *--pCurHistory;
--== Two multiplications for each output sample ==--
0x000001ca: a4040240 mac.w d4.u, d2.l, <<, ACC0 ;iOut0 += iCurA0 * iCurX0
0x000001ce: a4040280 mac.w d4.l, d2.u, <<, ACC0 ;iOut0 += iCurA1 * iCurX1
0x000001d2: 5585 subq.l #2, d5 ;j -= 2;
0x000001d4: 6ef0 bgt .ForInHTail ;}
.EndInHTail ;}
;--==Storing computed sample into the memory==--
0x000001d6: a1c0 movclr.l ACC0, d0 ;*pY++ = iOut0;
;#ifndef __FRACT_M
; swap d0 ;
;#endif
0x000001d8: 32c0 move.w d0, (a1)+ ;
0x000001da: 5387 subq.l #1, d7 ;i -= 1;
0x000001dc: 6e00ff7a bgt .BegTailH ;}
.EndTailH ;}
;---====== Begin of cycle of getting Y[N+1]..Y[n] (N = (pIIR->iIirCoefCount - 1) / 2)======---
0x000001e0: 2c2a0004 move.l 4(a2), d6 ;tmp = IIR->iIirCoefCount;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -