From 91616ec9888bdf432316fe78b2bf176288daf862 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 5 Sep 2025 15:05:42 +0200 Subject: [PATCH 1/7] activate hp20_fx recoding from Ittiam --- lib_com/hp50_fx.c | 56 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c index d6a1182a4..7682b7b0b 100644 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -338,6 +338,9 @@ void hp20( Word16 signal[], /* i/o: signal to filter any * return; } +#define HP20_FIX32_RECODING +//#define HP20_INCR_NEGATIVE_SMP +#define DEBUG_hp20_fx #ifdef HP20_FIX32_RECODING void hp20_fx_32( @@ -348,7 +351,7 @@ void hp20_fx_32( { Word32 i; Word32 a1_fx, a2_fx, b1_fx, b2_fx; - Word32 diff_pos, diff_neg; + Word32 diff_pos, diff_neg, signal_fx_i; #ifndef ISSUE_1836_replace_overflow_libcom Flag Overflow = 0; #endif @@ -458,8 +461,18 @@ void hp20_fx_32( W_sum = W_mac_32_32( W_sum, mem_fx[0], a2_fx ); /* y2*a2 */ W_sum = W_mac_32_32( W_sum, mem_fx[1], a1_fx ); /* y1*a1 */ W_y2 = W_shl( W_sum, HP20_COEFF_SCALE ); - signal_fx[0] = W_extract_h( W_shl( W_y2, prescale ) ); + signal_fx_i = W_extract_h( W_shl( W_y2, prescale ) ); +#ifdef HP20_INCR_NEGATIVE_SMP + if ( signal_fx_i < 0 ) + { + signal_fx_i = L_add( signal_fx_i, 1 ); + } +#endif + signal_fx[0] = signal_fx_i; move32(); +#ifdef DEBUG_hp20_fx + printf("signal_fx[%3d] = 0x%08X\n", (int) 0, signal_fx[0]); +#endif W_sum = W_mult_32_32( b2_fx, mem_fx[3] ); /* b2*x2 */ W_sum = W_mac_32_32( W_sum, b1_fx, x2 ); /* b1*x1 */ @@ -468,8 +481,18 @@ void hp20_fx_32( W_sum = W_mac_32_32( W_sum, mem_fx[1], a2_fx ); /* y2*a2 */ W_sum = W_mac_32_32( W_sum, W_extract_h( W_y2 ), a1_fx ); /* y1*a1 */ W_y1 = W_shl( W_sum, HP20_COEFF_SCALE ); - signal_fx[1] = W_extract_h( W_shl( W_y1, prescale ) ); + signal_fx_i = W_extract_h( W_shl( W_y1, prescale ) ); +#ifdef HP20_INCR_NEGATIVE_SMP + if ( signal_fx_i < 0 ) + { + signal_fx_i = L_add( signal_fx_i, 1 ); + } +#endif + signal_fx[1] = signal_fx_i; move32(); +#ifdef DEBUG_hp20_fx + printf("signal_fx[%3d] = 0x%08X\n", (int) 1, signal_fx[1]); +#endif diff = sub( prescale_current_frame, prescale ); W_y1 = W_shr( W_y1, diff ); @@ -487,8 +510,18 @@ void hp20_fx_32( W_sum = W_mac_32_32( W_sum, W_extract_h( W_y1 ), a1_fx ); /* y1*a1 */ W_y0 = W_shl( W_sum, HP20_COEFF_SCALE ); - signal_fx[i] = W_extract_h( W_shl( W_y0, prescale_current_frame ) ); + signal_fx_i = W_extract_h( W_shl( W_y0, prescale_current_frame ) ); +#ifdef HP20_INCR_NEGATIVE_SMP + if ( signal_fx_i < 0 ) + { + signal_fx_i = L_add( signal_fx_i, 1 ); + } +#endif + signal_fx[i] = signal_fx_i; move32(); +#ifdef DEBUG_hp20_fx + printf("signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i]); +#endif x2 = x1; x1 = x0; @@ -648,13 +681,18 @@ void hp20_fx_32( y0_fx64 = W_shr( y0_fx64, 29 ); - signal_fx[i] = W_extract_l( W_shr( y0_fx64, Qmin ) ); - move32(); - IF( signal_fx[i] < 0 ) + signal_fx_i = W_extract_l( W_shr( y0_fx64, Qmin ) ); +#ifdef HP20_INCR_NEGATIVE_SMP + if ( signal_fx_i < 0 ) { - signal_fx[i] = L_add( signal_fx[i], 1 ); - move32(); + signal_fx_i = L_add( signal_fx_i, 1 ); } +#endif + signal_fx[i] = signal_fx_i; + move32(); +#ifdef DEBUG_hp20_fx + printf("signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i]); +#endif y2_fx64 = y1_fx64; y1_fx64 = y0_fx64; -- GitLab From 32f0255e2e75c7fb6570fe02a18542216ebca7c1 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 5 Sep 2025 15:18:43 +0200 Subject: [PATCH 2/7] fix format --- lib_com/hp50_fx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c index 7682b7b0b..30ffad368 100644 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -471,7 +471,7 @@ void hp20_fx_32( signal_fx[0] = signal_fx_i; move32(); #ifdef DEBUG_hp20_fx - printf("signal_fx[%3d] = 0x%08X\n", (int) 0, signal_fx[0]); + printf( "signal_fx[%3d] = 0x%08X\n", (int) 0, signal_fx[0] ); #endif W_sum = W_mult_32_32( b2_fx, mem_fx[3] ); /* b2*x2 */ @@ -491,7 +491,7 @@ void hp20_fx_32( signal_fx[1] = signal_fx_i; move32(); #ifdef DEBUG_hp20_fx - printf("signal_fx[%3d] = 0x%08X\n", (int) 1, signal_fx[1]); + printf( "signal_fx[%3d] = 0x%08X\n", (int) 1, signal_fx[1] ); #endif diff = sub( prescale_current_frame, prescale ); @@ -520,7 +520,7 @@ void hp20_fx_32( signal_fx[i] = signal_fx_i; move32(); #ifdef DEBUG_hp20_fx - printf("signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i]); + printf( "signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i] ); #endif x2 = x1; @@ -691,7 +691,7 @@ void hp20_fx_32( signal_fx[i] = signal_fx_i; move32(); #ifdef DEBUG_hp20_fx - printf("signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i]); + printf( "signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i] ); #endif y2_fx64 = y1_fx64; -- GitLab From 846219efbb25d69c47e36f32c5a876a68d74f9a1 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 5 Sep 2025 15:39:39 +0200 Subject: [PATCH 3/7] fix windows warning --- lib_com/hp50_fx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c index 30ffad368..9c83fba54 100644 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -350,8 +350,8 @@ void hp20_fx_32( const Word32 Fs ) { Word32 i; - Word32 a1_fx, a2_fx, b1_fx, b2_fx; - Word32 diff_pos, diff_neg, signal_fx_i; + Word32 a1_fx, a2_fx, b1_fx, b2_fx, signal_fx_i; + Word16 diff_pos, diff_neg; #ifndef ISSUE_1836_replace_overflow_libcom Flag Overflow = 0; #endif @@ -372,7 +372,7 @@ void hp20_fx_32( #endif - diff = L_max( diff_pos, diff_neg ); + diff = s_max( diff_pos, diff_neg ); IF( NE_16( diff, 0 ) ) { -- GitLab From 6edb20e0affdbcbc2731486c817d933bc8ff30e1 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 5 Sep 2025 16:08:31 +0200 Subject: [PATCH 4/7] removed DEBUG prints incl. macros --- lib_com/hp50_fx.c | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c index 9c83fba54..b3e401edd 100644 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -338,9 +338,8 @@ void hp20( Word16 signal[], /* i/o: signal to filter any * return; } +/* Can be moved to options.h */ #define HP20_FIX32_RECODING -//#define HP20_INCR_NEGATIVE_SMP -#define DEBUG_hp20_fx #ifdef HP20_FIX32_RECODING void hp20_fx_32( @@ -462,17 +461,8 @@ void hp20_fx_32( W_sum = W_mac_32_32( W_sum, mem_fx[1], a1_fx ); /* y1*a1 */ W_y2 = W_shl( W_sum, HP20_COEFF_SCALE ); signal_fx_i = W_extract_h( W_shl( W_y2, prescale ) ); -#ifdef HP20_INCR_NEGATIVE_SMP - if ( signal_fx_i < 0 ) - { - signal_fx_i = L_add( signal_fx_i, 1 ); - } -#endif signal_fx[0] = signal_fx_i; move32(); -#ifdef DEBUG_hp20_fx - printf( "signal_fx[%3d] = 0x%08X\n", (int) 0, signal_fx[0] ); -#endif W_sum = W_mult_32_32( b2_fx, mem_fx[3] ); /* b2*x2 */ W_sum = W_mac_32_32( W_sum, b1_fx, x2 ); /* b1*x1 */ @@ -482,17 +472,8 @@ void hp20_fx_32( W_sum = W_mac_32_32( W_sum, W_extract_h( W_y2 ), a1_fx ); /* y1*a1 */ W_y1 = W_shl( W_sum, HP20_COEFF_SCALE ); signal_fx_i = W_extract_h( W_shl( W_y1, prescale ) ); -#ifdef HP20_INCR_NEGATIVE_SMP - if ( signal_fx_i < 0 ) - { - signal_fx_i = L_add( signal_fx_i, 1 ); - } -#endif signal_fx[1] = signal_fx_i; move32(); -#ifdef DEBUG_hp20_fx - printf( "signal_fx[%3d] = 0x%08X\n", (int) 1, signal_fx[1] ); -#endif diff = sub( prescale_current_frame, prescale ); W_y1 = W_shr( W_y1, diff ); @@ -511,17 +492,8 @@ void hp20_fx_32( W_y0 = W_shl( W_sum, HP20_COEFF_SCALE ); signal_fx_i = W_extract_h( W_shl( W_y0, prescale_current_frame ) ); -#ifdef HP20_INCR_NEGATIVE_SMP - if ( signal_fx_i < 0 ) - { - signal_fx_i = L_add( signal_fx_i, 1 ); - } -#endif signal_fx[i] = signal_fx_i; move32(); -#ifdef DEBUG_hp20_fx - printf( "signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i] ); -#endif x2 = x1; x1 = x0; @@ -682,17 +654,12 @@ void hp20_fx_32( y0_fx64 = W_shr( y0_fx64, 29 ); signal_fx_i = W_extract_l( W_shr( y0_fx64, Qmin ) ); -#ifdef HP20_INCR_NEGATIVE_SMP if ( signal_fx_i < 0 ) { signal_fx_i = L_add( signal_fx_i, 1 ); } -#endif signal_fx[i] = signal_fx_i; move32(); -#ifdef DEBUG_hp20_fx - printf( "signal_fx[%3d] = 0x%08X\n", (int) i, signal_fx[i] ); -#endif y2_fx64 = y1_fx64; y1_fx64 = y0_fx64; -- GitLab From 96e45770ec89da1c9e4ef7beaf6eeb25352613a1 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 8 Sep 2025 20:39:57 +0200 Subject: [PATCH 5/7] new trial with s_min operation (replaces s_max) in line 375 --- lib_com/hp50_fx.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 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 b3e401edd..d2fef46f9 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -340,6 +340,7 @@ void hp20( Word16 signal[], /* i/o: signal to filter any * /* Can be moved to options.h */ #define HP20_FIX32_RECODING +//#define DEBUG_hp20 #ifdef HP20_FIX32_RECODING void hp20_fx_32( @@ -371,16 +372,23 @@ void hp20_fx_32( #endif - diff = s_max( diff_pos, diff_neg ); + diff = s_min( diff_pos, diff_neg ); IF( NE_16( diff, 0 ) ) { +#ifdef DEBUG_hp20 + printf( "diff1: %d diff_pos=%d diff_neg=%d mem_fx[2]=0x%08X mem_fx[3]=0x%08X prescale=%d prescaleOld=%d\n", diff, diff_pos, diff_neg, mem_fx[2], mem_fx[3], prescale, prescaleOld ); +#endif prescale = s_min( prescale, diff ); } prescale = s_min( 3, sub( 1 + HP20_COEFF_SCALE, prescale ) ); diff = sub( prescale, prescaleOld ); +#ifdef DEBUG_hp20 + printf( "diff2: %d prescale=%d prescaleOld=%d\n", diff, prescale, prescaleOld ); +#endif + #ifdef ISSUE_1836_replace_overflow_libcom mem_fx[0] = L_shr_sat( mem_fx[0], diff ); move32(); @@ -453,6 +461,11 @@ void hp20_fx_32( Word64 W_sum, W_y0, W_y1, W_y2; Word32 x0, x1, x2; +#ifdef DEBUG_hp20 + printf( "a1=0x%08X a2=0x%08X -- b1=0x%08X b2=0x%08X\n", a1_fx, a2_fx, b1_fx, b2_fx ); + printf( "diff3: Prescale: %d (prescale_current_frame=%d)\n", getScaleFactor32( signal_fx, lg), prescale_current_frame ); +#endif + W_sum = W_mult_32_32( b2_fx, mem_fx[2] ); /* b2*x2 */ W_sum = W_mac_32_32( W_sum, b1_fx, mem_fx[3] ); /* b1*x1 */ x2 = L_shr( signal_fx[0], prescale ); @@ -463,6 +476,9 @@ void hp20_fx_32( signal_fx_i = W_extract_h( W_shl( W_y2, prescale ) ); signal_fx[0] = signal_fx_i; move32(); +#ifdef DEBUG_hp20 + printf( "signal[%3d] = 0x%08X (0x%016llX << %d = 0x%016llX)\n", 0, signal_fx[0], W_y2, prescale, W_shl( W_y2, prescale ) ); +#endif W_sum = W_mult_32_32( b2_fx, mem_fx[3] ); /* b2*x2 */ W_sum = W_mac_32_32( W_sum, b1_fx, x2 ); /* b1*x1 */ @@ -474,6 +490,9 @@ void hp20_fx_32( signal_fx_i = W_extract_h( W_shl( W_y1, prescale ) ); signal_fx[1] = signal_fx_i; move32(); +#ifdef DEBUG_hp20 + printf( "signal[%3d] = 0x%08X (0x%016llX << %d = 0x%016llX)\n", 1, signal_fx[1], W_y1, prescale, W_shl( W_y1, prescale ) ); +#endif diff = sub( prescale_current_frame, prescale ); W_y1 = W_shr( W_y1, diff ); @@ -494,6 +513,9 @@ void hp20_fx_32( signal_fx_i = W_extract_h( W_shl( W_y0, prescale_current_frame ) ); signal_fx[i] = signal_fx_i; move32(); +#ifdef DEBUG_hp20 + printf( "signal[%3d] = 0x%08X (0x%016llX << %d = 0x%016llX)\n", i, signal_fx[i], W_y0, prescale_current_frame, W_shl( W_y0, prescale_current_frame ) ); +#endif x2 = x1; x1 = x0; @@ -526,7 +548,7 @@ void hp20_fx_32( const Word32 Fs ) { Word16 i; - Word32 a1_fx, a2_fx, b1_fx, b2_fx; + Word32 a1_fx, a2_fx, b1_fx, b2_fx, signal_fx_i; Word16 Qx0, Qx1, Qx2, Qy1, Qprev_y1, Qy2, Qprev_y2, Qmin; Word64 x0_fx64, x1_fx64, x2_fx64, y0_fx64, y1_fx64, y2_fx64, R1, R2, R3, R4, R5; @@ -579,6 +601,11 @@ void hp20_fx_32( move32(); move32(); +#ifdef DEBUG_hp20 + printf( "a1=0x%08X a2=0x%08X -- b1=0x%08X b2=0x%08X\n", a1_fx, a2_fx, b1_fx, b2_fx ); + printf( "Prescale: %d\n", getScaleFactor32( signal_fx, lg ) ); +#endif + Qprev_y1 = extract_l( mem_fx[4] ); Qprev_y2 = extract_l( mem_fx[5] ); y1_fx64 = W_deposit32_l( mem_fx[0] ); @@ -660,6 +687,9 @@ void hp20_fx_32( } signal_fx[i] = signal_fx_i; move32(); +#ifdef DEBUG_hp20 + printf( "signal[%3d] = 0x%08X (0x%016llX >> %d = 0x%016llX)\n", i, signal_fx[i], y0_fx64, Qmin, W_shr( y0_fx64, Qmin ) ); +#endif y2_fx64 = y1_fx64; y1_fx64 = y0_fx64; @@ -694,6 +724,10 @@ void hp20_fx_32( mem_fx[4] = Qprev_y1; mem_fx[5] = Qprev_y2; +#ifdef DEBUG_hp20 + printf("Headroom: %d\n", getScaleFactor32( signal_fx, lg )); +#endif + move32(); move32(); move32(); -- GitLab From b3ca14aa5e96be263118fcd2cc34c6547e25aa02 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 8 Sep 2025 20:49:01 +0200 Subject: [PATCH 6/7] fix clang format --- lib_com/hp50_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100755 => 100644 lib_com/hp50_fx.c diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c old mode 100755 new mode 100644 index d2fef46f9..132e48c56 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -463,7 +463,7 @@ void hp20_fx_32( #ifdef DEBUG_hp20 printf( "a1=0x%08X a2=0x%08X -- b1=0x%08X b2=0x%08X\n", a1_fx, a2_fx, b1_fx, b2_fx ); - printf( "diff3: Prescale: %d (prescale_current_frame=%d)\n", getScaleFactor32( signal_fx, lg), prescale_current_frame ); + printf( "diff3: Prescale: %d (prescale_current_frame=%d)\n", getScaleFactor32( signal_fx, lg ), prescale_current_frame ); #endif W_sum = W_mult_32_32( b2_fx, mem_fx[2] ); /* b2*x2 */ @@ -725,7 +725,7 @@ void hp20_fx_32( mem_fx[5] = Qprev_y2; #ifdef DEBUG_hp20 - printf("Headroom: %d\n", getScaleFactor32( signal_fx, lg )); + printf( "Headroom: %d\n", getScaleFactor32( signal_fx, lg ) ); #endif move32(); -- GitLab From f4ea34edb012806e3b0d42ae58da3ca887fa2f4d Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 8 Sep 2025 22:08:10 +0200 Subject: [PATCH 7/7] re-deactivated HP20_FIX32_RECODING to check pipeline results --- lib_com/hp50_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 132e48c56..7a63914f6 --- a/lib_com/hp50_fx.c +++ b/lib_com/hp50_fx.c @@ -339,7 +339,7 @@ void hp20( Word16 signal[], /* i/o: signal to filter any * } /* Can be moved to options.h */ -#define HP20_FIX32_RECODING +//#define HP20_FIX32_RECODING //#define DEBUG_hp20 #ifdef HP20_FIX32_RECODING -- GitLab