ffmpeg | branch: master | Matt Oliver <protogo...@gmail.com> | Fri Oct 16 16:58:43 2015 +1100| [216cc1f6fe33b256ce708fade5e6638b2bb54d2b] | committer: Matt Oliver
lavu/intmath.h: Add msvc/icl ctzll optimisations. Signed-off-by: Matt Oliver <protogo...@gmail.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=216cc1f6fe33b256ce708fade5e6638b2bb54d2b --- libavutil/x86/intmath.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/libavutil/x86/intmath.h b/libavutil/x86/intmath.h index fefad20..3ba5ed0 100644 --- a/libavutil/x86/intmath.h +++ b/libavutil/x86/intmath.h @@ -24,6 +24,41 @@ #include <stdint.h> #include "config.h" +#if HAVE_FAST_CLZ +#if defined(__INTEL_COMPILER) +# define ff_ctzll ff_ctzll_x86 +static av_always_inline av_const int ff_ctzll_x86(long long v) +{ +# if ARCH_X86_64 + uint64_t c; + __asm__("bsfq %1,%0" : "=r" (c) : "r" (v)); + return c; +# else + return ((uint32_t)v == 0) ? _bit_scan_forward((uint32_t)(v >> 32)) + 32 : _bit_scan_forward((uint32_t)v); +# endif +} +#elif defined(_MSC_VER) +# define ff_ctzll ff_ctzll_x86 +static av_always_inline av_const int ff_ctzll_x86(long long v) +{ + unsigned long c; +# if ARCH_X86_64 + _BitScanForward64(&c, v); +# else + if ((uint32_t)v == 0) { + _BitScanForward(&c, (uint32_t)(v >> 32)); + c += 32; + } else { + _BitScanForward(&c, (uint32_t)v); + } +# endif + return c; +} + +#endif /* __INTEL_COMPILER */ + +#endif /* HAVE_FAST_CLZ */ + #if defined(__GNUC__) /* Our generic version of av_popcount is faster than GCC's built-in on _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog