Skip to content
Commits on Source (3)
......@@ -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, 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
}
ELSE
{
......
......@@ -148,4 +148,6 @@
#define FIX_1824
#define FIX_1822
#define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS
#endif
......@@ -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 );
......
......@@ -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;
}
......
......@@ -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, 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
s_q_fx = temp_q;
move16();
}
......
......@@ -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], 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
}
Word16 acc_e = W_norm( acc );
acc = W_shl( acc, acc_e );
......
......@@ -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], 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
}
IF( GT_16( q, Q24 ) )
{
......
......@@ -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++;
......
......@@ -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 );
......