15 #ifndef RAPIDJSON_CLZLL_H_
16 #define RAPIDJSON_CLZLL_H_
18 #include "../rapidjson.h"
23 #pragma intrinsic(_BitScanReverse64)
25 #pragma intrinsic(_BitScanReverse)
29 RAPIDJSON_NAMESPACE_BEGIN
32 #if (defined(__GNUC__) && __GNUC__ >= 4) || RAPIDJSON_HAS_BUILTIN(__builtin_clzll)
33 #define RAPIDJSON_CLZLL __builtin_clzll
36 inline uint32_t clzll(uint64_t x) {
44 _BitScanReverse64(&r, x);
47 if (_BitScanReverse(&r,
static_cast<uint32_t
>(x >> 32)))
51 _BitScanReverse(&r,
static_cast<uint32_t
>(x & 0xFFFFFFFF));
57 while (!(x & (
static_cast<uint64_t
>(1) << 63))) {
66 #define RAPIDJSON_CLZLL RAPIDJSON_NAMESPACE::internal::clzll
70 RAPIDJSON_NAMESPACE_END
#define RAPIDJSON_ASSERT(x)
Assertion.
Definition: rapidjson.h:406