From aa9c027247a9e9cff5f89f2ea956d9c636a20dad Mon Sep 17 00:00:00 2001 From: ber Date: Thu, 2 Oct 2025 10:35:21 +0200 Subject: [PATCH 1/3] add macro SPEEDUP_1_hp20_fx_32 and activate - R1, R2 calculation changed and shortened, should be equal, best case BE, but at least no regression --- lib_com/hp50_fx.c | 52 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) mode change 100644 => 100755 lib_com/hp50_fx.c diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c old mode 100644 new mode 100755 index d6a1182a4..a57a2f2b3 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -514,6 +514,7 @@ void hp20_fx_32( return; } #else +#define SPEEDUP_1_hp20_fx_32 void hp20_fx_32( Word32 signal_fx[], const Word16 lg, @@ -581,6 +582,10 @@ void hp20_fx_32( x0_fx64 = W_deposit32_l( mem_fx[2] ); x1_fx64 = W_deposit32_l( mem_fx[3] ); +#ifdef SPEEDUP_1_hp20_fx_32 + Word16 Qy1_new, Qy2_new; +#endif + FOR( i = 0; i < lg; i++ ) { x2_fx64 = x1_fx64; @@ -596,9 +601,14 @@ void hp20_fx_32( move16(); } Qy1 = sub( Qy1, 34 ); + +#ifdef SPEEDUP_1_hp20_fx_32 + Qy1_new = add( Qy1, Qprev_y1 ); + +#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 +616,14 @@ void hp20_fx_32( move16(); } Qy2 = sub( Qy2, 34 ); + +#ifdef SPEEDUP_1_hp20_fx_32 + Qy2_new = add( Qy2, Qprev_y2 ); + +#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 +631,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 +642,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 +652,42 @@ void hp20_fx_32( move16(); } Qx2 = sub( Qx2, 34 ); + R5 = W_mult0_32_32( W_shl_sat_l( x2_fx64, Qx2 ), b2_fx ); +#ifdef SPEEDUP_1_hp20_fx_32 + + Qmin = s_min( Qy1_new, Qy2_new ); + + R1 = W_mult0_32_32( W_shr( W_shl( y1_fx64, Qy1 ), sub( Qy1_new, Qmin ) ), a1_fx ); + R2 = W_mult0_32_32( W_shr( W_shl( y2_fx64, Qy2 ), sub( Qy2_new, Qmin ) ), a2_fx ); + R3 = W_mult0_32_32( W_shl( x0_fx64, Qx0 ), b2_fx ); + R4 = W_mult0_32_32( W_shl( x1_fx64, Qx1 ), b1_fx ); + + y0_fx64 = W_add( R1, R2 ); + + + Qmin = s_min( Qmin, Qx0 ); + Qmin = s_min( Qmin, Qx1 ); + Qmin = s_min( Qmin, Qx2 ); + + R3 = W_shr( R3, sub( Qx0, Qmin ) ); + R4 = W_shr( R4, sub( Qx1, Qmin ) ); + R5 = W_shr( R5, sub( Qx2, Qmin ) ); + + y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( Qy1_new, Qy2_new ), 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 ) ); -- GitLab From d4407fc78bb52ec08fa2d2c4f12126c54662780d Mon Sep 17 00:00:00 2001 From: ber Date: Thu, 2 Oct 2025 10:38:26 +0200 Subject: [PATCH 2/3] trigger new pipes --- lib_com/hp50_fx.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c index a57a2f2b3..12c7e9cd6 100755 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -643,6 +643,7 @@ void hp20_fx_32( } 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 ); -- GitLab From a493ec1a6b082cc8b78eeb5da62014d298ab12df Mon Sep 17 00:00:00 2001 From: ber Date: Thu, 2 Oct 2025 11:25:56 +0200 Subject: [PATCH 3/3] fix macro - do all recalcs, but R2 --- lib_com/hp50_fx.c | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c index 12c7e9cd6..535c22942 100755 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -515,6 +515,8 @@ void hp20_fx_32( } #else #define SPEEDUP_1_hp20_fx_32 +#define SPEEDUP_2_hp20_fx_32 + void hp20_fx_32( Word32 signal_fx[], const Word16 lg, @@ -582,10 +584,6 @@ void hp20_fx_32( x0_fx64 = W_deposit32_l( mem_fx[2] ); x1_fx64 = W_deposit32_l( mem_fx[3] ); -#ifdef SPEEDUP_1_hp20_fx_32 - Word16 Qy1_new, Qy2_new; -#endif - FOR( i = 0; i < lg; i++ ) { x2_fx64 = x1_fx64; @@ -603,7 +601,7 @@ void hp20_fx_32( Qy1 = sub( Qy1, 34 ); #ifdef SPEEDUP_1_hp20_fx_32 - Qy1_new = add( Qy1, Qprev_y1 ); + #else R1 = W_mult0_32_32( W_shl_sat_l( y1_fx64, Qy1 ), a1_fx ); @@ -618,7 +616,6 @@ void hp20_fx_32( Qy2 = sub( Qy2, 34 ); #ifdef SPEEDUP_1_hp20_fx_32 - Qy2_new = add( Qy2, Qprev_y2 ); #else R2 = W_mult0_32_32( W_shl_sat_l( y2_fx64, Qy2 ), a2_fx ); @@ -643,7 +640,6 @@ void hp20_fx_32( } 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 ); @@ -653,18 +649,23 @@ 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( Qy1_new, Qy2_new ); - - R1 = W_mult0_32_32( W_shr( W_shl( y1_fx64, Qy1 ), sub( Qy1_new, Qmin ) ), a1_fx ); - R2 = W_mult0_32_32( W_shr( W_shl( y2_fx64, Qy2 ), sub( Qy2_new, Qmin ) ), a2_fx ); - R3 = W_mult0_32_32( W_shl( x0_fx64, Qx0 ), b2_fx ); - R4 = W_mult0_32_32( W_shl( x1_fx64, Qx1 ), b1_fx ); + 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 ); @@ -672,11 +673,16 @@ void hp20_fx_32( Qmin = s_min( Qmin, Qx1 ); Qmin = s_min( Qmin, Qx2 ); - R3 = W_shr( R3, sub( Qx0, Qmin ) ); - R4 = W_shr( R4, sub( Qx1, Qmin ) ); - R5 = W_shr( R5, sub( Qx2, Qmin ) ); - - y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( Qy1_new, Qy2_new ), Qmin ) ), W_add( R3, W_add( R4, R5 ) ) ); +#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 ); -- GitLab