Commit 9daf8e10 authored by multrus's avatar multrus
Browse files

replace i_mult_o()

parent bf9ba511
Loading
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -120,6 +120,14 @@
#define FIX_1735_W_SHL_SAT_L                    /* FhG: Usage of W_shl_sat_l() */
#define FIX_ISSUE_1792                          /* FhG: fix noise bursts in binaural rendering */

/* Info for issue 1816:
 * Some compilers do not automatically use 32 bit for 16x16bit products. The code "Word32 c = (Word16) a * (Word16) b;" creates then a 16-bit result, sign-extending the
 * lower 16-bit of the product, any upper bits are omitted. Example: Product 0x0100 * 0x0100 results in 0x0001.0000, gets truncated to its lower bits and return 0x0000.
 * The issue is fixed by simply casting one of the product operands to Word32 in lib_com/basop32.c
 */
#define FIX_ISSUE_1816_USE_W32_FOR_MPY_W16xW16          /* FhG: (QA-FIX) Use doubled data width for 16x16 product, some compilers keep 16-bit format also for products */
#define FIX_ISSUE_1816_IMPROVE_MPY_ZERO_DOT_1_PRECISION /* FhG: (NON-BE) improve precision of multiplications with factor 0.1f, avoids overflow with up-rounded value */

#define FIX_ISSUE_1795_Q3_OVERFLOW              /* FhG: Q3 overflow in function WB_BWE_gain_pred_fx (EVS legacy code) BE, MR1855 */
#define NONBE_FIX_1748_SPAR_DIV_OPT                      /*Dlb: issue 1748: SPAR common div optimizations*/

+9 −1
Original line number Diff line number Diff line
@@ -2725,7 +2725,11 @@ void swb_tbe_dec_fx(
    }
    FOR( ; i < L_SHB_LAHEAD + 10; i++ )
    {
#ifdef FIX_ISSUE_1816_IMPROVE_MPY_ZERO_DOT_1_PRECISION
        temp = round_fx_sat( L_shl( L_mult( 0x6666 /* 0.1 in Q12 */, shl( sub( i, 19 ), 11 ) ), 1 ) );
#else
        temp = i_mult_sat( sub( i, 19 ), 3277 /*0.1f Q15*/ );        /* Q15 */
#endif
        L_tmp1 = Mult_32_16( L_shl_sat( 1, sub( 31, exp ) ), temp ); /* Q31-exp */
        temp = sub( 32767 /*1.0f Q15*/, temp );
        Lscale = L_add( Mult_32_16( Lscale, temp ), L_tmp1 );
@@ -6287,7 +6291,11 @@ void ivas_swb_tbe_dec_fx(
        }
        FOR( ; i < L_SHB_LAHEAD + 10; i++ )
        {
#ifdef FIX_ISSUE_1816_IMPROVE_MPY_ZERO_DOT_1_PRECISION
            temp_fx = round_fx_sat( L_shl( L_mult( 0x6666 /* 0.1 in Q12 */, shl( sub( i, 19 ), 11 ) ), 1 ) );
#else
            temp_fx = i_mult_sat( sub( i, 19 ), 3277 /*0.1f Q15*/ ); /* Q15 */
#endif
            L_tmp1 = Mult_32_16( L_shl_sat( 1, sub( 31, exp ) ), temp_fx ); /* Q31-exp */
            temp_fx = sub( 32767 /*1.0f Q15*/, temp_fx );
            Lscale = L_add( Mult_32_16( Lscale, temp_fx ), L_tmp1 );
+10 −2
Original line number Diff line number Diff line
@@ -2537,7 +2537,11 @@ void swb_tbe_enc_fx(
    }
    FOR( ; i < L_SHB_LAHEAD + 10; i++ )
    {
#ifdef FIX_ISSUE_1816_IMPROVE_MPY_ZERO_DOT_1_PRECISION
        tmp = round_fx_sat( L_shl( L_mult( 0x6666 /* 0.1 in Q12 */, shl( sub( i, 19 ), 11 ) ), 1 ) );
#else
        tmp = i_mult_o( sub( i, 19 ), 3277 /*0.1f Q15*/, &Overflow );     /* Q15 */
#endif
        L_tmp1 = Mult_32_16( L_shl_o( 1, sub( 31, exp ), &Overflow ), tmp ); /* Q31-exp */
        tmp = sub( 32767 /*1.0f Q15*/, tmp );
        Lscale = L_add( Mult_32_16( Lscale, tmp ), L_tmp1 );
@@ -3833,7 +3837,11 @@ void swb_tbe_enc_ivas_fx(
        }
        FOR( ; i < L_SHB_LAHEAD + 10; i++ )
        {
#ifdef FIX_ISSUE_1816_IMPROVE_MPY_ZERO_DOT_1_PRECISION
            tmp = round_fx_sat( L_shl( L_mult( 0x6666 /* 0.1 in Q12 */, shl( sub( i, 19 ), 11 ) ), 1 ) );
#else
            tmp = i_mult_o( sub( i, 19 ), 3277 /*0.1f Q15*/, &Overflow ); /* Q15 */
#endif
            L_tmp1 = Mult_32_16( L_shl_o( 1, sub( 31, exp ), &Overflow ), tmp ); /* Q31-exp */
            tmp = sub( 32767 /*1.0f Q15*/, tmp );
            L_tmp = L_add( Mult_32_16( Lscale, tmp ), L_tmp1 );