Fixed a bunch of fixed-point overflows on insanely hot signals by changing
[opus.git] / libcelt / arch.h
index 3a03b0a..4ac7cfc 100644 (file)
@@ -47,6 +47,7 @@
 #define celt_assert2(cond, message)
 #endif
 
+#define IMUL32(a,b) ((a)*(b))
 
 #define ABS(x) ((x) < 0 ? (-(x)) : (x))      /**< Absolute integer value. */
 #define ABS16(x) ((x) < 0 ? (-(x)) : (x))    /**< Absolute 16-bit value.  */
@@ -70,9 +71,7 @@ typedef celt_word32_t celt_mask_t;
 #define Q15ONE 32767
 #define Q30ONE 1073741823
 
-#define SIG_SCALING 16384.f
-#define SIG_SCALING_1 (1.f/16384.f)
-#define SIG_SHIFT 14
+#define SIG_SHIFT 12
 
 #define NORM_SCALING 16384
 #define NORM_SCALING_1 (1.f/16384.f)
@@ -80,6 +79,7 @@ typedef celt_word32_t celt_mask_t;
 
 #define ENER_SCALING 16384.f
 #define ENER_SCALING_1 (1.f/16384.f)
+#define ENER_SHIFT 14
 
 #define PGAIN_SCALING 32768.f
 #define PGAIN_SCALING_1 (1.f/32768.f)
@@ -95,6 +95,8 @@ typedef celt_word32_t celt_mask_t;
 #define Q15_ONE ((celt_word16_t)32767)
 #define Q15_ONE_1 (1.f/32768.f)
 
+#define SCALEIN(a)     (a)
+#define SCALEOUT(a)    (a)
 
 #ifdef FIXED_DEBUG
 #include "fixed_debug.h"
@@ -110,6 +112,8 @@ typedef celt_word32_t celt_mask_t;
 #include "fixed_bfin.h"
 #elif defined (TI_C5X_ASM)
 #include "fixed_c5x.h"
+#elif defined (TI_C6X_ASM)
+#include "fixed_c6x.h"
 #endif
 
 #endif
@@ -129,8 +133,6 @@ typedef float celt_mask_t;
 #define Q15ONE 1.0f
 #define Q30ONE 1.0f
 
-#define SIG_SCALING  1.f
-#define SIG_SCALING_1 1.f
 #define NORM_SCALING 1.f
 #define NORM_SCALING_1 1.f
 #define ENER_SCALING 1.f
@@ -141,7 +143,7 @@ typedef float celt_mask_t;
 #define DB_SCALING 1.f
 #define DB_SCALING_1 1.f
 
-#define EPSILON 1e-15
+#define EPSILON 1e-15f
 #define VERY_SMALL 1e-15f
 #define VERY_LARGE32 1e15f
 #define VERY_LARGE16 1e15f
@@ -170,7 +172,7 @@ typedef float celt_mask_t;
 #define SHL(a,shift)    (a)
 #define SATURATE(x,a)   (x)
 
-#define ROUND(a,shift)  (a)
+#define ROUND16(a,shift)  (a)
 #define HALF32(x)       (.5f*(x))
 
 #define ADD16(a,b) ((a)+(b))
@@ -185,6 +187,7 @@ typedef float celt_mask_t;
 #define MULT16_32_Q13(a,b)     ((a)*(b))
 #define MULT16_32_Q14(a,b)     ((a)*(b))
 #define MULT16_32_Q15(a,b)     ((a)*(b))
+#define MULT16_32_Q16(a,b)     ((a)*(b))
 #define MULT16_32_P15(a,b)     ((a)*(b))
 
 #define MULT32_32_Q31(a,b)     ((a)*(b))
@@ -208,6 +211,8 @@ typedef float celt_mask_t;
 #define DIV32(a,b)     (((celt_word32_t)(a))/(celt_word32_t)(b))
 #define PDIV32(a,b)     (((celt_word32_t)(a))/(celt_word32_t)(b))
 
+#define SCALEIN(a)     ((a)*32768.)
+#define SCALEOUT(a)    ((a)*(1/32768.))
 
 #endif /* !FIXED_POINT */