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