From 3ae58efb0446e92dbc19af0bd38ff01ee3b3a394 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 21 Jul 2025 18:04:02 +0200 Subject: [PATCH 1/9] limited call of W_shr to max. 63, was up to 100 --- lib_com/ivas_spar_com_fx.c | 4 ++++ lib_com/options.h | 2 ++ lib_dec/ivas_lfe_plc_fx.c | 4 ++++ lib_dec/ivas_svd_dec_fx.c | 4 ++++ lib_enc/ivas_mdct_core_enc_fx.c | 4 ++++ 5 files changed, 18 insertions(+) mode change 100644 => 100755 lib_com/ivas_spar_com_fx.c mode change 100644 => 100755 lib_com/options.h mode change 100644 => 100755 lib_dec/ivas_lfe_plc_fx.c mode change 100644 => 100755 lib_dec/ivas_svd_dec_fx.c mode change 100644 => 100755 lib_enc/ivas_mdct_core_enc_fx.c diff --git a/lib_com/ivas_spar_com_fx.c b/lib_com/ivas_spar_com_fx.c old mode 100644 new mode 100755 index 361215e22..e92e86566 --- a/lib_com/ivas_spar_com_fx.c +++ b/lib_com/ivas_spar_com_fx.c @@ -802,7 +802,11 @@ static void ivas_get_pred_coeffs_enc_fx( tmp64 = W_mult0_32_32( w_norm_fac, dm_w ); // Q=q_tmp IF( LT_16( q_tmp, q_cov_real[0][0][b] ) ) { +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + tmp64 = W_shr( tmp64, Min(63, sub( q_cov_real[0][0][b], q_tmp ) ) ); // Q=q_tmp +#else tmp64 = W_shr( tmp64, sub( q_cov_real[0][0][b], q_tmp ) ); // Q=q_tmp +#endif } ELSE { diff --git a/lib_com/options.h b/lib_com/options.h old mode 100644 new mode 100755 index 14b1c5eb8..ab5d3a679 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -148,4 +148,6 @@ #define FIX_1824 #define FIX_1822 +#define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + #endif diff --git a/lib_dec/ivas_lfe_plc_fx.c b/lib_dec/ivas_lfe_plc_fx.c old mode 100644 new mode 100755 index a480ce7be..6614d42f9 --- a/lib_dec/ivas_lfe_plc_fx.c +++ b/lib_dec/ivas_lfe_plc_fx.c @@ -646,7 +646,11 @@ static void d_syn_filt_fx( } ELSE { +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + s_fx = W_sub( W_shr( s_fx, Min( 63, sub( s_q_fx, temp_q ) ) ), temp ); +#else s_fx = W_sub( W_shr( s_fx, sub( s_q_fx, temp_q ) ), temp ); +#endif s_q_fx = temp_q; move16(); } diff --git a/lib_dec/ivas_svd_dec_fx.c b/lib_dec/ivas_svd_dec_fx.c old mode 100644 new mode 100755 index ba65c4b7b..41826b650 --- a/lib_dec/ivas_svd_dec_fx.c +++ b/lib_dec/ivas_svd_dec_fx.c @@ -1265,7 +1265,11 @@ static void singularVectorsAccumulationLeft_fx( FOR( k = nCh + 1; k < nChannelsL; k++ ) /* nChannelsL */ { +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + acc = W_add( acc, W_shr( prod[k], Min( 63, sub( max_e, prod_e[k] ) ) ) ); +#else acc = W_add( acc, W_shr( prod[k], sub( max_e, prod_e[k] ) ) ); +#endif } Word16 acc_e = W_norm( acc ); acc = W_shl( acc, acc_e ); diff --git a/lib_enc/ivas_mdct_core_enc_fx.c b/lib_enc/ivas_mdct_core_enc_fx.c old mode 100644 new mode 100755 index 4d8bc7b99..63458e46c --- a/lib_enc/ivas_mdct_core_enc_fx.c +++ b/lib_enc/ivas_mdct_core_enc_fx.c @@ -1964,7 +1964,11 @@ void ivas_mdct_core_whitening_enc_fx( move64(); FOR( i = 0; i < NB_DIV; i++ ) { +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + chE_tot_fx = W_add( W_shr( chE_fx[i], Min(63, sub( chE_q[i], q ) ) ), chE_tot_fx ); +#else chE_tot_fx = W_add( W_shr( chE_fx[i], sub( chE_q[i], q ) ), chE_tot_fx ); +#endif } IF( GT_16( q, Q24 ) ) { -- GitLab From 07a9f0d5c5e1b907bac64d91980398b63a6cb5a0 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 21 Jul 2025 19:52:38 +0200 Subject: [PATCH 2/9] added s_min/s_max around shift a,ount --- lib_com/ivas_spar_com_fx.c | 2 +- lib_com/swb_tbe_com_fx.c | 4 ++++ lib_com/tns_base.c | 5 ++++- lib_dec/ivas_lfe_plc_fx.c | 2 +- lib_enc/ivas_mdct_core_enc_fx.c | 2 +- lib_enc/nois_est_fx.c | 4 ++++ lib_rend/ivas_dirac_dec_binaural_functions_fx.c | 7 +++++++ 7 files changed, 22 insertions(+), 4 deletions(-) mode change 100644 => 100755 lib_com/swb_tbe_com_fx.c mode change 100644 => 100755 lib_com/tns_base.c mode change 100644 => 100755 lib_enc/nois_est_fx.c mode change 100644 => 100755 lib_rend/ivas_dirac_dec_binaural_functions_fx.c diff --git a/lib_com/ivas_spar_com_fx.c b/lib_com/ivas_spar_com_fx.c index e92e86566..e23f92969 100755 --- a/lib_com/ivas_spar_com_fx.c +++ b/lib_com/ivas_spar_com_fx.c @@ -803,7 +803,7 @@ static void ivas_get_pred_coeffs_enc_fx( IF( LT_16( q_tmp, q_cov_real[0][0][b] ) ) { #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS - tmp64 = W_shr( tmp64, Min(63, sub( q_cov_real[0][0][b], q_tmp ) ) ); // Q=q_tmp + tmp64 = W_shr( tmp64, s_min(63, sub( q_cov_real[0][0][b], q_tmp ) ) ); // Q=q_tmp #else tmp64 = W_shr( tmp64, sub( q_cov_real[0][0][b], q_tmp ) ); // Q=q_tmp #endif diff --git a/lib_com/swb_tbe_com_fx.c b/lib_com/swb_tbe_com_fx.c old mode 100644 new mode 100755 index 2ca52b8e4..71746b6a9 --- a/lib_com/swb_tbe_com_fx.c +++ b/lib_com/swb_tbe_com_fx.c @@ -6747,7 +6747,11 @@ void synthesise_fb_high_band_fx( Word64 W_temp; t_Q = sub( shl( exp_tmp, 1 ), 8 ); +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + P_ONE = W_shl( P_ONE, s_min( 63, sub( t_Q, 15 ) ) ); +#else P_ONE = W_shl( P_ONE, sub( t_Q, 15 ) ); +#endif W_temp = W_add( P_ONE, temp1 ); diff --git a/lib_com/tns_base.c b/lib_com/tns_base.c old mode 100644 new mode 100755 index 376e2813d..8b73bdaf2 --- a/lib_com/tns_base.c +++ b/lib_com/tns_base.c @@ -646,8 +646,11 @@ Word16 ITF_Detect_ivas_fx( { sum = W_mac_32_32( sum, temp_spectrum[i], temp_spectrum[i] ); // 2(Q+shift)+1 } - +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + IF( LE_64( sum, W_shl( 32768 * 2 /* HLM_MIN_NRG in Q1 */, s_min( 63, shl( add( Q, shift ), 1 ) ) ) ) ) +#else IF( LE_64( sum, W_shl( 32768 * 2 /* HLM_MIN_NRG in Q1 */, shl( add( Q, shift ), 1 ) ) ) ) +#endif { BREAK; } diff --git a/lib_dec/ivas_lfe_plc_fx.c b/lib_dec/ivas_lfe_plc_fx.c index 6614d42f9..2510ded15 100755 --- a/lib_dec/ivas_lfe_plc_fx.c +++ b/lib_dec/ivas_lfe_plc_fx.c @@ -647,7 +647,7 @@ static void d_syn_filt_fx( ELSE { #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS - s_fx = W_sub( W_shr( s_fx, Min( 63, sub( s_q_fx, temp_q ) ) ), temp ); + s_fx = W_sub( W_shr( s_fx, s_min( 63, sub( s_q_fx, temp_q ) ) ), temp ); #else s_fx = W_sub( W_shr( s_fx, sub( s_q_fx, temp_q ) ), temp ); #endif diff --git a/lib_enc/ivas_mdct_core_enc_fx.c b/lib_enc/ivas_mdct_core_enc_fx.c index 63458e46c..29b32174e 100755 --- a/lib_enc/ivas_mdct_core_enc_fx.c +++ b/lib_enc/ivas_mdct_core_enc_fx.c @@ -1965,7 +1965,7 @@ void ivas_mdct_core_whitening_enc_fx( FOR( i = 0; i < NB_DIV; i++ ) { #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS - chE_tot_fx = W_add( W_shr( chE_fx[i], Min(63, sub( chE_q[i], q ) ) ), chE_tot_fx ); + chE_tot_fx = W_add( W_shr( chE_fx[i], s_min(63, sub( chE_q[i], q ) ) ), chE_tot_fx ); #else chE_tot_fx = W_add( W_shr( chE_fx[i], sub( chE_q[i], q ) ), chE_tot_fx ); #endif diff --git a/lib_enc/nois_est_fx.c b/lib_enc/nois_est_fx.c old mode 100644 new mode 100755 index 7fb58941b..f76f271e2 --- a/lib_enc/nois_est_fx.c +++ b/lib_enc/nois_est_fx.c @@ -2469,7 +2469,11 @@ void noise_est_ivas_fx( } num = div_s( num, den ); // Q15+ExpNum-ExpDen +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + w_tmp = W_shl( num, s_min( 63, sub( q_fr_bands, sub( ExpNum, ExpDen ) ) ) ); // q_fr_bands+15 +#else w_tmp = W_shl( num, sub( q_fr_bands, sub( ExpNum, ExpDen ) ) ); // q_fr_bands+15 +#endif w_sum_num = W_add( w_sum_num, w_tmp ); pt1++; diff --git a/lib_rend/ivas_dirac_dec_binaural_functions_fx.c b/lib_rend/ivas_dirac_dec_binaural_functions_fx.c old mode 100644 new mode 100755 index b33aec768..e37f497f1 --- a/lib_rend/ivas_dirac_dec_binaural_functions_fx.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions_fx.c @@ -3803,10 +3803,17 @@ static void matrixTransp1Mul_fx( { FOR( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) { +#ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS + outRe_fx[chA][chB] = W_extract_h( W_shl( tmp_outRe_fx[chA][chB], s_max( -63, sub( q_common, q_tmp_outRe_fx[chA][chB] ) ) ) ); + move32(); + outIm_fx[chA][chB] = W_extract_h( W_shl( tmp_outIm_fx[chA][chB], s_max( -63, sub( q_common, q_tmp_outIm_fx[chA][chB] ) ) ) ); + move32(); +#else outRe_fx[chA][chB] = W_extract_h( W_shl( tmp_outRe_fx[chA][chB], sub( q_common, q_tmp_outRe_fx[chA][chB] ) ) ); move32(); outIm_fx[chA][chB] = W_extract_h( W_shl( tmp_outIm_fx[chA][chB], sub( q_common, q_tmp_outIm_fx[chA][chB] ) ) ); move32(); +#endif } } *q_out = sub( q_common, 32 ); -- GitLab From 8038e950587495a90abc89bbff765fb54e5c62d0 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 21 Jul 2025 20:01:07 +0200 Subject: [PATCH 3/9] limit W_shl params --- lib_dec/ivas_svd_dec_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_svd_dec_fx.c b/lib_dec/ivas_svd_dec_fx.c index 41826b650..1898d4258 100755 --- a/lib_dec/ivas_svd_dec_fx.c +++ b/lib_dec/ivas_svd_dec_fx.c @@ -1266,7 +1266,7 @@ static void singularVectorsAccumulationLeft_fx( FOR( k = nCh + 1; k < nChannelsL; k++ ) /* nChannelsL */ { #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS - acc = W_add( acc, W_shr( prod[k], Min( 63, sub( max_e, prod_e[k] ) ) ) ); + acc = W_add( acc, W_shr( prod[k], s_min( 63, sub( max_e, prod_e[k] ) ) ) ); #else acc = W_add( acc, W_shr( prod[k], sub( max_e, prod_e[k] ) ) ); #endif -- GitLab From ee3f040ef39ded2c7a6d75778e50062bc78f442a Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 21 Jul 2025 20:06:45 +0200 Subject: [PATCH 4/9] fix clang-format --- lib_com/ivas_spar_com_fx.c | 2 +- lib_enc/ivas_mdct_core_enc_fx.c | 2 +- lib_enc/nois_est_fx.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) mode change 100755 => 100644 lib_com/ivas_spar_com_fx.c mode change 100755 => 100644 lib_enc/ivas_mdct_core_enc_fx.c mode change 100755 => 100644 lib_enc/nois_est_fx.c diff --git a/lib_com/ivas_spar_com_fx.c b/lib_com/ivas_spar_com_fx.c old mode 100755 new mode 100644 index e23f92969..79f33d0dc --- a/lib_com/ivas_spar_com_fx.c +++ b/lib_com/ivas_spar_com_fx.c @@ -803,7 +803,7 @@ static void ivas_get_pred_coeffs_enc_fx( IF( LT_16( q_tmp, q_cov_real[0][0][b] ) ) { #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS - tmp64 = W_shr( tmp64, s_min(63, sub( q_cov_real[0][0][b], q_tmp ) ) ); // Q=q_tmp + tmp64 = W_shr( tmp64, s_min( 63, sub( q_cov_real[0][0][b], q_tmp ) ) ); // Q=q_tmp #else tmp64 = W_shr( tmp64, sub( q_cov_real[0][0][b], q_tmp ) ); // Q=q_tmp #endif diff --git a/lib_enc/ivas_mdct_core_enc_fx.c b/lib_enc/ivas_mdct_core_enc_fx.c old mode 100755 new mode 100644 index 29b32174e..e3da229c3 --- a/lib_enc/ivas_mdct_core_enc_fx.c +++ b/lib_enc/ivas_mdct_core_enc_fx.c @@ -1965,7 +1965,7 @@ void ivas_mdct_core_whitening_enc_fx( FOR( i = 0; i < NB_DIV; i++ ) { #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS - chE_tot_fx = W_add( W_shr( chE_fx[i], s_min(63, sub( chE_q[i], q ) ) ), chE_tot_fx ); + chE_tot_fx = W_add( W_shr( chE_fx[i], s_min( 63, sub( chE_q[i], q ) ) ), chE_tot_fx ); #else chE_tot_fx = W_add( W_shr( chE_fx[i], sub( chE_q[i], q ) ), chE_tot_fx ); #endif diff --git a/lib_enc/nois_est_fx.c b/lib_enc/nois_est_fx.c old mode 100755 new mode 100644 index f76f271e2..4142267d0 --- a/lib_enc/nois_est_fx.c +++ b/lib_enc/nois_est_fx.c @@ -2468,7 +2468,7 @@ void noise_est_ivas_fx( ExpDen = sub( add( q_fr_bands, exp ), Q16 ); } - num = div_s( num, den ); // Q15+ExpNum-ExpDen + num = div_s( num, den ); // Q15+ExpNum-ExpDen #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS w_tmp = W_shl( num, s_min( 63, sub( q_fr_bands, sub( ExpNum, ExpDen ) ) ) ); // q_fr_bands+15 #else -- GitLab From ca448ee0aafe768dd606c36eb3a3744a7c55dc27 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Sun, 3 Aug 2025 16:08:43 +0200 Subject: [PATCH 5/9] editorial --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 83867cf5c..17cdfe9bd 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -87,7 +87,7 @@ #define FIX_1824 #define FIX_1822 -#define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS +#define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS /* FhG: limit exceeding 64-bit shifts */ /* #################### Start BASOP porting switches ############################ */ -- GitLab From 4655feb7a96dc8d7fe612f8c14e2f0fdae01ad44 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Sun, 3 Aug 2025 17:32:22 +0200 Subject: [PATCH 6/9] editorial --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 17cdfe9bd..24aa140a7 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -87,7 +87,7 @@ #define FIX_1824 #define FIX_1822 -#define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS /* FhG: limit exceeding 64-bit shifts */ +#define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS /* FhG: limit exceeding 64bit shifts */ /* #################### Start BASOP porting switches ############################ */ -- GitLab From facc81e05abf70433d0703daff764f7d2a18b9e3 Mon Sep 17 00:00:00 2001 From: gerstack Date: Mon, 4 Aug 2025 17:57:42 +0200 Subject: [PATCH 7/9] ISSUE_1811_EXCEEDING_W_SHIFTS, W_shl() shift limited to 63 --- lib_rend/ivas_objectRenderer_sfx_fx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib_rend/ivas_objectRenderer_sfx_fx.c b/lib_rend/ivas_objectRenderer_sfx_fx.c index 8967b89a2..a1b8da354 100644 --- a/lib_rend/ivas_objectRenderer_sfx_fx.c +++ b/lib_rend/ivas_objectRenderer_sfx_fx.c @@ -229,7 +229,11 @@ static void sincResample_fx( /* Calculate the sinc-index for the center value of the sinc */ Word16 center_val_e; Word64 center_val; +#ifndef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS center_val = W_sub( t_frac_plus_eps, W_shl( t, sub( 31, t_frac_plus_eps_e ) ) ); // exp(center_val_e) +#else + center_val = W_sub( t_frac_plus_eps, W_shl( t, s_min( sub( 31, t_frac_plus_eps_e ), 63 ) ) ); // exp(center_val_e) +#endif center_val_e = add( t_frac_plus_eps_e, 6 ); Word16 com_e = s_max( 0, center_val_e ); center_val = W_add( W_shr( center_val, sub( com_e, center_val_e ) ), W_shl( 1, sub( 30, com_e ) ) ); // exp(center_val_e) -- GitLab From 342b77c2b61bcaa84c4d11843c3c12602a89153d Mon Sep 17 00:00:00 2001 From: gerstack Date: Mon, 4 Aug 2025 18:12:37 +0200 Subject: [PATCH 8/9] ISSUE_1811_EXCEEDING_W_SHIFTS, W_shl() shift limited to 63, merged with main --- lib_rend/ivas_objectRenderer_sfx_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_objectRenderer_sfx_fx.c b/lib_rend/ivas_objectRenderer_sfx_fx.c index a1b8da354..804b9b6da 100644 --- a/lib_rend/ivas_objectRenderer_sfx_fx.c +++ b/lib_rend/ivas_objectRenderer_sfx_fx.c @@ -232,7 +232,7 @@ static void sincResample_fx( #ifndef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS center_val = W_sub( t_frac_plus_eps, W_shl( t, sub( 31, t_frac_plus_eps_e ) ) ); // exp(center_val_e) #else - center_val = W_sub( t_frac_plus_eps, W_shl( t, s_min( sub( 31, t_frac_plus_eps_e ), 63 ) ) ); // exp(center_val_e) + center_val = W_sub( t_frac_plus_eps, W_shl( t, s_min( sub( 31, t_frac_plus_eps_e ), 63 ) ) ); // exp( center_val_e ) #endif center_val_e = add( t_frac_plus_eps_e, 6 ); Word16 com_e = s_max( 0, center_val_e ); -- GitLab From f8d69f355995ddadeaed25ff0b34d3821991cae8 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Tue, 19 Aug 2025 20:08:06 +0200 Subject: [PATCH 9/9] formatting --- lib_enc/nois_est_fx.c | 2 +- lib_rend/ivas_objectRenderer_sfx_fx.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/nois_est_fx.c b/lib_enc/nois_est_fx.c index 88c490702..ec3582003 100644 --- a/lib_enc/nois_est_fx.c +++ b/lib_enc/nois_est_fx.c @@ -2476,7 +2476,7 @@ void noise_est_ivas_fx( #ifdef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS w_tmp = W_shl( num, s_min( 63, sub( q_fr_bands, sub( ExpNum, ExpDen ) ) ) ); // q_fr_bands+15 #else - w_tmp = W_shl( num, sub( q_fr_bands, sub( ExpNum, ExpDen ) ) ); // q_fr_bands+15 + w_tmp = W_shl( num, sub( q_fr_bands, sub( ExpNum, ExpDen ) ) ); // q_fr_bands+15 #endif w_sum_num = W_add( w_sum_num, w_tmp ); diff --git a/lib_rend/ivas_objectRenderer_sfx_fx.c b/lib_rend/ivas_objectRenderer_sfx_fx.c index 3ad7ba528..de2879370 100644 --- a/lib_rend/ivas_objectRenderer_sfx_fx.c +++ b/lib_rend/ivas_objectRenderer_sfx_fx.c @@ -232,7 +232,7 @@ static void sincResample_fx( #ifndef FIX_ISSUE_1811_EXCEEDING_W_SHIFTS center_val = W_sub( t_frac_plus_eps, W_shl( t, sub( 31, t_frac_plus_eps_e ) ) ); // exp(center_val_e) #else - center_val = W_sub( t_frac_plus_eps, W_shl( t, s_min( sub( 31, t_frac_plus_eps_e ), 63 ) ) ); // exp( center_val_e ) + center_val = W_sub( t_frac_plus_eps, W_shl( t, s_min( sub( 31, t_frac_plus_eps_e ), 63 ) ) ); // exp( center_val_e ) #endif center_val_e = add( t_frac_plus_eps_e, 6 ); Word16 com_e = s_max( 0, center_val_e ); -- GitLab