[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