diff options
author | Matthias Kretz <m.kretz@gsi.de> | 2023-05-24 12:50:46 +0200 |
---|---|---|
committer | Matthias Kretz <m.kretz@gsi.de> | 2023-05-24 13:06:35 +0200 |
commit | aa8b363171a95b8f867a74f29c75f9577e9087e1 (patch) | |
tree | d73a0c68a3bab9af40c8d2491bbf6831d6fb8ee7 | |
parent | b0a483b0a011f9cbc8b25053eae809c77dae2a12 (diff) | |
download | gcc-aa8b363171a95b8f867a74f29c75f9577e9087e1.zip gcc-aa8b363171a95b8f867a74f29c75f9577e9087e1.tar.gz gcc-aa8b363171a95b8f867a74f29c75f9577e9087e1.tar.bz2 |
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__.
-rw-r--r-- | libstdc++-v3/include/experimental/bits/simd.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libstdc++-v3/include/experimental/bits/simd.h b/libstdc++-v3/include/experimental/bits/simd.h index b0571ca2..d1f3883 100644 --- a/libstdc++-v3/include/experimental/bits/simd.h +++ b/libstdc++-v3/include/experimental/bits/simd.h @@ -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 <> \ |