fixed-point: playing it safe. SHL32() now automatically casts input to 32-bit
[opus.git] / libcelt / fixed_debug.h
index 66c0510..136f4d7 100644 (file)
@@ -41,6 +41,9 @@
 static long long celt_mips = 0;
 #define MIPS_INC celt_mips++,
 
+#define MULT16_16SU(a,b) ((celt_word32_t)(celt_word16_t)(a)*(celt_word32_t)(celt_uint16_t)(b))
+#define MULT32_32_Q31(a,b) ADD32(ADD32(SHL(MULT16_16(SHR((a),16),SHR((b),16)),1), SHR(MULT16_16SU(SHR((a),16),((b)&0x0000ffff)),15)), SHR(MULT16_16SU(SHR((b),16),((a)&0x0000ffff)),15))
+
 #define QCONST16(x,bits) ((celt_word16_t)(.5+(x)*(((celt_word32_t)1)<<(bits))))
 #define QCONST32(x,bits) ((celt_word32_t)(.5+(x)*(((celt_word32_t)1)<<(bits))))
 
@@ -172,6 +175,7 @@ static inline int SHL32(long long a, int shift)
 #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 
 #define ROUND(x,a) (EXTRACT16(PSHR32((x),(a))))
+#define HALF32(x)  (SHR32(x,1))
 
 //#define SHR(a,shift) ((a) >> (shift))
 //#define SHL(a,shift) ((a) << (shift))