On Mon, 3 Jun 2024 at 16:31, Matthias Kretz <m.kr...@gsi.de> wrote: > > Tested on x86_64-linux-gnu (also -m32 and -mx32), aarch64-linux-gnu, and arm- > linux-gnueabi(hf). > > OK for trunk and backports?
OK for all. > > ----------------------- 8< ----------------------- > > The special case for Clang in the trait producing a signed integer type > lead to the trait returning 'char' where it should have been 'signed > char'. This workaround was introduced because on Clang the return type > of vector compares was not convertible to '_SimdWrapper< > __int_for_sizeof_t<...' unless '__int_for_sizeof_t<char>' was an alias > for 'char'. In order to not rewrite the complete mask type code (there > is code scattered around the implementation assuming signed integers), > this needs to be 'signed char'; so the special case for Clang needs to > be removed. > The conversion issue is now solved in _SimdWrapper, which now > additionally allows conversion from vector types with compatible > integral type. > > Signed-off-by: Matthias Kretz <m.kr...@gsi.de> > > libstdc++-v3/ChangeLog: > > PR libstdc++/115308 > * include/experimental/bits/simd.h (__int_for_sizeof): Remove > special cases for __clang__. > (_SimdWrapper): Change constructor overload set to allow > conversion from vector types with integral conversions via bit > reinterpretation. > --- > libstdc++-v3/include/experimental/bits/simd.h | 45 +++++++++++-------- > 1 file changed, 27 insertions(+), 18 deletions(-) > > > -- > ────────────────────────────────────────────────────────────────────────── > Dr. Matthias Kretz https://mattkretz.github.io > GSI Helmholtz Centre for Heavy Ion Research https://gsi.de > stdₓ::simd > ──────────────────────────────────────────────────────────────────────────