You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@arrow.apache.org by "Arkadiy Vertleyb (BLOOMBERG/ 120 PARK)" <av...@bloomberg.net> on 2022/06/07 17:54:29 UTC
Re: Does cpp Win32 work?
Hello Kou.
I just filed this issue under ARROW-16778 and yes, I would like to help fixing it.
Please let me know what is involved.
Thanks,
Arkadiy
From: user@arrow.apache.org At: 05/30/22 02:05:07 UTC-4:00To: Arkadiy Vertleyb (BLOOMBERG/ 120 PARK ) , user@arrow.apache.org
Subject: Re: Does cpp Win32 work?
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 <62...@msllnjpmsgsv06>
"Does cpp Win32 work?" on Fri, 27 May 2022 14:18:46 -0000,
"Arkadiy Vertleyb (BLOOMBERG/ 120 PARK)" <av...@bloomberg.net> 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