diff options
author | Dale Curtis <dalecurtis@chromium.org> | 2017-10-24 13:03:59 -0700 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2017-10-25 21:50:37 +0200 |
commit | 50e30d9bb71e1dff27be16c264fac90e362b9896 (patch) | |
tree | 74a3a214316ef50b591d85f4524d900f8fc67c5d /libavutil/x86/intmath.h | |
parent | 953d55f4439ba3a302f9dcc83f8fe9577c22b804 (diff) | |
download | ffmpeg-50e30d9bb71e1dff27be16c264fac90e362b9896.tar.gz |
Don't use _tzcnt instrinics with clang for windows w/o BMI.
Technically _tzcnt* intrinsics are only available when the BMI
instruction set is present. However the instruction encoding
degrades to "rep bsf" on older processors.
Clang for Windows debatably restricts the _tzcnt* instrinics behind
the __BMI__ architecture define, so check for its presence or
exclude the usage of these intrinics when clang is present.
See also:
https://ffmpeg.org/pipermail/ffmpeg-devel/2015-November/183404.html
https://bugs.llvm.org/show_bug.cgi?id=30506
http://lists.llvm.org/pipermail/cfe-dev/2016-October/051034.html
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Matt Oliver <protogonoi@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavutil/x86/intmath.h')
-rw-r--r-- | libavutil/x86/intmath.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libavutil/x86/intmath.h b/libavutil/x86/intmath.h index e83971c084..40743fd13e 100644 --- a/libavutil/x86/intmath.h +++ b/libavutil/x86/intmath.h @@ -47,7 +47,8 @@ static av_always_inline av_const int ff_log2_x86(unsigned int v) # endif # define ff_log2_16bit av_log2 -#if defined(__INTEL_COMPILER) || (defined(_MSC_VER) && (_MSC_VER >= 1700)) +#if defined(__INTEL_COMPILER) || (defined(_MSC_VER) && (_MSC_VER >= 1700) && \ + (defined(__BMI__) || !defined(__clang__))) # define ff_ctz(v) _tzcnt_u32(v) # if ARCH_X86_64 |