summaryrefslogtreecommitdiff
path: root/drivers/opus/celt/fixed_generic.h
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2016-05-03 22:32:38 -0300
committerJuan Linietsky <reduzio@gmail.com>2016-05-03 22:32:38 -0300
commitdd69aeceac3d1798d0869d8adfb44af883b5fb93 (patch)
tree717e9b909ada0661940f6f3d2bd5349c6424bbf1 /drivers/opus/celt/fixed_generic.h
parent567cb691ec49844101247bb9dc34bc2722f6af4f (diff)
parentb81d9e6d614a67fd58e2256e90055589205bfa30 (diff)
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'drivers/opus/celt/fixed_generic.h')
-rw-r--r--drivers/opus/celt/fixed_generic.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/opus/celt/fixed_generic.h b/drivers/opus/celt/fixed_generic.h
index ecf018a244..71ab048e4a 100644
--- a/drivers/opus/celt/fixed_generic.h
+++ b/drivers/opus/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 "opus/celt/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