[xiph-commits] r9409 - trunk/speex/libspeex
jm at motherfish-iii.xiph.org
jm at motherfish-iii.xiph.org
Wed Jun 8 20:34:30 PDT 2005
Author: jm
Date: 2005-06-08 20:34:29 -0700 (Wed, 08 Jun 2005)
New Revision: 9409
Modified:
trunk/speex/libspeex/filters_bfin.h
Log:
Partial cleanup of filter_mem2
Modified: trunk/speex/libspeex/filters_bfin.h
===================================================================
--- trunk/speex/libspeex/filters_bfin.h 2005-06-09 02:50:28 UTC (rev 9408)
+++ trunk/speex/libspeex/filters_bfin.h 2005-06-09 03:34:29 UTC (rev 9409)
@@ -85,15 +85,11 @@
#define OVERRIDE_FILTER_MEM2
void filter_mem2(const spx_sig_t *_x, const spx_coef_t *num, const spx_coef_t *den, spx_sig_t *_y, int N, int ord, spx_mem_t *mem)
{
- spx_word16_t x[N],y[N];
- spx_word16_t *xx, *yy;
- spx_word32_t xy2[N];
- spx_word32_t *xy = xy2;
- spx_word16_t numden_a[2*ord];
- spx_word16_t *numden = numden_a;
+ spx_word32_t xy2[N+1];
+ spx_word32_t *xy = xy2+1;
+ spx_word32_t numden_a[2*ord+2];
+ spx_word16_t *numden = (spx_word16_t *)numden_a;
int i;
- xx = x;
- yy = y;
for (i=0;i<ord;i++)
{
numden[2*i] = num[i];
@@ -110,11 +106,8 @@
"L0 = 0;\n\t"
"P2 = %0;\n\t"
- "P3 = %1;\n\t"
"I2 = P2;\n\t"
- "I3 = P3;\n\t"
"L2 = 0;\n\t"
- "L3 = 0;\n\t"
"P4 = %8;\n\t"
"P0 = %2;\n\t"
@@ -145,9 +138,7 @@
"A0 = 0;\n\t"
"I0 = B0;\n\t"
"I2 = P2;\n\t"
- "I3 = P3;\n\t"
"P2 += 4;\n\t"
- "P3 += 2;\n\t"
"R4 = [I0++] || R5 = [I2--];\n\t"
"LOOP filter_start_inner%= LC1;\n\t"
"LOOP_BEGIN filter_start_inner%=;\n\t"
@@ -168,57 +159,47 @@
/* Samples ord to N*/
"R0 = %7;\n\t"
- "R0 <<= 1;\n\t"
"I0 = B0;\n\t"
- "L1 = R0;\n\t"
- "R0 <<= 1;\n\t"
+ "R0 <<= 2;\n\t"
"L0 = R0;\n\t"
- "R0 = %7;\n\t"
+ "P3 = %7;\n\t"
"R2 = %6;\n\t"
"R2 = R2 - R0;\n\t"
"R4 = [I0++];\n\t"
+ "A0 = A1 = 0;\n\t"
"LC0 = R2;\n\t"
"LOOP filter_mid%= LC0;\n\t"
"LOOP_BEGIN filter_mid%=;\n\t"
- "LC1 = R0;\n\t"
- "A0 = A1 = 0;\n\t"
"I2 = P2;\n\t"
- "I3 = P3;\n\t"
"P2 += 4;\n\t"
- "P3 += 2;\n\t"
"R5 = [I2--];\n\t"
- "LOOP filter_mid_inner%= LC1;\n\t"
+ "LOOP filter_mid_inner%= LC1 = P3;\n\t"
"LOOP_BEGIN filter_mid_inner%=;\n\t"
"A0 += R4.L*R5.L (IS), A1 -= R4.H*R5.H (IS) || R4 = [I0++] || R5 = [I2--];\n\t"
"LOOP_END filter_mid_inner%=;\n\t"
- "A0 += A1;A1=A0;\n\t"
- "R1 = A1;\n\t"
- "R1 = R1 << 1 || R2 = [P0++];\n\t"
- "R1 = R1 + R2;\n\t"
- "R1 = R1 << 2 || [P1++] = R1;\n\t"
- "R2 = R2 << 2 ;//|| W[P3] = R1.H;\n\t"
- "R2 = PACK(R1.H, R2.H);\n\t"
- "[P2] = R2;\n\t"
+ "R4 = (A0 += A1);\n\t"
+ "R4 = R4 << 1 || R2 = [P0++];\n\t"
+ "R4 = R4 + R2;\n\t"
+ "R4 = R4 << 2 || [P1++] = R1;\n\t"
+ "R2 = R2 << 2 ;\n\t"
+ "R2 = PACK(R4.H, R2.H);\n\t"
+ "A0 = A1 = 0 || [P2] = R2;\n\t"
"LOOP_END filter_mid%=;\n\t"
/* Update memory */
"P4 = %8;\n\t"
- "R0 = %7;\n\t"
- "LC0 = R0;\n\t"
"P0 = B0;\n\t"
- "LOOP mem_update%= LC0;\n\t"
+ "LOOP mem_update%= LC0 = P3;\n\t"
"LOOP_BEGIN mem_update%=;\n\t"
"A0 = A1 = 0;\n\t"
"I2 = P2;\n\t"
- "I3 = P3;\n\t"
"I0 = P0;\n\t"
"P0 += 4;\n\t"
"R0 = LC0;\n\t"
"LC1=R0;\n\t"
- "R5 = [I2--];\n\t"
- "R4 = [I0++];\n\t"
+ "R5 = [I2--] || R4 = [I0++];\n\t"
"LOOP mem_accum%= LC1;\n\t"
"LOOP_BEGIN mem_accum%=;\n\t"
"A0 += R4.L*R5.L (IS), A1 -= R4.H*R5.H (IS) || R4 = [I0++] || R5 = [I2--];\n\t"
@@ -228,7 +209,7 @@
"[P4++] = R0;\n\t"
"LOOP_END mem_update%=;\n\t"
- : : "m" (xy), "m" (yy), "m" (_x), "m" (_y), "m" (numden), "m" (den), "m" (N), "m" (ord), "m" (mem)
+ : : "m" (xy), "m" (0), "m" (_x), "m" (_y), "m" (numden), "m" (0), "m" (N), "m" (ord), "m" (mem)
: "R0", "R1", "R2", "R3", "R4", "R5", "R7", "P0", "P1", "P2", "P3", "P4", "B0", "B1", "I0", "I1", "I2", "I3", "L0", "L1", "L2", "L3", "memory"
);
More information about the commits
mailing list