From 6364c8e5ab1b9b5df01df25ff102d1c48aa0d389 Mon Sep 17 00:00:00 2001 From: escherstair Date: Tue, 4 Aug 2020 10:01:44 +0200 Subject: [PATCH] fix _BitScanReverse() usage for CE6 --- include/rapidjson/internal/clzll.h | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/include/rapidjson/internal/clzll.h b/include/rapidjson/internal/clzll.h index 6cd7923492..f43e6a7897 100644 --- a/include/rapidjson/internal/clzll.h +++ b/include/rapidjson/internal/clzll.h @@ -17,7 +17,7 @@ #include "../rapidjson.h" -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(UNDER_CE) #include #if defined(_WIN64) #pragma intrinsic(_BitScanReverse64) @@ -38,6 +38,27 @@ inline uint32_t clzll(uint64_t x) { unsigned long r = 0; #if defined(_WIN64) _BitScanReverse64(&r, x); +#elif defined(UNDER_CE) + // Scan the high 32 bits. + uint32_t high = static_cast(x >> 32); + if (high != 0) + { + unsigned long index = 31; + while((high & (1U<(x & 0xFFFFFFFF); + unsigned long index = 31; + while((low & (1U<(x >> 32)))