This change is conceptual, since the actual masking is only applied after constexpr-if branch on _S_is_partial.
Signed-off-by: Matthias Kretz <[email protected]> libstdc++-v3/ChangeLog: * include/bits/simd_mask.h (_M_concat_data): Default to sanitize only when the mask is partial. Don't force (unused) sanitize on the power-of-2 mask member. --- libstdc++-v3/include/bits/simd_mask.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/include/bits/simd_mask.h b/libstdc++-v3/include/ bits/simd_mask.h index 1bf74e5ae599..41477cbc9b94 100644 --- a/libstdc++-v3/include/bits/simd_mask.h +++ b/libstdc++-v3/include/bits/simd_mask.h @@ -581,7 +581,7 @@ _S_recursive_bit_cast(const basic_mask<_UBytes, _UAbi>& __x) [[__gnu__::__always_inline__]] constexpr auto - _M_concat_data(bool __do_sanitize = true) const + _M_concat_data(bool __do_sanitize = _S_is_partial) const { if constexpr (_S_is_scalar) return __vec_builtin_type<__integer_from<_Bytes>, 1>{__integer_from<_Bytes>(-_M_data)}; @@ -1501,18 +1501,18 @@ struct _Tmp [[__gnu__::__always_inline__]] constexpr auto - _M_concat_data(bool __do_sanitize = true) const + _M_concat_data(bool __do_sanitize = _S_is_partial) const { if constexpr (_S_use_bitmask) { static_assert(_S_size <= numeric_limits<unsigned long long>::digits, "cannot concat more than 64 bits"); using _Up = _Bitmask<_S_size>; - return _Up(_M_data0._M_concat_data(true) | (_Up(_M_data1._M_concat_data(__do_sanitize)) << _N0)); + return _Up(_M_data0._M_concat_data() | (_Up(_M_data1._M_concat_data(__do_sanitize)) << _N0)); } else { - auto __lo = _M_data0._M_concat_data(true); + auto __lo = _M_data0._M_concat_data(); auto __hi = __vec_zero_pad_to<sizeof(__lo)>(_M_data1._M_concat_data(__do_sanitize)); return __vec_concat(__lo, __hi); } -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Center for Heavy Ion Research https://gsi.de std::simd ──────────────────────────────────────────────────────────────────────────
signature.asc
Description: This is a digitally signed message part.
