Loading lib_com/basop_util.c +3 −0 Original line number Diff line number Diff line Loading @@ -2089,6 +2089,8 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ return L_sum; } #ifndef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /* note: now available in basop_util.h */ Word32 w_norm_llQ31( Word64 L_sum, Word16 *exp ); Word32 w_norm_llQ31( /* o : normalized result Q31 */ Word64 L_sum, /* i : upper and lower bits of accu, unsigned Q31 */ Loading @@ -2115,6 +2117,7 @@ Word32 w_norm_llQ31( /* o : normalized result Q31 */ L_tmp = W_extract_h( L64_inp64 ); return L_tmp; } #endif Word32 Dot_product16HQ( /* o : normalized result Q31 */ const Word32 L_off, /* i : initial sum value Qn */ Loading lib_com/basop_util.h +17 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,23 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ Word16 *exp /* o : exponent of result in [-32,31] Q0 */ ); #ifdef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /*------------------------------------------------------------------* * w_norm_llQ31: * * \brief Compute normalized Q31 Values out of overflowed Q31 value * using 64-bit operators *------------------------------------------------------------------*/ static inline Word32 w_norm_llQ31( Word64 L64_var1, Word16 *S_var2 ) /*Q31 - L_tmp_exp*/ { Word32 L_result; Word16 sh = W_norm( L64_var1 ); L_result = W_extract_h( W_shl( L64_var1, sh ) ); *S_var2 = ( L_result == 0 ) ? -32 : 32 - sh; return L_result; } #endif /** * \brief Compute dot product of 1 32 bit vectors with itself * \param x input vector 1 Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -148,4 +148,6 @@ #define FIX_1824 #define FIX_1822 #define FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /* FhG: bit-exact, replace carry and overflow operations by 64-bit operations, MR 1931 */ #endif lib_dec/dec_tcx_fx.c +4 −12 Original line number Diff line number Diff line Loading @@ -6,9 +6,9 @@ #include <stdio.h> #include <assert.h> #include "prot_fx.h" #include "options.h" #include "basop_util.h" #include "stl.h" #include "options.h" #include "math.h" #include "ivas_prot_fx.h" #include "rom_com.h" Loading Loading @@ -1859,7 +1859,7 @@ static Word32 CalculateAbsEnergy_fx( /* o : normalized resul const Word16 lg, /* i : vector length, range [0..7FFF] Q0 */ Word16 *exp /* o : exponent of result in [-32,31] Q0 */ ) #if 0 #ifndef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW { Word16 i; Word32 L_sum, L_c; Loading Loading @@ -1901,7 +1901,6 @@ static Word32 CalculateAbsEnergy_fx( /* o : normalized resul Word16 i; Word32 L_sum; Word64 L_sum64; Word16 sh; L_sum64 = W_deposit32_l( L_off ); Loading @@ -1909,17 +1908,10 @@ static Word32 CalculateAbsEnergy_fx( /* o : normalized resul { L_sum64 = W_mac_16_16( L_sum64, x[i], x[i] ); } #if 0 L_sum = w_norm_llQ31( L_sum64, exp ); #else sh = W_norm( L_sum64 ); L_sum = W_extract_h( W_shl( L_sum64, sh ) ); *exp = ( L_sum == 0 ) ? -32 : 32 - sh; #endif /* 0/1 use of w_norm_llQ31() */ L_sum = w_norm_llQ31( L_sum64, exp ); /*Q31 - *exp */ return L_sum; } #endif /* 0/1 legacy */ #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ void IMDCT_fx( Word32 *x, Word16 x_e, Word16 *old_syn_overl, Word16 *syn_Overl_TDAC, Word16 *xn_buf, const Word16 *tcx_aldo_window_1, const PWord16 *tcx_aldo_window_1_trunc, const PWord16 *tcx_aldo_window_2, const PWord16 *tcx_mdct_window_half, const PWord16 *tcx_mdct_window_minimum, const PWord16 *tcx_mdct_window_trans, Word16 tcx_mdct_window_half_length, Word16 tcx_mdct_window_min_length, Word16 index, Word16 left_rect, Word16 tcx_offset, Word16 overlap, Word16 L_frame, Word16 L_frameTCX, Word16 L_spec_TCX5, Word16 L_frame_glob, Word16 frame_cnt, Word16 bfi, Word16 *old_out, Word16 *Q_old_wtda, Decoder_State *st, Word16 fullbandScale, Word16 *acelp_zir ) { Loading lib_dec/fd_cng_dec_fx.c +15 −31 Original line number Diff line number Diff line Loading @@ -19,8 +19,6 @@ #include "debug.h" #endif #define FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW #define CNA_ACT_DN_LARGE_PARTITION 50 /* index of the first larger partition */ #define ST_PERIODOG_FACT_Q15 29491 /* 0.9 in Q15, short-term filter factor for periodogram */ Loading Loading @@ -557,16 +555,6 @@ void deleteFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) error */ static inline Word32 w_norm_llQ31_inl( Word64 L64_var1, Word16 *S_var2 ) /*Q31 - L_tmp_exp*/ { Word32 L_result; Word16 sh = W_norm( L64_var1 ); L_result = W_extract_h( W_shl( L64_var1, sh ) ); *S_var2 = ( L_result == 0 ) ? -32 : 32 - sh; return L_result; } Word16 ApplyFdCng_fx( Word16 *timeDomainInput, /* i : pointer to time domain input Q*/ Word16 Q, Loading Loading @@ -843,18 +831,18 @@ Word16 ApplyFdCng_fx( st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); L_tmp_exp = add( L_tmp_exp, 1 ); #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31*/ } L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ } L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, 1 ); /*Q16 - L_tmp_exp*/ L_tmp = L_shr( L_tmp, 15); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, shr( T_DIV_L_Frame[L_shl( L_mac( -28000, NORM_MDCT_FACTOR, 95 ), 1 - 15 )], 1 ) ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 + ( 31 - 16 ) ); /*->Q31, L_tmp_exp*/ Loading @@ -862,7 +850,7 @@ Word16 ApplyFdCng_fx( st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); L_tmp_exp = add( L_tmp_exp, 1 ); #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif st->hTcxDec->conCngLevelBackgroundTrace_e = L_tmp_exp; move16(); } Loading Loading @@ -901,16 +889,16 @@ Word16 ApplyFdCng_fx( L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31 - L_tmp_exp*/ } L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ } L_tmp_exp = add( L_tmp_exp, *cngNoiseLevel_exp - 1 ); L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ Loading @@ -919,7 +907,7 @@ Word16 ApplyFdCng_fx( st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif move16(); st->hTcxDec->conCngLevelBackgroundTrace_e = L_tmp_exp; move16(); Loading Loading @@ -958,20 +946,16 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31 - L_tmp_exp*/ } #ifndef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ #else L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ #endif } L_tmp_exp = add( L_tmp_exp, *cngNoiseLevel_exp - 1 ); L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ Loading @@ -981,7 +965,7 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif st->cngTDLevel_e = L_tmp_exp; move16(); } Loading Loading @@ -1132,16 +1116,16 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx_o( Sqrt32( L_tmp, &L_tmp_exp ), &Overflow ); /*Q15 - L_tmp_exp*/ move16(); #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31 - L_tmp_exp*/ } L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ } L_tmp_exp = add( L_tmp_exp, *cngNoiseLevel_exp - 1 ); L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ Loading @@ -1150,7 +1134,7 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif st->cngTDLevel_e = L_tmp_exp; move16(); BREAK; Loading Loading
lib_com/basop_util.c +3 −0 Original line number Diff line number Diff line Loading @@ -2089,6 +2089,8 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ return L_sum; } #ifndef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /* note: now available in basop_util.h */ Word32 w_norm_llQ31( Word64 L_sum, Word16 *exp ); Word32 w_norm_llQ31( /* o : normalized result Q31 */ Word64 L_sum, /* i : upper and lower bits of accu, unsigned Q31 */ Loading @@ -2115,6 +2117,7 @@ Word32 w_norm_llQ31( /* o : normalized result Q31 */ L_tmp = W_extract_h( L64_inp64 ); return L_tmp; } #endif Word32 Dot_product16HQ( /* o : normalized result Q31 */ const Word32 L_off, /* i : initial sum value Qn */ Loading
lib_com/basop_util.h +17 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,23 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ Word16 *exp /* o : exponent of result in [-32,31] Q0 */ ); #ifdef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /*------------------------------------------------------------------* * w_norm_llQ31: * * \brief Compute normalized Q31 Values out of overflowed Q31 value * using 64-bit operators *------------------------------------------------------------------*/ static inline Word32 w_norm_llQ31( Word64 L64_var1, Word16 *S_var2 ) /*Q31 - L_tmp_exp*/ { Word32 L_result; Word16 sh = W_norm( L64_var1 ); L_result = W_extract_h( W_shl( L64_var1, sh ) ); *S_var2 = ( L_result == 0 ) ? -32 : 32 - sh; return L_result; } #endif /** * \brief Compute dot product of 1 32 bit vectors with itself * \param x input vector 1 Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -148,4 +148,6 @@ #define FIX_1824 #define FIX_1822 #define FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /* FhG: bit-exact, replace carry and overflow operations by 64-bit operations, MR 1931 */ #endif
lib_dec/dec_tcx_fx.c +4 −12 Original line number Diff line number Diff line Loading @@ -6,9 +6,9 @@ #include <stdio.h> #include <assert.h> #include "prot_fx.h" #include "options.h" #include "basop_util.h" #include "stl.h" #include "options.h" #include "math.h" #include "ivas_prot_fx.h" #include "rom_com.h" Loading Loading @@ -1859,7 +1859,7 @@ static Word32 CalculateAbsEnergy_fx( /* o : normalized resul const Word16 lg, /* i : vector length, range [0..7FFF] Q0 */ Word16 *exp /* o : exponent of result in [-32,31] Q0 */ ) #if 0 #ifndef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW { Word16 i; Word32 L_sum, L_c; Loading Loading @@ -1901,7 +1901,6 @@ static Word32 CalculateAbsEnergy_fx( /* o : normalized resul Word16 i; Word32 L_sum; Word64 L_sum64; Word16 sh; L_sum64 = W_deposit32_l( L_off ); Loading @@ -1909,17 +1908,10 @@ static Word32 CalculateAbsEnergy_fx( /* o : normalized resul { L_sum64 = W_mac_16_16( L_sum64, x[i], x[i] ); } #if 0 L_sum = w_norm_llQ31( L_sum64, exp ); #else sh = W_norm( L_sum64 ); L_sum = W_extract_h( W_shl( L_sum64, sh ) ); *exp = ( L_sum == 0 ) ? -32 : 32 - sh; #endif /* 0/1 use of w_norm_llQ31() */ L_sum = w_norm_llQ31( L_sum64, exp ); /*Q31 - *exp */ return L_sum; } #endif /* 0/1 legacy */ #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ void IMDCT_fx( Word32 *x, Word16 x_e, Word16 *old_syn_overl, Word16 *syn_Overl_TDAC, Word16 *xn_buf, const Word16 *tcx_aldo_window_1, const PWord16 *tcx_aldo_window_1_trunc, const PWord16 *tcx_aldo_window_2, const PWord16 *tcx_mdct_window_half, const PWord16 *tcx_mdct_window_minimum, const PWord16 *tcx_mdct_window_trans, Word16 tcx_mdct_window_half_length, Word16 tcx_mdct_window_min_length, Word16 index, Word16 left_rect, Word16 tcx_offset, Word16 overlap, Word16 L_frame, Word16 L_frameTCX, Word16 L_spec_TCX5, Word16 L_frame_glob, Word16 frame_cnt, Word16 bfi, Word16 *old_out, Word16 *Q_old_wtda, Decoder_State *st, Word16 fullbandScale, Word16 *acelp_zir ) { Loading
lib_dec/fd_cng_dec_fx.c +15 −31 Original line number Diff line number Diff line Loading @@ -19,8 +19,6 @@ #include "debug.h" #endif #define FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW #define CNA_ACT_DN_LARGE_PARTITION 50 /* index of the first larger partition */ #define ST_PERIODOG_FACT_Q15 29491 /* 0.9 in Q15, short-term filter factor for periodogram */ Loading Loading @@ -557,16 +555,6 @@ void deleteFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) error */ static inline Word32 w_norm_llQ31_inl( Word64 L64_var1, Word16 *S_var2 ) /*Q31 - L_tmp_exp*/ { Word32 L_result; Word16 sh = W_norm( L64_var1 ); L_result = W_extract_h( W_shl( L64_var1, sh ) ); *S_var2 = ( L_result == 0 ) ? -32 : 32 - sh; return L_result; } Word16 ApplyFdCng_fx( Word16 *timeDomainInput, /* i : pointer to time domain input Q*/ Word16 Q, Loading Loading @@ -843,18 +831,18 @@ Word16 ApplyFdCng_fx( st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); L_tmp_exp = add( L_tmp_exp, 1 ); #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31*/ } L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ } L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, 1 ); /*Q16 - L_tmp_exp*/ L_tmp = L_shr( L_tmp, 15); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, shr( T_DIV_L_Frame[L_shl( L_mac( -28000, NORM_MDCT_FACTOR, 95 ), 1 - 15 )], 1 ) ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 + ( 31 - 16 ) ); /*->Q31, L_tmp_exp*/ Loading @@ -862,7 +850,7 @@ Word16 ApplyFdCng_fx( st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); L_tmp_exp = add( L_tmp_exp, 1 ); #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif st->hTcxDec->conCngLevelBackgroundTrace_e = L_tmp_exp; move16(); } Loading Loading @@ -901,16 +889,16 @@ Word16 ApplyFdCng_fx( L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31 - L_tmp_exp*/ } L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ } L_tmp_exp = add( L_tmp_exp, *cngNoiseLevel_exp - 1 ); L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ Loading @@ -919,7 +907,7 @@ Word16 ApplyFdCng_fx( st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif move16(); st->hTcxDec->conCngLevelBackgroundTrace_e = L_tmp_exp; move16(); Loading Loading @@ -958,20 +946,16 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31 - L_tmp_exp*/ } #ifndef FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ #else L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ #endif } L_tmp_exp = add( L_tmp_exp, *cngNoiseLevel_exp - 1 ); L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ Loading @@ -981,7 +965,7 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif st->cngTDLevel_e = L_tmp_exp; move16(); } Loading Loading @@ -1132,16 +1116,16 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx_o( Sqrt32( L_tmp, &L_tmp_exp ), &Overflow ); /*Q15 - L_tmp_exp*/ move16(); #else /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #else { Word64 W_tmp = 0; FOR( j = 0; j < tmp_loop; j++ ) { W_tmp = W_add( W_tmp, *( cngNoiseLevel + j ) ); /*Q31 - L_tmp_exp*/ } L_tmp = w_norm_llQ31_inl( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp = w_norm_llQ31( W_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ } L_tmp_exp = add( L_tmp_exp, *cngNoiseLevel_exp - 1 ); L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ Loading @@ -1150,7 +1134,7 @@ Word16 ApplyFdCng_fx( st->cngTDLevel = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #endif /* FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW */ #endif st->cngTDLevel_e = L_tmp_exp; move16(); BREAK; Loading