Commit 96dca853 authored by JÜRGEN Gerstacker's avatar JÜRGEN Gerstacker
Browse files

issue _1965_ fix

parent e2b8268c
Loading
Loading
Loading
Loading
Loading
+41 −1
Original line number Diff line number Diff line
@@ -15,23 +15,36 @@
******************************************************/
static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/, Word16 L_subfr /*Q0*/, Word32 lp_gainp /*Q16*/, Word32 *lp_gainc /*Q16*/ )
{
    Word32 L_c;
    Word16 tmp16, tmp16_2, tmp16_3, tmp_e, tmp2_e, tmp_loop, i;
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    Word32 L_c;
    Word32 L_acc, L_tmp;
#else
    Word64 W_acc;
    Word32 L_tmp;
#endif
#ifdef BASOP_NOGLOB_DECLARE_LOCAL
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    Flag Overflow = 0;
    Flag Carry = 0;
#endif
    move32();
    move32();
#endif


#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    L_acc = L_deposit_l( 0 );
    L_c = L_deposit_l( 0 );
#else
    W_acc = 0;
#endif
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    Overflow = 0;
    move16();
    Carry = 0;
    move16();
#endif

    tmp16 = round_fx( old_fpitch ); /*Q0*/
    tmp_loop = shl( L_subfr, 1 );
@@ -52,14 +65,22 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/,
#else
        tmp16_3 = sub_o( exc[( i - ( L_subfr * 2 ) )] /*Q1*/, mult_r( tmp16_2 /*Q15*/, exc[( ( i - ( L_subfr * 2 ) ) - tmp16 )] /*Q1*/ ) /*Q1*/, &Overflow );
#endif
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
        L_acc = L_macNs_co( L_acc, tmp16_3, tmp16_3, &Carry, &Overflow ); /*Q3*/
        Overflow = 0;
        move16();
        L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Accumulate Carrys Q-1*/
        Carry = 0;
        move16();
#else
        W_acc = W_mac_16_16( W_acc, tmp16_3, tmp16_3 ); /*Q3*/
#endif
    }
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    L_tmp = norm_llQ31( L_c, L_acc, &tmp_e );                 /*Q3,norm,tmp_e*/
#else
    L_tmp = w_norm_llQ31( W_acc, &tmp_e );                 /*Q3,norm,tmp_e*/
#endif
    tmp_e = add( tmp_e, 31 - ( add( shl( Q_exc, 1 ), 1 ) ) ); /*L_tmp is Q31, now*/
    tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/;
    tmp_e = sub( add( tmp2_e, tmp_e ), 15 );
@@ -75,15 +96,23 @@ static void calcGainc_fx( Word16 *exc, Word16 Q_exc, Word32 old_fpitch /*Q16*/,
static void calcGainc2_fx( Word16 *exc, Word16 Q_exc, Word16 L_subfr /*Q0*/, Word32 *lp_gainc /*Q16*/ )
{
    Word16 i, cnt, tmp16, tmp_e, tmp2_e;
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    Word32 L_c, L_acc, L_tmp;
#else
    Word64 W_acc;
    Word32 L_tmp;
#endif
#ifdef BASOP_NOGLOB_DECLARE_LOCAL
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    Flag Overflow = 0;
    Flag Carry = 0;
#endif
#endif
    move16();
    move16();


#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    Carry = 0;
    move16();
    Overflow = 0;
@@ -91,21 +120,32 @@ static void calcGainc2_fx( Word16 *exc, Word16 Q_exc, Word16 L_subfr /*Q0*/, Wor

    L_c = L_deposit_l( 0 );
    L_acc = L_deposit_l( 0 );
#else
    W_acc = 0;
#endif

    cnt = shl( L_subfr, 1 );

    FOR( i = 0; i < cnt; i++ )
    {
        /* *gainc += ( exc[i-2*L_subfr] ) * ( exc[i-2*L_subfr]); */
#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
        L_acc = L_macNs_co( L_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, &Carry, &Overflow ); /*Q3*/
        Overflow = 0;
        move16();
        L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /* Accumulate Carrys Q-1*/
        Carry = 0;
        move16();
#else
        W_acc = W_mac_16_16( W_acc, exc[( i - ( L_subfr * 2 ) )] /*Q1*/, exc[( i - ( L_subfr * 2 ) )] /*Q1*/); /*Q3*/
#endif
    }

#ifndef FIX_ISSUE_1965_REPLACE_CARRY_OVERFLOW
    L_tmp = norm_llQ31( L_c, L_acc, &tmp_e );                       /*Q3,norm,tmp_e*/
#else
    L_tmp = w_norm_llQ31( W_acc, &tmp_e );                       /*Q3,norm,tmp_e*/
#endif
    tmp_e = add( tmp_e, sub( 31, ( add( shl( Q_exc, 1 ), 1 ) ) ) ); /*L_tmp is Q31, now*/
    tmp16 = BASOP_Util_Divide3216_Scale( L_tmp /*Q31,norm,tmp_e*/, shl( L_subfr, 1 ) /*Q15,15*/, &tmp2_e ) /*Q15,tmp2_e+tmp_e-15*/;
    tmp_e = sub( add( tmp2_e, tmp_e ), 15 );