From 31823244ee0f507e4e18b4a5ef642c72171b272d Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 15 Apr 2026 11:21:42 +0200 Subject: [PATCH 01/17] add macro HARMONIZE_2539_cng_energy and some code to test --- lib_com/options.h | 2 +- lib_enc/fd_cng_enc_fx.c | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 5f27f69da..7b5b67981 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -97,7 +97,7 @@ #define FIX_BASOP_2509_EVS_CONCEAL_UNINIT_MEM /* FhG: BASOP 2509: st->hTcxCfg->psychParamsCurrent is not initialized */ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ - +#define HARMONIZE_2539_cng_energy /* FhG: basop issue 2499: harmonoize cng_energy */ /* #################### End BE switches ################################## */ diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 21f740c66..959e0deb0 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1205,7 +1205,11 @@ Word16 cng_energy_fx( tmp16 = shl( *pt_res, scale ); L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; +#ifdef HARMONIZE_2539_cng_energy + L_ener = L_msu( L_ener, L_tmp, L_shr( 0x8000000, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#endif } } ELSE /* L_FRAME16k */ @@ -1218,10 +1222,16 @@ Word16 cng_energy_fx( tmp16 = shl( *pt_res, scale ); L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; +#ifdef HARMONIZE_2539_cng_energy + L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x80000000, 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#endif } } - +#ifdef HARMONIZE_2539_cng_energy + L_ener = L_negate( L_ener ); +#endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); hi = sub( 30, add( hi, shl( add( Q_new, scale ), 1 ) ) ); /* log2 exp in Q2*(Q_new+scale) */ @@ -1301,7 +1311,11 @@ Word16 cng_energy_ivas_fx( tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) + 7 */ pt_res++; +#ifdef HARMONIZE_2539_cng_energy + L_ener = L_msu( L_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#else L_ener = L_add( L_ener, L_tmp ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#endif } } ELSE /* L_FRAME16k */ @@ -1314,10 +1328,16 @@ Word16 cng_energy_ivas_fx( tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ pt_res++; +#ifdef HARMONIZE_2539_cng_energy + L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#endif } } - +#ifdef HARMONIZE_2539_cng_energy + L_ener = L_negate( L_ener ); +#endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); hi = sub( 30, add( hi, shl( add( Q_new, scale ), 1 ) ) ); /* log2 exp in Q2*(Q_new+scale) */ -- GitLab From 9ffeb1b5a2262bb1494c955cc3420952052ba0a0 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 15 Apr 2026 11:31:22 +0200 Subject: [PATCH 02/17] fix type conversion warning --- lib_enc/fd_cng_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 959e0deb0..f773b4677 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1223,7 +1223,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x80000000, 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif @@ -1329,7 +1329,7 @@ Word16 cng_energy_ivas_fx( L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x8000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif -- GitLab From 9ed82aa8d11b3cab703a7c273800bc237dba204f Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 15 Apr 2026 11:54:50 +0200 Subject: [PATCH 03/17] fix calculation to 64bit --- lib_enc/fd_cng_enc_fx.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index f773b4677..b047f70c3 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1185,6 +1185,10 @@ Word16 cng_energy_fx( Word16 hi, lo, enr, tmp16, att; const Word16 *pt_res; Word32 L_ener, L_tmp; +#ifdef HARMONIZE_2539_cng_energy + Word64 W_ener = 0; + move64(); +#endif maxv = 0; move16(); @@ -1206,7 +1210,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = L_msu( L_ener, L_tmp, L_shr( 0x8000000, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, L_tmp, L_shr( 0x8000000, 7-1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1223,14 +1227,14 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + L_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7-1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy - L_ener = L_negate( L_ener ); + L_ener = W_extract_h( W_neg( W_ener ) ); #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); @@ -1291,6 +1295,10 @@ Word16 cng_energy_ivas_fx( Word16 hi, lo, enr, tmp16, att; const Word16 *pt_res; Word32 L_ener, L_tmp; +#ifdef HARMONIZE_2539_cng_energy + Word64 W_ener = 0; + move64(); +#endif maxv = 0; move16(); @@ -1312,7 +1320,7 @@ Word16 cng_energy_ivas_fx( L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) + 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = L_msu( L_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_tmp ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1329,14 +1337,14 @@ Word16 cng_energy_ivas_fx( L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = L_msu( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x8000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy - L_ener = L_negate( L_ener ); + L_ener = L_shl( W_extract_h( W_neg( W_ener ) ), 1 ); #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); -- GitLab From 45bed60586a92eacc2d3fc526ed5445835ae9787 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 15 Apr 2026 11:58:44 +0200 Subject: [PATCH 04/17] clang patch --- lib_enc/fd_cng_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index b047f70c3..8d70d6bfa 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1210,7 +1210,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_msu0_32_32( W_ener, L_tmp, L_shr( 0x8000000, 7-1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, L_tmp, L_shr( 0x8000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1227,7 +1227,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7-1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + L_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif -- GitLab From 5975ee1ccb11793c2ed4d7ed07b93a55367c0193 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 15 Apr 2026 12:02:19 +0200 Subject: [PATCH 05/17] git fix type --- lib_enc/fd_cng_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 8d70d6bfa..e72742caf 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1227,7 +1227,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - L_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif -- GitLab From ae9a7215d64d63be64539bc33e414b3cadcf9eb6 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 16 Apr 2026 07:13:02 +0200 Subject: [PATCH 06/17] change evs-branch: msu0->mac --- lib_enc/fd_cng_enc_fx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index e72742caf..c017de30e 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1210,7 +1210,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_msu0_32_32( W_ener, L_tmp, L_shr( 0x8000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ + W_ener = W_mac_32_32( W_ener, L_tmp, L_shr( 0x4000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1227,14 +1227,14 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x8000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + W_ener = W_mac_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x4000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy - L_ener = W_extract_h( W_neg( W_ener ) ); + L_ener = W_extract_h( W_ener ); #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); -- GitLab From a7fa3ade3cfc87ac5681503773e1af1c2558acea Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 16 Apr 2026 09:27:54 +0200 Subject: [PATCH 07/17] fix initialization --- lib_enc/fd_cng_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index c017de30e..3693d58ec 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1186,7 +1186,7 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy - Word64 W_ener = 0; + Word64 W_ener = W_deposit32_h(1); move64(); #endif @@ -1296,7 +1296,7 @@ Word16 cng_energy_ivas_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy - Word64 W_ener = 0; + Word64 W_ener = W_deposit32_h( 1 ); move64(); #endif -- GitLab From 4ab82e3a5f58304a9ad01873b636116e410bddc4 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 16 Apr 2026 09:32:41 +0200 Subject: [PATCH 08/17] clang format patch --- lib_enc/fd_cng_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 3693d58ec..5ddbfbb5d 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1186,7 +1186,7 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy - Word64 W_ener = W_deposit32_h(1); + Word64 W_ener = W_deposit32_h( 1 ); move64(); #endif -- GitLab From e8c55c6d29288b46ed522a51852d7ba7bcc5dc7f Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 16 Apr 2026 10:23:23 +0200 Subject: [PATCH 09/17] fix type --- lib_enc/fd_cng_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 5ddbfbb5d..4e92223d9 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1227,7 +1227,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_mac_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), shr( 0x4000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + W_ener = W_mac_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif -- GitLab From ce982e5b6c5e4ba5ba9533305b89cfd63dd46631 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 16 Apr 2026 11:43:03 +0200 Subject: [PATCH 10/17] fix hex number --- lib_enc/fd_cng_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 4e92223d9..31a9aaea7 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1210,7 +1210,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_mac_32_32( W_ener, L_tmp, L_shr( 0x4000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ + W_ener = W_mac_32_32( W_ener, L_tmp, L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif -- GitLab From 9add17a5efe24c8484315430425a820209e6e150 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 16 Apr 2026 15:01:16 +0200 Subject: [PATCH 11/17] fix ivas-path, set evs path to msu --- lib_enc/fd_cng_enc_fx.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 31a9aaea7..32419935a 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1186,7 +1186,7 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy - Word64 W_ener = W_deposit32_h( 1 ); + Word64 W_ener = W_neg( W_deposit32_h( 1 ) ); move64(); #endif @@ -1210,7 +1210,7 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_mac_32_32( W_ener, L_tmp, L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, L_tmp, L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1227,14 +1227,14 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_mac_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy - L_ener = W_extract_h( W_ener ); + L_ener = L_negate( W_extract_h( W_ener ) ); #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); @@ -1337,7 +1337,7 @@ Word16 cng_energy_ivas_fx( L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy - W_ener = W_msu0_32_32( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ + W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif -- GitLab From 790edf5f4e1b31402b4cf7cbc091c0684204080f Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 20 Apr 2026 06:22:32 +0200 Subject: [PATCH 12/17] compensate shift --- lib_enc/fd_cng_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 32419935a..c0b5c2b87 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1186,7 +1186,7 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy - Word64 W_ener = W_neg( W_deposit32_h( 1 ) ); + Word64 W_ener = W_neg( W_deposit32_h( L_shr( 1, 1 ) ) ); move64(); #endif @@ -1234,7 +1234,7 @@ Word16 cng_energy_fx( } } #ifdef HARMONIZE_2539_cng_energy - L_ener = L_negate( W_extract_h( W_ener ) ); + L_ener = L_shl( L_negate( W_extract_h( W_ener ) ), 1 ); #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); -- GitLab From 27330bcd088df96702e220d27a1d8fd3d8f6242f Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 20 Apr 2026 06:48:35 +0200 Subject: [PATCH 13/17] fix ivas path, add msu0 and mac macro switch --- lib_com/options.h | 4 ++++ lib_enc/fd_cng_enc_fx.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 76e0d9ab7..443faafc7 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -95,6 +95,10 @@ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ #define HARMONIZE_2539_cng_energy /* FhG: basop issue 2499: harmonoize cng_energy */ +#ifdef HARMONIZE_2539_cng_energy +#define HARMONIZE_2539_cng_energy_msu0 +//#define HARMONIZE_2539_cng_energy_mac +#endif /* #################### End BE switches ################################## */ diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index c0b5c2b87..92c642b3c 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1186,7 +1186,12 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 Word64 W_ener = W_neg( W_deposit32_h( L_shr( 1, 1 ) ) ); +#endif +#ifdef HARMONIZE_2539_cng_energy_mac + Word64 W_ener = W_deposit32_h( 1 ); +#endif move64(); #endif @@ -1210,7 +1215,12 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 W_ener = W_msu0_32_32( W_ener, L_tmp, L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#endif +#ifdef HARMONIZE_2539_cng_energy_mac + W_ener = W_mac_32_32( W_ener, L_tmp, L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#endif #else L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1227,14 +1237,24 @@ Word16 cng_energy_fx( L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */ pt_res++; #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#endif +#ifdef HARMONIZE_2539_cng_energy_mac + W_ener = W_mac_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), L_shr( 0x40000000, 7 - 1 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#endif #else L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 L_ener = L_shl( L_negate( W_extract_h( W_ener ) ), 1 ); +#endif +#ifdef HARMONIZE_2539_cng_energy_mac + L_ener = W_extract_h( W_ener ); +#endif #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); @@ -1296,7 +1316,12 @@ Word16 cng_energy_ivas_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 + Word64 W_ener = W_deposit32_h( L_shr( 1, 1 ) ); +#endif +#ifdef HARMONIZE_2539_cng_energy_mac Word64 W_ener = W_deposit32_h( 1 ); +#endif move64(); #endif @@ -1320,7 +1345,9 @@ Word16 cng_energy_ivas_fx( L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) + 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 W_ener = W_msu0_32_32( W_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ +#endif #else L_ener = L_add( L_ener, L_tmp ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif @@ -1337,14 +1364,18 @@ Word16 cng_energy_ivas_fx( L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ +#endif #else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy +#ifdef HARMONIZE_2539_cng_energy_msu0 L_ener = L_shl( W_extract_h( W_neg( W_ener ) ), 1 ); +#endif #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); -- GitLab From e45228d2d9e7e4e4a5404db6e366e81e9fb3807a Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 20 Apr 2026 08:12:01 +0200 Subject: [PATCH 14/17] fix initialization --- lib_enc/fd_cng_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 92c642b3c..6ecfc2494 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1187,7 +1187,7 @@ Word16 cng_energy_fx( Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 - Word64 W_ener = W_neg( W_deposit32_h( L_shr( 1, 1 ) ) ); + Word64 W_ener = W_shr( W_neg( W_deposit32_h( 1 ) ), 1 ); #endif #ifdef HARMONIZE_2539_cng_energy_mac Word64 W_ener = W_deposit32_h( 1 ); @@ -1317,7 +1317,7 @@ Word16 cng_energy_ivas_fx( Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 - Word64 W_ener = W_deposit32_h( L_shr( 1, 1 ) ); + Word64 W_ener = W_shr( W_deposit32_h( 1 ), 1 ); #endif #ifdef HARMONIZE_2539_cng_energy_mac Word64 W_ener = W_deposit32_h( 1 ); -- GitLab From 77a71a4913ec6846c365ed644a1c842235a9f456 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 20 Apr 2026 09:47:29 +0200 Subject: [PATCH 15/17] harmonize ivas-path further --- lib_enc/fd_cng_enc_fx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 6ecfc2494..4f5dbc94b 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1358,10 +1358,18 @@ Word16 cng_energy_ivas_fx( FOR( i = 0; i < 160; i++ ) { tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 +#ifdef HARMONIZE_2539_cng_energy + L_tmp = L_mult0( tmp16, tmp16 ); +#else L_tmp = L_mult( tmp16, tmp16 ); +#endif pt_res++; tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 +#ifdef HARMONIZE_2539_cng_energy + L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ +#else L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ +#endif pt_res++; #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 @@ -1375,6 +1383,10 @@ Word16 cng_energy_ivas_fx( #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 L_ener = L_shl( W_extract_h( W_neg( W_ener ) ), 1 ); + if( NE_16( len, L_FRAME ) ) + { + L_ener = L_shl( L_ener, 1 ); + } #endif #endif hi = norm_l( L_ener ); -- GitLab From 8bd08b60bf0633daa58d649a8f41181220c093d3 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 20 Apr 2026 09:57:19 +0200 Subject: [PATCH 16/17] clang format patch --- lib_enc/fd_cng_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 4f5dbc94b..18ce97632 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1368,7 +1368,7 @@ Word16 cng_energy_ivas_fx( #ifdef HARMONIZE_2539_cng_energy L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #else - L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ + L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #endif pt_res++; #ifdef HARMONIZE_2539_cng_energy @@ -1383,7 +1383,7 @@ Word16 cng_energy_ivas_fx( #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 L_ener = L_shl( W_extract_h( W_neg( W_ener ) ), 1 ); - if( NE_16( len, L_FRAME ) ) + if ( NE_16( len, L_FRAME ) ) { L_ener = L_shl( L_ener, 1 ); } -- GitLab From 338a470b5bc13b0414a8b6e2f5a13020560d5acb Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 20 Apr 2026 10:55:46 +0200 Subject: [PATCH 17/17] add st operation to ivas path to do more harmonization --- lib_enc/fd_cng_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 18ce97632..31137b565 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1366,7 +1366,7 @@ Word16 cng_energy_ivas_fx( pt_res++; tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 #ifdef HARMONIZE_2539_cng_energy - L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ + L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #else L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #endif -- GitLab