diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c old mode 100644 new mode 100755 index d6a1182a4e9aa45305e27197e88260cf78d0d7e2..535c22942fb9d4a971e874de88ed441b68ffff25 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -514,6 +514,9 @@ void hp20_fx_32( return; } #else +#define SPEEDUP_1_hp20_fx_32 +#define SPEEDUP_2_hp20_fx_32 + void hp20_fx_32( Word32 signal_fx[], const Word16 lg, @@ -596,9 +599,14 @@ void hp20_fx_32( move16(); } Qy1 = sub( Qy1, 34 ); + +#ifdef SPEEDUP_1_hp20_fx_32 + + +#else R1 = W_mult0_32_32( W_shl_sat_l( y1_fx64, Qy1 ), a1_fx ); Qy1 = add( Qy1, Qprev_y1 ); - +#endif Qy2 = W_norm( y2_fx64 ); if ( y2_fx64 == 0 ) { @@ -606,9 +614,13 @@ void hp20_fx_32( move16(); } Qy2 = sub( Qy2, 34 ); + +#ifdef SPEEDUP_1_hp20_fx_32 + +#else R2 = W_mult0_32_32( W_shl_sat_l( y2_fx64, Qy2 ), a2_fx ); Qy2 = add( Qy2, Qprev_y2 ); - +#endif Qx0 = W_norm( x0_fx64 ); if ( x0_fx64 == 0 ) { @@ -616,8 +628,10 @@ void hp20_fx_32( move16(); } Qx0 = sub( Qx0, 34 ); - R3 = W_mult0_32_32( W_shl_sat_l( x0_fx64, Qx0 ), b2_fx ); +#ifndef SPEEDUP_1_hp20_fx_32 + R3 = W_mult0_32_32( W_shl_sat_l( x0_fx64, Qx0 ), b2_fx ); +#endif Qx1 = W_norm( x1_fx64 ); if ( x1_fx64 == 0 ) { @@ -625,8 +639,9 @@ void hp20_fx_32( move16(); } Qx1 = sub( Qx1, 34 ); +#ifndef SPEEDUP_1_hp20_fx_32 R4 = W_mult0_32_32( W_shl_sat_l( x1_fx64, Qx1 ), b1_fx ); - +#endif Qx2 = W_norm( x2_fx64 ); if ( x2_fx64 == 0 ) { @@ -634,18 +649,52 @@ void hp20_fx_32( move16(); } Qx2 = sub( Qx2, 34 ); +#ifndef SPEEDUP_1_hp20_fx_32 R5 = W_mult0_32_32( W_shl_sat_l( x2_fx64, Qx2 ), b2_fx ); +#endif +#ifdef SPEEDUP_1_hp20_fx_32 + Qmin = s_min( add( Qy1, Qprev_y1 ), add( Qy2, Qprev_y2 ) ); + +#ifdef SPEEDUP_2_hp20_fx_32 + R1 = W_mult0_32_32( W_shl_sat_l( y1_fx64, sub( Qy1, sub( add( Qy1, Qprev_y1 ), Qmin ) ) ), a1_fx ); +#else + R1 = W_shr( W_mult0_32_32( W_shl_sat_l( y1_fx64, Qy1 ), a1_fx ), sub( add( Qy1, Qprev_y1 ), Qmin ) ); +#endif +#ifdef SPEEDUP_2_hp20_fx_32_ + R2 = W_mult0_32_32( W_shl_sat_l( y2_fx64, sub( Qy2, sub( add( Qy2, Qprev_y2 ), Qmin ) ) ), a2_fx ); +#else + R2 = W_shr( W_mult0_32_32( W_shl_sat_l( y2_fx64, Qy2 ), a2_fx ), sub( add( Qy2, Qprev_y2 ), Qmin ) ); +#endif + y0_fx64 = W_add( R1, R2 ); + + + Qmin = s_min( Qmin, Qx0 ); + Qmin = s_min( Qmin, Qx1 ); + Qmin = s_min( Qmin, Qx2 ); + +#ifdef SPEEDUP_2_hp20_fx_32 + R3 = W_shr( W_mult0_32_32( W_shl_sat_l( x0_fx64, sub( Qx0, sub( Qx0, Qmin ) ) ), b2_fx ), 0 ); + R4 = W_shr( W_mult0_32_32( W_shl_sat_l( x1_fx64, sub( Qx1, sub( Qx1, Qmin ) ) ), b1_fx ), 0 ); + R5 = W_shr( W_mult0_32_32( W_shl_sat_l( x2_fx64, sub( Qx2, sub( Qx2, Qmin ) ) ), b2_fx ), 0 ); +#else + R3 = W_shr( W_mult0_32_32( W_shl_sat_l( x0_fx64, Qx0 ), b2_fx ), sub( Qx0, Qmin ) ); + R4 = W_shr( W_mult0_32_32( W_shl_sat_l( x1_fx64, Qx1 ), b1_fx ), sub( Qx1, Qmin ) ); + R5 = W_shr( W_mult0_32_32( W_shl_sat_l( x2_fx64, Qx2 ), b2_fx ), sub( Qx2, Qmin ) ); +#endif + y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( add( Qy1, Qprev_y1 ), add( Qy2, Qprev_y2 ) ), Qmin ) ), W_add( R3, W_add( R4, R5 ) ) ); +#else Qmin = s_min( Qy1, Qy2 ); y0_fx64 = W_add( W_shr( R1, sub( Qy1, Qmin ) ), W_shr( R2, sub( Qy2, Qmin ) ) ); + Qmin = s_min( Qmin, Qx0 ); Qmin = s_min( Qmin, Qx1 ); Qmin = s_min( Qmin, Qx2 ); y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( Qy1, Qy2 ), Qmin ) ), W_add( W_shr( R3, sub( Qx0, Qmin ) ), W_add( W_shr( R4, sub( Qx1, Qmin ) ), W_shr( R5, sub( Qx2, Qmin ) ) ) ) ); - +#endif y0_fx64 = W_shr( y0_fx64, 29 ); signal_fx[i] = W_extract_l( W_shr( y0_fx64, Qmin ) );