Skip to content

Commit 39952cf

Browse files
committed
use intrinsics correctly
1 parent a7ca3a5 commit 39952cf

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/coreclr/inc/gcinfotypes.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,28 +47,28 @@ __forceinline size_t SAFE_SHIFT_RIGHT(size_t x, size_t count)
4747

4848
inline UINT32 CeilOfLog2(size_t x)
4949
{
50-
// we want lzcnt, but bsr is ok too
50+
// it is ok to use bsr or clz unconditionally
5151
_ASSERTE(x > 0);
5252

5353
x = (x << 1) - 1;
5454

5555
#ifdef TARGET_64BIT
5656
#ifdef _MSC_VER
57-
DWORD lzcountCeil;
58-
_BitScanReverse64(&lzcountCeil, (unsigned long)x);
57+
DWORD result;
58+
_BitScanReverse64(&result, (unsigned long)x);
59+
return (UINT32)result;
5960
#else // _MSC_VER
60-
UINT32 lzcountCeil = (UINT32)__builtin_clzl((unsigned long)x);
61+
return BITS_PER_SIZE_T - (UINT32)__builtin_clzl((unsigned long)x);
6162
#endif // _MSC_VER
6263
#else // TARGET_64BIT
6364
#ifdef _MSC_VER
64-
DWORD lzcountCeil;
65-
_BitScanReverse(&lzcountCeil, (unsigned long)x);
65+
DWORD result;
66+
_BitScanReverse(&result, (unsigned int)x);
67+
return (UINT32)result;
6668
#else // _MSC_VER
67-
UINT32 lzcountCeil = (UINT32)__builtin_clz((unsigned int)x);
69+
return BITS_PER_SIZE_T - (UINT32)__builtin_clz((unsigned int)x);
6870
#endif // _MSC_VER
6971
#endif
70-
71-
return BITS_PER_SIZE_T - lzcountCeil;
7272
}
7373

7474
enum GcSlotFlags

0 commit comments

Comments
 (0)