Index: celt/fixed_generic.h |
diff --git a/celt/fixed_generic.h b/celt/fixed_generic.h |
index ecf018a2443a200ecb55afd3445ac499afd75c80..ac67d37ce8cea2a9e6dcd7caa19321217bb3ffcc 100644 |
--- a/celt/fixed_generic.h |
+++ b/celt/fixed_generic.h |
@@ -113,7 +113,11 @@ |
/** 16x32 multiply, followed by a 15-bit shift right and 32-bit add. |
b must fit in 31 bits. |
Result fits in 32 bits. */ |
-#define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) |
+#define MAC16_32_Q15(c,a,b) ADD32((c),ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))) |
+ |
+/** 16x32 multiplication, followed by a 16-bit shift right and 32-bit add. |
+ Results fits in 32 bits */ |
+#define MAC16_32_Q16(c,a,b) ADD32((c),ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16))) |
#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11)) |
#define MULT16_16_Q11(a,b) (SHR(MULT16_16((a),(b)),11)) |
@@ -131,4 +135,17 @@ |
/** Divide a 32-bit value by a 32-bit value. Result fits in 32 bits */ |
#define DIV32(a,b) (((opus_val32)(a))/((opus_val32)(b))) |
+#if defined(MIPSr1_ASM) |
+#include "mips/fixed_generic_mipsr1.h" |
+#endif |
+ |
+static OPUS_INLINE opus_val16 SIG2WORD16_generic(celt_sig x) |
+{ |
+ x = PSHR32(x, SIG_SHIFT); |
+ x = MAX32(x, -32768); |
+ x = MIN32(x, 32767); |
+ return EXTRACT16(x); |
+} |
+#define SIG2WORD16(x) (SIG2WORD16_generic(x)) |
+ |
#endif |