pitrou commented on code in PR #47779: URL: https://github.com/apache/arrow/pull/47779#discussion_r2432703501
########## cpp/src/arrow/vendored/pcg/README.md: ########## @@ -25,4 +25,5 @@ Sources are taken from git changeset ffd522e7188bef30a00c74dc7eb9de5faff90092 Changes: - enclosed in `arrow_vendored` namespace - remove `struct arbitrary_seed` definition because of https://github.com/apache/arrow/issues/35596 +- enable MSVC ARM64 intrinsics to allow building on Windows ARM64 with Visual Studio Review Comment: Can you add the actual patch too, so that we can re-apply it easily? Something like: ````suggestion - enable MSVC ARM64 intrinsics to allow building on Windows ARM64 with Visual Studio: ```patch diff --git a/cpp/src/arrow/vendored/pcg/pcg_uint128.hpp b/cpp/src/arrow/vendored/pcg/pcg_uint128.hpp index 0181e69e4ef..012f3d66823 100644 --- a/cpp/src/arrow/vendored/pcg/pcg_uint128.hpp +++ b/cpp/src/arrow/vendored/pcg/pcg_uint128.hpp @@ -67,7 +67,7 @@ #define PCG_LITTLE_ENDIAN 1 #elif __BIG_ENDIAN__ || _BIG_ENDIAN #define PCG_LITTLE_ENDIAN 0 - #elif __x86_64 || __x86_64__ || _M_X64 || __i386 || __i386__ || _M_IX86 + #elif __x86_64 || __x86_64__ || _M_X64 || __i386 || __i386__ || _M_IX86 || _M_ARM64 #define PCG_LITTLE_ENDIAN 1 #elif __powerpc__ || __POWERPC__ || __ppc__ || __PPC__ \ || __m68k__ || __mc68000__ @@ -734,7 +734,13 @@ uint_x4<UInt,UIntX2> operator*(const uint_x4<UInt,UIntX2>& a, #if PCG_64BIT_SPECIALIZATIONS #if defined(_MSC_VER) +#if defined(_M_X64) || defined(_M_IX86) #pragma intrinsic(_umul128) +#elif defined(_M_ARM64) +#pragma intrinsic(__umulh) +#else +#error Unsupported architecture +#endif #endif #if defined(_MSC_VER) || __SIZEOF_INT128__ @@ -743,8 +749,15 @@ uint_x4<UInt32,uint64_t> operator*(const uint_x4<UInt32,uint64_t>& a, const uint_x4<UInt32,uint64_t>& b) { #if defined(_MSC_VER) +#if defined(_M_X64) || defined(_M_IX86) uint64_t hi; uint64_t lo = _umul128(a.d.v01, b.d.v01, &hi); +#elif defined(_M_ARM64) + uint64_t lo = a.d.v01 * b.d.v01; + uint64_t hi = __umulh(a.d.v01, b.d.v01); +#else +#error Unsupported architecture +#endif #else __uint128_t r = __uint128_t(a.d.v01) * __uint128_t(b.d.v01); uint64_t lo = uint64_t(r); ``` ```` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
