libstdc++: Avoid ill-formed types on ARM
This resolves failing tests in check-simd. Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: PR libstdc++/114750 * include/experimental/bits/simd_builtin.h (_SimdImplBuiltin::_S_load, _S_store): Fall back to copying scalars if the memory type cannot be vectorized for the target.
This commit is contained in:
parent
299d14a546
commit
0fc7f3c6ad
1 changed files with 2 additions and 2 deletions
|
@ -1464,7 +1464,7 @@ template <typename _Abi, typename>
|
||||||
[&](auto __i) constexpr {
|
[&](auto __i) constexpr {
|
||||||
return static_cast<_Tp>(__i < _Np ? __mem[__i] : 0);
|
return static_cast<_Tp>(__i < _Np ? __mem[__i] : 0);
|
||||||
});
|
});
|
||||||
else if constexpr (sizeof(_Up) > 8)
|
else if constexpr (sizeof(_Up) > 8 or __vectorized_sizeof<_Up>() <= sizeof(_Up))
|
||||||
return __generate_vector<_Tp, _SimdMember<_Tp>::_S_full_size>(
|
return __generate_vector<_Tp, _SimdMember<_Tp>::_S_full_size>(
|
||||||
[&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
|
[&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
|
||||||
return static_cast<_Tp>(__i < _Np ? __mem[__i] : 0);
|
return static_cast<_Tp>(__i < _Np ? __mem[__i] : 0);
|
||||||
|
@ -1536,7 +1536,7 @@ template <typename _Abi, typename>
|
||||||
for (size_t __i = 0; __i < _Np; ++__i)
|
for (size_t __i = 0; __i < _Np; ++__i)
|
||||||
__mem[__i] = __v[__i];
|
__mem[__i] = __v[__i];
|
||||||
}
|
}
|
||||||
else if constexpr (sizeof(_Up) > 8)
|
else if constexpr (sizeof(_Up) > 8 or __vectorized_sizeof<_Up>() <= sizeof(_Up))
|
||||||
__execute_n_times<_Np>([&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
|
__execute_n_times<_Np>([&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
|
||||||
__mem[__i] = __v[__i];
|
__mem[__i] = __v[__i];
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue