[FFmpeg-devel] 6c6ac9cb "avutil/x86/intmath: Use tzcnt in place of bsf."

Hans Wennborg hans at chromium.org
Tue Nov 17 02:12:42 CET 2015

Hello ffmpeg developers,

This commit [1] is causing problems when compiling with Clang on Windows:

..\..\third_party\ffmpeg\libavutil/x86/intmath.h(53,33) :  error:
always_inline function '__tzcnt_u32' requires target feature 'bmi',
but would be inlined into function 'ff_ctzll_x86' that is compiled
without support for 'bmi'
    return ((uint32_t)v == 0) ? _tzcnt_u32((uint32_t)(v >> 32)) + 32 :

Essentially the compiler is saying that it won't allow using this
intrinsic unless compiling for a target that supports BMI.

Is there a performance reason for using __tzcnt_u32 instead of
_BitScanForward, or was it mainly to simplify the code?

We're working around this in Chromium by #define'ing __tzcnt_u32 to
__builtin_ctz at the moment, but it would be good if we could find a
nicer solution that could be applied upstream.


 [1]. https://github.com/FFmpeg/FFmpeg/commit/6c6ac9cb17c4944514bde833f2fa8aa8dafa974a

More information about the ffmpeg-devel mailing list