libstdc++: Fix call signature of builtins from masked ++/--
This resolves failures in the "expensive" where-* test of check-simd when targeting AVX-512. Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: * include/experimental/bits/simd_x86.h (_S_masked_unary): Call the 4- and 8-byte variants of __builtin_ia32_subp[ds] without rounding direction argument.
This commit is contained in:
parent
9ac3119fec
commit
0ac2c0f068
1 changed files with 9 additions and 3 deletions
|
@ -3538,17 +3538,23 @@ template <typename _Abi, typename>
|
|||
}
|
||||
else
|
||||
{
|
||||
#define _GLIBCXX_SIMD_MASK_SUB(_Sizeof, _Width, _Instr) \
|
||||
#define _GLIBCXX_SIMD_MASK_SUB_512(_Sizeof, _Width, _Instr) \
|
||||
if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \
|
||||
return __builtin_ia32_##_Instr##_mask( \
|
||||
__v._M_data, __vector_broadcast<_Np>(_Tp(__pm_one)), __v._M_data, \
|
||||
__k._M_data, _MM_FROUND_CUR_DIRECTION)
|
||||
_GLIBCXX_SIMD_MASK_SUB(4, 64, subps512);
|
||||
#define _GLIBCXX_SIMD_MASK_SUB(_Sizeof, _Width, _Instr) \
|
||||
if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \
|
||||
return __builtin_ia32_##_Instr##_mask( \
|
||||
__v._M_data, __vector_broadcast<_Np>(_Tp(__pm_one)), __v._M_data, \
|
||||
__k._M_data)
|
||||
_GLIBCXX_SIMD_MASK_SUB_512(4, 64, subps512);
|
||||
_GLIBCXX_SIMD_MASK_SUB(4, 32, subps256);
|
||||
_GLIBCXX_SIMD_MASK_SUB(4, 16, subps128);
|
||||
_GLIBCXX_SIMD_MASK_SUB(8, 64, subpd512);
|
||||
_GLIBCXX_SIMD_MASK_SUB_512(8, 64, subpd512);
|
||||
_GLIBCXX_SIMD_MASK_SUB(8, 32, subpd256);
|
||||
_GLIBCXX_SIMD_MASK_SUB(8, 16, subpd128);
|
||||
#undef _GLIBCXX_SIMD_MASK_SUB_512
|
||||
#undef _GLIBCXX_SIMD_MASK_SUB
|
||||
}
|
||||
#endif // __clang__
|
||||
|
|
Loading…
Add table
Reference in a new issue