Hi all,
I just created ARROW-16778 to address C++ build issues under MSVC/Win32. The
following patch can fix the issue:
index 8583e10b2..496bbb78b 100644
--- a/cpp/src/arrow/util/bit_util.h
+++ b/cpp/src/arrow/util/bit_util.h
@@ -67,7 +67,14 @@ static constexpr uint8_t kBytePopcount[] = {
5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5,
4, 5, 5, 6,
4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8};
+#if defined(_MSC_VER) && !defined(_M_AMD64) && !defined(_M_X64)
+static inline uint64_t PopCount(uint64_t bitmap) {
+ uint32_t* p = reinterpret_cast<uint32_t*>(&bitmap);
+ return ARROW_POPCOUNT32(*p) + ARROW_POPCOUNT32(*(p + 1));
+}
+#else
static inline uint64_t PopCount(uint64_t bitmap) { return
ARROW_POPCOUNT64(bitmap); }
+#endif
static inline uint32_t PopCount(uint32_t bitmap) { return
ARROW_POPCOUNT32(bitmap); }
//
@@ -199,7 +206,7 @@ static inline int CountLeadingZeros(uint64_t value) {
#if defined(__clang__) || defined(__GNUC__)
if (value == 0) return 64;
return static_cast<int>(__builtin_clzll(value));
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_X64))
unsigned long index; // NOLINT
if (_BitScanReverse64(&index, value)) { // NOLINT
return 63 - static_cast<int>(index);
@@ -220,7 +227,7 @@ static inline int CountTrailingZeros(uint32_t value) {
#if defined(__clang__) || defined(__GNUC__)
if (value == 0) return 32;
return static_cast<int>(__builtin_ctzl(value));
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_X64))
unsigned long index; // NOLINT
if (_BitScanForward(&index, value)) {
return static_cast<int>(index);
@@ -245,7 +252,7 @@ static inline int CountTrailingZeros(uint64_t value) {
#if defined(__clang__) || defined(__GNUC__)
if (value == 0) return 64;
return static_cast<int>(__builtin_ctzll(value));
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_X64))
unsigned long index; // NOLINT
if (_BitScanForward64(&index, value)) {
return static_cast<int>(index);
Please let me know how do I submit this issue for approval.
Thanks,
Arkadiy