From: Hermès Bélusca-Maïto Date: Sat, 11 Oct 2014 16:25:45 +0000 (+0000) Subject: [FAST486]: fixes for CountLeadingZeros64: X-Git-Tag: backups/0.3.17@66124~80 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=2471c3b90f8838f3cbbdf92c7e2e1b6697ea68de;ds=sidebyside [FAST486]: fixes for CountLeadingZeros64: - remove extra ';' - This is (x)>0xff.... not >= - Use Timo inline function. svn path=/trunk/; revision=64676 --- 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