[libcxx-commits] [libcxx] ffc3a6b - [libc++] Fix endianness for algorithm mismatch (#93082)
via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jun 11 05:29:16 PDT 2024
Author: Zibi Sarbinowski
Date: 2024-06-11T08:29:12-04:00
New Revision: ffc3a6b286ee619ab8f662cb7174705734eb1ce1
URL: https://github.com/llvm/llvm-project/commit/ffc3a6b286ee619ab8f662cb7174705734eb1ce1
DIFF: https://github.com/llvm/llvm-project/commit/ffc3a6b286ee619ab8f662cb7174705734eb1ce1.diff
LOG: [libc++] Fix endianness for algorithm mismatch (#93082)
This PR is required to fix
`std/algorithms/alg.nonmodifying/mismatch/mismatch.pass.cpp` test for
big endian platrofrms such as z/OS.
Added:
Modified:
libcxx/include/__algorithm/simd_utils.h
Removed:
################################################################################
diff --git a/libcxx/include/__algorithm/simd_utils.h b/libcxx/include/__algorithm/simd_utils.h
index aa4336a2214c8..549197be80183 100644
--- a/libcxx/include/__algorithm/simd_utils.h
+++ b/libcxx/include/__algorithm/simd_utils.h
@@ -11,6 +11,7 @@
#include <__algorithm/min.h>
#include <__bit/bit_cast.h>
+#include <__bit/countl.h>
#include <__bit/countr.h>
#include <__config>
#include <__type_traits/is_arithmetic.h>
@@ -126,8 +127,13 @@ _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector<_T
// This has MSan disabled du to https://github.com/llvm/llvm-project/issues/85876
auto __impl = [&]<class _MaskT>(_MaskT) _LIBCPP_NO_SANITIZE("memory") noexcept {
+# if defined(_LIBCPP_BIG_ENDIAN)
+ return std::min<size_t>(
+ _Np, std::__countl_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec))));
+# else
return std::min<size_t>(
_Np, std::__countr_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec))));
+# endif
};
if constexpr (sizeof(__mask_vec) == sizeof(uint8_t)) {
More information about the libcxx-commits
mailing list