]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: simd: allow x86 -mlong-double-64
authorAlexandre Oliva <oliva@adacore.com>
Mon, 23 Mar 2026 01:32:55 +0000 (22:32 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Sat, 28 Mar 2026 02:55:46 +0000 (23:55 -0300)
On a target that defaults to -mlong-double-64 -msse,
standard_abi_usable.cc and other tests fail to compile because of the
assert that rejects long double.  As on ppc, we can trivially make
things work for -mlong-double-64.

for  libstdc++-v3/ChangeLog

* include/experimental/bits/simd.h (__intrinsic_type): Accept
64-bit long doubles on x86 SSE.

libstdc++-v3/include/experimental/bits/simd.h

index c2ac5adedaccf3bf544a0cb7c2e4ae79cfb7080d..b96818af6e6ffa86e6bdc23b0a872ab41ed38e88 100644 (file)
@@ -2469,7 +2469,9 @@ template <>
 template <typename _Tp, size_t _Bytes>
   struct __intrinsic_type<_Tp, _Bytes, enable_if_t<__is_vectorizable_v<_Tp> && _Bytes <= 64>>
   {
-    static_assert(!is_same_v<_Tp, long double>,
+    // allow _Tp == long double with -mlong-double-64
+    static_assert(!(is_same_v<_Tp, long double>
+                   && sizeof(long double) > sizeof(double)),
                  "no __intrinsic_type support for long double on x86");
 
     static constexpr size_t _S_VBytes = _Bytes <= 16 ? 16 : _Bytes <= 32 ? 32 : 64;