Hi,

It seems that 32 bit Windows doesn't provide the followings:

* __popcnt64()
* _BitScanReverse64()
* _BitScanForward64()

We have fallback implementations for _BitScan*64(). So we
can use them by the following change:

----
diff --git a/cpp/src/arrow/util/bit_util.h b/cpp/src/arrow/util/bit_util.h
index 8583e10b22..e06e3399e1 100644
--- a/cpp/src/arrow/util/bit_util.h
+++ b/cpp/src/arrow/util/bit_util.h
@@ -199,7 +199,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 +220,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);
----

But we don't have a fall back implementation for
__popcnt64(). Could you file this to
https://issues.apache.org/jira/browse/ARROW ?

BTW, do you want to work on this?


Thanks,
-- 
kou


In <6290DDC6005E02EC00390001_0_37693@msllnjpmsgsv06>
  "Does cpp Win32 work?" on Fri, 27 May 2022 14:18:46 -0000,
  "Arkadiy Vertleyb (BLOOMBERG/ 120 PARK)" <[email protected]> wrote:

> Hi all,
> 
> After resolving my linker issue, I now have the following problem:
> 
> C:\Users\avertleyb\git\arrow\cpp\src\arrow/util/bit_util.h(70,59): error 
> C3861: '__popcnt64': identifier not found 
> [C:\Users\avertleyb\git\arrow\cpp\build32\src\arrow\arrow_shared.vcxproj]
> C:\Users\avertleyb\git\arrow\cpp\src\arrow/util/bit_util.h(204,7): error 
> C3861: '_BitScanReverse64': identifier not found 
> [C:\Users\avertleyb\git\arrow\cpp\build32\src\arrow\arrow_shared.vcxproj]
> C:\Users\avertleyb\git\arrow\cpp\src\arrow/util/bit_util.h(250,7): error 
> C3861: '_BitScanForward64': identifier not found 
> [C:\Users\avertleyb\git\arrow\cpp\build32\src\arrow\arrow_shared.vcxproj]
> 
> Looks like it is trying to use 64 bit stuff, which isn't defined in the 32 
> bit architecture.
> 
> One thing I noticed - all vcproj files contain:
> 
>   <PropertyGroup>
>     <PreferredToolArchitecture>x64</PreferredToolArchitecture>
>   </PropertyGroup>
> 
> Not sure if this is the issue, but looks suspicious.
> 
> Also, for some reason, generated vcproj files don't contain C++ properties, 
> including preprocessor properties, when I open them in MSVC.
> 
> Any help would be greatly appreciated.
> 
> Thanks,
> Arkadiy

Reply via email to