Commit 974ce8be authored by vaillancour's avatar vaillancour
Browse files

fix more possible saturation

parent 8dc3f9cf
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -370,7 +370,11 @@ static Word32 Sqrt32_common(Word32 m,
  if (m != 0)
  {
    BASOP_SATURATE_WARNING_OFF_EVS;
#ifdef BASOP_NOGLOB
      m = L_mac_sat( SqrtTable[index], SqrtDiffTable[index], frac );
#else
      m = L_mac( SqrtTable[index], SqrtDiffTable[index], frac );
#endif
    BASOP_SATURATE_WARNING_ON_EVS;
  }

@@ -654,8 +658,13 @@ void BASOP_Util_Sqrt_InvSqrt_MantExp(Word16 mantissa, /*!< mantissa */

  /* interpolate */
  BASOP_SATURATE_WARNING_OFF_EVS;
#ifdef BASOP_NOGLOB
  m = mac_r_sat( SqrtTable[index], SqrtDiffTable[index], frac );
  mi = msu_r_sat(ISqrtTable[index], ISqrtDiffTable[index], frac);
#else
  m = mac_r( SqrtTable[index], SqrtDiffTable[index], frac );
  mi = msu_r(ISqrtTable[index], ISqrtDiffTable[index], frac);
#endif
  BASOP_SATURATE_WARNING_ON_EVS;

  /* handle even/odd exponents */
@@ -2035,7 +2044,11 @@ Word16 BASOP_Util_Cmp_Mant32Exp /*!< o: flag: result of compari
  }

  BASOP_SATURATE_WARNING_OFF_EVS
#ifdef BASOP_NOGLOB
  diff_m = L_sub_sat( a_m, b_m );
#else
  diff_m = L_sub( a_m, b_m );
#endif
  BASOP_SATURATE_WARNING_ON_EVS
    diff_e = sub(a_e, b_e);

+6 −1
Original line number Diff line number Diff line
@@ -1417,8 +1417,13 @@ GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) | p
        sm = sub(s_min(s, 44), 1);
        BASOP_SATURATE_WARNING_OFF_EVS
        /* nrg + 6.1e-5f => value 0x40000000, scale 44 */
#ifdef BASOP_NOGLOB
        *energyLookahead = L_add_sat( L_shr_sat( nrg, sub( s, sm ) ),
                                 L_shr_sat(0x40000000, s_max(-31, s_min(31, sub(44, sm)))));
#else
        *energyLookahead = L_add( L_shr( nrg, sub( s, sm ) ),
                                 L_shr(0x40000000, s_max(-31, s_min(31, sub(44, sm)))));
#endif
        move32();
        BASOP_SATURATE_WARNING_ON_EVS
        *sf_energyLookahead = sm;
+5 −1
Original line number Diff line number Diff line
@@ -41,7 +41,11 @@ Word16 tcxGetNoiseFillingTilt(
		Copy_Scale_sig(A, As, lpcorder + 1, sub(norm_s(A[0]),2));
		tmp = get_gain(As + 1, As, lpcorder);
		BASOP_SATURATE_WARNING_OFF_EVS;
#ifdef BASOP_NOGLOB
        *noiseTiltFactor = add_sat( round_fx_sat( L_shl_sat( tmp, 15 ) ), 3072 /*0.09375f Q15*/ );
#else
        *noiseTiltFactor = add( round_fx( L_shl( tmp, 15 ) ), 3072 /*0.09375f Q15*/ );
#endif
		move16();
		BASOP_SATURATE_WARNING_ON_EVS;
	}
+23 −5
Original line number Diff line number Diff line
@@ -70,8 +70,13 @@ Word16 est_tilt_fx( /* o : tilt of the code Q15 *

    i = sub(exp1, exp2);
    BASOP_SATURATE_WARNING_OFF_EVS
#ifdef BASOP_NOGLOB
    ener1 = shr_sat( ener1, sub( 1, s_min( i, 0 ) ) );
    ener2 = shr_sat(ener2, add(s_max(0, i), 1));
#else
    ener1 = shr( ener1, sub( 1, s_min( i, 0 ) ) );
    ener2 = shr(ener2, add(s_max(0, i), 1));
#endif
    BASOP_SATURATE_WARNING_ON_EVS
    tmp = sub(ener1, ener2);
    ener1 = add(add(ener1, ener2), 1);
@@ -155,8 +160,13 @@ Word16 est_tilt_ivas_fx( /* o : tilt of the code Q15

    i = sub(exp1, exp2);
    BASOP_SATURATE_WARNING_OFF_EVS
#ifdef BASOP_NOGLOB
    ener1 = shr_sat( ener1, sub( 1, s_min( i, 0 ) ) );
    ener2 = shr_sat(ener2, add(s_max(0, i), 1));
#else
    ener1 = shr( ener1, sub( 1, s_min( i, 0 ) ) );
    ener2 = shr(ener2, add(s_max(0, i), 1));
#endif
    BASOP_SATURATE_WARNING_ON_EVS
    tmp = sub(ener1, ener2);
    ener1 = add(add(ener1, ener2), 1);
@@ -331,13 +341,21 @@ void E_UTIL_voice_factor( Word16 *exc, /* i : pointer to the excitatio
    IF(i >= 0)
    {
        ener = L_shr(ener,1);
#ifdef BASOP_NOGLOB
        tmp = L_shr_sat( tmp, add( 1, i ) );
#else
        tmp = L_shr( tmp, add( 1, i ) );
#endif
    }
    ELSE
    {
        tmp = L_shr(tmp,1);
        BASOP_SATURATE_WARNING_OFF_EVS
#ifdef BASOP_NOGLOB
        ener = L_shr_sat( ener, sub( 1, i ) );
#else
        ener = L_shr( ener, sub( 1, i ) );
#endif
        BASOP_SATURATE_WARNING_ON_EVS
    }

+6 −1
Original line number Diff line number Diff line
@@ -1404,8 +1404,13 @@ void E_LPC_a_lsf_isf_conversion(Word16 *lpcCoeffs, Word16 *lsf, const Word16 *
        Word16 ImAr = extract_h(L_sub(ImagFFT[i], ImagFFT[N/2-i]));
        Word16 ImBr = extract_h((L_negate(L_add(ImagFFT[i], ImagFFT[N/2-i]))));
        BASOP_SATURATE_WARNING_OFF_EVS
#ifdef BASOP_NOGLOB
        tmpw15.v.re = mac_r_sat( L_mult( ptwiddle->v.im, pwn17->v.re ), ptwiddle->v.re, pwn17->v.im );
        tmpw15.v.im = msu_r_sat(L_mult(ptwiddle->v.im, pwn17->v.im), ptwiddle->v.re, pwn17->v.re);
#else
        tmpw15.v.re = mac_r( L_mult( ptwiddle->v.im, pwn17->v.re ), ptwiddle->v.re, pwn17->v.im );
        tmpw15.v.im = msu_r(L_mult(ptwiddle->v.im, pwn17->v.im), ptwiddle->v.re, pwn17->v.re);
#endif
        BASOP_SATURATE_WARNING_ON_EVS
        RealOut[i] = msu_r(L_msu(L_msu(L_mult(ReAr, pwn17->v.re), ImAr, pwn17->v.im), ReBr, pwn15->v.im), ImBr, pwn15->v.re);
        move16();
Loading