libstdc++: Fix SFINAE for __is_intrinsic_type on ARM

On ARM NEON doesn't support double, so __is_intrinsic_type_v<double,
whatever> should say false (instead of being ill-formed).

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	PR libstdc++/109261
	* include/experimental/bits/simd.h (__intrinsic_type):
	Specialize __intrinsic_type<double, 8> and
	__intrinsic_type<double, 16> in any case, but provide the member
	type only with __aarch64__.

(cherry picked from commit aa8b363171a95b8f867a74f29c75f9577e9087e1)
This commit is contained in:
Matthias Kretz 2023-05-24 12:50:46 +02:00
parent 37abaffb93
commit 0f9f9c0f79

View File

@ -2369,15 +2369,21 @@ template <>
struct __intrinsic_type<float, 16, void>
{ using type = float32x4_t; };
#if _GLIBCXX_SIMD_HAVE_NEON_A64
template <>
struct __intrinsic_type<double, 8, void>
{ using type = float64x1_t; };
{
#if _GLIBCXX_SIMD_HAVE_NEON_A64
using type = float64x1_t;
#endif
};
template <>
struct __intrinsic_type<double, 16, void>
{ using type = float64x2_t; };
{
#if _GLIBCXX_SIMD_HAVE_NEON_A64
using type = float64x2_t;
#endif
};
#define _GLIBCXX_SIMD_ARM_INTRIN(_Bits, _Np) \
template <> \