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

Reply via email to