Hi!
On Thu, Apr 28, 2022 at 03:09:54AM -0300, Alexandre Oliva wrote:
> libstdc++'s bits/simd.h section for PPC (Altivec) defines various
> intrinsic vector types that are only available along with VSX: 64-bit
> long double, double, (un)signed long long, and 64-bit (un)signed long.
>
> experimental/simd/standard_abi_usable{,_2}.cc tests error out reporting
> the unmet requirements when the target cpu doesn't enable VSX. Make the
> reported instrinsic types conditional on VSX so that <experimental/simd>
> can be used on ppc variants that do not have VSX support.
> * include/experimental/bits/simd.h [__ALTIVEC__]: Require VSX
> for double, long long, and 64-bit long and 64-bit long double
> intrinsic types.
> --- a/libstdc++-v3/include/experimental/bits/simd.h
> +++ b/libstdc++-v3/include/experimental/bits/simd.h
> @@ -2430,17 +2430,23 @@ template <typename _Tp>
> template <>
> \
> struct __intrinsic_type_impl<_Tp> { using type = __vector _Tp; }
> _GLIBCXX_SIMD_PPC_INTRIN(float);
> +# ifdef __VSX__
No space after # (here and everywhere else).
> #ifndef __VSX__
> - static_assert(!is_same_v<_Tp, double>,
> - "no __intrinsic_type support for double on PPC w/o VSX");
> + static_assert(!(is_same_v<_Tp, double>
> + || (_S_is_ldouble && sizeof(long double) ==
> sizeof(double))),
> + "no __intrinsic_type support for [long] double on PPC w/o
> VSX");
> #endif
This change isn't in the changelog. The message should not say "long
double" without qualifying it as "64-bit long double". It is probably
best to just keep the message as-is, the other possibilities for long
double aren't supported either, not even with VSX, and all this becomes
much too complicated to put in a simple error message. It confuses the
poor user, as well.
Alternatively you can make it two separate error messages, one for
double, one for 64-bit long double.
Okay for trunk without this part of the patch, and the spaces after the
hash signs deleted. Or send a new patch with the "[long] double" thing
fixed?
Thanks!
Segher