Skip to content

Commit ffc3a6b

Browse files
authored
[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.
1 parent d4b8b72 commit ffc3a6b

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

libcxx/include/__algorithm/simd_utils.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <__algorithm/min.h>
1313
#include <__bit/bit_cast.h>
14+
#include <__bit/countl.h>
1415
#include <__bit/countr.h>
1516
#include <__config>
1617
#include <__type_traits/is_arithmetic.h>
@@ -126,8 +127,13 @@ _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector<_T
126127

127128
// This has MSan disabled du to https://github.com/llvm/llvm-project/issues/85876
128129
auto __impl = [&]<class _MaskT>(_MaskT) _LIBCPP_NO_SANITIZE("memory") noexcept {
130+
# if defined(_LIBCPP_BIG_ENDIAN)
131+
return std::min<size_t>(
132+
_Np, std::__countl_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec))));
133+
# else
129134
return std::min<size_t>(
130135
_Np, std::__countr_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec))));
136+
# endif
131137
};
132138

133139
if constexpr (sizeof(__mask_vec) == sizeof(uint8_t)) {

0 commit comments

Comments
 (0)