Commit 4754810b authored by JÜRGEN Gerstacker's avatar JÜRGEN Gerstacker
Browse files

issue _1965_ fix

parent 42b2d5e9
Loading
Loading
Loading
Loading
Loading
+7 −30
Original line number Diff line number Diff line
@@ -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 */
@@ -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         */
@@ -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();
@@ -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
    {
@@ -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 */
+10 −2
Original line number Diff line number Diff line
@@ -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++ )
@@ -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;
    }

@@ -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();
+2 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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();

+7 −3
Original line number Diff line number Diff line
@@ -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 */
@@ -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 */
@@ -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;
@@ -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 );
+1 −1
Original line number Diff line number Diff line
@@ -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