From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2044.outbound.protection.outlook.com [40.107.105.44]) by sourceware.org (Postfix) with ESMTPS id 16E2E3857C66 for ; Fri, 6 Oct 2023 09:50:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 16E2E3857C66 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0fmVmg0Sp+EAJetXTAedaO6tLQg1HUnB+/5FTUxr/HI=; b=GJTKn+hB9YY8t5Nvw7RFTTS3uVxSc6h8zFx4tY/AY8uXwVpEDkD3xAy9ctJGZHmNp7xlzfn3U7ESPLL3w6lUZZQvjrAFwfwkE8ZPNJc+ByRzrC9beoW4hzOULzqMhMcxynZyFgbVepPHRiUXSC4ntjEGQEPabSbIdh5a0GaXpJc= Received: from DUZPR01CA0134.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bc::9) by GV2PR08MB9949.eurprd08.prod.outlook.com (2603:10a6:150:ba::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.29; Fri, 6 Oct 2023 09:50:12 +0000 Received: from DBAEUR03FT043.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4bc:cafe::b6) by DUZPR01CA0134.outlook.office365.com (2603:10a6:10:4bc::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.37 via Frontend Transport; Fri, 6 Oct 2023 09:50:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT043.mail.protection.outlook.com (100.127.143.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.30 via Frontend Transport; Fri, 6 Oct 2023 09:50:12 +0000 Received: ("Tessian outbound d219f9a4f5c9:v211"); Fri, 06 Oct 2023 09:50:12 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: db73c9e0d1792784 X-CR-MTA-TID: 64aa7808 Received: from 30f155ee5f37.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8E553088-0710-461E-B975-424BA3B30303.1; Fri, 06 Oct 2023 09:50:06 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 30f155ee5f37.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 06 Oct 2023 09:50:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HdaOWCTnxY/sj9/iuiKKfOqekiaSapgf6LGnZ/H6kiGs70tJ1U06ZT34w4KrVnB0TeezTE6C3mPz2pHmfLp8FUb+e4CcIN/TTOLP5jX/PPiWeJUIkXeD5KlFf9UeNBb47pYf+8oUeMQgmsOliDwBYKq+lq/3Nxoa+To8VJQTtOQqaBn1brX/PXJ7bTDCujyh7ZEZxc6pBckl6I2v3sS/Sn3hOXDWDBR9kMQ9HL+S8e+7dsT7zHGjUscAf2b31Vo4Ov7D42tw85Ao17ueLuiSLj9rowBYSYjetHfQREoD6CjPR6oy27eMgGOzBuyvUc0RlxZC9d32MV2XWkX83ZCZTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0fmVmg0Sp+EAJetXTAedaO6tLQg1HUnB+/5FTUxr/HI=; b=PduPWQ+/y1VJ7zyvH8yxPzmdU7B+VT/W2EtGIfTi5WKYXXhhGrBD0skoO7ygzQ2VPEi2S/rVXj5pr24raiLqLEdoJA5Tw/fuEesLe3pzSx5MfoJILX2XelyfzSHUNkLbTMpNevPPZ0YnjboMXsNHDs/Da01njWH/VBTWt+BKmcYr+LX9BEuTewJ8+zT9mv759gp2vuKhwtXsf6IUcAvs/WuyfAt6rOXqdgFqmchqCtOr6sLmr8ALYCG5PGSoJmEI3+xwb7MAN5DwRwiIMARSDrRsWNUqLDm1S6IJhcs88BSqPamt2B68p3rBLjz46bGa6Oqnv+G7Dlk0UVCX6/9URg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0fmVmg0Sp+EAJetXTAedaO6tLQg1HUnB+/5FTUxr/HI=; b=GJTKn+hB9YY8t5Nvw7RFTTS3uVxSc6h8zFx4tY/AY8uXwVpEDkD3xAy9ctJGZHmNp7xlzfn3U7ESPLL3w6lUZZQvjrAFwfwkE8ZPNJc+ByRzrC9beoW4hzOULzqMhMcxynZyFgbVepPHRiUXSC4ntjEGQEPabSbIdh5a0GaXpJc= Received: from DU7PR01CA0048.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::17) by PR3PR08MB5673.eurprd08.prod.outlook.com (2603:10a6:102:86::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.35; Fri, 6 Oct 2023 09:50:00 +0000 Received: from DBAEUR03FT013.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:50e:cafe::c7) by DU7PR01CA0048.outlook.office365.com (2603:10a6:10:50e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.29 via Frontend Transport; Fri, 6 Oct 2023 09:50:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (40.67.248.234) by DBAEUR03FT013.mail.protection.outlook.com (100.127.142.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6863.28 via Frontend Transport; Fri, 6 Oct 2023 09:50:00 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Fri, 6 Oct 2023 09:49:58 +0000 Received: from e127754.arm.com (10.57.2.208) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Fri, 6 Oct 2023 09:49:58 +0000 From: To: CC: , Subject: [PATCH 1/3] [GCC] arm: vld1q_types_x2 ACLE intrinsics Date: Fri, 6 Oct 2023 10:49:44 +0100 Message-ID: <20231006094946.21978-2-Ezra.Sitorus@arm.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20231006094946.21978-1-Ezra.Sitorus@arm.com> References: <20231006094946.21978-1-Ezra.Sitorus@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DBAEUR03FT013:EE_|PR3PR08MB5673:EE_|DBAEUR03FT043:EE_|GV2PR08MB9949:EE_ X-MS-Office365-Filtering-Correlation-Id: 9154bb9c-587c-43c2-484a-08dbc651a2be x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: OpM7AH1BOQtiMpedz8r6zVFFbNEXmddDymkJbvRQDtElglMQ1PsrXOubjEowvCxL9RbKrSJFdEsNOLvv2G10wQWbA22GPgEEc7EdslpjKUay6CFEWfEdbSvp9hqD1gt0SekXSvKTEwx1SUbtkuYoQWQoeBakUwmXS1tEbhAltba4Bm7m6KFEkNC5HuoVzgkh9NadpSJy0m8T7lXiUNU5G+X6QIFQ3bgTpEM93+RMI6FOd6hmrH6cGkZPK0HSSiRvOYjQ8DunhB+LKpPrDGdrfG1yAkDo9ZxmKMBlTLkwDE4ijoXA8Ht1V/CK40D5Dwfk93f0zhRjGqqasukAyj4bqgsLDNPMGIFKIjXKRKu1dBDMU3HHFtDNydvNmOJ4LdaI4i0EXWhmEmBYya+dvQS/o5wwHJrLZy0bmzKxzQsUMi1EU67br6+CJX/anE7xR3J0kR3DFx2xR1u9fGyFTjkHh5XOXla3SLck7MGPB8cp7y5Nbq08hp5JMYRoZ0Qb93UibIwMTNq5iRu98ZIK84+JmVLSQoawGR3qWuyIrnJcgp8xEf11bTit9ufjWvR3pibYu5PqycDs04Wy7KM5J/X0wYMScTwRXEIoqlrRUpu6vkpe4Ve2qOQQ4rjLkEgoASemqboFuUhEw6nt0FdVXLMVra31tV7+rHzqUIVmMVmITA7joOEICGNHlYbpUZLfc1pbcgZgSmupLHw/+CNRgj8sfKWn8Nm41ef48RD6Ls7YZLUDuL+goOIHLQfUeGT75O+Pj6YLN4FwwV6v5De3Glh61xcF3am0EkRmWQnQer7IlQDQwiISjUPZi2RckLT/VauP9TLKz5iJUyWiF1qypbksI5gEliypTLEtla+jksW36Mc= X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(396003)(376002)(136003)(39860400002)(346002)(230922051799003)(82310400011)(451199024)(186009)(1800799009)(64100799003)(40470700004)(46966006)(36840700001)(40480700001)(40460700003)(70586007)(966005)(5660300002)(86362001)(82740400003)(8936002)(6916009)(70206006)(54906003)(478600001)(2906002)(30864003)(2876002)(81166007)(316002)(41300700001)(1076003)(83380400001)(7696005)(36860700001)(47076005)(336012)(6666004)(4326008)(356005)(8676002)(26005)(426003)(2616005)(84970400001)(36756003)(87944015)(36900700001)(357404004);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5673 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT043.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 37f6fb4d-43b2-468d-82aa-08dbc6519b49 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YHYCBpstRnnrWSRgN+4e8wzgVoPioJW8d14T/t2LCAL7WzVu1Nu3n7b6c25Oowl0k1hiPRQhx2DqSi3e0mCLCxU1Q8J3g3EDyRI8sugU+vmXvI5ZN6yA32pLS9BZ6zHypUxPG/tYe8W9ZU6LsgxZmhkm2oqT8XtsJ4QwfaEO0ZiGIo0XzFxG1MbsXUWjBgEmsPF3bOn7p5xv6za/7umEnmZKd4NIsLMrgwh1AKCybfpniA/T+RFkNtcMR+7ncafw6rfjZLlAqxvpNYafQdA4NnTzjBi8OSJisTCiyHmHh/5jsgII13ORHoOCN3/FphYkKJqyWrqjqiRFRPJlBoXUw6VFtvPAmt2gltpNA5lxqMowdpK9hp5NuT5IhahrrTNMVf+WwqTP+P0bDakwwk62KjU7t3GCAatFmGDErRMh5AABMhcfjmoSHPgdik7q/g36dVxFS33jkQ6+25Xr+8UfstE4M2NnMJy1iKEr2Pd5NXDotkWC+njPspnZYd+JNeoRRHGYU8+mvhUKVlbuSMb/R5xNQvR9TDzWhKKHyd8NEJEarG9/7dvYG9jpTUgDSYGvvC9KxWnf5k+C6T4QvsJDmg+paLbGr0VLudoSpm0kQXp50v4DmGmCctNQqdZSFCJChey4VpGBZ0BdtYtYyiBKo4X5BETSlFqry7lFtBZMAjnePKdxGQYjyXNnObMMxfP2jIbWXySeWcGfUZBNre/WmhippFxzTsHQzwt4xR7uXqs2XE0GKSJoP7u+eJ4cXmWUFy1FY6g9DC5I+eO3Z6A/DErzCUPmeiUUY4tA36xq3lDsEvBrVFUpIHEnoBKWaAsY X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230031)(4636009)(396003)(136003)(376002)(346002)(39860400002)(230922051799003)(1800799009)(186009)(64100799003)(82310400011)(451199024)(46966006)(36840700001)(40470700004)(6916009)(70206006)(54906003)(316002)(70586007)(478600001)(40480700001)(36860700001)(47076005)(41300700001)(84970400001)(81166007)(82740400003)(8676002)(426003)(8936002)(4326008)(26005)(336012)(40460700003)(2616005)(83380400001)(5660300002)(966005)(86362001)(1076003)(2876002)(6666004)(7696005)(36756003)(30864003)(2906002)(87944015)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2023 09:50:12.8087 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9154bb9c-587c-43c2-484a-08dbc651a2be X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT043.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB9949 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY 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: From: Ezra Sitorus This patch is part of a series of patches implementing the _xN variants of the vld1q intrinsic for arm32. This patch adds the _x2 variants of the vld1q intrinsic. Tests use xN so that the latter variants (_x3, _x4) could be added. ACLE documents are at https://developer.arm.com/documentation/ihi0053/latest/ ISA documents are at https://developer.arm.com/documentation/ddi0487/latest/ gcc/ChangeLog: * config/arm/arm_neon.h (vld1q_u8_x2, vld1q_u16_x2, vld1q_u32_x2, vld1q_u64_x2): New. (vld1q_s8_x2, vld1q_s16_x2, vld1q_s32_x2, vld1q_s64_x2): New. (vld1q_f16_x2, vld1q_f32_x2): New. (vld1q_p8_x2, vld1q_p16_x2, vld1q_p64_x2): New. (vld1q_bf16_x2): New. * config/arm/arm_neon_builtins.def (vld1_x2): New entries. * config/arm/neon.md (vld1_x2): New. gcc/testsuite/ChangeLog: * gcc.target/arm/simd/vld1q_base_xN_1.c: Add new test. * gcc.target/arm/simd/vld1q_bf16_xN_1.c: Add new test. * gcc.target/arm/simd/vld1q_fp16_xN_1.c: Add new test. * gcc.target/arm/simd/vld1q_p64_xN_1.c: Add new test. --- gcc/config/arm/arm_neon.h | 128 ++++++++++++++++++ gcc/config/arm/arm_neon_builtins.def | 1 + gcc/config/arm/neon.md | 10 ++ .../gcc.target/arm/simd/vld1q_base_xN_1.c | 67 +++++++++ .../gcc.target/arm/simd/vld1q_bf16_xN_1.c | 13 ++ .../gcc.target/arm/simd/vld1q_fp16_xN_1.c | 14 ++ .../gcc.target/arm/simd/vld1q_p64_xN_1.c | 14 ++ 7 files changed, 247 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/simd/vld1q_base_xN_1.c create mode 100644 gcc/testsuite/gcc.target/arm/simd/vld1q_bf16_xN_1.c create mode 100644 gcc/testsuite/gcc.target/arm/simd/vld1q_fp16_xN_1.c create mode 100644 gcc/testsuite/gcc.target/arm/simd/vld1q_p64_xN_1.c diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h index cdfdb44259a..3eb41c6bdc8 100644 --- a/gcc/config/arm/arm_neon.h +++ b/gcc/config/arm/arm_neon.h @@ -10403,6 +10403,15 @@ vld1q_p64 (const poly64_t * __a) return (poly64x2_t)__builtin_neon_vld1v2di ((const __builtin_neon_di *) __a); } +__extension__ extern __inline poly64x2x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_p64_x2 (const poly64_t * __a) +{ + union { poly64x2x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v2di ((const __builtin_neon_di *) __a); + return __rv.__i; +} + #pragma GCC pop_options __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) @@ -10432,6 +10441,42 @@ vld1q_s64 (const int64_t * __a) return (int64x2_t)__builtin_neon_vld1v2di ((const __builtin_neon_di *) __a); } +__extension__ extern __inline int8x16x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_s8_x2 (const int8_t * __a) +{ + union { int8x16x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v16qi ((const __builtin_neon_qi *) __a); + return __rv.__i; +} + +__extension__ extern __inline int16x8x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_s16_x2 (const int16_t * __a) +{ + union { int16x8x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v8hi ((const __builtin_neon_hi *) __a); + return __rv.__i; +} + +__extension__ extern __inline int32x4x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_s32_x2 (const int32_t * __a) +{ + union { int32x4x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v4si ((const __builtin_neon_si *) __a); + return __rv.__i; +} + +__extension__ extern __inline int64x2x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_s64_x2 (const int64_t * __a) +{ + union { int64x2x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v2di ((const __builtin_neon_di *) __a); + return __rv.__i; +} + #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) @@ -10448,6 +10493,26 @@ vld1q_f32 (const float32_t * __a) return (float32x4_t)__builtin_neon_vld1v4sf ((const __builtin_neon_sf *) __a); } +#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) +__extension__ extern __inline float16x8x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_f16_x2 (const float16_t * __a) +{ + union { float16x8x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v8hf (__a); + return __rv.__i; +} +#endif + +__extension__ extern __inline float32x4x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_f32_x2 (const float32_t * __a) +{ + union { float32x4x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v4sf ((const __builtin_neon_sf *) __a); + return __rv.__i; +} + __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vld1q_u8 (const uint8_t * __a) @@ -10476,6 +10541,42 @@ vld1q_u64 (const uint64_t * __a) return (uint64x2_t)__builtin_neon_vld1v2di ((const __builtin_neon_di *) __a); } +__extension__ extern __inline uint8x16x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_u8_x2 (const uint8_t * __a) +{ + union { uint8x16x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v16qi ((const __builtin_neon_qi *) __a); + return __rv.__i; +} + +__extension__ extern __inline uint16x8x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_u16_x2 (const uint16_t * __a) +{ + union { uint16x8x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v8hi ((const __builtin_neon_hi *) __a); + return __rv.__i; +} + +__extension__ extern __inline uint32x4x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_u32_x2 (const uint32_t * __a) +{ + union { uint32x4x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v4si ((const __builtin_neon_si *) __a); + return __rv.__i; +} + +__extension__ extern __inline uint64x2x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_u64_x2 (const uint64_t * __a) +{ + union { uint64x2x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v2di ((const __builtin_neon_di *) __a); + return __rv.__i; +} + __extension__ extern __inline poly8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vld1q_p8 (const poly8_t * __a) @@ -10490,6 +10591,24 @@ vld1q_p16 (const poly16_t * __a) return (poly16x8_t)__builtin_neon_vld1v8hi ((const __builtin_neon_hi *) __a); } +__extension__ extern __inline poly8x16x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_p8_x2 (const poly8_t * __a) +{ + union { poly8x16x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v16qi ((const __builtin_neon_qi *) __a); + return __rv.__i; +} + +__extension__ extern __inline poly16x8x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_p16_x2 (const poly16_t * __a) +{ + union { poly16x8x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v8hi ((const __builtin_neon_hi *) __a); + return __rv.__i; +} + __extension__ extern __inline int8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vld1_lane_s8 (const int8_t * __a, int8x8_t __b, const int __c) @@ -19782,6 +19901,15 @@ vld1q_bf16 (const bfloat16_t * __ptr) return __builtin_neon_vld1v8bf (__ptr); } +__extension__ extern __inline bfloat16x8x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vld1q_bf16_x2 (const bfloat16_t * __ptr) +{ + union { bfloat16x8x2_t __i; __builtin_neon_oi __o; } __rv; + __rv.__o = __builtin_neon_vld1_x2v8bf ((const __builtin_neon_bf *) __ptr); + return __rv.__i; +} + __extension__ extern __inline bfloat16x4x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vld2_bf16 (bfloat16_t const * __ptr) diff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon_builtins.def index 94b15238123..5fadd255c18 100644 --- a/gcc/config/arm/arm_neon_builtins.def +++ b/gcc/config/arm/arm_neon_builtins.def @@ -298,6 +298,7 @@ VAR1 (TERNOP, vtbx1, v8qi) VAR1 (TERNOP, vtbx2, v8qi) VAR1 (TERNOP, vtbx3, v8qi) VAR1 (TERNOP, vtbx4, v8qi) +VAR7 (LOAD1, vld1_x2, v16qi, v8hi, v4si, v2di, v8hf, v4sf, v8bf) VAR13 (LOAD1, vld1, v8qi, v4hi, v4hf, v2si, v2sf, v16qi, v8hi, v8hf, v4si, v4sf, v2di, v4bf, v8bf) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index d213369ffc3..55049ea549f 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -4957,6 +4957,16 @@ if (BYTES_BIG_ENDIAN) [(set_attr "type" "neon_load1_1reg")] ) +(define_insn "neon_vld1_x2" + [(set (match_operand:OI 0 "s_register_operand" "=w") + (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um") + (unspec:VQXBF [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] + UNSPEC_VLD1))] + "TARGET_NEON" + "vld1.\t%h0, %A1" + [(set_attr "type" "neon_load1_2reg")] +) + ;; The lane numbers in the RTL are in GCC lane order, having been flipped ;; in arm_expand_neon_args. The lane numbers are restored to architectural ;; lane order here. diff --git a/gcc/testsuite/gcc.target/arm/simd/vld1q_base_xN_1.c b/gcc/testsuite/gcc.target/arm/simd/vld1q_base_xN_1.c new file mode 100644 index 00000000000..1d31777afdf --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/simd/vld1q_base_xN_1.c @@ -0,0 +1,67 @@ +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-save-temps -O2" } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" + +uint8x16x2_t test_vld1q_u8_x2 (uint8_t * a) +{ + return vld1q_u8_x2 (a); +} + +uint16x8x2_t test_vld1q_u16_x2 (uint16_t * a) +{ + return vld1q_u16_x2 (a); +} + +uint32x4x2_t test_vld1q_u32_x2 (uint32_t * a) +{ + return vld1q_u32_x2 (a); +} + +uint64x2x2_t test_vld1q_u64_x2 (uint64_t * a) +{ + return vld1q_u64_x2 (a); +} + +int8x16x2_t test_vld1q_s8_x2 (int8_t * a) +{ + return vld1q_s8_x2 (a); +} + +int16x8x2_t test_vld1q_s16_x2 (int16_t * a) +{ + return vld1q_s16_x2 (a); +} + +int32x4x2_t test_vld1q_s32_x2 (int32_t * a) +{ + return vld1q_s32_x2 (a); +} + +int64x2x2_t test_vld1q_s64_x2 (int64_t * a) +{ + return vld1q_s64_x2 (a); +} + +float32x4x2_t test_vld1q_f32_x2 (float32_t * a) +{ + return vld1q_f32_x2 (a); +} + +poly8x16x2_t test_vld1q_p8_x2 (poly8_t * a) +{ + return vld1q_p8_x2 (a); +} + +poly16x8x2_t test_vld1q_p16_x2 (poly16_t * a) +{ + return vld1q_p16_x2 (a); +} + +/* { dg-final { scan-assembler-times {vld1.8\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+\]\n} 3 } } */ +/* { dg-final { scan-assembler-times {vld1.16\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+\]\n} 3 } } */ +/* { dg-final { scan-assembler-times {vld1.32\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+\]\n} 3 } } */ +/* { dg-final { scan-assembler-times {vld1.64\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+:64\]\n} 2 } } */ + diff --git a/gcc/testsuite/gcc.target/arm/simd/vld1q_bf16_xN_1.c b/gcc/testsuite/gcc.target/arm/simd/vld1q_bf16_xN_1.c new file mode 100644 index 00000000000..5f6fc98640e --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/simd/vld1q_bf16_xN_1.c @@ -0,0 +1,13 @@ +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ +/* { dg-options "-save-temps -O2" } */ +/* { dg-add-options arm_v8_2a_bf16_neon } */ + +#include "arm_neon.h" + +bfloat16x8x2_t test_vld1q_bf16_x2 (bfloat16_t * a) +{ + return vld1q_bf16_x2 (a); +} + +/* { dg-final { scan-assembler-times {vld1.16\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+\]\n} 1 } } */ diff --git a/gcc/testsuite/gcc.target/arm/simd/vld1q_fp16_xN_1.c b/gcc/testsuite/gcc.target/arm/simd/vld1q_fp16_xN_1.c new file mode 100644 index 00000000000..aecf491a4de --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/simd/vld1q_fp16_xN_1.c @@ -0,0 +1,14 @@ +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_neon_fp16_ok } */ +/* { dg-options "-save-temps -O2" } */ +/* { dg-add-options arm_neon_fp16 } */ + +#include "arm_neon.h" + +float16x8x2_t test_vld1q_f16_x2 (float16_t * a) +{ + return vld1q_f16_x2 (a); +} + +/* { dg-final { scan-assembler-times {vld1.16\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+\]\n} 1 } } */ + diff --git a/gcc/testsuite/gcc.target/arm/simd/vld1q_p64_xN_1.c b/gcc/testsuite/gcc.target/arm/simd/vld1q_p64_xN_1.c new file mode 100644 index 00000000000..04ceb5e4a24 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/simd/vld1q_p64_xN_1.c @@ -0,0 +1,14 @@ +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_crypto_ok } */ +/* { dg-options "-save-temps -O2" } */ +/* { dg-add-options arm_crypto } */ + +#include "arm_neon.h" + +poly64x2x2_t test_vld1q_p64_x2 (poly64_t * a) +{ + return vld1q_p64_x2 (a); +} + +/* { dg-final { scan-assembler-times {vld1.64\t\{d[0-9]+-d[0-9]+\}, \[r[0-9]+:64\]\n} 1 } } */ + -- 2.25.1