|
在CCS下编写的FIR滤波器产生的源程序,可以作为子程序调用。平台为TMS320C6202
.global _fir8 .text _fir8: STW .D2 A15,*B15-- || SUB .L1X B15,8,A15 STW .D2 B14,*B15--[2] || STW .D1 A14,*A15--[2] STW .D2 B13,*B15--[2] || STW .D1 A13,*A15--[2] STW .D2 B12,*B15--[2] || STW .D1 A12,*A15--[2] B_START: MPY .M2 B6,2,B5 || SHR .S1X B6,3,A5 || ADD .L2X A6,2,B6
SHR .S2X A8,1,B0 || STW .D2 B11,*B15--[2] || STW .D1 A11,*A15--[2] || ZERO .S1 A2
MV .L1X B4,A0 || ADD .S2 B4,4,B14 || MV .L2X A4,B1 || ADD .S1 A4,4,A4 || STW .D2 B10,*B15--[2] || STW .D1 A10,*A15--[2]
LDW .D1 *A4++[2],B9 || LDW .D2 *B1++[2],A10 || MV .L1 A5,A1 || MPY .M2X A5,B0,B0 || SUB .S1X B5,4,A3 || ZERO .L2 B11 || MVK .S2 2,B2
LOOP: [!A2] SHR .S1 A10,15,A12 || MPYH .M2 B7,B9,B13 || [A2] ADD .L1 A7,A10,A7 || MPYHL .M1X B7,A11,A10 || ADD .L2X A14,B4,B7 || LDW .D2 *B14++[2],B7 || LDW .D1 *A0++[2],A8 || [B2] SUB .S2 B2,1,B2
ADD .L1 A10,A7,A13 || MPYHL .M2X A9,B10,B12 || MPYLH .M1 A9,A11,A10 || ADD .L2 B13,B7,B7 || LDW .D2 *B1++[2],A11 || LDW .D1 *A4++[2],B10 || [A1] SUB .S1 A1,1,A1 || [!B2] SUB .S2 B0,1,B0
[B0] B .S2 LOOP || MPY .M1 A9,A11,A11 || ADD .L1X B9,A13,A13 || MPYLH .M2 B8,B10,B13 || ADD .L2X A10,B7,B7 || LDW .D1 *A0++[2],A9 || LDW .D2 *B14++[2],B8 || [!A1] SUB .S1 A4,A3,A4
MPY .M2 B8,B10,B11 || MPYH .M1 A9,A11,A11 || ADD .L1X B13,A13,A9 || ADD .L2X A10,B7,B7 || [!A1] SUB .S2 B1,B5,B1 || [!A1] SUB .S1 A0,A3,A0 || LDH .D2 *B1,A8 || [B2] ADD .D1 A5,1,A2
[!A2] MV .S1 A5,A2 || MPYH .M2 B8,B10,B13 || ADD .L1 A11,A9,A9 || MPYHL .M1X B8,A8,A9 || ADD .S2 B12,B7,B10 || [!A2] STH .D2 B11,*B6++[2] || [!A2] STH .D1 A12,*A6++[2] || ADD .L2X A10,0,B8
ADD .L1 A11,A9,A12 || ADD .L2 B13,B10,B8 || MPYLH .M2X A8,B8,B4 || [!A1] SUB .D2 B14,B5,B14 || MPYHL .M1X A8,B9,A14 || [!A1] ADD .S2 B1,4,B1 || [!A1] SUB .S1 A0,4,A0
[!B2] ADD .L2X A9,B8,B11 || ADD .L1X B11,A12,A12 || MPY .M1 A8,A10,A7 || MPYLH .M2 B7,B9,B13 || [A2] SUB .D1 A2,1,A2 || [!A1] MV .S1 A5,A1 || [B2] ZERO .D2 B11
[!B2] ADD .L1X B13,A12,A10 || [!A2] SHR .S2 B11,15,B11 || MPY .M2 B7,B9,B9 || MPYH .M1 A8,A10,A10 || [A2] ADD .L2 B4,B11,B4 || LDW .D1 *A4++[2],B9 || LDW .D2 *B1++[2],A10 || [B2] ZERO .S1 A10
SHR .S1 A10,15,A12 || LDW .D2 *++B15,A10 || MV .L1X B15,A15
STH .D2 B11,*B6++[2] || STH .D1 A12,*A6++[2]
B_END: LDW .D1 *++A15[2],B10 || LDW .D2 *++B15[2],A11
LDW .D1 *++A15[2],B11 || LDW .D2 *++B15[2],A12
LDW .D1 *++A15[2],B12 || LDW .D2 *++B15[2],A13
LDW .D1 *++A15[2],B13 || LDW .D2 *++B15[2],A14 || B .S2 B3
LDW .D1 *++A15[2 ],B14 || LDW .D2 *++B15[2],A15
NOP 4
|