Loading lib_com/modif_fs_fx.c +58 −9 Original line number Diff line number Diff line Loading @@ -835,7 +835,9 @@ void Interpolate_allpass_steep_fx( Word16 k; Word32 Lacc=0, Lacc1=0; Word16 temp1, temp2; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif /*** State in Q0,in_fx Q0, AP1_STEEP in Q15 AP2_STEEP in Q15 OP in Q0 ************/ /*upper allpass filter chain */ Loading @@ -843,28 +845,50 @@ void Interpolate_allpass_steep_fx( { Lacc = L_deposit_h( mem[0] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc = L_mac_o( Lacc, AP2_STEEP_FX[0], in_fx[k], &Overflow ); /* Q(16+x):temp[0] */ #else Lacc = L_mac( Lacc, AP2_STEEP_FX[0], in_fx[k] ); /* Q(16+x):temp[0] */ #endif Lacc1 = L_deposit_h( in_fx[k] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB temp1 = round_fx_o( Lacc, &Overflow); /* Qx */ Lacc1 = L_msu_o( Lacc1, AP2_STEEP_FX[0], temp1, &Overflow); /* Q(16+x) */ mem[0] = round_fx_o( Lacc1, &Overflow); #else temp1 = round_fx(Lacc); /* Qx */ Lacc1 = L_msu(Lacc1, AP2_STEEP_FX[0], temp1); /* Q(16+x) */ mem[0] = round_fx(Lacc1); #endif Lacc1 = L_deposit_h( mem[1] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc1 = ( L_mac_o(Lacc1, AP2_STEEP_FX[1], temp1, &Overflow)); /* Q(16+x):temp[1] */ #else Lacc1 = ( L_mac(Lacc1, AP2_STEEP_FX[1], temp1 )); /* Q(16+x):temp[1] */ #endif Lacc = L_deposit_h( temp1 ); #ifdef BASOP_NOGLOB temp2 = round_fx_o( Lacc1, &Overflow); /* Qx */ Lacc = L_msu_o( Lacc, AP2_STEEP_FX[1], temp2, &Overflow); /* Q(16+x) */ mem[1] = round_fx_o( Lacc, &Overflow); /* Qx */ #else temp2 = round_fx( Lacc1 ); /* Qx */ Lacc = L_msu( Lacc, AP2_STEEP_FX[1], temp2 ); /* Q(16+x) */ mem[1] = round_fx( Lacc ); /* Qx */ #endif Lacc1 = L_deposit_h( temp2 ); Lacc = L_deposit_h( mem[ALLPASSSECTIONS_STEEP-1] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB out_fx[2*k+1] = round_fx_o( L_mac_o( Lacc, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], temp2, &Overflow), &Overflow); /* Qx format */ mem[ALLPASSSECTIONS_STEEP-1] = round_fx_o( L_msu_o(Lacc1, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], out_fx[2*k+1], &Overflow), &Overflow);/* Qx */ #else out_fx[2*k+1] = round_fx( L_mac( Lacc, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], temp2 )); /* Qx format */ mem[ALLPASSSECTIONS_STEEP-1] = round_fx( L_msu(Lacc1, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], out_fx[2*k+1] ));/* Qx */ #endif } /* lower allpass filter chain */ Loading @@ -872,26 +896,51 @@ void Interpolate_allpass_steep_fx( FOR ( k = 0; k < N; k++) { Lacc = L_deposit_h( mem[ ALLPASSSECTIONS_STEEP ] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc = L_mac_o( Lacc, AP1_STEEP_FX[0], in_fx[k], &Overflow ); /* Q(16+x):temp[0] */ #else Lacc = L_mac( Lacc, AP1_STEEP_FX[0], in_fx[k] ); /* Q(16+x):temp[0] */ #endif Lacc1 = L_deposit_h( in_fx[k] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB temp1 = round_fx_o( Lacc, &Overflow); /* Qx */ Lacc1 = L_msu_o( Lacc1, AP1_STEEP_FX[0], temp1, &Overflow); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP ] = round_fx_o( Lacc1, &Overflow); #else temp1 = round_fx( Lacc ); /* Qx */ Lacc1 = L_msu( Lacc1, AP1_STEEP_FX[0], temp1 ); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP ] = round_fx( Lacc1 ); #endif Lacc1 = L_deposit_h( mem[ ALLPASSSECTIONS_STEEP+1 ] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc1 = L_mac_o( Lacc1, AP1_STEEP_FX[1], temp1, &Overflow); /* Q(16+x):temp[1] */ temp2 = round_fx_o( Lacc1, &Overflow); /* Qx */ #else Lacc1 = L_mac( Lacc1, AP1_STEEP_FX[1], temp1 ); /* Q(16+x):temp[1] */ temp2 = round_fx( Lacc1 ); /* Qx */ #endif Lacc = L_deposit_h( temp1 ); #ifdef BASOP_NOGLOB Lacc = L_msu_o( Lacc, AP1_STEEP_FX[ 1 ], temp2, &Overflow); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP+1 ] = round_fx_o( Lacc, &Overflow); /* Qx */ #else Lacc = L_msu( Lacc, AP1_STEEP_FX[ 1 ], temp2 ); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP+1 ] = round_fx( Lacc ); /* Qx */ #endif Lacc = L_deposit_h( mem[ 2*ALLPASSSECTIONS_STEEP-1 ] ); /* Q(16+x) */ Lacc1 = L_deposit_h( temp2 ); #ifdef BASOP_NOGLOB out_fx[ 2*k ] = round_fx_o( L_mac_o( Lacc, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], temp2, &Overflow), &Overflow); /* Qx format */ mem[ 2*ALLPASSSECTIONS_STEEP-1 ] = round_fx_o( L_msu_o(Lacc1, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], out_fx[ 2*k ], &Overflow), &Overflow);/* Qx */ #else out_fx[ 2*k ] = round_fx( L_mac( Lacc, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], temp2 )); /* Qx format */ mem[ 2*ALLPASSSECTIONS_STEEP-1 ] = round_fx( L_msu(Lacc1, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], out_fx[ 2*k ] ));/* Qx */ #endif } Loading lib_com/tcx_ltp.c +12 −3 Original line number Diff line number Diff line Loading @@ -259,7 +259,9 @@ static void tcx_ltp_synth_filter( const Word16 *w0, *w1; Word16 alpha, step = 0; /* initialize just to avoid compiler warning */ Word16 i, j, k, L; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif IF (gain > 0) { x0 = &synth_ltp[-pitch_int]; Loading Loading @@ -329,7 +331,14 @@ static void tcx_ltp_synth_filter( move16(); BASOP_SATURATE_WARNING_OFF_EVS; #ifdef BASOP_NOGLOB if (fade != 0) { alpha = add_o(alpha, step, &Overflow); } #else if (fade != 0) alpha = add(alpha, step); #endif BASOP_SATURATE_WARNING_ON_EVS; x0++; Loading lib_com/tools_fx.c +11 −0 Original line number Diff line number Diff line Loading @@ -2074,13 +2074,20 @@ void add_vec_fx( ) { Word16 i, Qyx1, Qyx2; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif Qyx1 = sub(Qx1,Qy); Qyx2 = sub(Qx2,Qy); IF (Qyx1 == 0) { FOR (i=0 ; i<N ; i++) { #ifdef BASOP_NOGLOB y[i] = add_o(x1[i],shr_ro(x2[i],Qyx2, &Overflow), &Overflow); #else y[i] = add(x1[i],shr_r(x2[i],Qyx2)); #endif move16(); } } Loading @@ -2088,7 +2095,11 @@ void add_vec_fx( { FOR (i=0 ; i<N ; i++) { #ifdef BASOP_NOGLOB y[i] = add_o(shr_ro(x1[i],Qyx1, &Overflow),shr_ro(x2[i],Qyx2, &Overflow), &Overflow); #else y[i] = add(shr_r(x1[i],Qyx1),shr_r(x2[i],Qyx2)); #endif move16(); } } Loading lib_com/trans_inv_fx.c +12 −0 Original line number Diff line number Diff line Loading @@ -430,7 +430,11 @@ void preecho_sb_fx( move16(); } #ifdef BASOP_NOGLOB if( LT_32(max_es_fx, L_shl_o(mean_prev_fx_loc, 2, &Overflow)))/*OK if saturated*/ #else if( LT_32(max_es_fx, L_shl(mean_prev_fx_loc, 2)))/*OK if saturated*/ #endif { maxind = 0; move16(); Loading Loading @@ -892,12 +896,20 @@ void preecho_sb_fx( { savehalfe_fx = L_add(mean_prev_nc_fx_loc, 0); } #ifdef BASOP_NOGLOB mean_prev_nc_fx_loc = L_add_o(mean_prev_nc_fx_loc, es_mdct_fx[i], &Overflow); #else mean_prev_nc_fx_loc = L_add(mean_prev_nc_fx_loc, es_mdct_fx[i]); #endif } if( LT_32(savehalfe_fx, L_shr(mean_prev_nc_fx_loc,1) )) { #ifdef BASOP_NOGLOB mean_prev_nc_fx_loc = L_shl_o(L_sub_o(mean_prev_nc_fx_loc, savehalfe_fx, &Overflow), 1, &Overflow); #else mean_prev_nc_fx_loc = L_shl(L_sub(mean_prev_nc_fx_loc, savehalfe_fx), 1); #endif } mean_prev_nc_fx_loc = L_shr(mean_prev_nc_fx_loc, 3); /* >> LOG2_NUMSF in fixpoint */ Loading lib_dec/FEC_HQ_phase_ecu_fx.c +14 −2 Original line number Diff line number Diff line Loading @@ -886,7 +886,9 @@ static Word16 imax_fx( /* o: The location, relative to the middle of the 3 given Word16 y1, y2, y3, man, expo, edge; const Word16 *pY; Word32 numer, denom, sign, acc, y3_y1; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif /* Seek the extremum of the parabola P(x) defined by 3 consecutive points so that P([-1 0 1]) = [y1 y2 y3] */ pY = y; Loading Loading @@ -920,8 +922,11 @@ static Word16 imax_fx( /* o: The location, relative to the middle of the 3 given /* Although the output of ratio() is in Q14, adding the missing factor of 2 (See above) * in the denominator, the output is now considered to be in Q15. */ man = ratio(numer, denom, &expo); /* The mantissa is considered in Q15 */ #ifdef BASOP_NOGLOB posi = shr_o(man, expo, &Overflow); /* in Q15 (Due to saturation, it is automatically bound inside [-1.0,1.0].) */ #else posi = shr(man, expo); /* in Q15 (Due to saturation, it is automatically bound inside [-1.0,1.0].) */ #endif if (sign < 0) /* Restore the sign. */ { posi = negate(posi); Loading Loading @@ -1938,9 +1943,16 @@ Word32 mult_32_32_q(const Word32 a, const Word32 b, const Word16 q) { Word32 hi; UWord32 lo; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif Mpy_32_32_ss(a, b, &hi, &lo); #ifdef BASOP_NOGLOB return L_or(L_shl_o(hi, 32 - q - 1, &Overflow), L_lshr(lo, q + 1)); #else return L_or(L_shl(hi, 32 - q - 1), L_lshr(lo, q + 1)); #endif } static Loading Loading
lib_com/modif_fs_fx.c +58 −9 Original line number Diff line number Diff line Loading @@ -835,7 +835,9 @@ void Interpolate_allpass_steep_fx( Word16 k; Word32 Lacc=0, Lacc1=0; Word16 temp1, temp2; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif /*** State in Q0,in_fx Q0, AP1_STEEP in Q15 AP2_STEEP in Q15 OP in Q0 ************/ /*upper allpass filter chain */ Loading @@ -843,28 +845,50 @@ void Interpolate_allpass_steep_fx( { Lacc = L_deposit_h( mem[0] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc = L_mac_o( Lacc, AP2_STEEP_FX[0], in_fx[k], &Overflow ); /* Q(16+x):temp[0] */ #else Lacc = L_mac( Lacc, AP2_STEEP_FX[0], in_fx[k] ); /* Q(16+x):temp[0] */ #endif Lacc1 = L_deposit_h( in_fx[k] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB temp1 = round_fx_o( Lacc, &Overflow); /* Qx */ Lacc1 = L_msu_o( Lacc1, AP2_STEEP_FX[0], temp1, &Overflow); /* Q(16+x) */ mem[0] = round_fx_o( Lacc1, &Overflow); #else temp1 = round_fx(Lacc); /* Qx */ Lacc1 = L_msu(Lacc1, AP2_STEEP_FX[0], temp1); /* Q(16+x) */ mem[0] = round_fx(Lacc1); #endif Lacc1 = L_deposit_h( mem[1] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc1 = ( L_mac_o(Lacc1, AP2_STEEP_FX[1], temp1, &Overflow)); /* Q(16+x):temp[1] */ #else Lacc1 = ( L_mac(Lacc1, AP2_STEEP_FX[1], temp1 )); /* Q(16+x):temp[1] */ #endif Lacc = L_deposit_h( temp1 ); #ifdef BASOP_NOGLOB temp2 = round_fx_o( Lacc1, &Overflow); /* Qx */ Lacc = L_msu_o( Lacc, AP2_STEEP_FX[1], temp2, &Overflow); /* Q(16+x) */ mem[1] = round_fx_o( Lacc, &Overflow); /* Qx */ #else temp2 = round_fx( Lacc1 ); /* Qx */ Lacc = L_msu( Lacc, AP2_STEEP_FX[1], temp2 ); /* Q(16+x) */ mem[1] = round_fx( Lacc ); /* Qx */ #endif Lacc1 = L_deposit_h( temp2 ); Lacc = L_deposit_h( mem[ALLPASSSECTIONS_STEEP-1] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB out_fx[2*k+1] = round_fx_o( L_mac_o( Lacc, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], temp2, &Overflow), &Overflow); /* Qx format */ mem[ALLPASSSECTIONS_STEEP-1] = round_fx_o( L_msu_o(Lacc1, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], out_fx[2*k+1], &Overflow), &Overflow);/* Qx */ #else out_fx[2*k+1] = round_fx( L_mac( Lacc, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], temp2 )); /* Qx format */ mem[ALLPASSSECTIONS_STEEP-1] = round_fx( L_msu(Lacc1, AP2_STEEP_FX[ALLPASSSECTIONS_STEEP-1], out_fx[2*k+1] ));/* Qx */ #endif } /* lower allpass filter chain */ Loading @@ -872,26 +896,51 @@ void Interpolate_allpass_steep_fx( FOR ( k = 0; k < N; k++) { Lacc = L_deposit_h( mem[ ALLPASSSECTIONS_STEEP ] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc = L_mac_o( Lacc, AP1_STEEP_FX[0], in_fx[k], &Overflow ); /* Q(16+x):temp[0] */ #else Lacc = L_mac( Lacc, AP1_STEEP_FX[0], in_fx[k] ); /* Q(16+x):temp[0] */ #endif Lacc1 = L_deposit_h( in_fx[k] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB temp1 = round_fx_o( Lacc, &Overflow); /* Qx */ Lacc1 = L_msu_o( Lacc1, AP1_STEEP_FX[0], temp1, &Overflow); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP ] = round_fx_o( Lacc1, &Overflow); #else temp1 = round_fx( Lacc ); /* Qx */ Lacc1 = L_msu( Lacc1, AP1_STEEP_FX[0], temp1 ); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP ] = round_fx( Lacc1 ); #endif Lacc1 = L_deposit_h( mem[ ALLPASSSECTIONS_STEEP+1 ] ); /* Q(16+x) */ #ifdef BASOP_NOGLOB Lacc1 = L_mac_o( Lacc1, AP1_STEEP_FX[1], temp1, &Overflow); /* Q(16+x):temp[1] */ temp2 = round_fx_o( Lacc1, &Overflow); /* Qx */ #else Lacc1 = L_mac( Lacc1, AP1_STEEP_FX[1], temp1 ); /* Q(16+x):temp[1] */ temp2 = round_fx( Lacc1 ); /* Qx */ #endif Lacc = L_deposit_h( temp1 ); #ifdef BASOP_NOGLOB Lacc = L_msu_o( Lacc, AP1_STEEP_FX[ 1 ], temp2, &Overflow); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP+1 ] = round_fx_o( Lacc, &Overflow); /* Qx */ #else Lacc = L_msu( Lacc, AP1_STEEP_FX[ 1 ], temp2 ); /* Q(16+x) */ mem[ ALLPASSSECTIONS_STEEP+1 ] = round_fx( Lacc ); /* Qx */ #endif Lacc = L_deposit_h( mem[ 2*ALLPASSSECTIONS_STEEP-1 ] ); /* Q(16+x) */ Lacc1 = L_deposit_h( temp2 ); #ifdef BASOP_NOGLOB out_fx[ 2*k ] = round_fx_o( L_mac_o( Lacc, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], temp2, &Overflow), &Overflow); /* Qx format */ mem[ 2*ALLPASSSECTIONS_STEEP-1 ] = round_fx_o( L_msu_o(Lacc1, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], out_fx[ 2*k ], &Overflow), &Overflow);/* Qx */ #else out_fx[ 2*k ] = round_fx( L_mac( Lacc, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], temp2 )); /* Qx format */ mem[ 2*ALLPASSSECTIONS_STEEP-1 ] = round_fx( L_msu(Lacc1, AP1_STEEP_FX[ ALLPASSSECTIONS_STEEP-1 ], out_fx[ 2*k ] ));/* Qx */ #endif } Loading
lib_com/tcx_ltp.c +12 −3 Original line number Diff line number Diff line Loading @@ -259,7 +259,9 @@ static void tcx_ltp_synth_filter( const Word16 *w0, *w1; Word16 alpha, step = 0; /* initialize just to avoid compiler warning */ Word16 i, j, k, L; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif IF (gain > 0) { x0 = &synth_ltp[-pitch_int]; Loading Loading @@ -329,7 +331,14 @@ static void tcx_ltp_synth_filter( move16(); BASOP_SATURATE_WARNING_OFF_EVS; #ifdef BASOP_NOGLOB if (fade != 0) { alpha = add_o(alpha, step, &Overflow); } #else if (fade != 0) alpha = add(alpha, step); #endif BASOP_SATURATE_WARNING_ON_EVS; x0++; Loading
lib_com/tools_fx.c +11 −0 Original line number Diff line number Diff line Loading @@ -2074,13 +2074,20 @@ void add_vec_fx( ) { Word16 i, Qyx1, Qyx2; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif Qyx1 = sub(Qx1,Qy); Qyx2 = sub(Qx2,Qy); IF (Qyx1 == 0) { FOR (i=0 ; i<N ; i++) { #ifdef BASOP_NOGLOB y[i] = add_o(x1[i],shr_ro(x2[i],Qyx2, &Overflow), &Overflow); #else y[i] = add(x1[i],shr_r(x2[i],Qyx2)); #endif move16(); } } Loading @@ -2088,7 +2095,11 @@ void add_vec_fx( { FOR (i=0 ; i<N ; i++) { #ifdef BASOP_NOGLOB y[i] = add_o(shr_ro(x1[i],Qyx1, &Overflow),shr_ro(x2[i],Qyx2, &Overflow), &Overflow); #else y[i] = add(shr_r(x1[i],Qyx1),shr_r(x2[i],Qyx2)); #endif move16(); } } Loading
lib_com/trans_inv_fx.c +12 −0 Original line number Diff line number Diff line Loading @@ -430,7 +430,11 @@ void preecho_sb_fx( move16(); } #ifdef BASOP_NOGLOB if( LT_32(max_es_fx, L_shl_o(mean_prev_fx_loc, 2, &Overflow)))/*OK if saturated*/ #else if( LT_32(max_es_fx, L_shl(mean_prev_fx_loc, 2)))/*OK if saturated*/ #endif { maxind = 0; move16(); Loading Loading @@ -892,12 +896,20 @@ void preecho_sb_fx( { savehalfe_fx = L_add(mean_prev_nc_fx_loc, 0); } #ifdef BASOP_NOGLOB mean_prev_nc_fx_loc = L_add_o(mean_prev_nc_fx_loc, es_mdct_fx[i], &Overflow); #else mean_prev_nc_fx_loc = L_add(mean_prev_nc_fx_loc, es_mdct_fx[i]); #endif } if( LT_32(savehalfe_fx, L_shr(mean_prev_nc_fx_loc,1) )) { #ifdef BASOP_NOGLOB mean_prev_nc_fx_loc = L_shl_o(L_sub_o(mean_prev_nc_fx_loc, savehalfe_fx, &Overflow), 1, &Overflow); #else mean_prev_nc_fx_loc = L_shl(L_sub(mean_prev_nc_fx_loc, savehalfe_fx), 1); #endif } mean_prev_nc_fx_loc = L_shr(mean_prev_nc_fx_loc, 3); /* >> LOG2_NUMSF in fixpoint */ Loading
lib_dec/FEC_HQ_phase_ecu_fx.c +14 −2 Original line number Diff line number Diff line Loading @@ -886,7 +886,9 @@ static Word16 imax_fx( /* o: The location, relative to the middle of the 3 given Word16 y1, y2, y3, man, expo, edge; const Word16 *pY; Word32 numer, denom, sign, acc, y3_y1; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif /* Seek the extremum of the parabola P(x) defined by 3 consecutive points so that P([-1 0 1]) = [y1 y2 y3] */ pY = y; Loading Loading @@ -920,8 +922,11 @@ static Word16 imax_fx( /* o: The location, relative to the middle of the 3 given /* Although the output of ratio() is in Q14, adding the missing factor of 2 (See above) * in the denominator, the output is now considered to be in Q15. */ man = ratio(numer, denom, &expo); /* The mantissa is considered in Q15 */ #ifdef BASOP_NOGLOB posi = shr_o(man, expo, &Overflow); /* in Q15 (Due to saturation, it is automatically bound inside [-1.0,1.0].) */ #else posi = shr(man, expo); /* in Q15 (Due to saturation, it is automatically bound inside [-1.0,1.0].) */ #endif if (sign < 0) /* Restore the sign. */ { posi = negate(posi); Loading Loading @@ -1938,9 +1943,16 @@ Word32 mult_32_32_q(const Word32 a, const Word32 b, const Word16 q) { Word32 hi; UWord32 lo; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; #endif Mpy_32_32_ss(a, b, &hi, &lo); #ifdef BASOP_NOGLOB return L_or(L_shl_o(hi, 32 - q - 1, &Overflow), L_lshr(lo, q + 1)); #else return L_or(L_shl(hi, 32 - q - 1), L_lshr(lo, q + 1)); #endif } static Loading