15 #ifndef RAPIDJSON_CLZLL_H_ 16 #define RAPIDJSON_CLZLL_H_ 18 #include "../rapidjson.h" 20 #if defined(_MSC_VER) && !defined(UNDER_CE) 23 #pragma intrinsic(_BitScanReverse64) 25 #pragma intrinsic(_BitScanReverse) 29 RAPIDJSON_NAMESPACE_BEGIN
32 inline uint32_t clzll(uint64_t x) {
37 #if defined(_MSC_VER) && !defined(UNDER_CE) 40 _BitScanReverse64(&r, x);
43 if (_BitScanReverse(&r, static_cast<uint32_t>(x >> 32)))
47 _BitScanReverse(&r, static_cast<uint32_t>(x & 0xFFFFFFFF));
51 #elif (defined(__GNUC__) && __GNUC__ >= 4) || RAPIDJSON_HAS_BUILTIN(__builtin_clzll) 53 return static_cast<uint32_t
>(__builtin_clzll(x));
57 while (!(x & (static_cast<uint64_t>(1) << 63))) {
66 #define RAPIDJSON_CLZLL RAPIDJSON_NAMESPACE::internal::clzll 69 RAPIDJSON_NAMESPACE_END
71 #endif // RAPIDJSON_CLZLL_H_ #define RAPIDJSON_ASSERT(x)
Assertion.
Definition: rapidjson.h:437