[libcxx-commits] [libcxx] 7b89360 - [libcxx] Fix setup of MSVC specific intrinsics in Ryu code
Martin Storsjö via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Feb 14 12:11:29 PST 2022
Author: Martin Storsjö
Date: 2022-02-14T22:11:22+02:00
New Revision: 7b89360d3a14705ebe41b1a5c5da65791d523d4f
URL: https://github.com/llvm/llvm-project/commit/7b89360d3a14705ebe41b1a5c5da65791d523d4f
DIFF: https://github.com/llvm/llvm-project/commit/7b89360d3a14705ebe41b1a5c5da65791d523d4f.diff
LOG: [libcxx] Fix setup of MSVC specific intrinsics in Ryu code
This fixes warnings about implicitly declared `_umul128` and
`__shiftright128` when building for x86_64 with clang-cl.
Use `_MSC_VER` instead of `_LIBCPP_COMPILER_MSVC` for enabling MSVC
specific code; `_MSC_VER` is defined both in clang-cl and MSVC,
while `_LIBCPP_COMPILER_MSVC` only is defined if building with the
actual MSVC compiler.
Include `ryu.h` at the head of `d2s_intrinsics.h`, as it uses
the `_LIBCPP_64_BIT` define, which is defined in `ryu.h`.
Now the Ryu files build without warnings with clang-cl for i386,
x86_64, arm and aarch64.
Differential Revision: https://reviews.llvm.org/D119647
Added:
Modified:
libcxx/src/include/ryu/d2s_intrinsics.h
libcxx/src/include/ryu/ryu.h
Removed:
################################################################################
diff --git a/libcxx/src/include/ryu/d2s_intrinsics.h b/libcxx/src/include/ryu/d2s_intrinsics.h
index 9f6632e1b2b4d..95912818ac97f 100644
--- a/libcxx/src/include/ryu/d2s_intrinsics.h
+++ b/libcxx/src/include/ryu/d2s_intrinsics.h
@@ -44,6 +44,8 @@
#include "__config"
+#include "include/ryu/ryu.h"
+
_LIBCPP_BEGIN_NAMESPACE_STD
#if defined(_M_X64) && defined(_MSC_VER)
diff --git a/libcxx/src/include/ryu/ryu.h b/libcxx/src/include/ryu/ryu.h
index 9c4025fc61a50..04d4f2c04191d 100644
--- a/libcxx/src/include/ryu/ryu.h
+++ b/libcxx/src/include/ryu/ryu.h
@@ -56,9 +56,9 @@
#include "include/ryu/d2s.h"
#include "include/ryu/d2fixed.h"
-#if defined(_M_X64) && defined(_LIBCPP_COMPILER_MSVC)
-#include <intrin0.h> // for _umul128() and __shiftright128()
-#endif // defined(_M_X64) && defined(_LIBCPP_COMPILER_MSVC)
+#if defined(_MSC_VER)
+#include <intrin.h> // for _umul128(), __shiftright128(), _BitScanForward{,64}
+#endif // defined(_MSC_VER)
#if defined(_WIN64) || defined(_M_AMD64) || defined(__x86_64__) || defined(__aarch64__)
#define _LIBCPP_64_BIT
@@ -68,7 +68,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
// https://github.com/ulfjack/ryu/tree/59661c3/ryu
-#if !defined(_LIBCPP_COMPILER_MSVC)
+#if !defined(_MSC_VER)
_LIBCPP_HIDE_FROM_ABI inline unsigned char _BitScanForward64(unsigned long* __index, unsigned long long __mask) {
if (__mask == 0) {
return false;
@@ -84,7 +84,7 @@ _LIBCPP_HIDE_FROM_ABI inline unsigned char _BitScanForward(unsigned long* __inde
*__index = __builtin_ctz(__mask);
return true;
}
-#endif // _LIBCPP_COMPILER_MSVC
+#endif // !_MSC_VER
template <class _Floating>
[[nodiscard]] to_chars_result _Floating_to_chars_ryu(
More information about the libcxx-commits
mailing list