[{"id":3679731,"web_url":"http://patchwork.ozlabs.org/comment/3679731/","msgid":"<CACb0b4nhOnWAXk7Ox05sYvHfMJMCTfYhDo9pspLjR_uW_b-BrQ@mail.gmail.com>","list_archive_url":null,"date":"2026-04-21T08:27:36","subject":"Re: [PATCH] libstdc++: simd: x86: accept 64-bit long double as double\n [PR124657]","submitter":{"id":48004,"url":"http://patchwork.ozlabs.org/api/people/48004/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"content":"On Tue, 21 Apr 2026 at 05:58, Alexandre Oliva <oliva@adacore.com> wrote:\n>\n> On Apr  9, 2026, Alexandre Oliva <oliva@adacore.com> wrote:\n>\n> > We probably need a better abstraction.\n>\n> Here's one:\n>\n> Various simd_x86 functions that handle double need to be adjusted to\n> match 64-bit long double as well.\n>\n> Introduce __is_x86_ps<_Tp>() and __is_x86_pd<_Tp>() and use them\n> instead of is_same_v<_Tp, float> and is_same_v<_Tp, double>,\n> respectively.\n>\n> Regstrapped on x86_64-linux-gnu.  Also tested pr109261_constexpr_simd.cc\n> with -mlong-double-64.  Ok to install? (presumably for stage1)\n>\n>\n> for  libstdc++-v3/ChangeLog\n>\n>         PR libstdc++/124657\n>         * include/experimental/bits/simd_x86.h\n>         (__is_x86_ps<_Tp>): New.  Replace is_same_v<_Tp, float> with it.\n>         (__is_x86_pd<_Tp>): New.  Replace is_same_v<_Tp, double> with it.\n> ---\n>  libstdc++-v3/include/experimental/bits/simd_x86.h |   79 ++++++++++++---------\n>  1 file changed, 47 insertions(+), 32 deletions(-)\n>\n> diff --git a/libstdc++-v3/include/experimental/bits/simd_x86.h b/libstdc++-v3/include/experimental/bits/simd_x86.h\n> index 74c7a61998e0d..73c10c1dcbbe7 100644\n> --- a/libstdc++-v3/include/experimental/bits/simd_x86.h\n> +++ b/libstdc++-v3/include/experimental/bits/simd_x86.h\n> @@ -415,13 +415,28 @@ template <size_t _Np, typename _Tp, typename _Kp>\n>  #endif\n>\n>  // ISA & type detection {{{\n> +template <typename _Tp>\n> +  constexpr bool\n> +  __is_x86_ps()\n> +  {\n> +    return is_same_v<_Tp, float>;\n> +  }\n> +\n> +template <typename _Tp>\n> +  constexpr bool\n> +  __is_x86_pd()\n> +  {\n> +    return is_same_v<_Tp, double>\n> +      || (sizeof (long double) == sizeof (double) && is_same_v<_Tp, long double>);\n\nThis would be ever so slightly more efficient as:\n\nif constexpr (is_same_v<_Tp, double>)\n  return true;\nelse\n#if  __LDBL_MANT_DIG__ == __DBL_MANT_DIG__\n  return is_same_v<_Tp, long double>;\n#else\n  return false;\n#endif\n\nbecause it wouldn't instantiate the is_same_v variable templates\nunless required, and wouldn't care about long double for the common\ncase of 80-bit long double.\n\nBut the patch seems reasonable to me. Matthias?\n\n> +  }\n> +\n>  template <typename _Tp, size_t _Np>\n>    constexpr bool\n>    __is_sse_ps()\n>    {\n>      return __have_sse\n> -          && is_same_v<_Tp,\n> -                       float> && sizeof(__intrinsic_type_t<_Tp, _Np>) == 16;\n> +          && __is_x86_ps<_Tp>()\n> +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 16;\n>    }\n>\n>  template <typename _Tp, size_t _Np>\n> @@ -429,8 +444,8 @@ template <typename _Tp, size_t _Np>\n>    __is_sse_pd()\n>    {\n>      return __have_sse2\n> -          && is_same_v<_Tp,\n> -                       double> && sizeof(__intrinsic_type_t<_Tp, _Np>) == 16;\n> +          && __is_x86_pd<_Tp>()\n> +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 16;\n>    }\n>\n>  template <typename _Tp, size_t _Np>\n> @@ -438,8 +453,8 @@ template <typename _Tp, size_t _Np>\n>    __is_avx_ps()\n>    {\n>      return __have_avx\n> -          && is_same_v<_Tp,\n> -                       float> && sizeof(__intrinsic_type_t<_Tp, _Np>) == 32;\n> +          && __is_x86_ps<_Tp>()\n> +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 32;\n>    }\n>\n>  template <typename _Tp, size_t _Np>\n> @@ -447,8 +462,8 @@ template <typename _Tp, size_t _Np>\n>    __is_avx_pd()\n>    {\n>      return __have_avx\n> -          && is_same_v<_Tp,\n> -                       double> && sizeof(__intrinsic_type_t<_Tp, _Np>) == 32;\n> +          && __is_x86_pd<_Tp>()\n> +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 32;\n>    }\n>\n>  template <typename _Tp, size_t _Np>\n> @@ -456,8 +471,8 @@ template <typename _Tp, size_t _Np>\n>    __is_avx512_ps()\n>    {\n>      return __have_avx512f\n> -          && is_same_v<_Tp,\n> -                       float> && sizeof(__intrinsic_type_t<_Tp, _Np>) == 64;\n> +          && __is_x86_ps<_Tp>()\n> +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 64;\n>    }\n>\n>  template <typename _Tp, size_t _Np>\n> @@ -465,8 +480,8 @@ template <typename _Tp, size_t _Np>\n>    __is_avx512_pd()\n>    {\n>      return __have_avx512f\n> -          && is_same_v<_Tp,\n> -                       double> && sizeof(__intrinsic_type_t<_Tp, _Np>) == 64;\n> +          && __is_x86_pd<_Tp>()\n> +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 64;\n>    }\n>\n>  // }}}\n> @@ -2397,9 +2412,9 @@ template <typename _Abi, typename>\n>             [[maybe_unused]] const auto __yi = __to_intrin(__y);\n>             if constexpr (sizeof(__xi) == 64)\n>               {\n> -               if constexpr (is_same_v<_Tp, float>)\n> +               if constexpr (__is_x86_ps<_Tp> ())\n>                   return _mm512_mask_cmp_ps_mask(__k1, __xi, __yi, _CMP_LT_OS);\n> -               else if constexpr (is_same_v<_Tp, double>)\n> +               else if constexpr (__is_x86_pd<_Tp> ())\n>                   return _mm512_mask_cmp_pd_mask(__k1, __xi, __yi, _CMP_LT_OS);\n>                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n>                   return _mm512_mask_cmplt_epi8_mask(__k1, __xi, __yi);\n> @@ -2422,9 +2437,9 @@ template <typename _Abi, typename>\n>               }\n>             else if constexpr (sizeof(__xi) == 32)\n>               {\n> -               if constexpr (is_same_v<_Tp, float>)\n> +               if constexpr (__is_x86_ps<_Tp> ())\n>                   return _mm256_mask_cmp_ps_mask(__k1, __xi, __yi, _CMP_LT_OS);\n> -               else if constexpr (is_same_v<_Tp, double>)\n> +               else if constexpr (__is_x86_pd<_Tp> ())\n>                   return _mm256_mask_cmp_pd_mask(__k1, __xi, __yi, _CMP_LT_OS);\n>                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n>                   return _mm256_mask_cmplt_epi8_mask(__k1, __xi, __yi);\n> @@ -2447,9 +2462,9 @@ template <typename _Abi, typename>\n>               }\n>             else if constexpr (sizeof(__xi) == 16)\n>               {\n> -               if constexpr (is_same_v<_Tp, float>)\n> +               if constexpr (__is_x86_ps<_Tp> ())\n>                   return _mm_mask_cmp_ps_mask(__k1, __xi, __yi, _CMP_LT_OS);\n> -               else if constexpr (is_same_v<_Tp, double>)\n> +               else if constexpr (__is_x86_pd<_Tp> ())\n>                   return _mm_mask_cmp_pd_mask(__k1, __xi, __yi, _CMP_LT_OS);\n>                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n>                   return _mm_mask_cmplt_epi8_mask(__k1, __xi, __yi);\n> @@ -2505,9 +2520,9 @@ template <typename _Abi, typename>\n>             [[maybe_unused]] const auto __yi = __to_intrin(__y);\n>             if constexpr (sizeof(__xi) == 64)\n>               {\n> -               if constexpr (is_same_v<_Tp, float>)\n> +               if constexpr (__is_x86_ps<_Tp> ())\n>                   return _mm512_mask_cmp_ps_mask(__k1, __xi, __yi, _CMP_LE_OS);\n> -               else if constexpr (is_same_v<_Tp, double>)\n> +               else if constexpr (__is_x86_pd<_Tp> ())\n>                   return _mm512_mask_cmp_pd_mask(__k1, __xi, __yi, _CMP_LE_OS);\n>                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n>                   return _mm512_mask_cmple_epi8_mask(__k1, __xi, __yi);\n> @@ -2530,9 +2545,9 @@ template <typename _Abi, typename>\n>               }\n>             else if constexpr (sizeof(__xi) == 32)\n>               {\n> -               if constexpr (is_same_v<_Tp, float>)\n> +               if constexpr (__is_x86_ps<_Tp> ())\n>                   return _mm256_mask_cmp_ps_mask(__k1, __xi, __yi, _CMP_LE_OS);\n> -               else if constexpr (is_same_v<_Tp, double>)\n> +               else if constexpr (__is_x86_pd<_Tp> ())\n>                   return _mm256_mask_cmp_pd_mask(__k1, __xi, __yi, _CMP_LE_OS);\n>                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n>                   return _mm256_mask_cmple_epi8_mask(__k1, __xi, __yi);\n> @@ -2555,9 +2570,9 @@ template <typename _Abi, typename>\n>               }\n>             else if constexpr (sizeof(__xi) == 16)\n>               {\n> -               if constexpr (is_same_v<_Tp, float>)\n> +               if constexpr (__is_x86_ps<_Tp> ())\n>                   return _mm_mask_cmp_ps_mask(__k1, __xi, __yi, _CMP_LE_OS);\n> -               else if constexpr (is_same_v<_Tp, double>)\n> +               else if constexpr (__is_x86_pd<_Tp> ())\n>                   return _mm_mask_cmp_pd_mask(__k1, __xi, __yi, _CMP_LE_OS);\n>                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n>                   return _mm_mask_cmple_epi8_mask(__k1, __xi, __yi);\n> @@ -5021,10 +5036,10 @@ template <typename _Abi, typename>\n>                   = _Abi::template _S_implicit_mask_intrin<_Tp>();\n>                 return 0 != __testc(__a, __b);\n>               }\n> -           else if constexpr (is_same_v<_Tp, float>)\n> +           else if constexpr (__is_x86_ps<_Tp> ())\n>               return (_mm_movemask_ps(__a) & ((1 << _Np) - 1))\n>                      == (1 << _Np) - 1;\n> -           else if constexpr (is_same_v<_Tp, double>)\n> +           else if constexpr (__is_x86_pd<_Tp> ())\n>               return (_mm_movemask_pd(__a) & ((1 << _Np) - 1))\n>                      == (1 << _Np) - 1;\n>             else\n> @@ -5084,9 +5099,9 @@ template <typename _Abi, typename>\n>                 else\n>                   return 0 == __testz(__a, __a);\n>               }\n> -           else if constexpr (is_same_v<_Tp, float>)\n> +           else if constexpr (__is_x86_ps<_Tp> ())\n>               return (_mm_movemask_ps(__a) & ((1 << _Np) - 1)) != 0;\n> -           else if constexpr (is_same_v<_Tp, double>)\n> +           else if constexpr (__is_x86_pd<_Tp> ())\n>               return (_mm_movemask_pd(__a) & ((1 << _Np) - 1)) != 0;\n>             else\n>               return (_mm_movemask_epi8(__a) & ((1 << (_Np * sizeof(_Tp))) - 1))\n> @@ -5120,9 +5135,9 @@ template <typename _Abi, typename>\n>                 else\n>                   return 0 != __testz(__a, __a);\n>               }\n> -           else if constexpr (is_same_v<_Tp, float>)\n> +           else if constexpr (__is_x86_ps<_Tp> ())\n>               return (__movemask(__a) & ((1 << _Np) - 1)) == 0;\n> -           else if constexpr (is_same_v<_Tp, double>)\n> +           else if constexpr (__is_x86_pd<_Tp> ())\n>               return (__movemask(__a) & ((1 << _Np) - 1)) == 0;\n>             else\n>               return (__movemask(__a) & int((1ull << (_Np * sizeof(_Tp))) - 1))\n> @@ -5150,13 +5165,13 @@ template <typename _Abi, typename>\n>                   = _Abi::template _S_implicit_mask_intrin<_Tp>();\n>                 return 0 != __testnzc(__a, __b);\n>               }\n> -           else if constexpr (is_same_v<_Tp, float>)\n> +           else if constexpr (__is_x86_ps<_Tp> ())\n>               {\n>                 constexpr int __allbits = (1 << _Np) - 1;\n>                 const auto __tmp = _mm_movemask_ps(__a) & __allbits;\n>                 return __tmp > 0 && __tmp < __allbits;\n>               }\n> -           else if constexpr (is_same_v<_Tp, double>)\n> +           else if constexpr (__is_x86_pd<_Tp> ())\n>               {\n>                 constexpr int __allbits = (1 << _Np) - 1;\n>                 const auto __tmp = _mm_movemask_pd(__a) & __allbits;","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=BGw1sfYH;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=BGw1sfYH","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.133.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0Fql5JlGz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 18:28:33 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id DBD234BA23F4\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 08:28:26 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTP id 3E44E4BA2E3C\n for <gcc-patches@gcc.gnu.org>; Tue, 21 Apr 2026 08:27:55 +0000 (GMT)","from mail-yx1-f69.google.com (mail-yx1-f69.google.com\n [74.125.224.69]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-540-G-bAXo7fNjSSjvmEqArk_g-1; Tue, 21 Apr 2026 04:27:53 -0400","by mail-yx1-f69.google.com with SMTP id\n 956f58d0204a3-651bd9b4bccso7126283d50.3\n for <gcc-patches@gcc.gnu.org>; Tue, 21 Apr 2026 01:27:53 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org DBD234BA23F4","OpenDKIM Filter v2.11.0 sourceware.org 3E44E4BA2E3C"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 3E44E4BA2E3C","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 3E44E4BA2E3C","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776760075; cv=none;\n b=UugIPm6FLqRndP/BQo1QKRhgHXW49XKi4Pb+NPPQKez6ByiixVwkClUUIpt9UY6jLewy7lmiGb8OkF7u+WEaW6ZfxSARI377C7dKLw7Y3W3YwKiZEKK22y6TIxn7lzzOnQeVb4IXHWShCCQWvCFvqzz9a7M4JfLl/EjN66mb2Z8=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776760075; c=relaxed/simple;\n bh=d8/1P8eB51ZWfjGenvo+cXKxX4lkSOcp9TwJz9nDsYg=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=U1Udiv1IIg1mEMGXnouynLeIyCFSWp32iiJtyTSjBeMAv/C7NPwV4EfSqWI9/QFai8H1pUurlwcrsN4hqzD6DS2z7AmADvsdwEqgAgkufCJGJOYdUdyz3cSb8AH679sfmSkNkGB5tsnjfiz5MbGly8i/6uv9ddH8BCPFGopdt7w=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776760074;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=JGTRJ2AzOmj79W24SPhE7kzwKoKjG4KfhoMXnKYQoL8=;\n b=BGw1sfYH4YqvIa+j9Y5/cHgEkcLzPV5G6jnsqtudq9UxPXN0NUq7FSKBmtiEX6ImjsbafK\n yjNtnlD0K0ByRPGe2mrUzEfQsx7HVkZsSPCA+4K3Ql8BJX7S9Wc/dWyuZeTyn0wkbkYWU5\n j3gCB7BayHMNQy6ZHB3ZC4LSrh97YSM=","X-MC-Unique":"G-bAXo7fNjSSjvmEqArk_g-1","X-Mimecast-MFC-AGG-ID":"G-bAXo7fNjSSjvmEqArk_g_1776760073","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776760073; x=1777364873;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=JGTRJ2AzOmj79W24SPhE7kzwKoKjG4KfhoMXnKYQoL8=;\n b=fmqsvvOYJSMKvFwBmSWa8bot9e0xXOysp8nz4JvG89o1GjUke/JTh1VERttygAX195\n 3DjNEvdbI1a5sIizVNO+U+AXzcYFwksG3lCGI6D6CLENjLe6g4O97m0ANQJJunmhTeFz\n ocXsiY5EW78r1Nn4znZ9YTrh+Z+Q0sJIJqT/sD+RK4N/upQirN8wV6RWTShMmyCxcaGk\n cIkwwFr3YfyTlPB2kQDsQ53zqOat5ndwXPjeTxXViAoxZNPCcTKMiSrCgzgTwsaR8eAI\n DxD7YdEOp1jkoRMpQCZLq0F1ehdv82cjBxs9jZYfLgb4LygFWm9OW5e6vB9mOhk5LuSL\n hfgg==","X-Forwarded-Encrypted":"i=1;\n AFNElJ8E/O9Yphxk8S48ksr2z02UMdq4I1r3arZbHT4HnlYPuXvkjzI06PW0TsF+XRW370Z7eEwseilL/Lwu/g==@gcc.gnu.org","X-Gm-Message-State":"AOJu0Yx7EfEiRw9regWWzTccUSPC2GGQCjeKXRR+WCJP4RYNELhMJrW5\n 5FU3cjSKPNqJYOQ+iL/5l46ZbH3sMbP17H3B3ObO8YW2jA3Tl8pNOBqSzfpDgCdJ0capaDhbHWz\n cfNciXmd3KaIHo8iKGhvz24t9ehum4hboHmUM840cREUvp9I89qV5KZ9FBqrOTNiJ2pQDlB7rPw\n 6hMGLRZNt+UdiWfdrD+XBGjP8rFVxkt5T9Vw==","X-Gm-Gg":"AeBDieurzTkvQOmKfdODhQCe0WqZCpgKox3GfiTciv2iORmu6s+9JAbPBZl2bcC0BDh\n dGulzvhAJ6nm9+WHTjBJ5pQyr4SnCER4TSc55VecLEbufE449tuX/FJfCupExTAesIZN+Cc+D45\n 6KPZwPiCmg56gK7pSWcH5kp1WQA0dAvvEmwBwmlcUN3qz/6bdPWW3gr2oklyZzl23s0FPteEb/N\n 96nesw8pWHWUublagTrz0WA9mwslj6ZBRvSvdCxlm8OmlRS2tXSM/rFVQ7+bkU7C+KIlQegVrGK\n JA==","X-Received":["by 2002:a05:690e:4806:b0:651:ba8b:a94a with SMTP id\n 956f58d0204a3-65310a7afebmr10914184d50.45.1776760072679;\n Tue, 21 Apr 2026 01:27:52 -0700 (PDT)","by 2002:a05:690e:4806:b0:651:ba8b:a94a with SMTP id\n 956f58d0204a3-65310a7afebmr10914167d50.45.1776760072209; Tue, 21 Apr 2026\n 01:27:52 -0700 (PDT)"],"MIME-Version":"1.0","References":"<oro6kdd9ji.fsf@lxoliva.fsfla.org>\n <orse9oaxa9.fsf@lxoliva.fsfla.org>\n <CAH6eHdS9SWeUfmEe+G43tMUZuR-oSAP1rf8qjUPYdx+psJFagQ@mail.gmail.com>\n <47992676.fMDQidcC6G@vir-laptop> <orwlyf233o.fsf_-_@lxoliva.fsfla.org>\n <orzf2wuczy.fsf_-_@lxoliva.fsfla.org>","In-Reply-To":"<orzf2wuczy.fsf_-_@lxoliva.fsfla.org>","From":"Jonathan Wakely <jwakely@redhat.com>","Date":"Tue, 21 Apr 2026 09:27:36 +0100","X-Gm-Features":"AQROBzAFqFJiCb8oqk_76BaJqUaFADl9N2vb5aXwNwmKS5uArpe-HAH8eZniT1Y","Message-ID":"\n <CACb0b4nhOnWAXk7Ox05sYvHfMJMCTfYhDo9pspLjR_uW_b-BrQ@mail.gmail.com>","Subject":"Re: [PATCH] libstdc++: simd: x86: accept 64-bit long double as double\n [PR124657]","To":"Alexandre Oliva <oliva@adacore.com>","Cc":"Matthias Kretz <MatthiasKretz@gmx.net>, libstdc++@gcc.gnu.org,\n Jonathan Wakely <jwakely.gcc@gmail.com>,\n gcc-patches <gcc-patches@gcc.gnu.org>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"6modd7g-SKlSZaE2TaKJxQJgQM24MV6pUhh7ebFmhhE_1776760073","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3679852,"web_url":"http://patchwork.ozlabs.org/comment/3679852/","msgid":"<6807915.aeNJFYEL58@vir-laptop>","list_archive_url":null,"date":"2026-04-21T08:54:48","subject":"Re: [PATCH] libstdc++: simd: x86: accept 64-bit long double as double\n [PR124657]","submitter":{"id":92625,"url":"http://patchwork.ozlabs.org/api/people/92625/","name":"Matthias Kretz","email":"MatthiasKretz@gmx.net"},"content":"Jonathan Wakely [Tuesday, 21 April 2026, 10:27:36 CEST]:\n> On Tue, 21 Apr 2026 at 05:58, Alexandre Oliva <oliva@adacore.com> wrote:\n> > On Apr  9, 2026, Alexandre Oliva <oliva@adacore.com> wrote:\n> > > We probably need a better abstraction.\n> > \n> > Here's one:\n> > \n> > Various simd_x86 functions that handle double need to be adjusted to\n> > match 64-bit long double as well.\n> > \n> > Introduce __is_x86_ps<_Tp>() and __is_x86_pd<_Tp>() and use them\n> > instead of is_same_v<_Tp, float> and is_same_v<_Tp, double>,\n> > respectively.\n> > \n> > Regstrapped on x86_64-linux-gnu.  Also tested pr109261_constexpr_simd.cc\n> > with -mlong-double-64.  Ok to install? (presumably for stage1)\n> > \n> > \n> > for  libstdc++-v3/ChangeLog\n> > \n> >         PR libstdc++/124657\n> >         * include/experimental/bits/simd_x86.h\n> >         (__is_x86_ps<_Tp>): New.  Replace is_same_v<_Tp, float> with it.\n> >         (__is_x86_pd<_Tp>): New.  Replace is_same_v<_Tp, double> with it.\n> > \n> > ---\n> > \n> >  libstdc++-v3/include/experimental/bits/simd_x86.h |   79\n> >  ++++++++++++--------- 1 file changed, 47 insertions(+), 32 deletions(-)\n> > \n> > diff --git a/libstdc++-v3/include/experimental/bits/simd_x86.h\n> > b/libstdc++-v3/include/experimental/bits/simd_x86.h index\n> > 74c7a61998e0d..73c10c1dcbbe7 100644\n> > --- a/libstdc++-v3/include/experimental/bits/simd_x86.h\n> > +++ b/libstdc++-v3/include/experimental/bits/simd_x86.h\n> > @@ -415,13 +415,28 @@ template <size_t _Np, typename _Tp, typename _Kp>\n> > \n> >  #endif\n> >  \n> >  // ISA & type detection {{{\n> > \n> > +template <typename _Tp>\n> > +  constexpr bool\n> > +  __is_x86_ps()\n> > +  {\n> > +    return is_same_v<_Tp, float>;\n> > +  }\n> > +\n> > +template <typename _Tp>\n> > +  constexpr bool\n> > +  __is_x86_pd()\n> > +  {\n> > +    return is_same_v<_Tp, double>\n> > +      || (sizeof (long double) == sizeof (double) && is_same_v<_Tp, long\n> > double>);\n> This would be ever so slightly more efficient as:\n> \n> if constexpr (is_same_v<_Tp, double>)\n>   return true;\n> else\n> #if  __LDBL_MANT_DIG__ == __DBL_MANT_DIG__\n>   return is_same_v<_Tp, long double>;\n> #else\n>   return false;\n> #endif\n> \n> because it wouldn't instantiate the is_same_v variable templates\n> unless required, and wouldn't care about long double for the common\n> case of 80-bit long double.\n> \n> But the patch seems reasonable to me. Matthias?\n\nYes. It looks like a clean solution to me. I like Jonathan's suggestion. \nstd::experimental::simd is too expensive to compile already.\n\nThat said, I would like to deprecate use of long double in stdx::simd in the \nGCC 17 cycle. And, if I may, also stop testing it (which is slightly more than \ndeprecation, I guess). It's supposed to be a stop-gap to std::simd, which does \nnot support long double.\n\n- Matthias\n\n> \n> > +  }\n> > +\n> > \n> >  template <typename _Tp, size_t _Np>\n> >  \n> >    constexpr bool\n> >    __is_sse_ps()\n> >    {\n> >    \n> >      return __have_sse\n> > \n> > -          && is_same_v<_Tp,\n> > -                       float> && sizeof(__intrinsic_type_t<_Tp, _Np>) ==\n> > 16; +          && __is_x86_ps<_Tp>()\n> > +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 16;\n> > \n> >    }\n> >  \n> >  template <typename _Tp, size_t _Np>\n> > \n> > @@ -429,8 +444,8 @@ template <typename _Tp, size_t _Np>\n> > \n> >    __is_sse_pd()\n> >    {\n> >    \n> >      return __have_sse2\n> > \n> > -          && is_same_v<_Tp,\n> > -                       double> && sizeof(__intrinsic_type_t<_Tp, _Np>) ==\n> > 16; +          && __is_x86_pd<_Tp>()\n> > +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 16;\n> > \n> >    }\n> >  \n> >  template <typename _Tp, size_t _Np>\n> > \n> > @@ -438,8 +453,8 @@ template <typename _Tp, size_t _Np>\n> > \n> >    __is_avx_ps()\n> >    {\n> >    \n> >      return __have_avx\n> > \n> > -          && is_same_v<_Tp,\n> > -                       float> && sizeof(__intrinsic_type_t<_Tp, _Np>) ==\n> > 32; +          && __is_x86_ps<_Tp>()\n> > +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 32;\n> > \n> >    }\n> >  \n> >  template <typename _Tp, size_t _Np>\n> > \n> > @@ -447,8 +462,8 @@ template <typename _Tp, size_t _Np>\n> > \n> >    __is_avx_pd()\n> >    {\n> >    \n> >      return __have_avx\n> > \n> > -          && is_same_v<_Tp,\n> > -                       double> && sizeof(__intrinsic_type_t<_Tp, _Np>) ==\n> > 32; +          && __is_x86_pd<_Tp>()\n> > +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 32;\n> > \n> >    }\n> >  \n> >  template <typename _Tp, size_t _Np>\n> > \n> > @@ -456,8 +471,8 @@ template <typename _Tp, size_t _Np>\n> > \n> >    __is_avx512_ps()\n> >    {\n> >    \n> >      return __have_avx512f\n> > \n> > -          && is_same_v<_Tp,\n> > -                       float> && sizeof(__intrinsic_type_t<_Tp, _Np>) ==\n> > 64; +          && __is_x86_ps<_Tp>()\n> > +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 64;\n> > \n> >    }\n> >  \n> >  template <typename _Tp, size_t _Np>\n> > \n> > @@ -465,8 +480,8 @@ template <typename _Tp, size_t _Np>\n> > \n> >    __is_avx512_pd()\n> >    {\n> >    \n> >      return __have_avx512f\n> > \n> > -          && is_same_v<_Tp,\n> > -                       double> && sizeof(__intrinsic_type_t<_Tp, _Np>) ==\n> > 64; +          && __is_x86_pd<_Tp>()\n> > +          && sizeof(__intrinsic_type_t<_Tp, _Np>) == 64;\n> > \n> >    }\n> >  \n> >  // }}}\n> > \n> > @@ -2397,9 +2412,9 @@ template <typename _Abi, typename>\n> > \n> >             [[maybe_unused]] const auto __yi = __to_intrin(__y);\n> >             if constexpr (sizeof(__xi) == 64)\n> >             \n> >               {\n> > \n> > -               if constexpr (is_same_v<_Tp, float>)\n> > +               if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >                   return _mm512_mask_cmp_ps_mask(__k1, __xi, __yi,\n> >                   _CMP_LT_OS);\n> > \n> > -               else if constexpr (is_same_v<_Tp, double>)\n> > +               else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >                   return _mm512_mask_cmp_pd_mask(__k1, __xi, __yi,\n> >                   _CMP_LT_OS);\n> >                 \n> >                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n> >                 \n> >                   return _mm512_mask_cmplt_epi8_mask(__k1, __xi, __yi);\n> > \n> > @@ -2422,9 +2437,9 @@ template <typename _Abi, typename>\n> > \n> >               }\n> >             \n> >             else if constexpr (sizeof(__xi) == 32)\n> >             \n> >               {\n> > \n> > -               if constexpr (is_same_v<_Tp, float>)\n> > +               if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >                   return _mm256_mask_cmp_ps_mask(__k1, __xi, __yi,\n> >                   _CMP_LT_OS);\n> > \n> > -               else if constexpr (is_same_v<_Tp, double>)\n> > +               else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >                   return _mm256_mask_cmp_pd_mask(__k1, __xi, __yi,\n> >                   _CMP_LT_OS);\n> >                 \n> >                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n> >                 \n> >                   return _mm256_mask_cmplt_epi8_mask(__k1, __xi, __yi);\n> > \n> > @@ -2447,9 +2462,9 @@ template <typename _Abi, typename>\n> > \n> >               }\n> >             \n> >             else if constexpr (sizeof(__xi) == 16)\n> >             \n> >               {\n> > \n> > -               if constexpr (is_same_v<_Tp, float>)\n> > +               if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >                   return _mm_mask_cmp_ps_mask(__k1, __xi, __yi,\n> >                   _CMP_LT_OS);\n> > \n> > -               else if constexpr (is_same_v<_Tp, double>)\n> > +               else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >                   return _mm_mask_cmp_pd_mask(__k1, __xi, __yi,\n> >                   _CMP_LT_OS);\n> >                 \n> >                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n> >                 \n> >                   return _mm_mask_cmplt_epi8_mask(__k1, __xi, __yi);\n> > \n> > @@ -2505,9 +2520,9 @@ template <typename _Abi, typename>\n> > \n> >             [[maybe_unused]] const auto __yi = __to_intrin(__y);\n> >             if constexpr (sizeof(__xi) == 64)\n> >             \n> >               {\n> > \n> > -               if constexpr (is_same_v<_Tp, float>)\n> > +               if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >                   return _mm512_mask_cmp_ps_mask(__k1, __xi, __yi,\n> >                   _CMP_LE_OS);\n> > \n> > -               else if constexpr (is_same_v<_Tp, double>)\n> > +               else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >                   return _mm512_mask_cmp_pd_mask(__k1, __xi, __yi,\n> >                   _CMP_LE_OS);\n> >                 \n> >                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n> >                 \n> >                   return _mm512_mask_cmple_epi8_mask(__k1, __xi, __yi);\n> > \n> > @@ -2530,9 +2545,9 @@ template <typename _Abi, typename>\n> > \n> >               }\n> >             \n> >             else if constexpr (sizeof(__xi) == 32)\n> >             \n> >               {\n> > \n> > -               if constexpr (is_same_v<_Tp, float>)\n> > +               if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >                   return _mm256_mask_cmp_ps_mask(__k1, __xi, __yi,\n> >                   _CMP_LE_OS);\n> > \n> > -               else if constexpr (is_same_v<_Tp, double>)\n> > +               else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >                   return _mm256_mask_cmp_pd_mask(__k1, __xi, __yi,\n> >                   _CMP_LE_OS);\n> >                 \n> >                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n> >                 \n> >                   return _mm256_mask_cmple_epi8_mask(__k1, __xi, __yi);\n> > \n> > @@ -2555,9 +2570,9 @@ template <typename _Abi, typename>\n> > \n> >               }\n> >             \n> >             else if constexpr (sizeof(__xi) == 16)\n> >             \n> >               {\n> > \n> > -               if constexpr (is_same_v<_Tp, float>)\n> > +               if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >                   return _mm_mask_cmp_ps_mask(__k1, __xi, __yi,\n> >                   _CMP_LE_OS);\n> > \n> > -               else if constexpr (is_same_v<_Tp, double>)\n> > +               else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >                   return _mm_mask_cmp_pd_mask(__k1, __xi, __yi,\n> >                   _CMP_LE_OS);\n> >                 \n> >                 else if constexpr (is_signed_v<_Tp> && sizeof(_Tp) == 1)\n> >                 \n> >                   return _mm_mask_cmple_epi8_mask(__k1, __xi, __yi);\n> > \n> > @@ -5021,10 +5036,10 @@ template <typename _Abi, typename>\n> > \n> >                   = _Abi::template _S_implicit_mask_intrin<_Tp>();\n> >                 \n> >                 return 0 != __testc(__a, __b);\n> >               \n> >               }\n> > \n> > -           else if constexpr (is_same_v<_Tp, float>)\n> > +           else if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >               return (_mm_movemask_ps(__a) & ((1 << _Np) - 1))\n> >               \n> >                      == (1 << _Np) - 1;\n> > \n> > -           else if constexpr (is_same_v<_Tp, double>)\n> > +           else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >               return (_mm_movemask_pd(__a) & ((1 << _Np) - 1))\n> >               \n> >                      == (1 << _Np) - 1;\n> >             \n> >             else\n> > \n> > @@ -5084,9 +5099,9 @@ template <typename _Abi, typename>\n> > \n> >                 else\n> >                 \n> >                   return 0 == __testz(__a, __a);\n> >               \n> >               }\n> > \n> > -           else if constexpr (is_same_v<_Tp, float>)\n> > +           else if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >               return (_mm_movemask_ps(__a) & ((1 << _Np) - 1)) != 0;\n> > \n> > -           else if constexpr (is_same_v<_Tp, double>)\n> > +           else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >               return (_mm_movemask_pd(__a) & ((1 << _Np) - 1)) != 0;\n> >             \n> >             else\n> >             \n> >               return (_mm_movemask_epi8(__a) & ((1 << (_Np * sizeof(_Tp)))\n> >               - 1))\n> > \n> > @@ -5120,9 +5135,9 @@ template <typename _Abi, typename>\n> > \n> >                 else\n> >                 \n> >                   return 0 != __testz(__a, __a);\n> >               \n> >               }\n> > \n> > -           else if constexpr (is_same_v<_Tp, float>)\n> > +           else if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >               return (__movemask(__a) & ((1 << _Np) - 1)) == 0;\n> > \n> > -           else if constexpr (is_same_v<_Tp, double>)\n> > +           else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >               return (__movemask(__a) & ((1 << _Np) - 1)) == 0;\n> >             \n> >             else\n> >             \n> >               return (__movemask(__a) & int((1ull << (_Np * sizeof(_Tp)))\n> >               - 1))\n> > \n> > @@ -5150,13 +5165,13 @@ template <typename _Abi, typename>\n> > \n> >                   = _Abi::template _S_implicit_mask_intrin<_Tp>();\n> >                 \n> >                 return 0 != __testnzc(__a, __b);\n> >               \n> >               }\n> > \n> > -           else if constexpr (is_same_v<_Tp, float>)\n> > +           else if constexpr (__is_x86_ps<_Tp> ())\n> > \n> >               {\n> >               \n> >                 constexpr int __allbits = (1 << _Np) - 1;\n> >                 const auto __tmp = _mm_movemask_ps(__a) & __allbits;\n> >                 return __tmp > 0 && __tmp < __allbits;\n> >               \n> >               }\n> > \n> > -           else if constexpr (is_same_v<_Tp, double>)\n> > +           else if constexpr (__is_x86_pd<_Tp> ())\n> > \n> >               {\n> >               \n> >                 constexpr int __allbits = (1 << _Np) - 1;\n> >                 const auto __tmp = _mm_movemask_pd(__a) & __allbits;","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=gmx.net header.i=matthiaskretz@gmx.net header.a=rsa-sha256\n header.s=s31663417 header.b=h4CYNB1F;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n secure) header.d=gmx.net header.i=matthiaskretz@gmx.net header.a=rsa-sha256\n header.s=s31663417 header.b=h4CYNB1F","sourceware.org;\n dmarc=pass (p=quarantine dis=none) header.from=gmx.net","sourceware.org; spf=pass smtp.mailfrom=gmx.net","server2.sourceware.org;\n arc=none smtp.remote-ip=212.227.15.18"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0MBM1Zsjz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 22:30:03 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 444D34BAD16E\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 12:30:01 +0000 (GMT)","from mout.gmx.net (mout.gmx.net [212.227.15.18])\n by sourceware.org (Postfix) with ESMTPS id D75FC4BA902F;\n Tue, 21 Apr 2026 12:29:21 +0000 (GMT)","from client.hidden.invalid by mail.gmx.net (mrgmx005\n [212.227.17.190]) with ESMTPSA (Nemesis) id 1N1wlv-1vHW8S0csz-00v7C1; Tue, 21\n Apr 2026 14:29:17 +0200"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 444D34BAD16E","OpenDKIM Filter v2.11.0 sourceware.org D75FC4BA902F"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org D75FC4BA902F","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org D75FC4BA902F","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776774562; cv=none;\n b=GyqCyfTVGdFSMjrnnV+6ryGHvrEv9FpmZINyjEUue81yTtOA8iOC3ctcFEObPrMVyW8kdNYVZu0A3O4op6wUqFX3Crrm3Glkz7Md/BtvzsuRnfU27LdbI5Vk52rQrbg3ER3I3CoWAoYocloJWpwD3HShpOatfa3NpAHOimsoztQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776774562; c=relaxed/simple;\n bh=ZkkAAZE5JGomHizHU9Rg7FV5Z+i2rK7bmh6lOhuE0h4=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=Vq2GVqGLoaDYVFCJhQcpGf9Zqi9+58ZOsZnpPNY1vLPEIE7lQQd0L6mpfxpsRHHJnRcJVKy8ZtD7QPx0+0yE920D8Y5SiLoxCn7eZiAxmGXimFW6vJpYlY+Xk7D+C4dGiporrzYfc1hy57TOuWC9qMqpBxpWuZibuEAa6vaGtjU=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net;\n s=s31663417; t=1776774557; x=1777379357; i=matthiaskretz@gmx.net;\n bh=D1TfUOBe2HOUvpaBjlrI5fytFPUG7Ryp4k9Bg7H8MdA=;\n h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To:\n References:MIME-Version:Content-Transfer-Encoding:Content-Type:cc:\n content-transfer-encoding:content-type:date:from:message-id:\n mime-version:reply-to:subject:to;\n b=h4CYNB1FB2d34HTQ+r5OpnKEPd2Wyum52GZAKLZHz9Ay4t4tVYbpVyDIS2cpkexF\n mNcJYf0TWl1zCeaz+r1sW6IcinlpckhYlg2JpGpXXwPHhvK3RuNwYHxEessgWIjNX\n wtO4n/md4KcNDzQSz0HSHlPihN3dideRCT7UBu4lDBYyhd5Ft+0jFzGUudLfI4tEu\n vdy0S6XruniKQHVu5XIWWz741atNsyTkZSlF8997lV3zK8s761m+qy2hsmu8h6J8d\n 0MyCoofK6yNTRiLWIclDSLwPOCrI82iX6swUmRZIvi1X6ePhuLCPgSxftg+gA9hEw\n JKBwgAynZvLs6N15mQ==","X-UI-Sender-Class":"724b4f7f-cbec-4199-ad4e-598c01a50d3a","From":"Matthias Kretz <MatthiasKretz@gmx.net>","To":"Alexandre Oliva <oliva@adacore.com>, Jonathan Wakely <jwakely@redhat.com>","Cc":"libstdc++@gcc.gnu.org, Jonathan Wakely <jwakely.gcc@gmail.com>,\n gcc-patches <gcc-patches@gcc.gnu.org>","Subject":"Re: [PATCH] libstdc++: simd: x86: accept 64-bit long double as double\n [PR124657]","Date":"Tue, 21 Apr 2026 10:54:48 +0200","Message-ID":"<6807915.aeNJFYEL58@vir-laptop>","Organization":"GSI Helmholtz Center for Heavy Ion Research","In-Reply-To":"\n <CACb0b4nhOnWAXk7Ox05sYvHfMJMCTfYhDo9pspLjR_uW_b-BrQ@mail.gmail.com>","References":"<oro6kdd9ji.fsf@lxoliva.fsfla.org>\n <orzf2wuczy.fsf_-_@lxoliva.fsfla.org>\n <CACb0b4nhOnWAXk7Ox05sYvHfMJMCTfYhDo9pspLjR_uW_b-BrQ@mail.gmail.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","Content-Type":"text/plain; charset=\"utf-8\"","X-Provags-ID":"V03:K1:Pyg0USm8Ofg2MV5Vg7e1PrNFOt1bmLw1VFuT67N4yEbWORmT5Xo\n aFeod8uzJ8DJoEFG9To2nGZmksYf8o8ic8tb8rqXw01xILECRVE5NnFWSEFtQHPDBPFXH2R\n k9dV91G87I1HZywii8yizBnTj3/oOPpVMq/QtpVTWLJGJF0as/V08FGxdb0EVM7rVA/JVYp\n rrQ8l0HkI/MrsNzD5VC6Q==","UI-OutboundReport":"notjunk:1;M01:P0:Xd5yQrDv5B0=;swgacmW793h8hVYpdoixibpDW3M\n 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\n LKeJ+32vbRAVt7pkO6x+SouB9KR9/n2Mj41U=","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]