Loading lib_com/basop_util.c +7 −30 Original line number Diff line number Diff line Loading @@ -2072,6 +2072,7 @@ Word16 idiv1616_1( Word16 x, Word16 y ) } } #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 norm_llQ31( /* o : normalized result Q31 */ Word32 L_c, /* i : upper bits of accu Q-1 */ Word32 L_sum, /* i : lower bits of accu, unsigned Q31 */ Loading @@ -2079,32 +2080,20 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ ) { #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW // Word16 exp2=*exp; // Word32 L_sumOld= L_sum; // Word32 L_cOld= L_c; // Word32 L_sum2 =w_norm_llQ31( ((Word64)L_c<<32) | (UWord32)L_sum, &exp2); L_sum = w_norm_llQ31( ( (Word64) L_c << 32 ) | (UWord32) L_sum, exp ); move32(); /* compensate missing instrumentation */ move32(); /* compensate missing instrumentation */ return w_norm_llQ31( ( (Word64) L_c << 32 ) | (UWord32) L_sum, exp ); #else Word16 i; #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx Word64 W_tmp; #else Word32 L_tmp; #endif #ifdef BASOP_NOGLOB_DECLARE_LOCAL #if !defined( ISSUE_1836_replace_overflow_libcom ) && !defined( FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx ) #ifndef ISSUE_1836_replace_overflow_libcom Flag Overflow = 0; #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx Flag Carry = 0; #endif #endif /* BASOP_NOGLOB */ /* Move MSBit of L_sum into L_c */ #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx W_tmp = W_add( L_sum, L_sum ); /* W_tmp = L_sum << 1 */ L_c = L_add( L_add( L_c, L_c ), W_extract_h( W_tmp ) ); #else #ifdef ISSUE_1836_replace_overflow_libcom Carry = 0; L_tmp = L_add_c( L_sum, L_sum, &Carry ); /* L_tmp = L_sum << 1 */ Loading @@ -2112,7 +2101,6 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ #else L_tmp = L_add_co( L_sum, L_sum, &Carry, &Overflow ); /* L_tmp = L_sum << 1 */ L_c = L_add_co( L_c, L_c, &Carry, &Overflow ); #endif #endif L_add( 0, 0 ); test(); Loading @@ -2121,14 +2109,9 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ i = norm_l( L_c ); L_c = L_shl( L_c, i ); i = sub( 31, i ); /* positive exponent */ #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx L_sum = W_lshr( W_tmp, 1 ); /* L_sum with MSBit=0 */ L_sum = L_lshr( L_sum, i ); #else L_sum = L_lshr( L_tmp, 1 ); /* L_sum with MSBit=0 */ L_sum = L_lshr( L_sum, i ); L_sum = L_add( L_c, L_sum ); #endif } ELSE { Loading @@ -2143,16 +2126,10 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ } *exp = i; move16(); #if 0 char isnotok = *exp != exp2 || L_sum!=L_sum2; if (isnotok) fprintf(stderr, "%s: %s:%d: (0x%08x, 0x%08x) 0x%08x 0x%08x %d %d\n", isnotok?"ERROR ":"IS_OK ", __FILE__,__LINE__, L_cOld,L_sumOld, L_sum, L_sum2, *exp, exp2); #endif #endif return L_sum; #endif /* #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW */ } #endif /* #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW */ Word32 Dot_product16HQ( /* o : normalized result Q31 */ Loading lib_com/igf_base_fx.c +10 −2 Original line number Diff line number Diff line Loading @@ -1123,11 +1123,11 @@ void IGFCommonFuncsCalcSfbEnergyPowerSpec( const Word16 startSfb, /**< in #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; Flag Carry = 0; // done #endif Flag Carry = 0; move16(); move16(); #endif #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW FOR( sfb = startSfb; sfb < stopSfb; sfb++ ) Loading @@ -1138,6 +1138,13 @@ void IGFCommonFuncsCalcSfbEnergyPowerSpec( const Word16 startSfb, /**< in #endif IF( NULL == pPowerSpectrum ) { #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW FOR( sfb = startSfb; sfb < stopSfb; sfb++ ) { sfbEnergy[sfb] = L_deposit_l( 0 ); move32(); } #endif return; } Loading @@ -1161,6 +1168,7 @@ void IGFCommonFuncsCalcSfbEnergyPowerSpec( const Word16 startSfb, /**< in sfbEnergy[sfb] = sum_array_norm( pPowerSpectrum + swb_offset[sfb], swb_offset[sfb + 1] - swb_offset[sfb], &( sfbEnergy_exp[sfb] ) ); move32(); #endif sfbEnergy_exp[sfb] = add( sfbEnergy_exp[sfb], *pPowerSpectrum_exp ); move16(); Loading lib_dec/arith_coder_dec_fx.c +2 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ static Word16 tcx_arith_decode_fx( Word32 L_tmp, Q; Flag Overflow = 0; move32(); Flag Carry = 0; // not done Flag Carry = 0; #else Word32 Q; Word64 W_tmp; Loading Loading @@ -104,7 +104,7 @@ static Word16 tcx_arith_decode_fx( #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW *nf_seed = extract_l( L_tmp ); #else *nf_seed = extract_l( (Word32) W_tmp ); *nf_seed = extract_l( W_extract_l( W_tmp ) ); #endif move16(); Loading lib_dec/igf_dec_fx.c +7 −3 Original line number Diff line number Diff line Loading @@ -1583,9 +1583,7 @@ static void IGF_appl( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in } L_tmp = norm_llQ31( L_c, L_tmp, &shift ); // Q31 #else { L_tmp = sum_array_norm( energyTmp, 24, &shift ); } #endif /* float: dE = (float)sqrt(dE / 24.f); basop: */ shift = add( sub( shift, 4 ), dE_e ); /* x/24 = (x >> 4) * 1/1.5 */ Loading Loading @@ -2182,11 +2180,13 @@ static void IGF_appl_ivas( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in Word16 spec_e_arr[N_MAX]; Word16 vspec_e_arr[N_MAX_TCX - IGF_START_MN]; #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; move16(); Flag Carry = 0; move16(); #endif #endif /* initialize variables */ Loading Loading @@ -2266,6 +2266,7 @@ static void IGF_appl_ivas( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in L_c = 0; move32(); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW FOR( tb = 0; tb < 24; tb++ ) { Carry = 0; Loading @@ -2275,6 +2276,9 @@ static void IGF_appl_ivas( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); } L_tmp = norm_llQ31( L_c, L_tmp, &shift ); // Q31 #else L_tmp = sum_array_norm( energyTmp, 24, &shift ); #endif /* float: dE = (float)sqrt(dE / 24.f); basop: */ shift = add( sub( shift, 4 ), dE_e ); /* x/24 = (x >> 4) * 1/1.5 */ dE = Sqrt16norm( extract_h( L_tmp ), &shift ); Loading lib_enc/arith_coder_enc_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -803,7 +803,7 @@ void tcx_arith_encode_envelope_fx( #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW *nf_seed = extract_l( L_tmp2 ); #else *nf_seed = extract_l( (Word32) W_tmp2 ); *nf_seed = extract_l( W_extract_l( W_tmp2 ) ); #endif move16(); } Loading Loading
lib_com/basop_util.c +7 −30 Original line number Diff line number Diff line Loading @@ -2072,6 +2072,7 @@ Word16 idiv1616_1( Word16 x, Word16 y ) } } #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Word32 norm_llQ31( /* o : normalized result Q31 */ Word32 L_c, /* i : upper bits of accu Q-1 */ Word32 L_sum, /* i : lower bits of accu, unsigned Q31 */ Loading @@ -2079,32 +2080,20 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ ) { #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW // Word16 exp2=*exp; // Word32 L_sumOld= L_sum; // Word32 L_cOld= L_c; // Word32 L_sum2 =w_norm_llQ31( ((Word64)L_c<<32) | (UWord32)L_sum, &exp2); L_sum = w_norm_llQ31( ( (Word64) L_c << 32 ) | (UWord32) L_sum, exp ); move32(); /* compensate missing instrumentation */ move32(); /* compensate missing instrumentation */ return w_norm_llQ31( ( (Word64) L_c << 32 ) | (UWord32) L_sum, exp ); #else Word16 i; #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx Word64 W_tmp; #else Word32 L_tmp; #endif #ifdef BASOP_NOGLOB_DECLARE_LOCAL #if !defined( ISSUE_1836_replace_overflow_libcom ) && !defined( FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx ) #ifndef ISSUE_1836_replace_overflow_libcom Flag Overflow = 0; #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx Flag Carry = 0; #endif #endif /* BASOP_NOGLOB */ /* Move MSBit of L_sum into L_c */ #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx W_tmp = W_add( L_sum, L_sum ); /* W_tmp = L_sum << 1 */ L_c = L_add( L_add( L_c, L_c ), W_extract_h( W_tmp ) ); #else #ifdef ISSUE_1836_replace_overflow_libcom Carry = 0; L_tmp = L_add_c( L_sum, L_sum, &Carry ); /* L_tmp = L_sum << 1 */ Loading @@ -2112,7 +2101,6 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ #else L_tmp = L_add_co( L_sum, L_sum, &Carry, &Overflow ); /* L_tmp = L_sum << 1 */ L_c = L_add_co( L_c, L_c, &Carry, &Overflow ); #endif #endif L_add( 0, 0 ); test(); Loading @@ -2121,14 +2109,9 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ i = norm_l( L_c ); L_c = L_shl( L_c, i ); i = sub( 31, i ); /* positive exponent */ #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOWxxx L_sum = W_lshr( W_tmp, 1 ); /* L_sum with MSBit=0 */ L_sum = L_lshr( L_sum, i ); #else L_sum = L_lshr( L_tmp, 1 ); /* L_sum with MSBit=0 */ L_sum = L_lshr( L_sum, i ); L_sum = L_add( L_c, L_sum ); #endif } ELSE { Loading @@ -2143,16 +2126,10 @@ Word32 norm_llQ31( /* o : normalized result Q31 */ } *exp = i; move16(); #if 0 char isnotok = *exp != exp2 || L_sum!=L_sum2; if (isnotok) fprintf(stderr, "%s: %s:%d: (0x%08x, 0x%08x) 0x%08x 0x%08x %d %d\n", isnotok?"ERROR ":"IS_OK ", __FILE__,__LINE__, L_cOld,L_sumOld, L_sum, L_sum2, *exp, exp2); #endif #endif return L_sum; #endif /* #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW */ } #endif /* #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW */ Word32 Dot_product16HQ( /* o : normalized result Q31 */ Loading
lib_com/igf_base_fx.c +10 −2 Original line number Diff line number Diff line Loading @@ -1123,11 +1123,11 @@ void IGFCommonFuncsCalcSfbEnergyPowerSpec( const Word16 startSfb, /**< in #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; Flag Carry = 0; // done #endif Flag Carry = 0; move16(); move16(); #endif #endif #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW FOR( sfb = startSfb; sfb < stopSfb; sfb++ ) Loading @@ -1138,6 +1138,13 @@ void IGFCommonFuncsCalcSfbEnergyPowerSpec( const Word16 startSfb, /**< in #endif IF( NULL == pPowerSpectrum ) { #ifdef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW FOR( sfb = startSfb; sfb < stopSfb; sfb++ ) { sfbEnergy[sfb] = L_deposit_l( 0 ); move32(); } #endif return; } Loading @@ -1161,6 +1168,7 @@ void IGFCommonFuncsCalcSfbEnergyPowerSpec( const Word16 startSfb, /**< in sfbEnergy[sfb] = sum_array_norm( pPowerSpectrum + swb_offset[sfb], swb_offset[sfb + 1] - swb_offset[sfb], &( sfbEnergy_exp[sfb] ) ); move32(); #endif sfbEnergy_exp[sfb] = add( sfbEnergy_exp[sfb], *pPowerSpectrum_exp ); move16(); Loading
lib_dec/arith_coder_dec_fx.c +2 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ static Word16 tcx_arith_decode_fx( Word32 L_tmp, Q; Flag Overflow = 0; move32(); Flag Carry = 0; // not done Flag Carry = 0; #else Word32 Q; Word64 W_tmp; Loading Loading @@ -104,7 +104,7 @@ static Word16 tcx_arith_decode_fx( #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW *nf_seed = extract_l( L_tmp ); #else *nf_seed = extract_l( (Word32) W_tmp ); *nf_seed = extract_l( W_extract_l( W_tmp ) ); #endif move16(); Loading
lib_dec/igf_dec_fx.c +7 −3 Original line number Diff line number Diff line Loading @@ -1583,9 +1583,7 @@ static void IGF_appl( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in } L_tmp = norm_llQ31( L_c, L_tmp, &shift ); // Q31 #else { L_tmp = sum_array_norm( energyTmp, 24, &shift ); } #endif /* float: dE = (float)sqrt(dE / 24.f); basop: */ shift = add( sub( shift, 4 ), dE_e ); /* x/24 = (x >> 4) * 1/1.5 */ Loading Loading @@ -2182,11 +2180,13 @@ static void IGF_appl_ivas( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in Word16 spec_e_arr[N_MAX]; Word16 vspec_e_arr[N_MAX_TCX - IGF_START_MN]; #ifdef BASOP_NOGLOB_DECLARE_LOCAL #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW Flag Overflow = 0; move16(); Flag Carry = 0; move16(); #endif #endif /* initialize variables */ Loading Loading @@ -2266,6 +2266,7 @@ static void IGF_appl_ivas( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in L_c = 0; move32(); #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW FOR( tb = 0; tb < 24; tb++ ) { Carry = 0; Loading @@ -2275,6 +2276,9 @@ static void IGF_appl_ivas( IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /**< in L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); } L_tmp = norm_llQ31( L_c, L_tmp, &shift ); // Q31 #else L_tmp = sum_array_norm( energyTmp, 24, &shift ); #endif /* float: dE = (float)sqrt(dE / 24.f); basop: */ shift = add( sub( shift, 4 ), dE_e ); /* x/24 = (x >> 4) * 1/1.5 */ dE = Sqrt16norm( extract_h( L_tmp ), &shift ); Loading
lib_enc/arith_coder_enc_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -803,7 +803,7 @@ void tcx_arith_encode_envelope_fx( #ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW *nf_seed = extract_l( L_tmp2 ); #else *nf_seed = extract_l( (Word32) W_tmp2 ); *nf_seed = extract_l( W_extract_l( W_tmp2 ) ); #endif move16(); } Loading