X-Git-Url: https://git.xiph.org/?p=opus.git;a=blobdiff_plain;f=celt%2Fmathops.h;h=44fa97c69751570143fb11c4802827083706b653;hp=18a66be165240f0ebce7100dbe3fc39e2313f644;hb=36a21ed53636ed4471aa62a8d06dcf175d6ff395;hpb=b7bd4c20acfd951ba46647e07411285997d952f4 diff --git a/celt/mathops.h b/celt/mathops.h index 18a66be1..44fa97c6 100644 --- a/celt/mathops.h +++ b/celt/mathops.h @@ -190,6 +190,13 @@ static inline opus_val16 celt_log2(opus_val32 x) #define D1 22804 #define D2 14819 #define D3 10204 + +static inline opus_val32 celt_exp2_frac(opus_val16 x) +{ + opus_val16 frac; + frac = SHL16(x, 4); + return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac)))))); +} /** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */ static inline opus_val32 celt_exp2(opus_val16 x) { @@ -200,8 +207,7 @@ static inline opus_val32 celt_exp2(opus_val16 x) return 0x7f000000; else if (integer < -15) return 0; - frac = SHL16(x-SHL16(integer,10),4); - frac = ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac)))))); + frac = celt_exp2_frac(x-SHL16(integer,10)); return VSHR32(EXTEND32(frac), -integer-2); }