Implemented two pre-echo avoidance techniques: time-domain pre-emphasis and
[opus.git] / libcelt / ecintrin.h
index f9a960f..d2d229a 100644 (file)
   _b: The value to clamp.
   _c: The upper boud.*/
 #define EC_CLAMPI(_a,_b,_c) (EC_MAXI(_a,EC_MINI(_b,_c)))
+
+
 /*Count leading zeros.
   This macro should only be used for implementing ec_ilog(), if it is defined.
   All other code should use EC_ILOG() instead.*/
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ(3,4)
 # if INT_MAX>=2147483647
 #  define EC_CLZ0 sizeof(unsigned)*CHAR_BIT
 #  define EC_CLZ(_x) (__builtin_clzl(_x))
 # endif
 #endif
+#endif
+
 #if defined(EC_CLZ)
 /*Note that __builtin_clz is not defined when _x==0, according to the gcc
    documentation (and that of the BSR instruction that implements it on x86).
   The majority of the time we can never pass it zero.
   When we need to, it can be special cased.*/
 # define EC_ILOG(_x) (EC_CLZ0-EC_CLZ(_x))
+#elif defined(ENABLE_TI_DSPLIB)
+#include "dsplib.h"
+#define EC_ILOG(x) (31 - _lnorm(x))
 #else
 # define EC_ILOG(_x) (ec_ilog(_x))
 #endif
+
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ(3,4)
 # if INT_MAX>=9223372036854775807
 #  define EC_CLZ64_0 sizeof(unsigned)*CHAR_BIT
@@ -80,6 +90,8 @@
 #  define EC_CLZ64(_x) (__builtin_clzll(_x))
 # endif
 #endif
+#endif
+
 #if defined(EC_CLZ64)
 /*Note that __builtin_clz is not defined when _x==0, according to the gcc
    documentation (and that of the BSR instruction that implements it on x86).