Loading basic_math/math_op.c +14 −0 Original line number Diff line number Diff line Loading @@ -245,11 +245,24 @@ Word32 Energy_scale( /* (o) : Q31: normalized result (1 < FOR (i = 1; i < lg; i++) { tmp = mult_r(x[i], sft); #ifdef BASOP_NOGLOB L_sum = L_mac_o(L_sum, tmp, tmp, &Overflow); #else L_sum = L_mac(L_sum, tmp, tmp); #endif } } IF (expi > 0) { #ifdef BASOP_NOGLOB tmp = shl_o(x[0], expi, &Overflow); L_sum = L_mac_o(1, tmp, tmp, &Overflow); FOR (i = 1; i < lg; i++) { tmp = shl_o(x[i], expi, &Overflow); L_sum = L_mac_o(L_sum, tmp, tmp, &Overflow); } #else tmp = shl(x[0], expi); L_sum = L_mac(1, tmp, tmp); FOR (i = 1; i < lg; i++) Loading @@ -257,6 +270,7 @@ Word32 Energy_scale( /* (o) : Q31: normalized result (1 < tmp = shl(x[i], expi); L_sum = L_mac(L_sum, tmp, tmp); } #endif } /* Normalize acc in Q31 */ Loading basic_math/oper_32b.c +23 −6 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include "stl.h" #include "math_op.h" #include "basop32.h" /***************************************************************************** * * Loading Loading @@ -122,11 +123,17 @@ Word32 L_Comp (Word16 hi, Word16 lo) Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) { Word32 L_32; #ifdef BASOP_NOGLOB Flag Overflow = 0; L_32 = L_mult (hi1, hi2); L_32 = L_mac_o (L_32, mult (hi1, lo2), 1, &Overflow); L_32 = L_mac_o (L_32, mult (lo1, hi2), 1, &Overflow); #else L_32 = L_mult (hi1, hi2); L_32 = L_mac (L_32, mult (hi1, lo2), 1); L_32 = L_mac (L_32, mult (lo1, hi2), 1); #endif return (L_32); } Loading Loading @@ -154,11 +161,16 @@ Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) Word32 Mac_32 (Word32 L_num, Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) { Word32 L_32; #ifdef BASOP_NOGLOB Flag Overflow = 0; L_32 = L_mac_o (L_num, hi1, hi2, &Overflow); L_32 = L_mac_o(L_32, mult (hi1, lo2), 1, &Overflow); L_32 = L_mac_o(L_32, mult (lo1, hi2), 1, &Overflow); #else L_32 = L_mac (L_num, hi1, hi2); L_32 = L_mac (L_32, mult (hi1, lo2), 1); L_32 = L_mac (L_32, mult (lo1, hi2), 1); #endif return (L_32); } Loading @@ -185,9 +197,14 @@ Word32 Mac_32 (Word32 L_num, Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) Word32 Sqr_32 (Word16 hi, Word16 lo) { Word32 L_32; #ifdef BASOP_NOGLOB Flag Overflow = 0; L_32 = L_mult_o (hi, hi, &Overflow); L_32 = L_mac_o (L_32, mult (hi, lo), 2, &Overflow); #else L_32 = L_mult(hi, hi); L_32 = L_mac(L_32, mult(hi, lo), 2); #endif return (L_32); } Loading basic_op/basop32.c +14 −3 Original line number Diff line number Diff line Loading @@ -1881,14 +1881,21 @@ Word32 L_shr (Word32 L_var1, Word16 var2) { | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ #ifdef BASOP_NOGLOB Word16 shr_r_o (Word16 var1, Word16 var2, Flag* Overflow) { #else Word16 shr_r (Word16 var1, Word16 var2) { #endif Word16 var_out; if (var2 > 15) { var_out = 0; } else { #ifdef BASOP_NOGLOB var_out = shr_o(var1, var2, Overflow); #else var_out = shr (var1, var2); #endif #if (WMOPS) multiCounter[currCounter].shr--; #endif Loading @@ -1905,7 +1912,11 @@ Word16 shr_r (Word16 var1, Word16 var2) { #endif return (var_out); } #ifdef BASOP_NOGLOB Word16 shr_r(Word16 var1, Word16 var2) { return shr_r_o(var1, var2, NULL); } #endif /* BASOP_NOGLOB */ /*___________________________________________________________________________ | | Loading basic_op/basop32.h +1 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,7 @@ Word16 add_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 sub_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 shl_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 shr_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 shr_r_o(Word16 var1, Word16 var2, Flag* Overflow); Word16 mult_o (Word16 var1, Word16 var2, Flag * Overflow); Word32 L_mult_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 round_fx_o (Word32 L_var1, Flag * Overflow); Loading lib_com/arith_coder.c +8 −0 Original line number Diff line number Diff line Loading @@ -223,7 +223,11 @@ void tcx_arith_scale_envelope( tmp = norm_l(env[k]); tmp2 = sub(15, tmp); #ifdef BASOP_NOGLOB tmp = Inv16(round_fx_o(L_shl_o(env[k], tmp, &Overflow), &Overflow), &tmp2); #else tmp = Inv16(round_fx(L_shl(env[k], tmp)), &tmp2); #endif ienv[k] = L_shl(L_deposit_h(tmp), sub(tmp2, 15)); /* Q16 */ move32(); mean = L_add(mean, ienv[k]); } Loading Loading @@ -318,7 +322,11 @@ void tcx_arith_scale_envelope( L_tmp = L_add(L_tmp, L_shl(Mpy_32_16_1(env[k], mult_r(1147/*0.035f Q15*/, iscale)), iscale_e)); tmp = norm_l(L_tmp); #ifdef BASOP_NOGLOB statesi = mult_r(statesi, round_fx_o(L_shl_o(L_tmp, tmp, &Overflow), &Overflow)); #else statesi = mult_r(statesi, round_fx(L_shl(L_tmp, tmp))); #endif bits = add(bits, sub(15, tmp)); tmp = norm_s(statesi); Loading Loading
basic_math/math_op.c +14 −0 Original line number Diff line number Diff line Loading @@ -245,11 +245,24 @@ Word32 Energy_scale( /* (o) : Q31: normalized result (1 < FOR (i = 1; i < lg; i++) { tmp = mult_r(x[i], sft); #ifdef BASOP_NOGLOB L_sum = L_mac_o(L_sum, tmp, tmp, &Overflow); #else L_sum = L_mac(L_sum, tmp, tmp); #endif } } IF (expi > 0) { #ifdef BASOP_NOGLOB tmp = shl_o(x[0], expi, &Overflow); L_sum = L_mac_o(1, tmp, tmp, &Overflow); FOR (i = 1; i < lg; i++) { tmp = shl_o(x[i], expi, &Overflow); L_sum = L_mac_o(L_sum, tmp, tmp, &Overflow); } #else tmp = shl(x[0], expi); L_sum = L_mac(1, tmp, tmp); FOR (i = 1; i < lg; i++) Loading @@ -257,6 +270,7 @@ Word32 Energy_scale( /* (o) : Q31: normalized result (1 < tmp = shl(x[i], expi); L_sum = L_mac(L_sum, tmp, tmp); } #endif } /* Normalize acc in Q31 */ Loading
basic_math/oper_32b.c +23 −6 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include "stl.h" #include "math_op.h" #include "basop32.h" /***************************************************************************** * * Loading Loading @@ -122,11 +123,17 @@ Word32 L_Comp (Word16 hi, Word16 lo) Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) { Word32 L_32; #ifdef BASOP_NOGLOB Flag Overflow = 0; L_32 = L_mult (hi1, hi2); L_32 = L_mac_o (L_32, mult (hi1, lo2), 1, &Overflow); L_32 = L_mac_o (L_32, mult (lo1, hi2), 1, &Overflow); #else L_32 = L_mult (hi1, hi2); L_32 = L_mac (L_32, mult (hi1, lo2), 1); L_32 = L_mac (L_32, mult (lo1, hi2), 1); #endif return (L_32); } Loading Loading @@ -154,11 +161,16 @@ Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) Word32 Mac_32 (Word32 L_num, Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) { Word32 L_32; #ifdef BASOP_NOGLOB Flag Overflow = 0; L_32 = L_mac_o (L_num, hi1, hi2, &Overflow); L_32 = L_mac_o(L_32, mult (hi1, lo2), 1, &Overflow); L_32 = L_mac_o(L_32, mult (lo1, hi2), 1, &Overflow); #else L_32 = L_mac (L_num, hi1, hi2); L_32 = L_mac (L_32, mult (hi1, lo2), 1); L_32 = L_mac (L_32, mult (lo1, hi2), 1); #endif return (L_32); } Loading @@ -185,9 +197,14 @@ Word32 Mac_32 (Word32 L_num, Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2) Word32 Sqr_32 (Word16 hi, Word16 lo) { Word32 L_32; #ifdef BASOP_NOGLOB Flag Overflow = 0; L_32 = L_mult_o (hi, hi, &Overflow); L_32 = L_mac_o (L_32, mult (hi, lo), 2, &Overflow); #else L_32 = L_mult(hi, hi); L_32 = L_mac(L_32, mult(hi, lo), 2); #endif return (L_32); } Loading
basic_op/basop32.c +14 −3 Original line number Diff line number Diff line Loading @@ -1881,14 +1881,21 @@ Word32 L_shr (Word32 L_var1, Word16 var2) { | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ #ifdef BASOP_NOGLOB Word16 shr_r_o (Word16 var1, Word16 var2, Flag* Overflow) { #else Word16 shr_r (Word16 var1, Word16 var2) { #endif Word16 var_out; if (var2 > 15) { var_out = 0; } else { #ifdef BASOP_NOGLOB var_out = shr_o(var1, var2, Overflow); #else var_out = shr (var1, var2); #endif #if (WMOPS) multiCounter[currCounter].shr--; #endif Loading @@ -1905,7 +1912,11 @@ Word16 shr_r (Word16 var1, Word16 var2) { #endif return (var_out); } #ifdef BASOP_NOGLOB Word16 shr_r(Word16 var1, Word16 var2) { return shr_r_o(var1, var2, NULL); } #endif /* BASOP_NOGLOB */ /*___________________________________________________________________________ | | Loading
basic_op/basop32.h +1 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,7 @@ Word16 add_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 sub_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 shl_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 shr_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 shr_r_o(Word16 var1, Word16 var2, Flag* Overflow); Word16 mult_o (Word16 var1, Word16 var2, Flag * Overflow); Word32 L_mult_o (Word16 var1, Word16 var2, Flag * Overflow); Word16 round_fx_o (Word32 L_var1, Flag * Overflow); Loading
lib_com/arith_coder.c +8 −0 Original line number Diff line number Diff line Loading @@ -223,7 +223,11 @@ void tcx_arith_scale_envelope( tmp = norm_l(env[k]); tmp2 = sub(15, tmp); #ifdef BASOP_NOGLOB tmp = Inv16(round_fx_o(L_shl_o(env[k], tmp, &Overflow), &Overflow), &tmp2); #else tmp = Inv16(round_fx(L_shl(env[k], tmp)), &tmp2); #endif ienv[k] = L_shl(L_deposit_h(tmp), sub(tmp2, 15)); /* Q16 */ move32(); mean = L_add(mean, ienv[k]); } Loading Loading @@ -318,7 +322,11 @@ void tcx_arith_scale_envelope( L_tmp = L_add(L_tmp, L_shl(Mpy_32_16_1(env[k], mult_r(1147/*0.035f Q15*/, iscale)), iscale_e)); tmp = norm_l(L_tmp); #ifdef BASOP_NOGLOB statesi = mult_r(statesi, round_fx_o(L_shl_o(L_tmp, tmp, &Overflow), &Overflow)); #else statesi = mult_r(statesi, round_fx(L_shl(L_tmp, tmp))); #endif bits = add(bits, sub(15, tmp)); tmp = norm_s(statesi); Loading