ref: 6c8acbf1f2185d2e362df120131ed05d7c6556d3
parent: 3beb70e54926899dc67f46005662c663babf4bf4
author: Timothy B. Terriberry <[email protected]>
date: Tue Mar 1 07:54:04 EST 2011
EC_ILOG cleanups. 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.
--- a/libcelt/ecintrin.h
+++ b/libcelt/ecintrin.h
@@ -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 @@
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
--- a/libcelt/entcode.h
+++ b/libcelt/entcode.h
@@ -127,6 +127,4 @@
rounding error is in the positive direction).*/
ec_uint32 ec_tell_frac(ec_ctx *_this);
-int ec_ilog(ec_uint32 _v);
-
#endif