From 2471c3b90f8838f3cbbdf92c7e2e1b6697ea68de Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 11 Oct 2014 16:25:45 +0000 Subject: [PATCH] [FAST486]: fixes for CountLeadingZeros64: - remove extra ';' - This is (x)>0xff.... not >= - Use Timo inline function. svn path=/trunk/; revision=64676 --- reactos/lib/fast486/common.inl | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/reactos/lib/fast486/common.inl b/reactos/lib/fast486/common.inl index a5901f45f84..e31f40b1b1a 100644 --- a/reactos/lib/fast486/common.inl +++ b/reactos/lib/fast486/common.inl @@ -25,21 +25,26 @@ /* PUBLIC FUNCTIONS ***********************************************************/ #if defined (__GNUC__) - #define CountLeadingZeros64(x) __builtin_clzll(x); + #define CountLeadingZeros64(x) __builtin_clzll(x) #elif (_MSC_VER >= 1500) && defined(_WIN64) #define CountLeadingZeros64(x) __lzcnt64(x) #elif (_MSC_VER >= 1500) - #define CountLeadingZeros64(x) ((x) >= 0xFFFFFFFFULL) \ - ? __lzcnt((x) >> 32) : (__lzcnt(x) + 32) + #define CountLeadingZeros64(x) ((x) > 0xFFFFFFFFULL) ? __lzcnt((x) >> 32) \ + : (__lzcnt(x) + 32) #else - static - FORCEINLINE + static FORCEINLINE ULONG CountLeadingZeros64(ULONGLONG Value) { - ULONG LeadingZeros = 0; + ULONG Count = 0; + ULONGLONG Mask = 1ULL << 63; - while (!(Value & (1 << (63 - LeadingZeros)))) LeadingZeros++; - return LeadingZeros; + while (!(Value & Mask)) + { + Count++; + Mask >>= 1; + } + + return Count; } #endif -- 2.17.1