Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2225693/?format=api
{ "id": 2225693, "url": "http://patchwork.ozlabs.org/api/patches/2225693/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/7967883.MhkbZ0Pkbq@vir-laptop/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<7967883.MhkbZ0Pkbq@vir-laptop>", "list_archive_url": null, "date": "2026-04-21T08:40:23", "name": "[v2] libstdc++: Implement P4012R1 while reverting P3844R2 (consteval simd broadcast)", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "c4ba3901adfc61de1c59d8e86adcb9105eb80d64", "submitter": { "id": 92625, "url": "http://patchwork.ozlabs.org/api/people/92625/?format=api", "name": "Matthias Kretz", "email": "MatthiasKretz@gmx.net" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/7967883.MhkbZ0Pkbq@vir-laptop/mbox/", "series": [ { "id": 500791, "url": "http://patchwork.ozlabs.org/api/series/500791/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=500791", "date": "2026-04-21T08:40:23", "name": "[v2] libstdc++: Implement P4012R1 while reverting P3844R2 (consteval simd broadcast)", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/500791/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2225693/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2225693/checks/", "tags": {}, "related": [], "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=h53EXRTN;\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 (2048-bit key,\n secure) header.d=gmx.net header.i=matthiaskretz@gmx.net header.a=rsa-sha256\n header.s=s31663417 header.b=h53EXRTN", "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\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 4g0MBH0vXsz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 22:29:57 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id D0B314B9DB7C\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 12:29:55 +0000 (GMT)", "from mout.gmx.net (mout.gmx.net [212.227.15.18])\n by sourceware.org (Postfix) with ESMTPS id 3B5924BA9030;\n Tue, 21 Apr 2026 12:29:19 +0000 (GMT)", "from client.hidden.invalid by mail.gmx.net (mrgmx005\n [212.227.17.190]) with ESMTPSA (Nemesis) id 1MWRRZ-1vuRmg15tT-00PbuV; Tue, 21\n Apr 2026 14:29:17 +0200" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org D0B314B9DB7C", "OpenDKIM Filter v2.11.0 sourceware.org 3B5924BA9030" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 3B5924BA9030", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 3B5924BA9030", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776774559; cv=none;\n b=BbWzd3Zou/bBVO52vXTZJWpYKk+J/ufKbXJq9jdJrieTdphqIu9iunPFnw/SeHOe8xXd3l7FRhGRh7DjROv8fzv/uPTk799MljKwu6MG7og/s/iofRWfP4mOTUwSXa2ECTmFs+PJMqgbEiGfkk4vQT78N9Cz3K0Sv9KgdhxCjvE=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776774559; c=relaxed/simple;\n bh=d9SeYN1GIa24e9XUZH2YAm9lHs032vK0YWbRWcqR7KY=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=ivZfYjefoWnGo/wsHz27oiuEOXy6jE6bHUAmFzapRTXQ+CawSaGnc3AaPFqC48htJCeB5j5ntiLMptdA/fTUUL4qCBfWD7ZK7ZYRyFqw8KJ+lfs6Bzq1epA2Oqpjgkkf2fS2rU7MgKWOkVOa639tcTFDhHOJfKeAFOzomVrrVM4=", "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=G5W/PlBah6ZZFoIzwQbSY8EwoC/L+Ih4tH/80a5A7Yo=;\n h=X-UI-Sender-Class:From:To:Subject:Date:Message-ID:In-Reply-To:\n References:MIME-Version:Content-Type:Content-Transfer-Encoding:cc:\n content-transfer-encoding:content-type:date:from:message-id:\n mime-version:reply-to:subject:to;\n b=h53EXRTNXf0UdvJXrm+SkVMrQe8kORJhEH2loxkotokAESNYc7b3JEr4lm1CRpZZ\n KRrBvHxawQCk/wLlC/uOD0kR5yhRN8zICgIxyT4QLschnzG4uzAvSIjhCJgFAVwkN\n 0xavnzzuIjdY7Y4SLBFyZ9Y5bfYPhlZNmjrZz9hSOeQ3JzUjKobwglFbb32vpDvkS\n sVjBMWtyM2hgXRggGDd46/Tc29Efew0d10f+0VwdPPzq9IE9RctArGfSCYh3+GltD\n HfCNFrP+NyZRGvksxyMootUQqzNfKqzSPyUiO3IFepYYyVxZMSSxSphGMESSQRoHO\n hU7fK6lij4j0fhihSg==", "X-UI-Sender-Class": "724b4f7f-cbec-4199-ad4e-598c01a50d3a", "From": "Matthias Kretz <MatthiasKretz@gmx.net>", "To": "libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org", "Subject": "[PATCH v2] libstdc++: Implement P4012R1 while reverting P3844R2\n (consteval simd broadcast)", "Date": "Tue, 21 Apr 2026 10:40:23 +0200", "Message-ID": "<7967883.MhkbZ0Pkbq@vir-laptop>", "Organization": "GSI Helmholtz Center for Heavy Ion Research", "In-Reply-To": "<15809688.uLZWGnKmhe@vir-laptop>", "References": "<15809688.uLZWGnKmhe@vir-laptop>", "MIME-Version": "1.0", "Content-Type": "multipart/mixed; boundary=\"nextPart3672644.VLH7GnMWUR\"", "Content-Transfer-Encoding": "7Bit", "X-Provags-ID": "V03:K1:JJ2wztuj169J5LwNm8RkgCGb3r7qOUYWMe+DHGERTZnUyCwruej\n 2o7t/002gvWUYlJ1GuLC+vG8b7lmmOZY54JEgcDjUMkGaJJG7aj+Gn13fmithb5DXV94A0F\n MqcBoRa95qBN7rWcD6NAxPD7WmWtqk7bGQbBu1mFJtSWNrsgH8Dv2SUdrLauLxcPMrn2zQ/\n YGMctQH7lKqFySWBvsMCA==", "UI-OutboundReport": "notjunk:1;M01:P0:8JYSH0FpgZg=;HwgxEudk2xcfZrIWeKMpmDHbD5E\n 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\n NFPQo+l28yPSWqw==", "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" }, "content": "I had to adjust more places that were guarded behind !is_iec559 in the \narithmetic.cc test. unix/-march=native still passes. But unix/-ffast-math has \nmore issues (pre-existing; more patches to come)\n\n------------ 8< -------------\n\nFrom: Matthias Kretz <m.kretz@gsi.de>\n\nP3844R2 added consteval conversion for value-preserving conversion from\nconstants. It had been approved by LEWG in Kona. Therefore, the current\nimplementation has the consteval broadcast constructor. In Croydon, LEWG\nreversed the decision but changed the overload set to keep the design\nspace open for C++29.\n\nThis patch implements the removal of the consteval constructor and\nchanges the broadcast constructor according to P4012R1, to keep the\ndesign space open.\n\nlibstdc++-v3/ChangeLog:\n\n * include/bits/simd_details.h (__value_preserving_cast): Remove.\n * include/bits/simd_mask.h (basic_mask): Replace plain 0 and 1\n literals with cw<0> and cw<1>. Replace explicit basic_vec\n construction from 0 and 1 with default init and broadcast from\n _Up(1).\n (_M_to_uint): Replace 1 with cw<1>.\n * include/bits/simd_vec.h (basic_vec): Remove consteval\n broadcast overload. Remove explicit broadcast from\n non-value-preserving types.\n * testsuite/std/simd/arithmetic.cc: Replace ill-formed integer\n literals with explicit cast to T or use cw.\n * testsuite/std/simd/mask.cc: Likewise.\n * testsuite/std/simd/simd_alg.cc: Likewise.\n * testsuite/std/simd/traits_common.cc: Adjust for resulting\n traits changes.\n * testsuite/std/simd/traits_math.cc: Likewise.\n\nSigned-off-by: Matthias Kretz <m.kretz@gsi.de>\n---\n libstdc++-v3/include/bits/simd_details.h | 9 -----\n libstdc++-v3/include/bits/simd_mask.h | 17 ++++-----\n libstdc++-v3/include/bits/simd_vec.h | 22 +++---------\n libstdc++-v3/testsuite/std/simd/arithmetic.cc | 35 ++++++++++---------\n libstdc++-v3/testsuite/std/simd/mask.cc | 6 ++--\n libstdc++-v3/testsuite/std/simd/simd_alg.cc | 5 ++-\n .../testsuite/std/simd/traits_common.cc | 4 +--\n .../testsuite/std/simd/traits_math.cc | 2 +-\n 8 files changed, 39 insertions(+), 61 deletions(-)\n\n\n--\n──────────────────────────────────────────────────────────────────────────\n Dr. Matthias Kretz https://mattkretz.github.io\n GSI Helmholtz Center for Heavy Ion Research https://gsi.de\n std::simd\n──────────────────────────────────────────────────────────────────────────", "diff": "diff --git a/libstdc++-v3/include/bits/simd_details.h b/libstdc++-v3/include/bits/simd_details.h\nindex 31bd6ac45ab..3880d8a1916 100644\n--- a/libstdc++-v3/include/bits/simd_details.h\n+++ b/libstdc++-v3/include/bits/simd_details.h\n@@ -1241,15 +1241,6 @@ __value_preserving_cast(const _From& __x)\n return static_cast<_To>(__x);\n }\n \n- template <typename _From, typename _To>\n- concept __simd_vec_bcast_consteval\n- = __explicitly_convertible_to<_From, _To>\n-\t && is_arithmetic_v<remove_cvref_t<_From>> && convertible_to<_From, _To>\n-\t && !__value_preserving_convertible_to<remove_cvref_t<_From>, _To>\n-\t && (is_same_v<common_type_t<_From, _To>, _To>\n-\t\t|| (is_same_v<remove_cvref_t<_From>, int> && is_integral_v<_To>)\n-\t\t|| (is_same_v<remove_cvref_t<_From>, unsigned> && unsigned_integral<_To>));\n-\n /** @internal\n * std::pair is not trivially copyable, this one is\n */\ndiff --git a/libstdc++-v3/include/bits/simd_mask.h b/libstdc++-v3/include/bits/simd_mask.h\nindex 27eff4ca01a..0a7cfa03ced 100644\n--- a/libstdc++-v3/include/bits/simd_mask.h\n+++ b/libstdc++-v3/include/bits/simd_mask.h\n@@ -865,11 +865,12 @@ basic_mask(_Tp __val) noexcept\n \t\tusing _Ip = typename _VecType::value_type;\n \t\t_VecType __v0 = _Ip(__val);\n \t\tconstexpr int __bits_per_element = sizeof(_Ip) * __CHAR_BIT__;\n-\t\tconstexpr _VecType __pow2 = _VecType(1) << (__iota<_VecType> % __bits_per_element);\n+\t\tconstexpr _VecType __pow2 = _VecType(cw<1>)\n+\t\t\t\t\t << (__iota<_VecType> % cw<__bits_per_element>);\n \t\tif constexpr (_S_size < __bits_per_element)\n-\t\t return ((__v0 & __pow2) > 0)._M_concat_data();\n+\t\t return ((__v0 & __pow2) > cw<0>)._M_concat_data();\n \t\telse if constexpr (_S_size == __bits_per_element)\n-\t\t return ((__v0 & __pow2) != 0)._M_concat_data();\n+\t\t return ((__v0 & __pow2) != cw<0>)._M_concat_data();\n \t\telse\n \t\t {\n \t\t static_assert(_Bytes == 1);\n@@ -886,7 +887,7 @@ basic_mask(_Tp __val) noexcept\n \t\t\t};\n \t\t\t__v1 *= 0x0101'0101'0101'0101ull;\n \t\t\t__v0 = __builtin_bit_cast(_VecType, __v1);\n-\t\t\treturn ((__v0 & __pow2) != 0)._M_data;\n+\t\t\treturn ((__v0 & __pow2) != cw<0>)._M_data;\n \t\t }\n \t\t else\n \t\t {\n@@ -895,7 +896,7 @@ basic_mask(_Tp __val) noexcept\n \t\t\t__v0 = _VecType::_S_static_permute(__v1, [](int __i) {\n \t\t\t\t return __i / __CHAR_BIT__;\n \t\t\t });\n-\t\t\treturn ((__v0 & __pow2) != 0)._M_data;\n+\t\t\treturn ((__v0 & __pow2) != cw<0>)._M_data;\n \t\t }\n \t\t }\n \t }\n@@ -991,7 +992,7 @@ basic_mask(_Tp __val) noexcept\n \t else\n \t {\n \t using _UV = basic_vec<_Up, _UAbi>;\n-\t return __select_impl(static_cast<_UV::mask_type>(*this), _UV(1), _UV(0));\n+\t return __select_impl(static_cast<_UV::mask_type>(*this), _Up(1), _UV());\n \t }\n \t}\n \n@@ -1066,7 +1067,7 @@ _M_to_uint() const\n \t constexpr int __n = _IV::size();\n \t if constexpr (_Bytes * __CHAR_BIT__ >= __n) // '1 << __iota' cannot overflow\n \t\t{ // reduce(select(k, powers_of_2, 0))\n-\t\t constexpr _IV __pow2 = _IV(1) << __iota<_IV>;\n+\t\t constexpr _IV __pow2 = _IV(cw<1>) << __iota<_IV>;\n \t\t return _Ur(_U0(__select_impl(__k, __pow2, _IV())\n \t\t\t\t ._M_reduce(bit_or<>()))) << _Offset;\n \t\t}\n@@ -1079,7 +1080,7 @@ _M_to_uint() const\n \t\t}\n \t else\n \t\t{ // limit powers_of_2 to 1, 2, 4, ..., 128\n-\t\t constexpr _IV __pow2 = _IV(1) << (__iota<_IV> % _IV(__CHAR_BIT__));\n+\t\t constexpr _IV __pow2 = _IV(cw<1>) << (__iota<_IV> % _IV(cw<__CHAR_BIT__>));\n \t\t _IV __x = __select_impl(__k, __pow2, _IV());\n \t\t // partial reductions of 8 neighboring elements\n \t\t __x |= _IV::_S_static_permute(__x, _SwapNeighbors<4>());\ndiff --git a/libstdc++-v3/include/bits/simd_vec.h b/libstdc++-v3/include/bits/simd_vec.h\nindex 2574bf7c3ad..5f3bd7fd2f6 100644\n--- a/libstdc++-v3/include/bits/simd_vec.h\n+++ b/libstdc++-v3/include/bits/simd_vec.h\n@@ -1135,20 +1135,13 @@ basic_vec(_IV __x)\n *\n * @note The constructor is implicit if the conversion (if any) is value-preserving.\n */\n- template <__explicitly_convertible_to<value_type> _Up>\n+ template <__broadcast_constructible<value_type> _Up>\n \t[[__gnu__::__always_inline__]]\n-\tconstexpr explicit(!__broadcast_constructible<_Up, value_type>)\n+\tconstexpr\n \tbasic_vec(_Up&& __x) noexcept\n \t : _M_data(_DataType() == _DataType() ? static_cast<value_type>(__x) : value_type())\n \t{}\n \n- template <__simd_vec_bcast_consteval<value_type> _Up>\n-\tconsteval\n-\tbasic_vec(_Up&& __x)\n-\t: _M_data(_DataType() == _DataType()\n-\t\t ? __value_preserving_cast<value_type>(__x) : value_type())\n-\t{}\n-\n // [simd.ctor] conversion constructor -----------------------------------\n template <typename _Up, typename _UAbi, _TargetTraits _Traits = {}>\n \trequires (_S_size == _UAbi::_S_size)\n@@ -2037,20 +2030,13 @@ basic_vec(const _NativeVecType& __x)\n { return _M_concat_data(); }\n \n // [simd.ctor] broadcast constructor ------------------------------------\n- template <__explicitly_convertible_to<value_type> _Up>\n+ template <__broadcast_constructible<value_type> _Up>\n \t[[__gnu__::__always_inline__]]\n-\tconstexpr explicit(!__broadcast_constructible<_Up, value_type>)\n+\tconstexpr\n \tbasic_vec(_Up&& __x) noexcept\n \t : _M_data0(static_cast<value_type>(__x)), _M_data1(static_cast<value_type>(__x))\n \t{}\n \n- template <__simd_vec_bcast_consteval<value_type> _Up>\n-\tconsteval\n-\tbasic_vec(_Up&& __x)\n-\t: _M_data0(__value_preserving_cast<value_type>(__x)),\n-\t _M_data1(__value_preserving_cast<value_type>(__x))\n-\t{}\n-\n // [simd.ctor] conversion constructor -----------------------------------\n template <typename _Up, typename _UAbi>\n \trequires (_S_size == _UAbi::_S_size)\ndiff --git a/libstdc++-v3/testsuite/std/simd/arithmetic.cc b/libstdc++-v3/testsuite/std/simd/arithmetic.cc\nindex e662a26866c..adf94f0a87f 100644\n--- a/libstdc++-v3/testsuite/std/simd/arithmetic.cc\n+++ b/libstdc++-v3/testsuite/std/simd/arithmetic.cc\n@@ -88,7 +88,8 @@ struct Tests<V>\n };\n \n ADD_TEST(multiplication) {\n- std::tuple {V(), V(RealV(1), RealV()), V(RealV(), RealV(1)), init_vec<V, C(0, 2), C(2, 0), C(-1, 2)>},\n+ std::tuple {V(), V(RealV(Real(1)), RealV()), V(RealV(), RealV(Real(1))),\n+\t\t init_vec<V, C(0, 2), C(2, 0), C(-1, 2)>},\n [](auto& t, V x, V one, V I, V z) {\n \tt.verify_equal(x * x, x);\n \tt.verify_equal(x * z, x);\n@@ -181,11 +182,11 @@ struct Tests\n \tt.verify_equal(y, x - T(1));\n \tt.verify_equal(x - x, y);\n \tt.verify_equal(x = z - x, init_vec<V, 0, 1, 2, 3, 4, 5, 6>);\n-\tt.verify_equal(x = z - x, V(1));\n+\tt.verify_equal(x = z - x, T(1));\n \tt.verify_equal(z -= x, init_vec<V, 0, 1, 2, 3, 4, 5, 6>);\n \tt.verify_equal(z, init_vec<V, 0, 1, 2, 3, 4, 5, 6>);\n-\tt.verify_equal(z -= z, V(0));\n-\tt.verify_equal(z, V(0));\n+\tt.verify_equal(z -= z, V());\n+\tt.verify_equal(z, V());\n }\n };\n \n@@ -259,10 +260,10 @@ struct Tests\n ADD_TEST(divide0, std::is_floating_point_v<T> && !is_iec559) {\n std::tuple{T(2), init_vec<V, 1, 2, 3, 4, 5, 6, 7>},\n [](auto& t, V x, V y) {\n-\tt.verify_equal_to_ulp(x / x, V(T(1)), 1);\n-\tt.verify_equal_to_ulp(T(3) / x, V(T(3) / T(2)), 1);\n-\tt.verify_equal_to_ulp(x / T(3), V(T(2) / T(3)), 1);\n-\tt.verify_equal_to_ulp(y / x, init_vec<V, .5, 1, 1.5, 2, 2.5, 3, 3.5>, 1);\n+\tt.verify_equal_to_ulp(x / x, V(T(1)), std::cw<1>);\n+\tt.verify_equal_to_ulp(T(3) / x, V(T(3) / T(2)), std::cw<1>);\n+\tt.verify_equal_to_ulp(x / T(3), V(T(2) / T(3)), std::cw<1>);\n+\tt.verify_equal_to_ulp(y / x, init_vec<V, .5, 1, 1.5, 2, 2.5, 3, 3.5>, std::cw<1>);\n }\n };\n \n@@ -272,18 +273,18 @@ struct Tests\n [](auto& t, V a) {\n \tV b = std::cw<2>;\n \tV ref([&](int i) { return a[i] / 2; });\n-\tt.verify_equal_to_ulp(a / b, ref, 1);\n+\tt.verify_equal_to_ulp(a / b, ref, std::cw<1>);\n \ta = select(a == std::cw<0>, T(1), a);\n \t// -freciprocal-math together with flush-to-zero makes\n \t// the following range restriction necessary (i.e.\n \t// 1/|a| must be >= min). Intel vrcpps and vrcp14ps\n \t// need some extra slack (use 1.1 instead of 1).\n \ta = select(fabs(a) >= T(1.1) / norm_min, T(1), a);\n-\tt.verify_equal_to_ulp(a / a, V(1), 1)(\"\\na = \", a);\n+\tt.verify_equal_to_ulp(a / a, V(std::cw<1>), std::cw<1>)(\"\\na = \", a);\n \tref = V([&](int i) { return 2 / a[i]; });\n-\tt.verify_equal_to_ulp(b / a, ref, 1)(\"\\na = \", a);\n-\tt.verify_equal_to_ulp(b /= a, ref, 1);\n-\tt.verify_equal_to_ulp(b, ref, 1);\n+\tt.verify_equal_to_ulp(b / a, ref, std::cw<1>)(\"\\na = \", a);\n+\tt.verify_equal_to_ulp(b /= a, ref, std::cw<1>);\n+\tt.verify_equal_to_ulp(b, ref, std::cw<1>);\n }\n };\n \n@@ -291,15 +292,15 @@ struct Tests\n std::tuple{T(2), init_vec<V, 1, 2, 3, 4, 5, 6, 7>, init_vec<V, T(max), T(norm_min)>,\n \t\t init_vec<V, T(norm_min), T(max)>, init_vec<V, T(max), T(norm_min) + 1>},\n [](auto& t, V x, V y, V z, V a, V b) {\n-\tt.verify_equal(x / x, V(1));\n-\tt.verify_equal(T(3) / x, V(T(3) / T(2)));\n-\tt.verify_equal(x / T(3), V(T(2) / T(3)));\n+\tt.verify_equal(x / x, T(1));\n+\tt.verify_equal(T(3) / x, T(T(3) / T(2)));\n+\tt.verify_equal(x / T(3), T(T(2) / T(3)));\n \tt.verify_equal(y / x, init_vec<V, .5, 1, 1.5, 2, 2.5, 3, 3.5>);\n \tV ref = init_vec<V, T(max / 2), T(norm_min / 2)>;\n \tt.verify_equal(z / x, ref);\n \tref = init_vec<V, T(norm_min / 2), T(max / 2)>;\n \tt.verify_equal(a / x, ref);\n-\tt.verify_equal(b / b, V(1));\n+\tt.verify_equal(b / b, T(1));\n \tref = init_vec<V, T(2 / max), T(2 / (norm_min + 1))>;\n \tt.verify_equal(x / b, ref);\n \tt.verify_equal(x /= b, ref);\ndiff --git a/libstdc++-v3/testsuite/std/simd/mask.cc b/libstdc++-v3/testsuite/std/simd/mask.cc\nindex ebd9dc7728d..117cf37beaa 100644\n--- a/libstdc++-v3/testsuite/std/simd/mask.cc\n+++ b/libstdc++-v3/testsuite/std/simd/mask.cc\n@@ -54,14 +54,14 @@ for (int i = 1; i < k.size(); i += 2)\n \t\t return i % 13 == 0 || i % 7 == 0;\n })},\n [](auto& t, const M k, const M tr, const M fa, const M k2) {\n-\tt.verify_equal(V(+tr), V(1));\n+\tt.verify_equal(V(+tr), T(1));\n \tt.verify_equal(V(+fa), V());\n \tt.verify_equal(V(+k), init_vec<V, 0, 1>);\n \n \tif constexpr (std::is_integral_v<T>)\n \t {\n-\t t.verify_equal(V(~tr), ~V(1));\n-\t t.verify_equal(V(~fa), ~V(0));\n+\t t.verify_equal(V(~tr), ~V(std::cw<1>));\n+\t t.verify_equal(V(~fa), ~V());\n \t t.verify_equal(V(~k), ~init_vec<V, 0, 1>);\n \t }\n \ndiff --git a/libstdc++-v3/testsuite/std/simd/simd_alg.cc b/libstdc++-v3/testsuite/std/simd/simd_alg.cc\nindex 03ba83de8d4..8cfd61802e1 100644\n--- a/libstdc++-v3/testsuite/std/simd/simd_alg.cc\n+++ b/libstdc++-v3/testsuite/std/simd/simd_alg.cc\n@@ -13,8 +13,7 @@ struct Tests\n using M = typename V::mask_type;\n \n using pair = std::pair<V, V>;\n- static constexpr std::conditional_t<std::is_floating_point_v<T>, short, T> x_max\n- = test_iota_max<V, 1>;\n+ static constexpr T x_max = test_iota_max<V, 1>;\n static constexpr int x_max_int = static_cast<int>(x_max);\n \n static constexpr V\n@@ -26,7 +25,7 @@ reverse_iota(const V x)\n \t return static_cast<V>(std::to_underlying(x_max) - static_cast<Vu>(x));\n \t}\n else\n-\treturn x_max - x;\n+\treturn std::cw<x_max> - x;\n }\n \n ADD_TEST(Select) {\ndiff --git a/libstdc++-v3/testsuite/std/simd/traits_common.cc b/libstdc++-v3/testsuite/std/simd/traits_common.cc\nindex ecbceef06bf..a026e359bac 100644\n--- a/libstdc++-v3/testsuite/std/simd/traits_common.cc\n+++ b/libstdc++-v3/testsuite/std/simd/traits_common.cc\n@@ -59,7 +59,7 @@ namespace test02\n // ensure 'true ? int : vec<float>' doesn't work\n template <typename T>\n concept has_type_member = requires { typename T::type; };\n- static_assert(has_type_member<common_type<int, simd::vec<float>>>);\n+ static_assert(!has_type_member<common_type<int, simd::vec<float>>>);\n }\n \n #if defined __AVX__ && !defined __AVX2__\n@@ -90,7 +90,7 @@ namespace test02\n static_assert(!std::convertible_to<Ic<1.1>, simd::vec<float>>);\n static_assert(!std::convertible_to<simd::vec<int, 4>, simd::vec<float, 4>>);\n static_assert(!std::convertible_to<simd::vec<float, 4>, simd::vec<int, 4>>);\n-static_assert( std::convertible_to<int, simd::vec<float>>);\n+static_assert(!std::convertible_to<int, simd::vec<float>>);\n static_assert( std::convertible_to<simd::vec<int, 4>, simd::vec<double, 4>>);\n \n template <typename V>\ndiff --git a/libstdc++-v3/testsuite/std/simd/traits_math.cc b/libstdc++-v3/testsuite/std/simd/traits_math.cc\nindex fc71ff9e359..1f90cf34c2e 100644\n--- a/libstdc++-v3/testsuite/std/simd/traits_math.cc\n+++ b/libstdc++-v3/testsuite/std/simd/traits_math.cc\n@@ -25,7 +25,7 @@ namespace math_tests\n concept has_deduced_vec = requires { typename simd::__deduced_vec_t<T>; };\n \n static_assert(!has_common_type<vf2, vf4>);\n- static_assert( has_common_type<int, vf2>);\n+ static_assert(!has_common_type<int, vf2>);\n \n template <typename T, bool Strict = false>\n struct holder\n", "prefixes": [ "v2" ] }