Loading basic_math/math_op.c +26 −0 Original line number Diff line number Diff line Loading @@ -167,7 +167,33 @@ Word32 Pow2( /* (o) Q0 : result (range: 0<=v | dot_product = sum(x[i]*y[i]) i=0..N-1 | |___________________________________________________________________________| */ #ifdef BASOP_NOGLOB Word32 Dot_product12_o( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16* exp, /* (o) : exponent of result (0..+30) */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level */ ) { Word16 i, sft; Word32 L_sum; L_sum = L_mac(1, x[0], y[0]); FOR(i = 1; i < lg; i++) { L_sum = L_mac_o(L_sum, x[i], y[i], Overflow_out); } /* Normalize acc in Q31 */ sft = norm_l(L_sum); L_sum = L_shl(L_sum, sft); *exp = sub(30, sft); move16(); /* exponent = 0..30 */ return L_sum; } #endif Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ Loading basic_math/math_op.h +10 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ *--------------------------------------------------------------------------*/ #include "oper_32b.h" #include "log2.h" #include "stl.h" Word32 Isqrt( /* (o) Q31 : output value (range: 0<=val<1) */ Word32 L_x /* (i) Q0 : input value (range: 0<=val<=7fffffff) */ Loading @@ -18,13 +19,21 @@ Word32 Pow2( /* (o) Q0 : result (range: 0<=val<=0x7fffffff) */ Word16 exponant, /* (i) Q0 : Integer part. (range: 0<=val<=30) */ Word16 fraction /* (i) Q15 : Fractionnal part. (range: 0.0<=val<1.0) */ ); #ifdef BASOP_NOGLOB Word32 Dot_product12_o( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16* exp, /* (o) : exponent of result (0..+30) */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level */ ); #endif Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ); Word32 Energy_scale( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 lg, /* (i) : vector length */ Loading lib_com/edct_fx.c +9 −7 Original line number Diff line number Diff line Loading @@ -314,21 +314,22 @@ void edct_16fx( i2 = shl(i,1); L_tmp = L_mult(x[i2],edct_table[i]);/*Q(Qx+16) */ Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB re2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ Lacc = L_mac_o(L_tmp,*px,*pt, &Overflow);/*Q(Qx+16) */ re2[i] = round_fx_o(L_shl_o(Lacc, Q_edct, &Overflow), &Overflow); /* Q(Qx+Q_edct) */ #else Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */ re2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif L_tmp = L_mult(*px,edct_table[i]);/*Q(Qx+16) */ Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB im2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ Lacc = L_msu_o(L_tmp,x[i2],*pt, &Overflow);/*Q(Qx+16) */ im2[i] = round_fx_o(L_shl_o(Lacc, Q_edct, &Overflow), &Overflow); /* Q(Qx+Q_edct) */ #else Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */ im2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif px -= 2; pt--; } Loading Loading @@ -375,10 +376,11 @@ void edct_16fx( i2 = shl(i,1); L_tmp = L_mult(re[i],edct_table[i]);/*Q(Qx+Q_edct+16) */ Lacc = L_mac(L_tmp,im[i],*pt);/*Q(Qx+Q_edct+16) */ #ifdef BASOP_NOGLOB Lacc = L_mac_o(L_tmp, im[i], *pt, &Overflow);/*Q(Qx+Q_edct+16) */ y[i2] = round_fx_o(L_shr_o(Lacc,Q_edct, &Overflow), &Overflow); /* Q(Qx) */ #else /* BASOP_NOGLOB */ Lacc = L_mac(L_tmp, im[i], *pt);/*Q(Qx+Q_edct+16) */ y[i2] = round_fx(L_shr(Lacc,Q_edct)); /* Q(Qx) */ #endif /* BASOP_NOGLOB */ Loading lib_com/fft_fx.c +292 −158 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_com/gs_noisefill_fx.c +2 −1 Original line number Diff line number Diff line Loading @@ -1038,10 +1038,11 @@ void highband_exc_dct_in_fx( IF(GT_16(tmp,abs_s(*dst))) { tmp2 = *src; *src = mult_r(16384,sub(*src , abs_s(*dst))); /*Q_exc */ move16(); #ifdef BASOP_NOGLOB * src = mult_r(16384, sub_o(*src, abs_s(*dst), &Overflow)); /*Q_exc */ move16(); tmp = mult_r(16384,add_o(tmp2 , abs_s(*dst), &Overflow)); /*Q_exc */ #else /* BASOP_NOGLOB */ * src = mult_r(16384, sub(*src, abs_s(*dst))); /*Q_exc */ move16(); tmp = mult_r(16384,add(tmp2 , abs_s(*dst))); /*Q_exc */ #endif /* BASOP_NOGLOB */ if( tmp2 > 0 ) Loading Loading
basic_math/math_op.c +26 −0 Original line number Diff line number Diff line Loading @@ -167,7 +167,33 @@ Word32 Pow2( /* (o) Q0 : result (range: 0<=v | dot_product = sum(x[i]*y[i]) i=0..N-1 | |___________________________________________________________________________| */ #ifdef BASOP_NOGLOB Word32 Dot_product12_o( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16* exp, /* (o) : exponent of result (0..+30) */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level */ ) { Word16 i, sft; Word32 L_sum; L_sum = L_mac(1, x[0], y[0]); FOR(i = 1; i < lg; i++) { L_sum = L_mac_o(L_sum, x[i], y[i], Overflow_out); } /* Normalize acc in Q31 */ sft = norm_l(L_sum); L_sum = L_shl(L_sum, sft); *exp = sub(30, sft); move16(); /* exponent = 0..30 */ return L_sum; } #endif Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ Loading
basic_math/math_op.h +10 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ *--------------------------------------------------------------------------*/ #include "oper_32b.h" #include "log2.h" #include "stl.h" Word32 Isqrt( /* (o) Q31 : output value (range: 0<=val<1) */ Word32 L_x /* (i) Q0 : input value (range: 0<=val<=7fffffff) */ Loading @@ -18,13 +19,21 @@ Word32 Pow2( /* (o) Q0 : result (range: 0<=val<=0x7fffffff) */ Word16 exponant, /* (i) Q0 : Integer part. (range: 0<=val<=30) */ Word16 fraction /* (i) Q15 : Fractionnal part. (range: 0.0<=val<1.0) */ ); #ifdef BASOP_NOGLOB Word32 Dot_product12_o( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16* exp, /* (o) : exponent of result (0..+30) */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level */ ); #endif Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ); Word32 Energy_scale( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 lg, /* (i) : vector length */ Loading
lib_com/edct_fx.c +9 −7 Original line number Diff line number Diff line Loading @@ -314,21 +314,22 @@ void edct_16fx( i2 = shl(i,1); L_tmp = L_mult(x[i2],edct_table[i]);/*Q(Qx+16) */ Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB re2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ Lacc = L_mac_o(L_tmp,*px,*pt, &Overflow);/*Q(Qx+16) */ re2[i] = round_fx_o(L_shl_o(Lacc, Q_edct, &Overflow), &Overflow); /* Q(Qx+Q_edct) */ #else Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */ re2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif L_tmp = L_mult(*px,edct_table[i]);/*Q(Qx+16) */ Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB im2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ Lacc = L_msu_o(L_tmp,x[i2],*pt, &Overflow);/*Q(Qx+16) */ im2[i] = round_fx_o(L_shl_o(Lacc, Q_edct, &Overflow), &Overflow); /* Q(Qx+Q_edct) */ #else Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */ im2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif px -= 2; pt--; } Loading Loading @@ -375,10 +376,11 @@ void edct_16fx( i2 = shl(i,1); L_tmp = L_mult(re[i],edct_table[i]);/*Q(Qx+Q_edct+16) */ Lacc = L_mac(L_tmp,im[i],*pt);/*Q(Qx+Q_edct+16) */ #ifdef BASOP_NOGLOB Lacc = L_mac_o(L_tmp, im[i], *pt, &Overflow);/*Q(Qx+Q_edct+16) */ y[i2] = round_fx_o(L_shr_o(Lacc,Q_edct, &Overflow), &Overflow); /* Q(Qx) */ #else /* BASOP_NOGLOB */ Lacc = L_mac(L_tmp, im[i], *pt);/*Q(Qx+Q_edct+16) */ y[i2] = round_fx(L_shr(Lacc,Q_edct)); /* Q(Qx) */ #endif /* BASOP_NOGLOB */ Loading
lib_com/gs_noisefill_fx.c +2 −1 Original line number Diff line number Diff line Loading @@ -1038,10 +1038,11 @@ void highband_exc_dct_in_fx( IF(GT_16(tmp,abs_s(*dst))) { tmp2 = *src; *src = mult_r(16384,sub(*src , abs_s(*dst))); /*Q_exc */ move16(); #ifdef BASOP_NOGLOB * src = mult_r(16384, sub_o(*src, abs_s(*dst), &Overflow)); /*Q_exc */ move16(); tmp = mult_r(16384,add_o(tmp2 , abs_s(*dst), &Overflow)); /*Q_exc */ #else /* BASOP_NOGLOB */ * src = mult_r(16384, sub(*src, abs_s(*dst))); /*Q_exc */ move16(); tmp = mult_r(16384,add(tmp2 , abs_s(*dst))); /*Q_exc */ #endif /* BASOP_NOGLOB */ if( tmp2 > 0 ) Loading