EC_ILOG cleanups.
authorTimothy B. Terriberry <tterribe@xiph.org>
Tue, 1 Mar 2011 20:54:04 +0000 (12:54 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Tue, 1 Mar 2011 23:13:48 +0000 (18:13 -0500)
Mark _BitScanReverse as an intrinsic, as this is not done by default
 in _DEBUG mode (thanks to Bjoern D. Rasmussen for the suggestion).
Move the declaration of ec_ilog() to where the macro using it is
 defined, to ensure it is available when the macro is used.
Thanks to John Ridges for the report.

libcelt/ecintrin.h
libcelt/entcode.h

index 4591d07..9222a3c 100644 (file)
@@ -81,6 +81,9 @@
   All other code should use EC_ILOG() instead.*/
 #if defined(_MSC_VER)
 # include <intrin.h>
+/*In _DEBUG mode this is not an intrinsic by default.*/
+# pragma intrinsic(_BitScanReverse)
+
 static __inline int ec_bsr(unsigned long _x){
   unsigned long ret;
   _BitScanReverse(&ret,_x);
@@ -111,6 +114,8 @@ static __inline int ec_bsr(unsigned long _x){
   When we need to, it can be special cased.*/
 # define EC_ILOG(_x) (EC_CLZ0-EC_CLZ(_x))
 #else
+int ec_ilog(ec_uint32 _v);
+
 # define EC_ILOG(_x) (ec_ilog(_x))
 #endif
 
index 581a07b..56f7ffe 100644 (file)
@@ -127,6 +127,4 @@ static inline int ec_tell(ec_ctx *_this){
            rounding error is in the positive direction).*/
 ec_uint32 ec_tell_frac(ec_ctx *_this);
 
-int ec_ilog(ec_uint32 _v);
-
 #endif