From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lxmtout2.gsi.de (lxmtout2.gsi.de [140.181.3.112]) by sourceware.org (Postfix) with ESMTPS id 273233858C78; Mon, 22 Apr 2024 15:30:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 273233858C78 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gsi.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gsi.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 273233858C78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=140.181.3.112 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713799809; cv=none; b=jm3Mg4KnEqlacnY9oKNQGvXqdRd2EcW8RjyfzkqQ8i6RcBb6QPcUGFI5WX7CA8rxnCMRUYVWQQ8p03j7+AID4rOOLo931bFmEDgaw6eIlhlGl12ZQJGeIeJCFn0s/MVwxPeHb6z7hBwGrwirdPmi9PVM+OD72fTfSPP9qml2luk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713799809; c=relaxed/simple; bh=iEmoj2gFEe2NbQ1YHGGXwUYe/fFC5FMbJgMAUg3off0=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=NodyhDKEvrTPoON9H7g09vN489dCJUTgZb0bl/Tw6p5R4L3d7+/62nNIXz6qaE+YN+Bm8jdFFE0a1dvsP9wn0tHPkttaIKFqewq7ETgqHe7a/udoTEa4jUhyyPO36aMPqQ408T+40oig/7YxfigFzO0zM2y1pzuPd29LyRVp3+E= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost (localhost [127.0.0.1]) by lxmtout2.gsi.de (Postfix) with ESMTP id 6044F20350E1; Mon, 22 Apr 2024 17:30:04 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at lxmtout2.gsi.de Received: from lxmtout2.gsi.de ([127.0.0.1]) by localhost (lxmtout2.gsi.de [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 1p7GenKQSjic; Mon, 22 Apr 2024 17:30:04 +0200 (CEST) Received: from srvEX6.campus.gsi.de (unknown [10.10.4.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lxmtout2.gsi.de (Postfix) with ESMTPS id 22B7F20350E7; Mon, 22 Apr 2024 17:30:04 +0200 (CEST) Received: from centauriprime.localnet (140.181.3.12) by srvEX6.campus.gsi.de (10.10.4.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.9; Mon, 22 Apr 2024 17:30:03 +0200 From: Matthias Kretz To: , Subject: [PATCH] libstdc++: Fix conversion of simd to vector builtin Date: Mon, 22 Apr 2024 17:30:03 +0200 Message-ID: <14471703.uLZWGnKmhe@centauriprime> Organization: GSI Helmholtz Center for Heavy Ion Research MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart3906789.e9J7NaK4W3"; micalg=pgp-sha512; protocol="application/pgp-signature" X-Originating-IP: [140.181.3.12] X-ClientProxiedBy: srvEX7.Campus.gsi.de (10.10.4.97) To srvEX6.campus.gsi.de (10.10.4.96) X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP,URIBL_SBL_A autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --nextPart3906789.e9J7NaK4W3 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8"; protected-headers="v1" From: Matthias Kretz To: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: [PATCH] libstdc++: Fix conversion of simd to vector builtin Date: Mon, 22 Apr 2024 17:30:03 +0200 Message-ID: <14471703.uLZWGnKmhe@centauriprime> Organization: GSI Helmholtz Center for Heavy Ion Research MIME-Version: 1.0 Tested on x86_64-linux-gnu, powerpc64le-linux-gnu, aarch64-linux-gnu, arm- linux-gnueabihf OK for trunk and backports? =2D---------------------------- 8< --------------------------------- Signed-off-by: Matthias Kretz libstdc++-v3/ChangeLog: PR libstdc++/114803 * include/experimental/bits/simd_builtin.h (_SimdBase2::operator __vector_type_t): There is no __builtin() function in _SimdWrapper, instead use its conversion operator. * testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc: New test. =2D-- .../include/experimental/bits/simd_builtin.h | 2 +- .../simd/pr114803_vecbuiltin_cvt.cc | 105 ++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/experimental/simd/ pr114803_vecbuiltin_cvt.cc diff --git a/libstdc++-v3/include/experimental/bits/simd_builtin.h b/libstd= c+ +-v3/include/experimental/bits/simd_builtin.h index 49c7c7e1c70..4ceeb423894 100644 =2D-- a/libstdc++-v3/include/experimental/bits/simd_builtin.h +++ b/libstdc++-v3/include/experimental/bits/simd_builtin.h @@ -841,7 +841,7 @@ struct _SimdBase2 =20 _GLIBCXX_SIMD_ALWAYS_INLINE explicit operator __vector_type_t<_Tp, _Np>() const =2D { return static_cast*>(this)- >_M_data.__builtin(); } + { return __data(*static_cast*>(this)); } }; =20 struct _SimdBase1 diff --git a/libstdc++-v3/testsuite/experimental/simd/ pr114803_vecbuiltin_cvt.cc b/libstdc++-v3/testsuite/experimental/simd/ pr114803_vecbuiltin_cvt.cc new file mode 100644 index 00000000000..103dd19394c =2D-- /dev/null +++ b/libstdc++-v3/testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc @@ -0,0 +1,105 @@ +// { dg-options "-std=3Dgnu++17" } +// { dg-do compile { target c++17 } } + +#include + +template + void + maybe_test() + { + using V =3D std::experimental::simd>; + if constexpr (std::is_destructible_v) + { + using V2 [[gnu::vector_size(16)]] =3D T; + V x =3D {}; + V2 x2 =3D static_cast(x); + x =3D static_cast(x2); + for (unsigned i =3D 0; i < V::size(); ++i) + { + if (x2[i] !=3D 0) + __builtin_abort(); + } +#ifdef __SSE__ + if constexpr (std::is_same_v) + x =3D static_cast(static_cast<__m128>(x)); + else if constexpr (std::is_same_v) + x =3D static_cast(static_cast<__m128d>(x)); + else if constexpr (std::is_integral_v) + x =3D static_cast(static_cast<__m128i>(x)); +#elif __ALTIVEC__ + if constexpr (std::is_same_v) + x =3D static_cast(static_cast<__vector float>(x)); +#ifdef __VSX__ + else if constexpr (std::is_same_v) + x =3D static_cast(static_cast<__vector double>(x)); +#endif + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D=20 sizeof(signed char) + && std::is_signed_v) + x =3D static_cast(static_cast<__vector signed char>(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D=20 sizeof(signed char)) + x =3D static_cast(static_cast<__vector unsigned char>(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D=20 sizeof(short) + && std::is_signed_v) + x =3D static_cast(static_cast<__vector signed short>(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D=20 sizeof(short)) + x =3D static_cast(static_cast<__vector unsigned short>(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D sizeof(int) + && std::is_signed_v) + x =3D static_cast(static_cast<__vector signed int>(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D sizeof(int)) + x =3D static_cast(static_cast<__vector unsigned int>(x)); +#ifdef __VSX__ + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D sizeof(long= =20 long) + && std::is_signed_v) + x =3D static_cast(static_cast<__vector signed long long>(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D sizeof(long= =20 long)) + x =3D static_cast(static_cast<__vector unsigned long long>(x)); +#endif +#elif __ARM_NEON + if constexpr (std::is_same_v) + x =3D static_cast(static_cast(x)); +#ifdef __aarch64__ + else if constexpr (std::is_same_v) + x =3D static_cast(static_cast(x)); +#endif + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 1 &&=20 std::is_signed_v) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 1) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 2 &&=20 std::is_signed_v) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 2) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 4 &&=20 std::is_signed_v) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 4) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 8 &&=20 std::is_signed_v) + x =3D static_cast(static_cast(x)); + else if constexpr (std::is_integral_v && sizeof(T) =3D=3D 8) + x =3D static_cast(static_cast(x)); +#endif + } + } + +int main() +{ + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); + maybe_test(); +} =2D-=20 =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de std=E2=82=93::simd =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 --nextPart3906789.e9J7NaK4W3 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEroo/QdgfHhrjcEOni/oLaRkZhWgFAmYmgnsACgkQi/oLaRkZ hWi3NwgArN3uPVh0zTiomM0Esk4lKZ3ALxQ2kN07kuslXbVw4KyEaPhbh3hdfGgC EmUXFxqgA56EQFgYTH/M24Dln8P/GvilY9ORyF+94s3QWIv5jood3fhDiLMGWdrf lc4TaGKPMEQaYS9tKyV9SR/9wINnwgCUKe8OdqhhYWhqqEuD+BmuBMG4Irg/0szX 4UYrShbn5Hq0c9g9swKSqtENsjy2ch2Ct6BSYaBv/mSdrJdgkFAYyWw4YIujJ3SB 4J7NFYPxL7Hk0HI2LxZmKaCL4db8vOGkCvNUGPTQuDQvGfmtf9rfIPC1J9Igy4zm 5N/xKaT7Ii4M5qh3kO0Kb82SwrQzVw== =Q2G+ -----END PGP SIGNATURE----- --nextPart3906789.e9J7NaK4W3--