[FFmpeg-cvslog] avutil/intmath: enable builtin intrinsics for icl and msvc.

Matthew Oliver git at videolan.org
Sun Oct 26 17:49:46 CET 2014


ffmpeg | branch: master | Matthew Oliver <protogonoi at gmail.com> | Mon Oct 27 01:43:15 2014 +1100| [2060f4cbba62d80d331624486e3ac106264699f8] | committer: Michael Niedermayer

avutil/intmath: enable builtin intrinsics for icl and msvc.

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2060f4cbba62d80d331624486e3ac106264699f8
---

 libavutil/intmath.h |   40 ++++++++++++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/libavutil/intmath.h b/libavutil/intmath.h
index 8f7a69e..308c776 100644
--- a/libavutil/intmath.h
+++ b/libavutil/intmath.h
@@ -35,21 +35,29 @@
  * @{
  */
 
-#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4)
-
+#if HAVE_FAST_CLZ
+#if AV_GCC_VERSION_AT_LEAST(3,4)
 #ifndef ff_log2
 #   define ff_log2(x) (31 - __builtin_clz((x)|1))
 #   ifndef ff_log2_16bit
 #      define ff_log2_16bit av_log2
 #   endif
 #endif /* ff_log2 */
-
+#elif defined( __INTEL_COMPILER )
+#ifndef ff_log2
+#   define ff_log2(x) (_bit_scan_reverse(x|1))
+#   ifndef ff_log2_16bit
+#      define ff_log2_16bit av_log2
+#   endif
+#endif /* ff_log2 */
+#endif
 #endif /* AV_GCC_VERSION_AT_LEAST(3,4) */
 
 extern const uint8_t ff_log2_tab[256];
 
 #ifndef ff_log2
 #define ff_log2 ff_log2_c
+#if !defined( _MSC_VER )
 static av_always_inline av_const int ff_log2_c(unsigned int v)
 {
     int n = 0;
@@ -65,6 +73,15 @@ static av_always_inline av_const int ff_log2_c(unsigned int v)
 
     return n;
 }
+#else
+static av_always_inline av_const int ff_log2_c(unsigned int v)
+{
+    unsigned long n;
+    _BitScanReverse(&n, v|1);
+    return n;
+}
+#define ff_log2_16bit av_log2
+#endif
 #endif
 
 #ifndef ff_log2_16bit
@@ -94,14 +111,21 @@ static av_always_inline av_const int ff_log2_16bit_c(unsigned int v)
  * @{
  */
 
-#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4)
+#if HAVE_FAST_CLZ
+#if AV_GCC_VERSION_AT_LEAST(3,4)
 #ifndef ff_ctz
 #define ff_ctz(v) __builtin_ctz(v)
 #endif
+#elif defined( __INTEL_COMPILER )
+#ifndef ff_ctz
+#define ff_ctz(v) _bit_scan_forward(v)
+#endif
+#endif
 #endif
 
 #ifndef ff_ctz
 #define ff_ctz ff_ctz_c
+#if !defined( _MSC_VER )
 static av_always_inline av_const int ff_ctz_c(int v)
 {
     int c;
@@ -130,6 +154,14 @@ static av_always_inline av_const int ff_ctz_c(int v)
 
     return c;
 }
+#else
+static av_always_inline av_const int ff_ctz_c( int v )
+{
+    unsigned long c;
+    _BitScanForward(&c, v);
+    return c;
+}
+#endif
 #endif
 
 /**



More information about the ffmpeg-cvslog mailing list