[Mesa-dev] [PATCH] util: Use win32 intrinsics for util_last_bit if present.
Brian Paul
brianp at vmware.com
Tue Aug 9 20:30:26 UTC 2016
On 08/09/2016 01:41 PM, Mathias.Froehlich at gmx.net wrote:
> From: Mathias Fröhlich <mathias.froehlich at web.de>
>
> v2: Split into two patches.
> v3: Fix off by one problem.
>
> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
> ---
> src/util/bitscan.h | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/src/util/bitscan.h b/src/util/bitscan.h
> index 0743fe7..8afef81 100644
> --- a/src/util/bitscan.h
> +++ b/src/util/bitscan.h
> @@ -157,6 +157,12 @@ util_last_bit(unsigned u)
> {
> #if defined(HAVE___BUILTIN_CLZ)
> return u == 0 ? 0 : 32 - __builtin_clz(u);
> +#elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64)
> + unsigned long index;
> + if (_BitScanReverse(&index, u))
> + return index + 1;
> + else
> + return 0;
> #else
> unsigned r = 0;
> while (u) {
> @@ -177,6 +183,12 @@ util_last_bit64(uint64_t u)
> {
> #if defined(HAVE___BUILTIN_CLZLL)
> return u == 0 ? 0 : 64 - __builtin_clzll(u);
> +#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM || _M_IA64)
> + unsigned long index;
> + if (_BitScanReverse64(&index, u))
> + return index + 1;
> + else
> + return 0;
> #else
> unsigned r = 0;
> while (u) {
>
Reviewed-by: Brian Paul <brianp at vmware.com>
Tested-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list