From patchwork Tue Apr 18 13:45:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67917 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0C2093856DCB for ; Tue, 18 Apr 2023 13:47:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0C2093856DCB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825653; bh=gPdk7QTKQhX37dTQXICxCq5ijvxH1uce/uVqST1foNg=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=iXc0R8sqflVPK/LNSYwq3tEOfBKvkriG1pTczlK7Prt2hOI4bPfXDBYHXjHo19EwC Mjww3RxB0HUg4fn8HChX4LB611C7PJ1llpnb+mj4q5RYd0kJoGqaxhj8LZE1j/GS7B G3QGNRBvlBmqUhPLVJOt7PF18G9NPAV06SI8h/cM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2083.outbound.protection.outlook.com [40.107.8.83]) by sourceware.org (Postfix) with ESMTPS id BF60B3857706 for ; Tue, 18 Apr 2023 13:47:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BF60B3857706 Received: from AS9PR06CA0025.eurprd06.prod.outlook.com (2603:10a6:20b:462::30) by AS8PR08MB7910.eurprd08.prod.outlook.com (2603:10a6:20b:50b::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:46:58 +0000 Received: from AM7EUR03FT027.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:462:cafe::7d) by AS9PR06CA0025.outlook.office365.com (2603:10a6:20b:462::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:46:57 +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 AM7EUR03FT027.mail.protection.outlook.com (100.127.140.124) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:46:57 +0000 Received: ("Tessian outbound 5bb4c51d5a1f:v136"); Tue, 18 Apr 2023 13:46:57 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 5f9b59d12e6ebe24 X-CR-MTA-TID: 64aa7808 Received: from 166005639cd1.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 9FBA5E15-FAEB-4B95-BCB9-CAFFB15A67AA.1; Tue, 18 Apr 2023 13:46:46 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 166005639cd1.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:46:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XSEbJGr+EEahB2AviV3LWZU4jnfxzQPPvil37wNwSXoJ83lBF6abG7RiX0ozJPTJFummA4pmIwWy1ltOyZKycfCGWQxLKSm4ENL3CHWQ3EFYT+sGJfHYMmd/ER4X8wC+je3aIALi80DHZs14vOe6AVUyyztJ0Jeb355vpFMDKIKOubVd+iisJwQYT7SsP1/sEKqFjnqeqr4rqmR2HhruJQPJmkkEfNH5U2EJINloFr67f7huSZshh7CA/ubjvzAozK3LU1SYa0i3wVqimIL/o1I57It59ZVDha5L0E5lWAz5qHfluJ2fjeDWdMWArY6VPtqqG6h8yXajGcuSytK/Xw== 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=gPdk7QTKQhX37dTQXICxCq5ijvxH1uce/uVqST1foNg=; b=DAa6Va6YWRBbLdHAedJL9UueHVIAE4uMWgDpLkSpklNearDurAwHYnpyA5X7X6DaLRz/hkV5+kVp2MkjrHAzv8zGhKs+auSPl7mgag1MDtKaPJ19V7BouW0GKTNuvX4nZ7Xfyip0RTnd+NaRWtIKy4dSK04Vf6divpUtl+ngjZQJye2wzrWvT7VE+cDmzkBZ77jctfivpAPdy6ufyIi6S1sDaG8K1P/gXuKa3Xa2p/paBkv+UAz5hKMoXOJIOWyZ5B9N13xXDSfyckCQJfT7ZVPVPRq2mkpMcusw12FkFPN6v1934xnKICCFTxNkJU9XyY4iakWZUzN1CJvTt6Rg9w== 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 Received: from AS8P251CA0008.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:2f2::26) by AM0PR08MB5521.eurprd08.prod.outlook.com (2603:10a6:208:18a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20; Tue, 18 Apr 2023 13:46:43 +0000 Received: from AM7EUR03FT028.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:2f2:cafe::83) by AS8P251CA0008.outlook.office365.com (2603:10a6:20b:2f2::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:46:43 +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 AM7EUR03FT028.mail.protection.outlook.com (100.127.140.192) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:46:43 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:46:43 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:46:42 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:46:42 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 01/22] arm: move builtin function codes into general numberspace Date: Tue, 18 Apr 2023 15:45:47 +0200 Message-ID: <20230418134608.244751-2-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT028:EE_|AM0PR08MB5521:EE_|AM7EUR03FT027:EE_|AS8PR08MB7910:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fd75661-785b-4e8b-30cd-08db4013610b 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: 5Y0ccmyOiLvSOXLRdS2x5U9TNRyHcxwH/XEb+hj9jTACC9s2yazVyKgjFq8GVJqOrLBXZNtxgsM6jR5qVDTzB9WFr37gH0IxKbismCiXpBYgqSymFoMW3ITRXq5Sd4UsPOg2DcIaz7iYD3rN65QW1KfBM9z0jgM3AwYHTpvLbpCmbMJTH3BkTdSjstnT7GVXRc8dxdZcDADp05e+1xRN9eDJEA9Em3jkRGVphC4ewN3S3rHzyzT3wEK4F95XVxOsrQQtPkqFMoiPxzMdEgp1bwknoqev7H6P0AyNeCnhtwyjbPPV65U23PjduCbOSXFzF63P8m4lg2qP/wh+EdNHBbc6C0lcx/kfFCrCxFSw9QHTD6qYFVPQ1eesL1uT1bzHVr9h0IOlEpSzgPozWPqFO12yq6oKexySEC38H1jyRHZBHKPAmzsCFCWSLWrEw4X6PaJoNfurI7khjMiQDebA2b1xQOAadC2TeBqz148YtCXr9B3WqyUuSn6C8wyzUi5x3y9+Nxzn0mXN3Y10n+p+Jy1oyrAG2sB0am4SkGS/JKJJwH/FggpZHX7gIx9Ce7P5mmAMNf63yQGt7Bad/ahmk7rJgQ1PqxxWH0xfFvzB5hkq3utbJ2fBwlVkMsE10eI3LGP7JAshpz6+8ZEJcWMnRdayo9FEmF7OrhNXjeQauQ0Sn0g53nbQPX+xLlmy8veT316NnjhU80nM7DTOy9oFcg== 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:(13230028)(4636009)(136003)(346002)(39860400002)(376002)(396003)(451199021)(46966006)(36840700001)(6636002)(110136005)(4326008)(316002)(70586007)(70206006)(478600001)(7696005)(40480700001)(82310400005)(8936002)(8676002)(5660300002)(41300700001)(30864003)(2906002)(44832011)(81166007)(356005)(82740400003)(86362001)(36756003)(426003)(336012)(2616005)(1076003)(26005)(186003)(36860700001)(83380400001)(47076005)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5521 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT027.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: f410450b-5785-4c69-3ae0-08db40135893 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uSvn993ujoBOXKs8u3b16QM1+iRvzJ3HT6bDrgEt+WtvULubK/08nyj1iJdpdSssacbLusY5ZVyUrLr54i8UHmextfMQYCOHyVhbiodMbFjsU6dtOFPrhQPCUb01CKGXCKGgL88TMLvXZSSEuY1lWVn2iU8h6SAPK7+rWS6K3mlKzBbngIz7pUeB2gxnxSWhyQKFG83Ku9bB7L6RwEKlztaUBcFq4PfXFq4mGU39gcuCSeYJP3bMWBjSpZPGbXw1fo5vzd+53PRN3SFtzFJ1itj5RruxI953JV/JnbQ4OajL3AYpJuiE5oXgWT1reoHawKR+Ci9H4M1rvBx4zLSsxZHhYGQ+Gqf/CIW5aN3NLCXiz5E4ldvNU0FJ7/mm6dBBhfmD2QXyQDoGVZGwrh2mu04sQk1YbKyzFkpXtiMTTru+gHDoSuFno+lxYsFPmvohBzo1IxPt0QlIAf3UeJDJYXJJiZmb6R8RhW/OkQJj/z9QRIZ/zRfPi9EB78R6DMK4fYjEhhreFPhh3MpyWoxQvyUBVPK5XZtFwTwavosP3VHmfIGkScwiS6oCnYQRK+ATTOzK9sLlEBEwTjCmva4/lXarBjAPaF717VS/ZpPq2BHZv9B4iWISg/aw2ep2+N75r7rs2DOaPe21yJlZyaJdTA4Y3h5w/tKLkT2IwoKWFIUeXXuElksxWMFFs7kTZpuq6H2gnly6iHTw+ZdUZsCM2w== 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:(13230028)(4636009)(376002)(396003)(136003)(39860400002)(346002)(451199021)(46966006)(36840700001)(40470700004)(36756003)(6636002)(4326008)(110136005)(316002)(70586007)(70206006)(7696005)(478600001)(41300700001)(5660300002)(82310400005)(8676002)(8936002)(40480700001)(30864003)(2906002)(44832011)(82740400003)(86362001)(81166007)(426003)(2616005)(336012)(40460700003)(1076003)(26005)(186003)(36860700001)(47076005)(83380400001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:46:57.8955 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0fd75661-785b-4e8b-30cd-08db4013610b 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: AM7EUR03FT027.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7910 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch introduces a separate numberspace for general arm builtin function codes. The intent of this patch is to separate the space of function codes that may be assigned to general builtins and future MVE intrinsic functions by using the first bit of each function code to differentiate them. This is identical to how SVE intrinsic functions are currently differentiated from general aarch64 builtins. Future intrinsics implementations may also make use of numberspacing by changing the values of ARM_BUILTIN_SHIFT and ARM_BUILTIN_CLASS, and adding themselves to the arm_builtin_class enum. 2022-09-08 Murray Steele Christophe Lyon gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_general_add_builtin_function): New function. (arm_init_builtin): Use arm_general_add_builtin_function instead of arm_add_builtin_function. (arm_init_acle_builtins): Likewise. (arm_init_mve_builtins): Likewise. (arm_init_crypto_builtins): Likewise. (arm_init_builtins): Likewise. (arm_general_builtin_decl): New function. (arm_builtin_decl): Defer to numberspace-specialized functions. (arm_expand_builtin_args): Rename into arm_general_expand_builtin_args. (arm_expand_builtin_1): Rename into arm_general_expand_builtin_1 and ... (arm_general_expand_builtin_1): ... specialize for general builtins. (arm_expand_acle_builtin): Use arm_general_expand_builtin instead of arm_expand_builtin. (arm_expand_mve_builtin): Likewise. (arm_expand_neon_builtin): Likewise. (arm_expand_vfp_builtin): Likewise. (arm_general_expand_builtin): New function. (arm_expand_builtin): Specialize for general builtins. (arm_general_check_builtin_call): New function. (arm_check_builtin_call): Specialize for general builtins. (arm_describe_resolver): Validate numberspace. (arm_cde_end_args): Likewise. * config/arm/arm-protos.h (enum arm_builtin_class): New enum. (ARM_BUILTIN_SHIFT, ARM_BUILTIN_CLASS): New constants. Co-authored-by: Christophe Lyon --- gcc/config/arm/arm-builtins.cc | 226 ++++++++++++++++++++++----------- gcc/config/arm/arm-protos.h | 16 +++ 2 files changed, 165 insertions(+), 77 deletions(-) diff --git a/gcc/config/arm/arm-builtins.cc b/gcc/config/arm/arm-builtins.cc index 9f5c568cbc3..adcb50d2185 100644 --- a/gcc/config/arm/arm-builtins.cc +++ b/gcc/config/arm/arm-builtins.cc @@ -1405,6 +1405,18 @@ static tree arm_simd_polyHI_type_node = NULL_TREE; static tree arm_simd_polyDI_type_node = NULL_TREE; static tree arm_simd_polyTI_type_node = NULL_TREE; +/* Wrapper around add_builtin_function. NAME is the name of the built-in + function, TYPE is the function type, CODE is the function subcode + (relative to ARM_BUILTIN_GENERAL), and ATTRS is the function + attributes. */ +static tree +arm_general_add_builtin_function (const char* name, tree type, + unsigned int code, tree attrs = NULL_TREE) +{ + code = (code << ARM_BUILTIN_SHIFT) | ARM_BUILTIN_GENERAL; + return add_builtin_function (name, type, code, BUILT_IN_MD, NULL, attrs); +} + static const char * arm_mangle_builtin_scalar_type (const_tree type) { @@ -1811,8 +1823,7 @@ arm_init_builtin (unsigned int fcode, arm_builtin_datum *d, snprintf (namebuf, sizeof (namebuf), "%s_%s", prefix, d->name); - fndecl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD, - NULL, NULL_TREE); + fndecl = arm_general_add_builtin_function (namebuf, ftype, fcode); arm_builtin_decls[fcode] = fndecl; } @@ -1832,7 +1843,7 @@ arm_init_bf16_types (void) /* Set up ACLE builtins, even builtins for instructions that are not in the current target ISA to allow the user to compile particular modules with different target specific options that differ from the command line - options. Such builtins will be rejected in arm_expand_builtin. */ + options. Such builtins will be rejected in arm_general_expand_builtin. */ static void arm_init_acle_builtins (void) @@ -1845,9 +1856,9 @@ arm_init_acle_builtins (void) intSI_type_node, NULL); arm_builtin_decls[ARM_BUILTIN_SAT_IMM_CHECK] - = add_builtin_function ("__builtin_sat_imm_check", sat_check_fpr, - ARM_BUILTIN_SAT_IMM_CHECK, BUILT_IN_MD, - NULL, NULL_TREE); + = arm_general_add_builtin_function ("__builtin_sat_imm_check", + sat_check_fpr, + ARM_BUILTIN_SAT_IMM_CHECK); for (i = 0; i < ARRAY_SIZE (acle_builtin_data); i++, fcode++) { @@ -1894,13 +1905,13 @@ arm_init_mve_builtins (void) intSI_type_node, NULL); arm_builtin_decls[ARM_BUILTIN_GET_FPSCR_NZCVQC] - = add_builtin_function ("__builtin_arm_get_fpscr_nzcvqc", get_fpscr_nzcvqc, - ARM_BUILTIN_GET_FPSCR_NZCVQC, BUILT_IN_MD, NULL, - NULL_TREE); + = arm_general_add_builtin_function ("__builtin_arm_get_fpscr_nzcvqc", + get_fpscr_nzcvqc, + ARM_BUILTIN_GET_FPSCR_NZCVQC); arm_builtin_decls[ARM_BUILTIN_SET_FPSCR_NZCVQC] - = add_builtin_function ("__builtin_arm_set_fpscr_nzcvqc", set_fpscr_nzcvqc, - ARM_BUILTIN_SET_FPSCR_NZCVQC, BUILT_IN_MD, NULL, - NULL_TREE); + = arm_general_add_builtin_function ("__builtin_arm_set_fpscr_nzcvqc", + set_fpscr_nzcvqc, + ARM_BUILTIN_SET_FPSCR_NZCVQC); for (i = 0; i < ARRAY_SIZE (mve_builtin_data); i++, fcode++) { @@ -1912,7 +1923,7 @@ arm_init_mve_builtins (void) /* Set up all the NEON builtins, even builtins for instructions that are not in the current target ISA to allow the user to compile particular modules with different target specific options that differ from the command line - options. Such builtins will be rejected in arm_expand_builtin. */ + options. Such builtins will be rejected in arm_general_expand_builtin. */ static void arm_init_neon_builtins (void) @@ -2006,17 +2017,14 @@ arm_init_crypto_builtins (void) R##_ftype_##A1##_##A2##_##A3 #define CRYPTO1(L, U, R, A) \ arm_builtin_decls[C (U)] \ - = add_builtin_function (N (L), FT1 (R, A), \ - C (U), BUILT_IN_MD, NULL, NULL_TREE); + = arm_general_add_builtin_function (N (L), FT1 (R, A), C (U)); #define CRYPTO2(L, U, R, A1, A2) \ arm_builtin_decls[C (U)] \ - = add_builtin_function (N (L), FT2 (R, A1, A2), \ - C (U), BUILT_IN_MD, NULL, NULL_TREE); + = arm_general_add_builtin_function (N (L), FT2 (R, A1, A2), C (U)); #define CRYPTO3(L, U, R, A1, A2, A3) \ arm_builtin_decls[C (U)] \ - = add_builtin_function (N (L), FT3 (R, A1, A2, A3), \ - C (U), BUILT_IN_MD, NULL, NULL_TREE); + = arm_general_add_builtin_function (N (L), FT3 (R, A1, A2, A3), C (U)); #include "crypto.def" #undef CRYPTO1 @@ -2039,8 +2047,8 @@ arm_init_crypto_builtins (void) || bitmap_bit_p (arm_active_target.isa, FLAG)) \ { \ tree bdecl; \ - bdecl = add_builtin_function ((NAME), (TYPE), (CODE), \ - BUILT_IN_MD, NULL, NULL_TREE); \ + bdecl = arm_general_add_builtin_function ((NAME), (TYPE), \ + (CODE)); \ arm_builtin_decls[CODE] = bdecl; \ } \ } \ @@ -2650,9 +2658,9 @@ arm_init_builtins (void) intSI_type_node, NULL); arm_builtin_decls[ARM_BUILTIN_SIMD_LANE_CHECK] - = add_builtin_function ("__builtin_arm_lane_check", lane_check_fpr, - ARM_BUILTIN_SIMD_LANE_CHECK, BUILT_IN_MD, - NULL, NULL_TREE); + = arm_general_add_builtin_function ("__builtin_arm_lane_check", + lane_check_fpr, + ARM_BUILTIN_SIMD_LANE_CHECK); if (TARGET_HAVE_MVE) arm_init_mve_builtins (); else @@ -2674,11 +2682,13 @@ arm_init_builtins (void) = build_function_type_list (unsigned_type_node, NULL); arm_builtin_decls[ARM_BUILTIN_GET_FPSCR] - = add_builtin_function ("__builtin_arm_get_fpscr", ftype_get_fpscr, - ARM_BUILTIN_GET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE); + = arm_general_add_builtin_function ("__builtin_arm_get_fpscr", + ftype_get_fpscr, + ARM_BUILTIN_GET_FPSCR); arm_builtin_decls[ARM_BUILTIN_SET_FPSCR] - = add_builtin_function ("__builtin_arm_set_fpscr", ftype_set_fpscr, - ARM_BUILTIN_SET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE); + = arm_general_add_builtin_function ("__builtin_arm_set_fpscr", + ftype_set_fpscr, + ARM_BUILTIN_SET_FPSCR); } if (use_cmse) @@ -2686,17 +2696,15 @@ arm_init_builtins (void) tree ftype_cmse_nonsecure_caller = build_function_type_list (unsigned_type_node, NULL); arm_builtin_decls[ARM_BUILTIN_CMSE_NONSECURE_CALLER] - = add_builtin_function ("__builtin_arm_cmse_nonsecure_caller", - ftype_cmse_nonsecure_caller, - ARM_BUILTIN_CMSE_NONSECURE_CALLER, BUILT_IN_MD, - NULL, NULL_TREE); + = arm_general_add_builtin_function ("__builtin_arm_cmse_nonsecure_caller", + ftype_cmse_nonsecure_caller, + ARM_BUILTIN_CMSE_NONSECURE_CALLER); } } -/* Return the ARM builtin for CODE. */ - +/* Implement TARGET_BUILTIN_DECL for general builtins. */ tree -arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED) +arm_general_builtin_decl (unsigned code) { if (code >= ARM_BUILTIN_MAX) return error_mark_node; @@ -2704,6 +2712,20 @@ arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED) return arm_builtin_decls[code]; } +/* Return the ARM builtin for CODE. */ +tree +arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED) +{ + unsigned subcode = code >> ARM_BUILTIN_SHIFT; + switch (code & ARM_BUILTIN_CLASS) + { + case ARM_BUILTIN_GENERAL: + return arm_general_builtin_decl (subcode); + default: + gcc_unreachable (); + } +} + /* Errors in the source file can cause expand_expr to return const0_rtx where we expect a vector. To avoid crashing, use one of the vector clear instructions. */ @@ -2769,7 +2791,7 @@ arm_expand_ternop_builtin (enum insn_code icode, return target; } -/* Subroutine of arm_expand_builtin to take care of binop insns. */ +/* Subroutine of arm_general_expand_builtin to take care of binop insns. */ static rtx arm_expand_binop_builtin (enum insn_code icode, @@ -2809,7 +2831,7 @@ arm_expand_binop_builtin (enum insn_code icode, return target; } -/* Subroutine of arm_expand_builtin to take care of unop insns. */ +/* Subroutine of arm_general_expand_builtin to take care of unop insns. */ static rtx arm_expand_unop_builtin (enum insn_code icode, @@ -2946,11 +2968,11 @@ mve_dereference_pointer (tree exp, tree type, machine_mode reg_mode, build_int_cst (build_pointer_type (array_type), 0)); } -/* Expand a builtin. */ +/* Implement TARGET_EXPAND_BUILTIN for general builtins. */ static rtx -arm_expand_builtin_args (rtx target, machine_mode map_mode, int fcode, - int icode, int have_retval, tree exp, - builtin_arg *args) +arm_general_expand_builtin_args (rtx target, machine_mode map_mode, int fcode, + int icode, int have_retval, tree exp, + builtin_arg *args) { rtx pat; tree arg[SIMD_MAX_BUILTIN_ARGS]; @@ -3234,13 +3256,13 @@ constant_arg: return target; } -/* Expand a builtin. These builtins are "special" because they don't have - symbolic constants defined per-instruction or per instruction-variant. +/* Expand a general builtin. These builtins are "special" because they don't + have symbolic constants defined per-instruction or per instruction-variant. Instead, the required info is looked up in the ARM_BUILTIN_DATA record that is passed into the function. */ static rtx -arm_expand_builtin_1 (int fcode, tree exp, rtx target, +arm_general_expand_builtin_1 (int fcode, tree exp, rtx target, arm_builtin_datum *d) { enum insn_code icode = d->code; @@ -3308,16 +3330,16 @@ arm_expand_builtin_1 (int fcode, tree exp, rtx target, } args[k] = ARG_BUILTIN_STOP; - /* The interface to arm_expand_builtin_args expects a 0 if + /* The interface to arm_general_expand_builtin_args expects a 0 if the function is void, and a 1 if it is not. */ - return arm_expand_builtin_args + return arm_general_expand_builtin_args (target, d->mode, fcode, icode, !is_void, exp, &args[1]); } /* Expand an ACLE builtin, i.e. those registered only if their respective target constraints are met. This check happens within - arm_expand_builtin_args. */ + arm_general_expand_builtin_args. */ static rtx arm_expand_acle_builtin (int fcode, tree exp, rtx target) @@ -3351,11 +3373,12 @@ arm_expand_acle_builtin (int fcode, tree exp, rtx target) ? &acle_builtin_data[fcode - ARM_BUILTIN_ACLE_PATTERN_START] : &cde_builtin_data[fcode - ARM_BUILTIN_CDE_PATTERN_START].base; - return arm_expand_builtin_1 (fcode, exp, target, d); + return arm_general_expand_builtin_1 (fcode, exp, target, d); } -/* Expand an MVE builtin, i.e. those registered only if their respective target - constraints are met. This check happens within arm_expand_builtin. */ +/* Expand an MVE builtin, i.e. those registered only if their respective + target constraints are met. This check happens within + arm_general_expand_builtin. */ static rtx arm_expand_mve_builtin (int fcode, tree exp, rtx target) @@ -3371,7 +3394,7 @@ arm_expand_mve_builtin (int fcode, tree exp, rtx target) arm_builtin_datum *d = &mve_builtin_data[fcode - ARM_BUILTIN_MVE_PATTERN_START]; - return arm_expand_builtin_1 (fcode, exp, target, d); + return arm_general_expand_builtin_1 (fcode, exp, target, d); } /* Expand a Neon builtin, i.e. those registered only if TARGET_NEON holds. @@ -3394,7 +3417,7 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target) arm_builtin_datum *d = &neon_builtin_data[fcode - ARM_BUILTIN_NEON_PATTERN_START]; - return arm_expand_builtin_1 (fcode, exp, target, d); + return arm_general_expand_builtin_1 (fcode, exp, target, d); } /* Expand a VFP builtin. These builtins are treated like @@ -3415,25 +3438,18 @@ arm_expand_vfp_builtin (int fcode, tree exp, rtx target) arm_builtin_datum *d = &vfp_builtin_data[fcode - ARM_BUILTIN_VFP_PATTERN_START]; - return arm_expand_builtin_1 (fcode, exp, target, d); + return arm_general_expand_builtin_1 (fcode, exp, target, d); } -/* Expand an expression EXP that calls a built-in function, - with result going to TARGET if that's convenient - (and in mode MODE if that's convenient). - SUBTARGET may be used as the target for computing one of EXP's operands. - IGNORE is nonzero if the value is to be ignored. */ - +/* Implement TARGET_EXPAND_BUILTIN for general builtins. */ rtx -arm_expand_builtin (tree exp, +arm_general_expand_builtin (unsigned int fcode, + tree exp, rtx target, - rtx subtarget ATTRIBUTE_UNUSED, - machine_mode mode ATTRIBUTE_UNUSED, int ignore ATTRIBUTE_UNUSED) { const struct builtin_description * d; enum insn_code icode; - tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); tree arg0; tree arg1; tree arg2; @@ -3441,7 +3457,6 @@ arm_expand_builtin (tree exp, rtx op1; rtx op2; rtx pat; - unsigned int fcode = DECL_MD_FUNCTION_CODE (fndecl); size_t i; machine_mode tmode; machine_mode mode0; @@ -4052,6 +4067,31 @@ arm_expand_builtin (tree exp, return NULL_RTX; } +/* Expand an expression EXP that calls a built-in function, + with result going to TARGET if that's convenient + (and in mode MODE if that's convenient). + SUBTARGET may be used as the target for computing one of EXP's operands. + IGNORE is nonzero if the value is to be ignored. */ + +rtx +arm_expand_builtin (tree exp, + rtx target, + rtx subtarget ATTRIBUTE_UNUSED, + machine_mode mode ATTRIBUTE_UNUSED, + int ignore ATTRIBUTE_UNUSED) +{ + tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + unsigned int subcode = code >> ARM_BUILTIN_SHIFT; + switch (code & ARM_BUILTIN_CLASS) + { + case ARM_BUILTIN_GENERAL: + return arm_general_expand_builtin (subcode, exp, target, ignore); + default: + gcc_unreachable (); + } +} + void arm_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update) { @@ -4122,22 +4162,21 @@ arm_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update) reload_fenv, restore_fnenv), update_call); } -/* Implement TARGET_CHECK_BUILTIN_CALL. Record a read of the Q bit through - intrinsics in the machine function. */ +/* Implement TARGET_CHECK_BUILTIN_CALL for general builtins. Record a read of + the Q bit through intrinsics in the machine function for general built-in + functions. */ bool -arm_check_builtin_call (location_t , vec , tree fndecl, - tree, unsigned int, tree *) +arm_general_check_builtin_call (unsigned int code) { - int fcode = DECL_MD_FUNCTION_CODE (fndecl); - if (fcode == ARM_BUILTIN_saturation_occurred - || fcode == ARM_BUILTIN_set_saturation) + if (code == ARM_BUILTIN_saturation_occurred + || code == ARM_BUILTIN_set_saturation) { if (cfun && cfun->decl) DECL_ATTRIBUTES (cfun->decl) = tree_cons (get_identifier ("acle qbit"), NULL_TREE, DECL_ATTRIBUTES (cfun->decl)); } - if (fcode == ARM_BUILTIN_sel) + else if (code == ARM_BUILTIN_sel) { if (cfun && cfun->decl) DECL_ATTRIBUTES (cfun->decl) @@ -4147,19 +4186,52 @@ arm_check_builtin_call (location_t , vec , tree fndecl, return true; } +/* Implement TARGET_CHECK_BUILTIN_CALL. */ +bool +arm_check_builtin_call (location_t, vec, tree fndecl, tree, + unsigned int, tree *) +{ + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + unsigned int subcode = code >> ARM_BUILTIN_SHIFT; + switch (code & ARM_BUILTIN_CLASS) + { + case ARM_BUILTIN_GENERAL: + return arm_general_check_builtin_call (subcode); + default: + gcc_unreachable (); + } + +} + enum resolver_ident arm_describe_resolver (tree fndecl) { - if (DECL_MD_FUNCTION_CODE (fndecl) >= ARM_BUILTIN_vcx1qv16qi - && DECL_MD_FUNCTION_CODE (fndecl) < ARM_BUILTIN_MVE_BASE) - return arm_cde_resolver; - return arm_no_resolver; + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + unsigned int subcode = code >> ARM_BUILTIN_SHIFT; + switch (code & ARM_BUILTIN_CLASS) + { + case ARM_BUILTIN_GENERAL: + if (subcode >= ARM_BUILTIN_vcx1qv16qi + && subcode < ARM_BUILTIN_MVE_BASE) + return arm_cde_resolver; + return arm_no_resolver; + default: + gcc_unreachable (); + } } unsigned arm_cde_end_args (tree fndecl) { - return DECL_MD_FUNCTION_CODE (fndecl) >= ARM_BUILTIN_vcx1q_p_v16qi ? 2 : 1; + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + unsigned int subcode = code >> ARM_BUILTIN_SHIFT; + switch (code & ARM_BUILTIN_CLASS) + { + case ARM_BUILTIN_GENERAL: + return subcode >= ARM_BUILTIN_vcx1q_p_v16qi ? 2 : 1; + default: + gcc_unreachable (); + } } #include "gt-arm-builtins.h" diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index c8ae5e1e9c1..1bdbd3b8ab3 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -210,6 +210,22 @@ extern opt_machine_mode arm_get_mask_mode (machine_mode mode); #endif /* RTX_CODE */ +/* It's convenient to divide the built-in function codes into groups, + rather than having everything in a single enum. This type enumerates + those groups. */ +enum arm_builtin_class +{ + ARM_BUILTIN_GENERAL +}; + +/* Built-in function codes are structured so that the low + ARM_BUILTIN_SHIFT bits contain the arm_builtin_class + and the upper bits contain a group-specific subcode. */ +const unsigned int ARM_BUILTIN_SHIFT = 1; + +/* Mask that selects the arm part of a function code. */ +const unsigned int ARM_BUILTIN_CLASS = (1 << ARM_BUILTIN_SHIFT) - 1; + /* MVE functions. */ namespace arm_mve { void handle_arm_mve_types_h (); From patchwork Tue Apr 18 13:45:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67918 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 891D5385AC39 for ; Tue, 18 Apr 2023 13:48:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 891D5385AC39 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825700; bh=da+qHuL2ZEnrVsZw0QuAK9LgzF31KqiyDaOAAqa9Xd8=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=Sgr5ua5a3qgoSAT3oiuhmO56Y74LwOlRHCFzPV7eLjON5y8w5Py29n2HUhtKO2HdC KyDLh/MshOugkCFS23f0XnxQ4eYtq1bGCxYofQBaEpvRZWNjDFx6pcparNfHBu0WmV xQWsFu3IuOd0w7IhYZjzDDldgpblrHKOdWS68dkk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2068.outbound.protection.outlook.com [40.107.241.68]) by sourceware.org (Postfix) with ESMTPS id DE19D3858C2C for ; Tue, 18 Apr 2023 13:47:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DE19D3858C2C Received: from AM5PR1001CA0028.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::41) by DU0PR08MB9911.eurprd08.prod.outlook.com (2603:10a6:10:401::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.30; Tue, 18 Apr 2023 13:47:10 +0000 Received: from AM7EUR03FT020.eop-EUR03.prod.protection.outlook.com (2603:10a6:206:2:cafe::74) by AM5PR1001CA0028.outlook.office365.com (2603:10a6:206:2::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:10 +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 AM7EUR03FT020.mail.protection.outlook.com (100.127.140.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:10 +0000 Received: ("Tessian outbound 5bb4c51d5a1f:v136"); Tue, 18 Apr 2023 13:47:09 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: d81401835bfe09d5 X-CR-MTA-TID: 64aa7808 Received: from a21a729042d5.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C6B43405-FDFB-4C3B-B3F3-9D69B3F9AAC9.1; Tue, 18 Apr 2023 13:47:03 +0000 Received: from EUR02-AM0-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a21a729042d5.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hcUdMXi7RriIQ3OAgtMEyfYVwIDwWBOh5fYQKBZaabR/t5yMPrkmHd56pBdj6LOrBeuYVi8mYZ9TwJcQgnRaHxccUHcBjxgsceqOsZ+rHv1TNSsNvyvFzOOJN1+yZdQLsvmW0arPiFW5aMY27VkxN9exUcGPReV34LQZRwDgC8RVoIYffDdBryg/4jusUqJ5InLX+/cRM9PHi6Da8wOQ0ei/tHq3On6QHlL7EJMLoHACCMb1EF6CR5jbSFpTrxaiibTSgE3KbXGn7vhsQmVisXigkcH+LwbSKUHIykQjf46jApN8IJzxnN1UnnPA5REEUv8HVRHzq3mFlgg5eQ7c3w== 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=da+qHuL2ZEnrVsZw0QuAK9LgzF31KqiyDaOAAqa9Xd8=; b=Wua7HMMDLLV+CG31DXbrlA+5L++HwtgWQnt/9X2Y2zRqmJYss5r4LfkWAVyTZGfKhXLFd6vXlEtYCwNL+DCRkAJ/lVBScnsgA0FASwV4kP4DdgSjBlmZizHtLPOPHmyG80kP1SnTO+4DyFTeD5cZ0mK6WGipEMInWU8ZPqJC2EyT0/WJfPsbDJj+irTY6oxZgD1jcgm26eWDZgxR/ppkuhMzuOdFUyRlpEFXy5xvkPlSxLhALzrhDt1+SXVs8rlkrkkoM3EB9PCkBUxsIEBQMS6cYJIv5G643smXUWZbB09DkE0MfU7fXla47ppJvDzN1ZeYJPb/SZ/64S2PD0gB6g== 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 Received: from AS8PR04CA0044.eurprd04.prod.outlook.com (2603:10a6:20b:312::19) by AM8PR08MB6580.eurprd08.prod.outlook.com (2603:10a6:20b:369::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:46:57 +0000 Received: from AM7EUR03FT021.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:312:cafe::94) by AS8PR04CA0044.outlook.office365.com (2603:10a6:20b:312::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:46:57 +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 AM7EUR03FT021.mail.protection.outlook.com (100.127.140.243) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:46:57 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:46:56 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:46:56 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 02/22] arm: [MVE intrinsics] Add new framework Date: Tue, 18 Apr 2023 15:45:48 +0200 Message-ID: <20230418134608.244751-3-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT021:EE_|AM8PR08MB6580:EE_|AM7EUR03FT020:EE_|DU0PR08MB9911:EE_ X-MS-Office365-Filtering-Correlation-Id: b453acc7-82b5-4050-6e14-08db4013684b 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: NITANanovMIt4AVKqtqX48Rbrg3BEn7AhVQ+JyZ/0uOASC1Q5fMxlTew+l0wnN0YD8lIRVsdNKtBngQQhu0W2IVlHr8taVgy8f8x6jTqDbEWA6aQStWQdelZQFC6ma49JhW/+JB8JvZZn+D32ak2Yd1PxIC6hDHbiXjsT/XoBgZDBArh0OfwKytEgZSWRemhhc24RIHFQcyyjvyFBefe4CuhVghyUfSj2si8jcKTYfcGpW+wIHorsC94g9DRnmOkLaveEnFwbQo3wTzoEVwq4yn4ZXfXpgMEZEMtyPKz7UFyWOQp7TWcxPc047OQefQRsTXJsxtLEhfSteletsHjPgeoPwkqZBl6aOpdDRIGV98n01yShuyECqreNKcJqNVPbYZttYAL2ZozE42WR8zB9lMV6IV0xFk9f8CARAohnK6NVNhh4Go8DkzNsrqLZM7YAxOiahE2LMWZUYfRYEBxI73FYYgK6HoJhQYms9/CDDItDIxnuhY6X+SIaUjHcBo8EIfcn9vxbhiQtDgquBCfzuOXzlWUcO+q1pmBPlZu2xyO/BTaF8BUNuyJHBTvX79OfpW/lysuNSsLrtbJrrJvIuFqfc1ZrdpTlzqcFkD5Dsr0gkMgxAOu8O+mf4gCjRsTAP4y3qctpDegmRpeVogj9vTL34nhxReRX6Z2hNBh1/X///bL02sqQnbAEfJMbK1F0FeJ3tTfCxnFDCGiNM1lAKdUYH/F+3ZluCC4ivJM1iA= 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:(13230028)(4636009)(346002)(136003)(376002)(39860400002)(396003)(451199021)(36840700001)(46966006)(66899021)(36756003)(8936002)(8676002)(44832011)(5660300002)(2906002)(30864003)(82310400005)(86362001)(40480700001)(478600001)(7696005)(6666004)(6636002)(110136005)(186003)(2616005)(36860700001)(1076003)(70586007)(70206006)(66574015)(26005)(41300700001)(356005)(82740400003)(316002)(83380400001)(81166007)(4326008)(47076005)(426003)(336012)(3714002)(2004002)(36900700001)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6580 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT020.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 99cb8f68-2b7f-4c7b-fb81-08db401360e3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: utfc6xyl9prQt6dt4Ifi+NLruODUyPerBgQ2M3RRhZieJEumGlGQZF+sDOj5VT9I9uAFeoolAvCIh9jRCQWNNYsMMstwzZgtqYrKtGOES2aOhdbrB42VBAj4zlU6INNC9UHJFe0h3D0gxaIIz+tM8VcNmkMgdNUWtPPFWsWjqMU52eFhw2mPCwy3I6ykEDZoExVeGBT0XFYlq/URUTt4XRHCeeOmdfLwjusoYhgeFuF+dVgb5CJrmcSsP6jBJg9XEWafFf+Q9HTpPVGA553SIAhqdiyRLqKDuxU1pTCpALkGlDHnlrcR0GumCTPWDicKQaUVciCCrktDHooXVObQhJPIMSllDMHb2QgswOjJ+y1sEgwzPDV+zlAnSf5yWHzlBUryfIw8jRUzsTEphwxzeKKPeF1u0PmVt+lFENZcPZtwNNz5nom9RhfSyTcLWNx6JlC8ws137M91KlAwYByqfd6CB/aUTCB24Xqen5wu6FpdeR6KZJ1ucjMdgb+YJXEZXoUTR84SiCJS5U8ju3ELUWnL45TDxJTHWgqh4jMwrpqqT22HSUy8oZpo/aEY/ljgrXCIhE2ufHfDYthdgxyIQK0Wyi5b0FJrAddmN4LzSk0CcOGo2Od1fiJcZcnGLvM15dPC6uyNqSbUoEuAQFY3fZlwbl2yeGCVLQ4wjbK2X/lxgtayQybtJ8hihu0onSHQrJXJ/hvqsfs96EzGwKulKyDilYGLBdaznO5CIlNx3gg= 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:(13230028)(4636009)(376002)(346002)(136003)(39860400002)(396003)(451199021)(40470700004)(46966006)(36840700001)(66899021)(70206006)(6636002)(110136005)(4326008)(316002)(70586007)(2906002)(40460700003)(1076003)(26005)(186003)(426003)(336012)(40480700001)(47076005)(66574015)(478600001)(5660300002)(82310400005)(8936002)(6666004)(30864003)(41300700001)(8676002)(36756003)(82740400003)(83380400001)(7696005)(36860700001)(86362001)(2616005)(81166007)(44832011)(3714002)(2004002)(579004)(559001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:10.0606 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b453acc7-82b5-4050-6e14-08db4013684b 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: AM7EUR03FT020.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9911 X-Spam-Status: No, score=-12.3 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, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch introduces the new MVE intrinsics framework, heavily inspired by the SVE one in the aarch64 port. Like the MVE intrinsic types implementation, the intrinsics framework defines functions via a new pragma in arm_mve.h. A boolean parameter is used to pass true when __ARM_MVE_PRESERVE_USER_NAMESPACE is defined, and false when it is not, allowing for non-prefixed intrinsic functions to be conditionally defined. Future patches will build on this framework by adding new intrinsic functions and adding the features needed to support them. Differences compared to the aarch64/SVE port include: - when present, the predicate argument is the last one with MVE (the first one with SVE) - when using merging predicates ("_m" suffix), the "inactive" argument (if any) is inserted in the first position - when using merging predicates ("_m" suffix), some function do not have the "inactive" argument, so we maintain an exception-list - MVE intrinsics dealing with floating-point require the FP extension, while SVE may support different extensions - regarding global state, MVE does not have any prefetch intrinsic, so we do not need a flag for this - intrinsic names can be prefixed with "__arm", depending on whether preserve_user_namespace is true or false - parse_signature: the maximum number of arguments is now a parameter, this helps detecting an overflow with a new assert. - suffixes and overloading can be controlled using explicit_mode_suffix_p and skip_overload_p in addition to explicit_type_suffix_p At this implemtation stage, there are some limitations compared to aarch64/SVE, which are removed later in the series: - "offset" mode is not supported yet - gimple folding is not implemented 2022-09-08 Murray Steele Christophe Lyon gcc/ChangeLog: * config.gcc: Add arm-mve-builtins-base.o and arm-mve-builtins-shapes.o to extra_objs. * config/arm/arm-builtins.cc (arm_builtin_decl): Handle MVE builtin numberspace. (arm_expand_builtin): Likewise (arm_check_builtin_call): Likewise (arm_describe_resolver): Likewise. * config/arm/arm-builtins.h (enum resolver_ident): Add arm_mve_resolver. * config/arm/arm-c.cc (arm_pragma_arm): Handle new pragma. (arm_resolve_overloaded_builtin): Handle MVE builtins. (arm_register_target_pragmas): Register arm_check_builtin_call. * config/arm/arm-mve-builtins.cc (class registered_function): New class. (struct registered_function_hasher): New struct. (pred_suffixes): New table. (mode_suffixes): New table. (type_suffix_info): New table. (TYPES_float16): New. (TYPES_all_float): New. (TYPES_integer_8): New. (TYPES_integer_8_16): New. (TYPES_integer_16_32): New. (TYPES_integer_32): New. (TYPES_signed_16_32): New. (TYPES_signed_32): New. (TYPES_all_signed): New. (TYPES_all_unsigned): New. (TYPES_all_integer): New. (TYPES_all_integer_with_64): New. (DEF_VECTOR_TYPE): New. (DEF_DOUBLE_TYPE): New. (DEF_MVE_TYPES_ARRAY): New. (all_integer): New. (all_integer_with_64): New. (float16): New. (all_float): New. (all_signed): New. (all_unsigned): New. (integer_8): New. (integer_8_16): New. (integer_16_32): New. (integer_32): New. (signed_16_32): New. (signed_32): New. (register_vector_type): Use void_type_node for mve.fp-only types when mve.fp is not enabled. (register_builtin_tuple_types): Likewise. (handle_arm_mve_h): New function.. (matches_type_p): Likewise.. (report_out_of_range): Likewise. (report_not_enum): Likewise. (report_missing_float): Likewise. (report_non_ice): Likewise. (check_requires_float): Likewise. (function_instance::hash): Likewise (function_instance::call_properties): Likewise. (function_instance::reads_global_state_p): Likewise. (function_instance::modifies_global_state_p): Likewise. (function_instance::could_trap_p): Likewise. (function_instance::has_inactive_argument): Likewise. (registered_function_hasher::hash): Likewise. (registered_function_hasher::equal): Likewise. (function_builder::function_builder): Likewise. (function_builder::~function_builder): Likewise. (function_builder::append_name): Likewise. (function_builder::finish_name): Likewise. (function_builder::get_name): Likewise. (add_attribute): Likewise. (function_builder::get_attributes): Likewise. (function_builder::add_function): Likewise. (function_builder::add_unique_function): Likewise. (function_builder::add_overloaded_function): Likewise. (function_builder::add_overloaded_functions): Likewise. (function_builder::register_function_group): Likewise. (function_call_info::function_call_info): Likewise. (function_resolver::function_resolver): Likewise. (function_resolver::get_vector_type): Likewise. (function_resolver::get_scalar_type_name): Likewise. (function_resolver::get_argument_type): Likewise. (function_resolver::scalar_argument_p): Likewise. (function_resolver::report_no_such_form): Likewise. (function_resolver::lookup_form): Likewise. (function_resolver::resolve_to): Likewise. (function_resolver::infer_vector_or_tuple_type): Likewise. (function_resolver::infer_vector_type): Likewise. (function_resolver::require_vector_or_scalar_type): Likewise. (function_resolver::require_vector_type): Likewise. (function_resolver::require_matching_vector_type): Likewise. (function_resolver::require_derived_vector_type): Likewise. (function_resolver::require_derived_scalar_type): Likewise. (function_resolver::require_integer_immediate): Likewise. (function_resolver::require_scalar_type): Likewise. (function_resolver::check_num_arguments): Likewise. (function_resolver::check_gp_argument): Likewise. (function_resolver::finish_opt_n_resolution): Likewise. (function_resolver::resolve_unary): Likewise. (function_resolver::resolve_unary_n): Likewise. (function_resolver::resolve_uniform): Likewise. (function_resolver::resolve_uniform_opt_n): Likewise. (function_resolver::resolve): Likewise. (function_checker::function_checker): Likewise. (function_checker::argument_exists_p): Likewise. (function_checker::require_immediate): Likewise. (function_checker::require_immediate_enum): Likewise. (function_checker::require_immediate_range): Likewise. (function_checker::check): Likewise. (gimple_folder::gimple_folder): Likewise. (gimple_folder::fold): Likewise. (function_expander::function_expander): Likewise. (function_expander::direct_optab_handler): Likewise. (function_expander::get_fallback_value): Likewise. (function_expander::get_reg_target): Likewise. (function_expander::add_output_operand): Likewise. (function_expander::add_input_operand): Likewise. (function_expander::add_integer_operand): Likewise. (function_expander::generate_insn): Likewise. (function_expander::use_exact_insn): Likewise. (function_expander::use_unpred_insn): Likewise. (function_expander::use_pred_x_insn): Likewise. (function_expander::use_cond_insn): Likewise. (function_expander::map_to_rtx_codes): Likewise. (function_expander::expand): Likewise. (resolve_overloaded_builtin): Likewise. (check_builtin_call): Likewise. (gimple_fold_builtin): Likewise. (expand_builtin): Likewise. (gt_ggc_mx): Likewise. (gt_pch_nx): Likewise. (gt_pch_nx): Likewise. * config/arm/arm-mve-builtins.def(s8): Define new type suffix. (s16): Likewise. (s32): Likewise. (s64): Likewise. (u8): Likewise. (u16): Likewise. (u32): Likewise. (u64): Likewise. (f16): Likewise. (f32): Likewise. (n): New mode. (offset): New mode. * config/arm/arm-mve-builtins.h (MAX_TUPLE_SIZE): New constant. (CP_READ_FPCR): Likewise. (CP_RAISE_FP_EXCEPTIONS): Likewise. (CP_READ_MEMORY): Likewise. (CP_WRITE_MEMORY): Likewise. (enum units_index): New enum. (enum predication_index): New. (enum type_class_index): New. (enum mode_suffix_index): New enum. (enum type_suffix_index): New. (struct mode_suffix_info): New struct. (struct type_suffix_info): New. (struct function_group_info): Likewise. (class function_instance): Likewise. (class registered_function): Likewise. (class function_builder): Likewise. (class function_call_info): Likewise. (class function_resolver): Likewise. (class function_checker): Likewise. (class gimple_folder): Likewise. (class function_expander): Likewise. (get_mve_pred16_t): Likewise. (find_mode_suffix): New function. (class function_base): Likewise. (class function_shape): Likewise. (function_instance::operator==): New function. (function_instance::operator!=): Likewise. (function_instance::vectors_per_tuple): Likewise. (function_instance::mode_suffix): Likewise. (function_instance::type_suffix): Likewise. (function_instance::scalar_type): Likewise. (function_instance::vector_type): Likewise. (function_instance::tuple_type): Likewise. (function_instance::vector_mode): Likewise. (function_call_info::function_returns_void_p): Likewise. (function_base::call_properties): Likewise. * config/arm/arm-protos.h (enum arm_builtin_class): Add ARM_BUILTIN_MVE. (handle_arm_mve_h): New. (resolve_overloaded_builtin): New. (check_builtin_call): New. (gimple_fold_builtin): New. (expand_builtin): New. * config/arm/arm.cc (TARGET_GIMPLE_FOLD_BUILTIN): Define as arm_gimple_fold_builtin. (arm_gimple_fold_builtin): New function. * config/arm/arm_mve.h: Use new arm_mve.h pragma. * config/arm/predicates.md (arm_any_register_operand): New predicate. * config/arm/t-arm: (arm-mve-builtins.o): Add includes. (arm-mve-builtins-shapes.o): New target. (arm-mve-builtins-base.o): New target. * config/arm/arm-mve-builtins-base.cc: New file. * config/arm/arm-mve-builtins-base.def: New file. * config/arm/arm-mve-builtins-base.h: New file. * config/arm/arm-mve-builtins-functions.h: New file. * config/arm/arm-mve-builtins-shapes.cc: New file. * config/arm/arm-mve-builtins-shapes.h: New file. Co-authored-by: Christophe Lyon , tree fndecl, tree, - unsigned int, tree *) +arm_check_builtin_call (location_t loc, vec arg_loc, + tree fndecl, tree orig_fndecl, + unsigned int nargs, tree *args) { unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); unsigned int subcode = code >> ARM_BUILTIN_SHIFT; @@ -4197,6 +4203,9 @@ arm_check_builtin_call (location_t, vec, tree fndecl, tree, { case ARM_BUILTIN_GENERAL: return arm_general_check_builtin_call (subcode); + case ARM_BUILTIN_MVE: + return arm_mve::check_builtin_call (loc, arg_loc, subcode, + orig_fndecl, nargs, args); default: gcc_unreachable (); } @@ -4215,6 +4224,8 @@ arm_describe_resolver (tree fndecl) && subcode < ARM_BUILTIN_MVE_BASE) return arm_cde_resolver; return arm_no_resolver; + case ARM_BUILTIN_MVE: + return arm_mve_resolver; default: gcc_unreachable (); } diff --git a/gcc/config/arm/arm-builtins.h b/gcc/config/arm/arm-builtins.h index 8c94b6bc40b..494dcd09411 100644 --- a/gcc/config/arm/arm-builtins.h +++ b/gcc/config/arm/arm-builtins.h @@ -27,6 +27,7 @@ enum resolver_ident { arm_cde_resolver, + arm_mve_resolver, arm_no_resolver }; enum resolver_ident arm_describe_resolver (tree); diff --git a/gcc/config/arm/arm-c.cc b/gcc/config/arm/arm-c.cc index 59c0d8ce747..d3d93ceba00 100644 --- a/gcc/config/arm/arm-c.cc +++ b/gcc/config/arm/arm-c.cc @@ -144,20 +144,44 @@ arm_pragma_arm (cpp_reader *) const char *name = TREE_STRING_POINTER (x); if (strcmp (name, "arm_mve_types.h") == 0) arm_mve::handle_arm_mve_types_h (); + else if (strcmp (name, "arm_mve.h") == 0) + { + if (pragma_lex (&x) == CPP_NAME) + { + if (strcmp (IDENTIFIER_POINTER (x), "true") == 0) + arm_mve::handle_arm_mve_h (true); + else if (strcmp (IDENTIFIER_POINTER (x), "false") == 0) + arm_mve::handle_arm_mve_h (false); + else + error ("%<#pragma GCC arm \"arm_mve.h\"%> requires a boolean parameter"); + } + } else error ("unknown %<#pragma GCC arm%> option %qs", name); } -/* Implement TARGET_RESOLVE_OVERLOADED_BUILTIN. This is currently only - used for the MVE related builtins for the CDE extension. - Here we ensure the type of arguments is such that the size is correct, and - then return a tree that describes the same function call but with the - relevant types cast as necessary. */ +/* Implement TARGET_RESOLVE_OVERLOADED_BUILTIN. */ tree -arm_resolve_overloaded_builtin (location_t loc, tree fndecl, void *arglist) +arm_resolve_overloaded_builtin (location_t loc, tree fndecl, + void *uncast_arglist) { - if (arm_describe_resolver (fndecl) == arm_cde_resolver) - return arm_resolve_cde_builtin (loc, fndecl, arglist); + enum resolver_ident resolver = arm_describe_resolver (fndecl); + if (resolver == arm_cde_resolver) + return arm_resolve_cde_builtin (loc, fndecl, uncast_arglist); + if (resolver == arm_mve_resolver) + { + vec empty = {}; + vec *arglist = (uncast_arglist + ? (vec *) uncast_arglist + : &empty); + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + unsigned int subcode = code >> ARM_BUILTIN_SHIFT; + tree new_fndecl = arm_mve::resolve_overloaded_builtin (loc, subcode, arglist); + if (new_fndecl == NULL_TREE || new_fndecl == error_mark_node) + return new_fndecl; + return build_function_call_vec (loc, vNULL, new_fndecl, arglist, + NULL, fndecl); + } return NULL_TREE; } @@ -519,7 +543,9 @@ arm_register_target_pragmas (void) { /* Update pragma hook to allow parsing #pragma GCC target. */ targetm.target_option.pragma_parse = arm_pragma_target_parse; + targetm.resolve_overloaded_builtin = arm_resolve_overloaded_builtin; + targetm.check_builtin_call = arm_check_builtin_call; c_register_pragma ("GCC", "arm", arm_pragma_arm); diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc new file mode 100644 index 00000000000..e9f285faf2b --- /dev/null +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -0,0 +1,45 @@ +/* ACLE support for Arm MVE (__ARM_FEATURE_MVE intrinsics) + Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "rtl.h" +#include "memmodel.h" +#include "insn-codes.h" +#include "optabs.h" +#include "basic-block.h" +#include "function.h" +#include "gimple.h" +#include "arm-mve-builtins.h" +#include "arm-mve-builtins-shapes.h" +#include "arm-mve-builtins-base.h" +#include "arm-mve-builtins-functions.h" + +using namespace arm_mve; + +namespace { + +} /* end anonymous namespace */ + +namespace arm_mve { + +} /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def new file mode 100644 index 00000000000..d15ba2e23e8 --- /dev/null +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -0,0 +1,24 @@ +/* ACLE support for Arm MVE (__ARM_FEATURE_MVE intrinsics) + Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#define REQUIRES_FLOAT false +#undef REQUIRES_FLOAT + +#define REQUIRES_FLOAT true +#undef REQUIRES_FLOAT diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h new file mode 100644 index 00000000000..c4d7b750cd5 --- /dev/null +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -0,0 +1,29 @@ +/* ACLE support for Arm MVE (__ARM_FEATURE_MVE intrinsics) + Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#ifndef GCC_ARM_MVE_BUILTINS_BASE_H +#define GCC_ARM_MVE_BUILTINS_BASE_H + +namespace arm_mve { +namespace functions { + +} /* end namespace arm_mve::functions */ +} /* end namespace arm_mve */ + +#endif diff --git a/gcc/config/arm/arm-mve-builtins-functions.h b/gcc/config/arm/arm-mve-builtins-functions.h new file mode 100644 index 00000000000..dff01999bcd --- /dev/null +++ b/gcc/config/arm/arm-mve-builtins-functions.h @@ -0,0 +1,50 @@ +/* ACLE support for Arm MVE (function_base classes) + Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#ifndef GCC_ARM_MVE_BUILTINS_FUNCTIONS_H +#define GCC_ARM_MVE_BUILTINS_FUNCTIONS_H + +namespace arm_mve { + +/* Wrap T, which is derived from function_base, and indicate that the + function never has side effects. It is only necessary to use this + wrapper on functions that might have floating-point suffixes, since + otherwise we assume by default that the function has no side effects. */ +template +class quiet : public T +{ +public: + CONSTEXPR quiet () : T () {} + + unsigned int + call_properties (const function_instance &) const override + { + return 0; + } +}; + +} /* end namespace arm_mve */ + +/* Declare the global function base NAME, creating it from an instance + of class CLASS with constructor arguments ARGS. */ +#define FUNCTION(NAME, CLASS, ARGS) \ + namespace { static CONSTEXPR const CLASS NAME##_obj ARGS; } \ + namespace functions { const function_base *const NAME = &NAME##_obj; } + +#endif diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc new file mode 100644 index 00000000000..f20660d8319 --- /dev/null +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -0,0 +1,343 @@ +/* ACLE support for Arm MVE (function shapes) + Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "rtl.h" +#include "memmodel.h" +#include "insn-codes.h" +#include "optabs.h" +#include "arm-mve-builtins.h" +#include "arm-mve-builtins-shapes.h" + +/* In the comments below, _t0 represents the first type suffix + (e.g. "_s8") and _t1 represents the second. T0/T1 represent the + type full names (e.g. int8x16_t). Square brackets enclose + characters that are present in only the full name, not the + overloaded name. Governing predicate arguments and predicate + suffixes are not shown, since they depend on the predication type, + which is a separate piece of information from the shape. */ + +namespace arm_mve { + +/* If INSTANCE has a predicate, add it to the list of argument types + in ARGUMENT_TYPES. RETURN_TYPE is the type returned by the + function. */ +static void +apply_predication (const function_instance &instance, tree return_type, + vec &argument_types) +{ + if (instance.pred != PRED_none) + { + /* When predicate is PRED_m, insert a first argument + ("inactive") with the same type as return_type. */ + if (instance.has_inactive_argument ()) + argument_types.quick_insert (0, return_type); + argument_types.quick_push (get_mve_pred16_t ()); + } +} + +/* Parse and move past an element type in FORMAT and return it as a type + suffix. The format is: + + [01] - the element type in type suffix 0 or 1 of INSTANCE. + h - a half-sized version of + s - a signed type with the given number of bits + s[01] - a signed type with the same width as type suffix 0 or 1 + u - an unsigned type with the given number of bits + u[01] - an unsigned type with the same width as type suffix 0 or 1 + w - a double-sized version of + x - a type with the given number of bits and same signedness + as the next argument. + + Future intrinsics will extend this format. */ +static type_suffix_index +parse_element_type (const function_instance &instance, const char *&format) +{ + int ch = *format++; + + + if (ch == 's' || ch == 'u') + { + type_class_index tclass = (ch == 'f' ? TYPE_float + : ch == 's' ? TYPE_signed + : TYPE_unsigned); + char *end; + unsigned int bits = strtol (format, &end, 10); + format = end; + if (bits == 0 || bits == 1) + bits = instance.type_suffix (bits).element_bits; + return find_type_suffix (tclass, bits); + } + + if (ch == 'h') + { + type_suffix_index suffix = parse_element_type (instance, format); + return find_type_suffix (type_suffixes[suffix].tclass, + type_suffixes[suffix].element_bits / 2); + } + + if (ch == 'w') + { + type_suffix_index suffix = parse_element_type (instance, format); + return find_type_suffix (type_suffixes[suffix].tclass, + type_suffixes[suffix].element_bits * 2); + } + + if (ch == 'x') + { + const char *next = format; + next = strstr (format, ","); + next+=2; + type_suffix_index suffix = parse_element_type (instance, next); + type_class_index tclass = type_suffixes[suffix].tclass; + char *end; + unsigned int bits = strtol (format, &end, 10); + format = end; + return find_type_suffix (tclass, bits); + } + + if (ch == '0' || ch == '1') + return instance.type_suffix_ids[ch - '0']; + + gcc_unreachable (); +} + +/* Read and return a type from FORMAT for function INSTANCE. Advance + FORMAT beyond the type string. The format is: + + p - predicates with type mve_pred16_t + s - a scalar type with the given element suffix + t - a vector or tuple type with given element suffix [*1] + v - a vector with the given element suffix + + where has the format described above parse_element_type. + + Future intrinsics will extend this format. + + [*1] the vectors_per_tuple function indicates whether the type should + be a tuple, and if so, how many vectors it should contain. */ +static tree +parse_type (const function_instance &instance, const char *&format) +{ + int ch = *format++; + + if (ch == 'p') + return get_mve_pred16_t (); + + if (ch == 's') + { + type_suffix_index suffix = parse_element_type (instance, format); + return scalar_types[type_suffixes[suffix].vector_type]; + } + + if (ch == 't') + { + type_suffix_index suffix = parse_element_type (instance, format); + vector_type_index vector_type = type_suffixes[suffix].vector_type; + unsigned int num_vectors = instance.vectors_per_tuple (); + return acle_vector_types[num_vectors - 1][vector_type]; + } + + if (ch == 'v') + { + type_suffix_index suffix = parse_element_type (instance, format); + return acle_vector_types[0][type_suffixes[suffix].vector_type]; + } + + gcc_unreachable (); +} + +/* Read a type signature for INSTANCE from FORMAT. Add the argument + types to ARGUMENT_TYPES and return the return type. Assert there + are no more than MAX_ARGS arguments. + + The format is a comma-separated list of types (as for parse_type), + with the first type being the return type and the rest being the + argument types. */ +static tree +parse_signature (const function_instance &instance, const char *format, + vec &argument_types, unsigned int max_args) +{ + tree return_type = parse_type (instance, format); + unsigned int args = 0; + while (format[0] == ',') + { + gcc_assert (args < max_args); + format += 1; + tree argument_type = parse_type (instance, format); + argument_types.quick_push (argument_type); + args += 1; + } + gcc_assert (format[0] == 0); + return return_type; +} + +/* Add one function instance for GROUP, using mode suffix MODE_SUFFIX_ID, + the type suffixes at index TI and the predication suffix at index PI. + The other arguments are as for build_all. */ +static void +build_one (function_builder &b, const char *signature, + const function_group_info &group, mode_suffix_index mode_suffix_id, + unsigned int ti, unsigned int pi, bool preserve_user_namespace, + bool force_direct_overloads) +{ + /* Current functions take at most five arguments. Match + parse_signature parameter below. */ + auto_vec argument_types; + function_instance instance (group.base_name, *group.base, *group.shape, + mode_suffix_id, group.types[ti], + group.preds[pi]); + tree return_type = parse_signature (instance, signature, argument_types, 5); + apply_predication (instance, return_type, argument_types); + b.add_unique_function (instance, return_type, argument_types, + preserve_user_namespace, group.requires_float, + force_direct_overloads); +} + +/* Add a function instance for every type and predicate combination in + GROUP, except if requested to use only the predicates listed in + RESTRICT_TO_PREDS. Take the function base name from GROUP and the + mode suffix from MODE_SUFFIX_ID. Use SIGNATURE to construct the + function signature, then use apply_predication to add in the + predicate. */ +static void +build_all (function_builder &b, const char *signature, + const function_group_info &group, mode_suffix_index mode_suffix_id, + bool preserve_user_namespace, + bool force_direct_overloads = false, + const predication_index *restrict_to_preds = NULL) +{ + for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi) + { + unsigned int pi2 = 0; + + if (restrict_to_preds) + for (; restrict_to_preds[pi2] != NUM_PREDS; ++pi2) + if (restrict_to_preds[pi2] == group.preds[pi]) + break; + + if (restrict_to_preds == NULL || restrict_to_preds[pi2] != NUM_PREDS) + for (unsigned int ti = 0; + ti == 0 || group.types[ti][0] != NUM_TYPE_SUFFIXES; ++ti) + build_one (b, signature, group, mode_suffix_id, ti, pi, + preserve_user_namespace, force_direct_overloads); + } +} + +/* Add a function instance for every type and predicate combination in + GROUP, except if requested to use only the predicates listed in + RESTRICT_TO_PREDS, and only for 16-bit and 32-bit integers. Take + the function base name from GROUP and the mode suffix from + MODE_SUFFIX_ID. Use SIGNATURE to construct the function signature, + then use apply_predication to add in the predicate. */ +static void +build_16_32 (function_builder &b, const char *signature, + const function_group_info &group, mode_suffix_index mode_suffix_id, + bool preserve_user_namespace, + bool force_direct_overloads = false, + const predication_index *restrict_to_preds = NULL) +{ + for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi) + { + unsigned int pi2 = 0; + + if (restrict_to_preds) + for (; restrict_to_preds[pi2] != NUM_PREDS; ++pi2) + if (restrict_to_preds[pi2] == group.preds[pi]) + break; + + if (restrict_to_preds == NULL || restrict_to_preds[pi2] != NUM_PREDS) + for (unsigned int ti = 0; + ti == 0 || group.types[ti][0] != NUM_TYPE_SUFFIXES; ++ti) + { + unsigned int element_bits = type_suffixes[group.types[ti][0]].element_bits; + type_class_index tclass = type_suffixes[group.types[ti][0]].tclass; + if ((tclass == TYPE_signed || tclass == TYPE_unsigned) + && (element_bits == 16 || element_bits == 32)) + build_one (b, signature, group, mode_suffix_id, ti, pi, + preserve_user_namespace, force_direct_overloads); + } + } +} + +/* Declare the function shape NAME, pointing it to an instance + of class _def. */ +#define SHAPE(NAME) \ + static CONSTEXPR const NAME##_def NAME##_obj; \ + namespace shapes { const function_shape *const NAME = &NAME##_obj; } + +/* Base class for functions that are not overloaded. */ +struct nonoverloaded_base : public function_shape +{ + bool + explicit_type_suffix_p (unsigned int, enum predication_index, enum mode_suffix_index) const override + { + return true; + } + + bool + explicit_mode_suffix_p (enum predication_index, enum mode_suffix_index) const override + { + return true; + } + + bool + skip_overload_p (enum predication_index, enum mode_suffix_index) const override + { + return false; + } + + tree + resolve (function_resolver &) const override + { + gcc_unreachable (); + } +}; + +/* Base class for overloaded functions. Bit N of EXPLICIT_MASK is true + if type suffix N appears in the overloaded name. */ +template +struct overloaded_base : public function_shape +{ + bool + explicit_type_suffix_p (unsigned int i, enum predication_index, enum mode_suffix_index) const override + { + return (EXPLICIT_MASK >> i) & 1; + } + + bool + explicit_mode_suffix_p (enum predication_index, enum mode_suffix_index) const override + { + return false; + } + + bool + skip_overload_p (enum predication_index, enum mode_suffix_index) const override + { + return false; + } +}; + +} /* end namespace arm_mve */ + +#undef SHAPE diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h new file mode 100644 index 00000000000..9e353b85a76 --- /dev/null +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -0,0 +1,30 @@ +/* ACLE support for Arm MVE (function shapes) + Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +#ifndef GCC_ARM_MVE_BUILTINS_SHAPES_H +#define GCC_ARM_MVE_BUILTINS_SHAPES_H + +namespace arm_mve +{ + namespace shapes + { + } /* end namespace arm_mve::shapes */ +} /* end namespace arm_mve */ + +#endif diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc index 7586a82e3c1..b0cceb75ceb 100644 --- a/gcc/config/arm/arm-mve-builtins.cc +++ b/gcc/config/arm/arm-mve-builtins.cc @@ -24,7 +24,19 @@ #include "coretypes.h" #include "tm.h" #include "tree.h" +#include "rtl.h" +#include "tm_p.h" +#include "memmodel.h" +#include "insn-codes.h" +#include "optabs.h" +#include "recog.h" +#include "expr.h" +#include "basic-block.h" +#include "function.h" #include "fold-const.h" +#include "gimple.h" +#include "gimple-iterator.h" +#include "emit-rtl.h" #include "langhooks.h" #include "stringpool.h" #include "attribs.h" @@ -32,6 +44,8 @@ #include "arm-protos.h" #include "arm-builtins.h" #include "arm-mve-builtins.h" +#include "arm-mve-builtins-base.h" +#include "arm-mve-builtins-shapes.h" namespace arm_mve { @@ -46,6 +60,33 @@ struct vector_type_info const bool requires_float; }; +/* Describes a function decl. */ +class GTY(()) registered_function +{ +public: + /* The ACLE function that the decl represents. */ + function_instance instance GTY ((skip)); + + /* The decl itself. */ + tree decl; + + /* Whether the function requires a floating point abi. */ + bool requires_float; + + /* True if the decl represents an overloaded function that needs to be + resolved by function_resolver. */ + bool overloaded_p; +}; + +/* Hash traits for registered_function. */ +struct registered_function_hasher : nofree_ptr_hash +{ + typedef function_instance compare_type; + + static hashval_t hash (value_type); + static bool equal (value_type, const compare_type &); +}; + /* Flag indicating whether the arm MVE types have been handled. */ static bool handle_arm_mve_types_p; @@ -54,11 +95,167 @@ static CONSTEXPR const vector_type_info vector_types[] = { #define DEF_MVE_TYPE(ACLE_NAME, SCALAR_TYPE) \ { #ACLE_NAME, REQUIRES_FLOAT }, #include "arm-mve-builtins.def" -#undef DEF_MVE_TYPE +}; + +/* The function name suffix associated with each predication type. */ +static const char *const pred_suffixes[NUM_PREDS + 1] = { + "", + "_m", + "_p", + "_x", + "_z", + "" +}; + +/* Static information about each mode_suffix_index. */ +CONSTEXPR const mode_suffix_info mode_suffixes[] = { +#define VECTOR_TYPE_none NUM_VECTOR_TYPES +#define DEF_MVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \ + { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS }, +#include "arm-mve-builtins.def" +#undef VECTOR_TYPE_none + { "", NUM_VECTOR_TYPES, NUM_VECTOR_TYPES, UNITS_none } +}; + +/* Static information about each type_suffix_index. */ +CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = { +#define DEF_MVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE) \ + { "_" #NAME, \ + VECTOR_TYPE_##ACLE_TYPE, \ + TYPE_##CLASS, \ + BITS, \ + BITS / BITS_PER_UNIT, \ + TYPE_##CLASS == TYPE_signed || TYPE_##CLASS == TYPE_unsigned, \ + TYPE_##CLASS == TYPE_unsigned, \ + TYPE_##CLASS == TYPE_float, \ + 0, \ + MODE }, +#include "arm-mve-builtins.def" + { "", NUM_VECTOR_TYPES, TYPE_bool, 0, 0, false, false, false, + 0, VOIDmode } +}; + +/* Define a TYPES_ macro for each combination of type + suffixes that an ACLE function can have, where is the + name used in DEF_MVE_FUNCTION entries. + + Use S (T) for single type suffix T and D (T1, T2) for a pair of type + suffixes T1 and T2. Use commas to separate the suffixes. + + Although the order shouldn't matter, the convention is to sort the + suffixes lexicographically after dividing suffixes into a type + class ("b", "f", etc.) and a numerical bit count. */ + +/* _f16. */ +#define TYPES_float16(S, D) \ + S (f16) + +/* _f16 _f32. */ +#define TYPES_all_float(S, D) \ + S (f16), S (f32) + +/* _s8 _u8 . */ +#define TYPES_integer_8(S, D) \ + S (s8), S (u8) + +/* _s8 _s16 + _u8 _u16. */ +#define TYPES_integer_8_16(S, D) \ + S (s8), S (s16), S (u8), S(u16) + +/* _s16 _s32 + _u16 _u32. */ +#define TYPES_integer_16_32(S, D) \ + S (s16), S (s32), \ + S (u16), S (u32) + +/* _s16 _s32. */ +#define TYPES_signed_16_32(S, D) \ + S (s16), S (s32) + +/* _s8 _s16 _s32. */ +#define TYPES_all_signed(S, D) \ + S (s8), S (s16), S (s32) + +/* _u8 _u16 _u32. */ +#define TYPES_all_unsigned(S, D) \ + S (u8), S (u16), S (u32) + +/* _s8 _s16 _s32 + _u8 _u16 _u32. */ +#define TYPES_all_integer(S, D) \ + TYPES_all_signed (S, D), TYPES_all_unsigned (S, D) + +/* _s8 _s16 _s32 _s64 + _u8 _u16 _u32 _u64. */ +#define TYPES_all_integer_with_64(S, D) \ + TYPES_all_signed (S, D), S (s64), TYPES_all_unsigned (S, D), S (u64) + +/* s32 _u32. */ +#define TYPES_integer_32(S, D) \ + S (s32), S (u32) + +/* s32 . */ +#define TYPES_signed_32(S, D) \ + S (s32) + +/* Describe a pair of type suffixes in which only the first is used. */ +#define DEF_VECTOR_TYPE(X) { TYPE_SUFFIX_ ## X, NUM_TYPE_SUFFIXES } + +/* Describe a pair of type suffixes in which both are used. */ +#define DEF_DOUBLE_TYPE(X, Y) { TYPE_SUFFIX_ ## X, TYPE_SUFFIX_ ## Y } + +/* Create an array that can be used in arm-mve-builtins.def to + select the type suffixes in TYPES_. */ +#define DEF_MVE_TYPES_ARRAY(NAME) \ + static const type_suffix_pair types_##NAME[] = { \ + TYPES_##NAME (DEF_VECTOR_TYPE, DEF_DOUBLE_TYPE), \ + { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES } \ + } + +/* For functions that don't take any type suffixes. */ +static const type_suffix_pair types_none[] = { + { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }, + { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES } +}; + +DEF_MVE_TYPES_ARRAY (all_integer); +DEF_MVE_TYPES_ARRAY (all_integer_with_64); +DEF_MVE_TYPES_ARRAY (float16); +DEF_MVE_TYPES_ARRAY (all_float); +DEF_MVE_TYPES_ARRAY (all_signed); +DEF_MVE_TYPES_ARRAY (all_unsigned); +DEF_MVE_TYPES_ARRAY (integer_8); +DEF_MVE_TYPES_ARRAY (integer_8_16); +DEF_MVE_TYPES_ARRAY (integer_16_32); +DEF_MVE_TYPES_ARRAY (integer_32); +DEF_MVE_TYPES_ARRAY (signed_16_32); +DEF_MVE_TYPES_ARRAY (signed_32); + +/* Used by functions that have no governing predicate. */ +static const predication_index preds_none[] = { PRED_none, NUM_PREDS }; + +/* Used by functions that have the m (merging) predicated form, and in + addition have an unpredicated form. */ +static const predication_index preds_m_or_none[] = { + PRED_m, PRED_none, NUM_PREDS +}; + +/* Used by functions that have the mx (merging and "don't care" + predicated forms, and in addition have an unpredicated form. */ +static const predication_index preds_mx_or_none[] = { + PRED_m, PRED_x, PRED_none, NUM_PREDS +}; + +/* Used by functions that have the p predicated form, in addition to + an unpredicated form. */ +static const predication_index preds_p_or_none[] = { + PRED_p, PRED_none, NUM_PREDS }; /* The scalar type associated with each vector type. */ -GTY(()) tree scalar_types[NUM_VECTOR_TYPES]; +extern GTY(()) tree scalar_types[NUM_VECTOR_TYPES]; +tree scalar_types[NUM_VECTOR_TYPES]; /* The single-predicate and single-vector types, with their built-in "__simd128_..._t" name. Allow an index of NUM_VECTOR_TYPES, which always @@ -66,7 +263,20 @@ GTY(()) tree scalar_types[NUM_VECTOR_TYPES]; static GTY(()) tree abi_vector_types[NUM_VECTOR_TYPES + 1]; /* Same, but with the arm_mve.h names. */ -GTY(()) tree acle_vector_types[3][NUM_VECTOR_TYPES + 1]; +extern GTY(()) tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1]; +tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1]; + +/* The list of all registered function decls, indexed by code. */ +static GTY(()) vec *registered_functions; + +/* All registered function decls, hashed on the function_instance + that they implement. This is used for looking up implementations of + overloaded functions. */ +static hash_table *function_table; + +/* True if we've already complained about attempts to use functions + when the required extension is disabled. */ +static bool reported_missing_float_p; /* Return the MVE abi type with element of type TYPE. */ static tree @@ -87,7 +297,6 @@ register_builtin_types () #define DEF_MVE_TYPE(ACLE_NAME, SCALAR_TYPE) \ scalar_types[VECTOR_TYPE_ ## ACLE_NAME] = SCALAR_TYPE; #include "arm-mve-builtins.def" -#undef DEF_MVE_TYPE for (unsigned int i = 0; i < NUM_VECTOR_TYPES; ++i) { if (vector_types[i].requires_float && !TARGET_HAVE_MVE_FLOAT) @@ -113,8 +322,18 @@ register_builtin_types () static void register_vector_type (vector_type_index type) { + + /* If the target does not have the mve.fp extension, but the type requires + it, then it needs to be assigned a non-dummy type so that functions + with those types in their signature can be registered. This allows for + diagnostics about the missing extension, rather than about a missing + function definition. */ if (vector_types[type].requires_float && !TARGET_HAVE_MVE_FLOAT) - return; + { + acle_vector_types[0][type] = void_type_node; + return; + } + tree vectype = abi_vector_types[type]; tree id = get_identifier (vector_types[type].acle_name); tree decl = build_decl (input_location, TYPE_DECL, id, vectype); @@ -133,15 +352,26 @@ register_vector_type (vector_type_index type) acle_vector_types[0][type] = vectype; } -/* Register tuple type TYPE with NUM_VECTORS arity under its - arm_mve_types.h name. */ +/* Register tuple types of element type TYPE under their arm_mve_types.h + names. */ static void register_builtin_tuple_types (vector_type_index type) { const vector_type_info* info = &vector_types[type]; + + /* If the target does not have the mve.fp extension, but the type requires + it, then it needs to be assigned a non-dummy type so that functions + with those types in their signature can be registered. This allows for + diagnostics about the missing extension, rather than about a missing + function definition. */ if (scalar_types[type] == boolean_type_node || (info->requires_float && !TARGET_HAVE_MVE_FLOAT)) + { + for (unsigned int num_vectors = 2; num_vectors <= 4; num_vectors += 2) + acle_vector_types[num_vectors >> 1][type] = void_type_node; return; + } + const char *vector_type_name = info->acle_name; char buffer[sizeof ("float32x4x2_t")]; for (unsigned int num_vectors = 2; num_vectors <= 4; num_vectors += 2) @@ -189,8 +419,1710 @@ handle_arm_mve_types_h () } } -} /* end namespace arm_mve */ +/* Implement #pragma GCC arm "arm_mve.h" . */ +void +handle_arm_mve_h (bool preserve_user_namespace) +{ + if (function_table) + { + error ("duplicate definition of %qs", "arm_mve.h"); + return; + } -using namespace arm_mve; + /* Define MVE functions. */ + function_table = new hash_table (1023); +} + +/* Return true if CANDIDATE is equivalent to MODEL_TYPE for overloading + purposes. */ +static bool +matches_type_p (const_tree model_type, const_tree candidate) +{ + if (VECTOR_TYPE_P (model_type)) + { + if (!VECTOR_TYPE_P (candidate) + || maybe_ne (TYPE_VECTOR_SUBPARTS (model_type), + TYPE_VECTOR_SUBPARTS (candidate)) + || TYPE_MODE (model_type) != TYPE_MODE (candidate)) + return false; + + model_type = TREE_TYPE (model_type); + candidate = TREE_TYPE (candidate); + } + return (candidate != error_mark_node + && TYPE_MAIN_VARIANT (model_type) == TYPE_MAIN_VARIANT (candidate)); +} + +/* Report an error against LOCATION that the user has tried to use + a floating point function when the mve.fp extension is disabled. */ +static void +report_missing_float (location_t location, tree fndecl) +{ + /* Avoid reporting a slew of messages for a single oversight. */ + if (reported_missing_float_p) + return; + + error_at (location, "ACLE function %qD requires ISA extension %qs", + fndecl, "mve.fp"); + inform (location, "you can enable mve.fp by using the command-line" + " option %<-march%>, or by using the %" + " attribute or pragma"); + reported_missing_float_p = true; +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO + was not an integer constant expression. ARGNO counts from zero. */ +static void +report_non_ice (location_t location, tree fndecl, unsigned int argno) +{ + error_at (location, "argument %d of %qE must be an integer constant" + " expression", argno + 1, fndecl); +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO has + the value ACTUAL, whereas the function requires a value in the range + [MIN, MAX]. ARGNO counts from zero. */ +static void +report_out_of_range (location_t location, tree fndecl, unsigned int argno, + HOST_WIDE_INT actual, HOST_WIDE_INT min, + HOST_WIDE_INT max) +{ + error_at (location, "passing %wd to argument %d of %qE, which expects" + " a value in the range [%wd, %wd]", actual, argno + 1, fndecl, + min, max); +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO has + the value ACTUAL, whereas the function requires a valid value of + enum type ENUMTYPE. ARGNO counts from zero. */ +static void +report_not_enum (location_t location, tree fndecl, unsigned int argno, + HOST_WIDE_INT actual, tree enumtype) +{ + error_at (location, "passing %wd to argument %d of %qE, which expects" + " a valid %qT value", actual, argno + 1, fndecl, enumtype); +} + +/* Checks that the mve.fp extension is enabled, given that REQUIRES_FLOAT + indicates whether it is required or not for function FNDECL. + Report an error against LOCATION if not. */ +static bool +check_requires_float (location_t location, tree fndecl, + bool requires_float) +{ + if (requires_float && !TARGET_HAVE_MVE_FLOAT) + { + report_missing_float (location, fndecl); + return false; + } + + return true; +} + +/* Return a hash code for a function_instance. */ +hashval_t +function_instance::hash () const +{ + inchash::hash h; + /* BASE uniquely determines BASE_NAME, so we don't need to hash both. */ + h.add_ptr (base); + h.add_ptr (shape); + h.add_int (mode_suffix_id); + h.add_int (type_suffix_ids[0]); + h.add_int (type_suffix_ids[1]); + h.add_int (pred); + return h.end (); +} + +/* Return a set of CP_* flags that describe what the function could do, + taking the command-line flags into account. */ +unsigned int +function_instance::call_properties () const +{ + unsigned int flags = base->call_properties (*this); + + /* -fno-trapping-math means that we can assume any FP exceptions + are not user-visible. */ + if (!flag_trapping_math) + flags &= ~CP_RAISE_FP_EXCEPTIONS; + + return flags; +} + +/* Return true if calls to the function could read some form of + global state. */ +bool +function_instance::reads_global_state_p () const +{ + unsigned int flags = call_properties (); + + /* Preserve any dependence on rounding mode, flush to zero mode, etc. + There is currently no way of turning this off; in particular, + -fno-rounding-math (which is the default) means that we should make + the usual assumptions about rounding mode, which for intrinsics means + acting as the instructions do. */ + if (flags & CP_READ_FPCR) + return true; + + return false; +} + +/* Return true if calls to the function could modify some form of + global state. */ +bool +function_instance::modifies_global_state_p () const +{ + unsigned int flags = call_properties (); + + /* Preserve any exception state written back to the FPCR, + unless -fno-trapping-math says this is unnecessary. */ + if (flags & CP_RAISE_FP_EXCEPTIONS) + return true; + + /* Handle direct modifications of global state. */ + return flags & CP_WRITE_MEMORY; +} + +/* Return true if calls to the function could raise a signal. */ +bool +function_instance::could_trap_p () const +{ + unsigned int flags = call_properties (); + + /* Handle functions that could raise SIGFPE. */ + if (flags & CP_RAISE_FP_EXCEPTIONS) + return true; + + /* Handle functions that could raise SIGBUS or SIGSEGV. */ + if (flags & (CP_READ_MEMORY | CP_WRITE_MEMORY)) + return true; + + return false; +} + +/* Return true if the function has an implicit "inactive" argument. + This is the case of most _m predicated functions, but not all. + The list will be updated as needed. */ +bool +function_instance::has_inactive_argument () const +{ + if (pred != PRED_m) + return false; + + return true; +} + +inline hashval_t +registered_function_hasher::hash (value_type value) +{ + return value->instance.hash (); +} + +inline bool +registered_function_hasher::equal (value_type value, const compare_type &key) +{ + return value->instance == key; +} + +function_builder::function_builder () +{ + m_overload_type = build_function_type (void_type_node, void_list_node); + m_direct_overloads = lang_GNU_CXX (); + gcc_obstack_init (&m_string_obstack); +} + +function_builder::~function_builder () +{ + obstack_free (&m_string_obstack, NULL); +} + +/* Add NAME to the end of the function name being built. */ +void +function_builder::append_name (const char *name) +{ + obstack_grow (&m_string_obstack, name, strlen (name)); +} + +/* Zero-terminate and complete the function name being built. */ +char * +function_builder::finish_name () +{ + obstack_1grow (&m_string_obstack, 0); + return (char *) obstack_finish (&m_string_obstack); +} + +/* Return the overloaded or full function name for INSTANCE, with optional + prefix; PRESERVE_USER_NAMESPACE selects the prefix, and OVERLOADED_P + selects which the overloaded or full function name. Allocate the string on + m_string_obstack; the caller must use obstack_free to free it after use. */ +char * +function_builder::get_name (const function_instance &instance, + bool preserve_user_namespace, + bool overloaded_p) +{ + if (preserve_user_namespace) + append_name ("__arm_"); + append_name (instance.base_name); + append_name (pred_suffixes[instance.pred]); + if (!overloaded_p + || instance.shape->explicit_mode_suffix_p (instance.pred, + instance.mode_suffix_id)) + append_name (instance.mode_suffix ().string); + for (unsigned int i = 0; i < 2; ++i) + if (!overloaded_p + || instance.shape->explicit_type_suffix_p (i, instance.pred, + instance.mode_suffix_id)) + append_name (instance.type_suffix (i).string); + return finish_name (); +} + +/* Add attribute NAME to ATTRS. */ +static tree +add_attribute (const char *name, tree attrs) +{ + return tree_cons (get_identifier (name), NULL_TREE, attrs); +} + +/* Return the appropriate function attributes for INSTANCE. */ +tree +function_builder::get_attributes (const function_instance &instance) +{ + tree attrs = NULL_TREE; + + if (!instance.modifies_global_state_p ()) + { + if (instance.reads_global_state_p ()) + attrs = add_attribute ("pure", attrs); + else + attrs = add_attribute ("const", attrs); + } + + if (!flag_non_call_exceptions || !instance.could_trap_p ()) + attrs = add_attribute ("nothrow", attrs); + + return add_attribute ("leaf", attrs); +} + +/* Add a function called NAME with type FNTYPE and attributes ATTRS. + INSTANCE describes what the function does and OVERLOADED_P indicates + whether it is overloaded. REQUIRES_FLOAT indicates whether the function + requires the mve.fp extension. */ +registered_function & +function_builder::add_function (const function_instance &instance, + const char *name, tree fntype, tree attrs, + bool requires_float, + bool overloaded_p, + bool placeholder_p) +{ + unsigned int code = vec_safe_length (registered_functions); + code = (code << ARM_BUILTIN_SHIFT) | ARM_BUILTIN_MVE; + + /* We need to be able to generate placeholders to ensure that we have a + consistent numbering scheme for function codes between the C and C++ + frontends, so that everything ties up in LTO. + + Currently, tree-streamer-in.cc:unpack_ts_function_decl_value_fields + validates that tree nodes returned by TARGET_BUILTIN_DECL are non-NULL and + some node other than error_mark_node. This is a holdover from when builtin + decls were streamed by code rather than by value. + + Ultimately, we should be able to remove this validation of BUILT_IN_MD + nodes and remove the target hook. For now, however, we need to appease the + validation and return a non-NULL, non-error_mark_node node, so we + arbitrarily choose integer_zero_node. */ + tree decl = placeholder_p + ? integer_zero_node + : simulate_builtin_function_decl (input_location, name, fntype, + code, NULL, attrs); + + registered_function &rfn = *ggc_alloc (); + rfn.instance = instance; + rfn.decl = decl; + rfn.requires_float = requires_float; + rfn.overloaded_p = overloaded_p; + vec_safe_push (registered_functions, &rfn); + + return rfn; +} + +/* Add a built-in function for INSTANCE, with the argument types given + by ARGUMENT_TYPES and the return type given by RETURN_TYPE. + REQUIRES_FLOAT indicates whether the function requires the mve.fp extension, + and PRESERVE_USER_NAMESPACE indicates whether the function should also be + registered under its non-prefixed name. */ +void +function_builder::add_unique_function (const function_instance &instance, + tree return_type, + vec &argument_types, + bool preserve_user_namespace, + bool requires_float, + bool force_direct_overloads) +{ + /* Add the function under its full (unique) name with prefix. */ + char *name = get_name (instance, true, false); + tree fntype = build_function_type_array (return_type, + argument_types.length (), + argument_types.address ()); + tree attrs = get_attributes (instance); + registered_function &rfn = add_function (instance, name, fntype, attrs, + requires_float, false, false); + + /* Enter the function into the hash table. */ + hashval_t hash = instance.hash (); + registered_function **rfn_slot + = function_table->find_slot_with_hash (instance, hash, INSERT); + gcc_assert (!*rfn_slot); + *rfn_slot = &rfn; + + /* Also add the non-prefixed non-overloaded function, if the user namespace + does not need to be preserved. */ + if (!preserve_user_namespace) + { + char *noprefix_name = get_name (instance, false, false); + tree attrs = get_attributes (instance); + add_function (instance, noprefix_name, fntype, attrs, requires_float, + false, false); + } + + /* Also add the function under its overloaded alias, if we want + a separate decl for each instance of an overloaded function. */ + char *overload_name = get_name (instance, true, true); + if (strcmp (name, overload_name) != 0) + { + /* Attribute lists shouldn't be shared. */ + tree attrs = get_attributes (instance); + bool placeholder_p = !(m_direct_overloads || force_direct_overloads); + add_function (instance, overload_name, fntype, attrs, + requires_float, false, placeholder_p); + + /* Also add the non-prefixed overloaded function, if the user namespace + does not need to be preserved. */ + if (!preserve_user_namespace) + { + char *noprefix_overload_name = get_name (instance, false, true); + tree attrs = get_attributes (instance); + add_function (instance, noprefix_overload_name, fntype, attrs, + requires_float, false, placeholder_p); + } + } + + obstack_free (&m_string_obstack, name); +} + +/* Add one function decl for INSTANCE, to be used with manual overload + resolution. REQUIRES_FLOAT indicates whether the function requires the + mve.fp extension. + + For simplicity, partition functions by instance and required extensions, + and check whether the required extensions are available as part of resolving + the function to the relevant unique function. */ +void +function_builder::add_overloaded_function (const function_instance &instance, + bool preserve_user_namespace, + bool requires_float) +{ + char *name = get_name (instance, true, true); + if (registered_function **map_value = m_overload_names.get (name)) + { + gcc_assert ((*map_value)->instance == instance); + obstack_free (&m_string_obstack, name); + } + else + { + registered_function &rfn + = add_function (instance, name, m_overload_type, NULL_TREE, + requires_float, true, m_direct_overloads); + m_overload_names.put (name, &rfn); + if (!preserve_user_namespace) + { + char *noprefix_name = get_name (instance, false, true); + registered_function &noprefix_rfn + = add_function (instance, noprefix_name, m_overload_type, + NULL_TREE, requires_float, true, + m_direct_overloads); + m_overload_names.put (noprefix_name, &noprefix_rfn); + } + } +} + +/* If we are using manual overload resolution, add one function decl + for each overloaded function in GROUP. Take the function base name + from GROUP and the mode from MODE. */ +void +function_builder::add_overloaded_functions (const function_group_info &group, + mode_suffix_index mode, + bool preserve_user_namespace) +{ + for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi) + { + unsigned int explicit_type0 + = (*group.shape)->explicit_type_suffix_p (0, group.preds[pi], mode); + unsigned int explicit_type1 + = (*group.shape)->explicit_type_suffix_p (1, group.preds[pi], mode); + + if ((*group.shape)->skip_overload_p (group.preds[pi], mode)) + continue; + + if (!explicit_type0 && !explicit_type1) + { + /* Deal with the common case in which there is one overloaded + function for all type combinations. */ + function_instance instance (group.base_name, *group.base, + *group.shape, mode, types_none[0], + group.preds[pi]); + add_overloaded_function (instance, preserve_user_namespace, + group.requires_float); + } + else + for (unsigned int ti = 0; group.types[ti][0] != NUM_TYPE_SUFFIXES; + ++ti) + { + /* Stub out the types that are determined by overload + resolution. */ + type_suffix_pair types = { + explicit_type0 ? group.types[ti][0] : NUM_TYPE_SUFFIXES, + explicit_type1 ? group.types[ti][1] : NUM_TYPE_SUFFIXES + }; + function_instance instance (group.base_name, *group.base, + *group.shape, mode, types, + group.preds[pi]); + add_overloaded_function (instance, preserve_user_namespace, + group.requires_float); + } + } +} + +/* Register all the functions in GROUP. */ +void +function_builder::register_function_group (const function_group_info &group, + bool preserve_user_namespace) +{ + (*group.shape)->build (*this, group, preserve_user_namespace); +} + +function_call_info::function_call_info (location_t location_in, + const function_instance &instance_in, + tree fndecl_in) + : function_instance (instance_in), location (location_in), fndecl (fndecl_in) +{ +} + +function_resolver::function_resolver (location_t location, + const function_instance &instance, + tree fndecl, vec &arglist) + : function_call_info (location, instance, fndecl), m_arglist (arglist) +{ +} + +/* Return the vector type associated with type suffix TYPE. */ +tree +function_resolver::get_vector_type (type_suffix_index type) +{ + return acle_vector_types[0][type_suffixes[type].vector_type]; +} + +/* Return the name associated with TYPE. Using the + name should be more user-friendly than the underlying canonical type, + since it makes the signedness and bitwidth explicit. */ +const char * +function_resolver::get_scalar_type_name (type_suffix_index type) +{ + return vector_types[type_suffixes[type].vector_type].acle_name + 2; +} + +/* Return the type of argument I, or error_mark_node if it isn't + well-formed. */ +tree +function_resolver::get_argument_type (unsigned int i) +{ + tree arg = m_arglist[i]; + return arg == error_mark_node ? arg : TREE_TYPE (arg); +} + +/* Return true if argument I is some form of scalar value. */ +bool +function_resolver::scalar_argument_p (unsigned int i) +{ + tree type = get_argument_type (i); + return (INTEGRAL_TYPE_P (type) + /* Allow pointer types, leaving the frontend to warn where + necessary. */ + || POINTER_TYPE_P (type) + || SCALAR_FLOAT_TYPE_P (type)); +} + +/* Report that the function has no form that takes type suffix TYPE. + Return error_mark_node. */ +tree +function_resolver::report_no_such_form (type_suffix_index type) +{ + error_at (location, "%qE has no form that takes %qT arguments", + fndecl, get_vector_type (type)); + return error_mark_node; +} + +/* Silently check whether there is an instance of the function with the + mode suffix given by MODE and the type suffixes given by TYPE0 and TYPE1. + Return its function decl if so, otherwise return null. */ +tree +function_resolver::lookup_form (mode_suffix_index mode, + type_suffix_index type0, + type_suffix_index type1) +{ + type_suffix_pair types = { type0, type1 }; + function_instance instance (base_name, base, shape, mode, types, pred); + registered_function *rfn + = function_table->find_with_hash (instance, instance.hash ()); + return rfn ? rfn->decl : NULL_TREE; +} + +/* Resolve the function to one with the mode suffix given by MODE and the + type suffixes given by TYPE0 and TYPE1. Return its function decl on + success, otherwise report an error and return error_mark_node. */ +tree +function_resolver::resolve_to (mode_suffix_index mode, + type_suffix_index type0, + type_suffix_index type1) +{ + tree res = lookup_form (mode, type0, type1); + if (!res) + { + if (type1 == NUM_TYPE_SUFFIXES) + return report_no_such_form (type0); + if (type0 == type_suffix_ids[0]) + return report_no_such_form (type1); + /* To be filled in when we have other cases. */ + gcc_unreachable (); + } + return res; +} + +/* Require argument ARGNO to be a single vector or a tuple of NUM_VECTORS + vectors; NUM_VECTORS is 1 for the former. Return the associated type + suffix on success, using TYPE_SUFFIX_b for predicates. Report an error + and return NUM_TYPE_SUFFIXES on failure. */ +type_suffix_index +function_resolver::infer_vector_or_tuple_type (unsigned int argno, + unsigned int num_vectors) +{ + tree actual = get_argument_type (argno); + if (actual == error_mark_node) + return NUM_TYPE_SUFFIXES; + + /* A linear search should be OK here, since the code isn't hot and + the number of types is only small. */ + for (unsigned int size_i = 0; size_i < MAX_TUPLE_SIZE; ++size_i) + for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i) + { + vector_type_index type_i = type_suffixes[suffix_i].vector_type; + tree type = acle_vector_types[size_i][type_i]; + if (type && matches_type_p (type, actual)) + { + if (size_i + 1 == num_vectors) + return type_suffix_index (suffix_i); + + if (num_vectors == 1) + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a single MVE vector rather than a tuple", + actual, argno + 1, fndecl); + else if (size_i == 0 && type_i != VECTOR_TYPE_mve_pred16_t) + /* num_vectors is always != 1, so the singular isn't needed. */ + error_n (location, num_vectors, "%qT%d%qE%d", + "passing single vector %qT to argument %d" + " of %qE, which expects a tuple of %d vectors", + actual, argno + 1, fndecl, num_vectors); + else + /* num_vectors is always != 1, so the singular isn't needed. */ + error_n (location, num_vectors, "%qT%d%qE%d", + "passing %qT to argument %d of %qE, which" + " expects a tuple of %d vectors", actual, argno + 1, + fndecl, num_vectors); + return NUM_TYPE_SUFFIXES; + } + } + + if (num_vectors == 1) + error_at (location, "passing %qT to argument %d of %qE, which" + " expects an MVE vector type", actual, argno + 1, fndecl); + else + error_at (location, "passing %qT to argument %d of %qE, which" + " expects an MVE tuple type", actual, argno + 1, fndecl); + return NUM_TYPE_SUFFIXES; +} + +/* Require argument ARGNO to have some form of vector type. Return the + associated type suffix on success, using TYPE_SUFFIX_b for predicates. + Report an error and return NUM_TYPE_SUFFIXES on failure. */ +type_suffix_index +function_resolver::infer_vector_type (unsigned int argno) +{ + return infer_vector_or_tuple_type (argno, 1); +} + +/* Require argument ARGNO to be a vector or scalar argument. Return true + if it is, otherwise report an appropriate error. */ +bool +function_resolver::require_vector_or_scalar_type (unsigned int argno) +{ + tree actual = get_argument_type (argno); + if (actual == error_mark_node) + return false; + + if (!scalar_argument_p (argno) && !VECTOR_TYPE_P (actual)) + { + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a vector or scalar type", actual, argno + 1, fndecl); + return false; + } + + return true; +} + +/* Require argument ARGNO to have vector type TYPE, in cases where this + requirement holds for all uses of the function. Return true if the + argument has the right form, otherwise report an appropriate error. */ +bool +function_resolver::require_vector_type (unsigned int argno, + vector_type_index type) +{ + tree expected = acle_vector_types[0][type]; + tree actual = get_argument_type (argno); + if (actual == error_mark_node) + return false; + + if (!matches_type_p (expected, actual)) + { + error_at (location, "passing %qT to argument %d of %qE, which" + " expects %qT", actual, argno + 1, fndecl, expected); + return false; + } + return true; +} + +/* Like require_vector_type, but TYPE is inferred from previous arguments + rather than being a fixed part of the function signature. This changes + the nature of the error messages. */ +bool +function_resolver::require_matching_vector_type (unsigned int argno, + type_suffix_index type) +{ + type_suffix_index new_type = infer_vector_type (argno); + if (new_type == NUM_TYPE_SUFFIXES) + return false; + + if (type != new_type) + { + error_at (location, "passing %qT to argument %d of %qE, but" + " previous arguments had type %qT", + get_vector_type (new_type), argno + 1, fndecl, + get_vector_type (type)); + return false; + } + return true; +} + +/* Require argument ARGNO to be a vector type with the following properties: + + - the type class must be the same as FIRST_TYPE's if EXPECTED_TCLASS + is SAME_TYPE_CLASS, otherwise it must be EXPECTED_TCLASS itself. + + - the element size must be: + + - the same as FIRST_TYPE's if EXPECTED_BITS == SAME_SIZE + - half of FIRST_TYPE's if EXPECTED_BITS == HALF_SIZE + - a quarter of FIRST_TYPE's if EXPECTED_BITS == QUARTER_SIZE + - EXPECTED_BITS itself otherwise + + Return true if the argument has the required type, otherwise report + an appropriate error. + + FIRST_ARGNO is the first argument that is known to have type FIRST_TYPE. + Usually it comes before ARGNO, but sometimes it is more natural to resolve + arguments out of order. + + If the required properties depend on FIRST_TYPE then both FIRST_ARGNO and + ARGNO contribute to the resolution process. If the required properties + are fixed, only FIRST_ARGNO contributes to the resolution process. + + This function is a bit of a Swiss army knife. The complication comes + from trying to give good error messages when FIRST_ARGNO and ARGNO are + inconsistent, since either of them might be wrong. */ +bool function_resolver:: +require_derived_vector_type (unsigned int argno, + unsigned int first_argno, + type_suffix_index first_type, + type_class_index expected_tclass, + unsigned int expected_bits) +{ + /* If the type needs to match FIRST_ARGNO exactly, use the preferred + error message for that case. The VECTOR_TYPE_P test excludes tuple + types, which we handle below instead. */ + bool both_vectors_p = VECTOR_TYPE_P (get_argument_type (first_argno)); + if (both_vectors_p + && expected_tclass == SAME_TYPE_CLASS + && expected_bits == SAME_SIZE) + { + /* There's no need to resolve this case out of order. */ + gcc_assert (argno > first_argno); + return require_matching_vector_type (argno, first_type); + } + + /* Use FIRST_TYPE to get the expected type class and element size. */ + type_class_index orig_expected_tclass = expected_tclass; + if (expected_tclass == NUM_TYPE_CLASSES) + expected_tclass = type_suffixes[first_type].tclass; + + unsigned int orig_expected_bits = expected_bits; + if (expected_bits == SAME_SIZE) + expected_bits = type_suffixes[first_type].element_bits; + else if (expected_bits == HALF_SIZE) + expected_bits = type_suffixes[first_type].element_bits / 2; + else if (expected_bits == QUARTER_SIZE) + expected_bits = type_suffixes[first_type].element_bits / 4; + + /* If the expected type doesn't depend on FIRST_TYPE at all, + just check for the fixed choice of vector type. */ + if (expected_tclass == orig_expected_tclass + && expected_bits == orig_expected_bits) + { + const type_suffix_info &expected_suffix + = type_suffixes[find_type_suffix (expected_tclass, expected_bits)]; + return require_vector_type (argno, expected_suffix.vector_type); + } + + /* Require the argument to be some form of MVE vector type, + without being specific about the type of vector we want. */ + type_suffix_index actual_type = infer_vector_type (argno); + if (actual_type == NUM_TYPE_SUFFIXES) + return false; + + /* Exit now if we got the right type. */ + bool tclass_ok_p = (type_suffixes[actual_type].tclass == expected_tclass); + bool size_ok_p = (type_suffixes[actual_type].element_bits == expected_bits); + if (tclass_ok_p && size_ok_p) + return true; + + /* First look for cases in which the actual type contravenes a fixed + size requirement, without having to refer to FIRST_TYPE. */ + if (!size_ok_p && expected_bits == orig_expected_bits) + { + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a vector of %d-bit elements", + get_vector_type (actual_type), argno + 1, fndecl, + expected_bits); + return false; + } + + /* Likewise for a fixed type class requirement. This is only ever + needed for signed and unsigned types, so don't create unnecessary + translation work for other type classes. */ + if (!tclass_ok_p && orig_expected_tclass == TYPE_signed) + { + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a vector of signed integers", + get_vector_type (actual_type), argno + 1, fndecl); + return false; + } + if (!tclass_ok_p && orig_expected_tclass == TYPE_unsigned) + { + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a vector of unsigned integers", + get_vector_type (actual_type), argno + 1, fndecl); + return false; + } + + /* Make sure that FIRST_TYPE itself is sensible before using it + as a basis for an error message. */ + if (resolve_to (mode_suffix_id, first_type) == error_mark_node) + return false; + + /* If the arguments have consistent type classes, but a link between + the sizes has been broken, try to describe the error in those terms. */ + if (both_vectors_p && tclass_ok_p && orig_expected_bits == SAME_SIZE) + { + if (argno < first_argno) + { + std::swap (argno, first_argno); + std::swap (actual_type, first_type); + } + error_at (location, "arguments %d and %d of %qE must have the" + " same element size, but the values passed here have type" + " %qT and %qT respectively", first_argno + 1, argno + 1, + fndecl, get_vector_type (first_type), + get_vector_type (actual_type)); + return false; + } + + /* Likewise in reverse: look for cases in which the sizes are consistent + but a link between the type classes has been broken. */ + if (both_vectors_p + && size_ok_p + && orig_expected_tclass == SAME_TYPE_CLASS + && type_suffixes[first_type].integer_p + && type_suffixes[actual_type].integer_p) + { + if (argno < first_argno) + { + std::swap (argno, first_argno); + std::swap (actual_type, first_type); + } + error_at (location, "arguments %d and %d of %qE must have the" + " same signedness, but the values passed here have type" + " %qT and %qT respectively", first_argno + 1, argno + 1, + fndecl, get_vector_type (first_type), + get_vector_type (actual_type)); + return false; + } + + /* The two arguments are wildly inconsistent. */ + type_suffix_index expected_type + = find_type_suffix (expected_tclass, expected_bits); + error_at (location, "passing %qT instead of the expected %qT to argument" + " %d of %qE, after passing %qT to argument %d", + get_vector_type (actual_type), get_vector_type (expected_type), + argno + 1, fndecl, get_argument_type (first_argno), + first_argno + 1); + return false; +} + +/* Require argument ARGNO to be a (possibly variable) scalar, expecting it + to have the following properties: + + - the type class must be the same as for type suffix 0 if EXPECTED_TCLASS + is SAME_TYPE_CLASS, otherwise it must be EXPECTED_TCLASS itself. + + - the element size must be the same as for type suffix 0 if EXPECTED_BITS + is SAME_TYPE_SIZE, otherwise it must be EXPECTED_BITS itself. + + Return true if the argument is valid, otherwise report an appropriate error. + + Note that we don't check whether the scalar type actually has the required + properties, since that's subject to implicit promotions and conversions. + Instead we just use the expected properties to tune the error message. */ +bool function_resolver:: +require_derived_scalar_type (unsigned int argno, + type_class_index expected_tclass, + unsigned int expected_bits) +{ + gcc_assert (expected_tclass == SAME_TYPE_CLASS + || expected_tclass == TYPE_signed + || expected_tclass == TYPE_unsigned); + + /* If the expected type doesn't depend on the type suffix at all, + just check for the fixed choice of scalar type. */ + if (expected_tclass != SAME_TYPE_CLASS && expected_bits != SAME_SIZE) + { + type_suffix_index expected_type + = find_type_suffix (expected_tclass, expected_bits); + return require_scalar_type (argno, get_scalar_type_name (expected_type)); + } + + if (scalar_argument_p (argno)) + return true; + + if (expected_tclass == SAME_TYPE_CLASS) + /* It doesn't really matter whether the element is expected to be + the same size as type suffix 0. */ + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a scalar element", get_argument_type (argno), + argno + 1, fndecl); + else + /* It doesn't seem useful to distinguish between signed and unsigned + scalars here. */ + error_at (location, "passing %qT to argument %d of %qE, which" + " expects a scalar integer", get_argument_type (argno), + argno + 1, fndecl); + return false; +} + +/* Require argument ARGNO to be suitable for an integer constant expression. + Return true if it is, otherwise report an appropriate error. + + function_checker checks whether the argument is actually constant and + has a suitable range. The reason for distinguishing immediate arguments + here is because it provides more consistent error messages than + require_scalar_type would. */ +bool +function_resolver::require_integer_immediate (unsigned int argno) +{ + if (!scalar_argument_p (argno)) + { + report_non_ice (location, fndecl, argno); + return false; + } + return true; +} + +/* Require argument ARGNO to be a (possibly variable) scalar, using EXPECTED + as the name of its expected type. Return true if the argument has the + right form, otherwise report an appropriate error. */ +bool +function_resolver::require_scalar_type (unsigned int argno, + const char *expected) +{ + if (!scalar_argument_p (argno)) + { + error_at (location, "passing %qT to argument %d of %qE, which" + " expects %qs", get_argument_type (argno), argno + 1, + fndecl, expected); + return false; + } + return true; +} + +/* Require the function to have exactly EXPECTED arguments. Return true + if it does, otherwise report an appropriate error. */ +bool +function_resolver::check_num_arguments (unsigned int expected) +{ + if (m_arglist.length () < expected) + error_at (location, "too few arguments to function %qE", fndecl); + else if (m_arglist.length () > expected) + error_at (location, "too many arguments to function %qE", fndecl); + return m_arglist.length () == expected; +} + +/* If the function is predicated, check that the last argument is a + suitable predicate. Also check that there are NOPS further + arguments before any predicate, but don't check what they are. + + Return true on success, otherwise report a suitable error. + When returning true: + + - set I to the number of the last unchecked argument. + - set NARGS to the total number of arguments. */ +bool +function_resolver::check_gp_argument (unsigned int nops, + unsigned int &i, unsigned int &nargs) +{ + i = nops - 1; + if (pred != PRED_none) + { + switch (pred) + { + case PRED_m: + /* Add first inactive argument if needed, and final predicate. */ + if (has_inactive_argument ()) + nargs = nops + 2; + else + nargs = nops + 1; + break; + + case PRED_p: + case PRED_x: + /* Add final predicate. */ + nargs = nops + 1; + break; + + default: + gcc_unreachable (); + } + + if (!check_num_arguments (nargs) + || !require_vector_type (nargs - 1, VECTOR_TYPE_mve_pred16_t)) + return false; + + i = nargs - 2; + } + else + { + nargs = nops; + if (!check_num_arguments (nargs)) + return false; + } + + return true; +} + +/* Finish resolving a function whose final argument can be a vector + or a scalar, with the function having an implicit "_n" suffix + in the latter case. This "_n" form might only exist for certain + type suffixes. + + ARGNO is the index of the final argument. The inferred type suffix + was obtained from argument FIRST_ARGNO, which has type FIRST_TYPE. + EXPECTED_TCLASS and EXPECTED_BITS describe the expected properties + of the final vector or scalar argument, in the same way as for + require_derived_vector_type. INFERRED_TYPE is the inferred type + suffix itself, or NUM_TYPE_SUFFIXES if it's the same as FIRST_TYPE. + + Return the function decl of the resolved function on success, + otherwise report a suitable error and return error_mark_node. */ +tree function_resolver:: +finish_opt_n_resolution (unsigned int argno, unsigned int first_argno, + type_suffix_index first_type, + type_class_index expected_tclass, + unsigned int expected_bits, + type_suffix_index inferred_type) +{ + if (inferred_type == NUM_TYPE_SUFFIXES) + inferred_type = first_type; + tree scalar_form = lookup_form (MODE_n, inferred_type); + + /* Allow the final argument to be scalar, if an _n form exists. */ + if (scalar_argument_p (argno)) + { + if (scalar_form) + return scalar_form; + + /* Check the vector form normally. If that succeeds, raise an + error about having no corresponding _n form. */ + tree res = resolve_to (mode_suffix_id, inferred_type); + if (res != error_mark_node) + error_at (location, "passing %qT to argument %d of %qE, but its" + " %qT form does not accept scalars", + get_argument_type (argno), argno + 1, fndecl, + get_vector_type (first_type)); + return error_mark_node; + } + + /* If an _n form does exist, provide a more accurate message than + require_derived_vector_type would for arguments that are neither + vectors nor scalars. */ + if (scalar_form && !require_vector_or_scalar_type (argno)) + return error_mark_node; + + /* Check for the correct vector type. */ + if (!require_derived_vector_type (argno, first_argno, first_type, + expected_tclass, expected_bits)) + return error_mark_node; + + return resolve_to (mode_suffix_id, inferred_type); +} + +/* Resolve a (possibly predicated) unary function. If the function uses + merge predication or if TREAT_AS_MERGE_P is true, there is an extra + vector argument before the governing predicate that specifies the + values of inactive elements. This argument has the following + properties: + + - the type class must be the same as for active elements if MERGE_TCLASS + is SAME_TYPE_CLASS, otherwise it must be MERGE_TCLASS itself. + + - the element size must be the same as for active elements if MERGE_BITS + is SAME_TYPE_SIZE, otherwise it must be MERGE_BITS itself. + + Return the function decl of the resolved function on success, + otherwise report a suitable error and return error_mark_node. */ +tree +function_resolver::resolve_unary (type_class_index merge_tclass, + unsigned int merge_bits, + bool treat_as_merge_p) +{ + type_suffix_index type; + if (pred == PRED_m || treat_as_merge_p) + { + if (!check_num_arguments (3)) + return error_mark_node; + if (merge_tclass == SAME_TYPE_CLASS && merge_bits == SAME_SIZE) + { + /* The inactive elements are the same as the active elements, + so we can use normal left-to-right resolution. */ + if ((type = infer_vector_type (0)) == NUM_TYPE_SUFFIXES + /* Predicates are the last argument. */ + || !require_vector_type (2 , VECTOR_TYPE_mve_pred16_t) + || !require_matching_vector_type (1 , type)) + return error_mark_node; + } + else + { + /* The inactive element type is a function of the active one, + so resolve the active one first. */ + if (!require_vector_type (1, VECTOR_TYPE_mve_pred16_t) + || (type = infer_vector_type (2)) == NUM_TYPE_SUFFIXES + || !require_derived_vector_type (0, 2, type, merge_tclass, + merge_bits)) + return error_mark_node; + } + } + else + { + /* We just need to check the predicate (if any) and the single + vector argument. */ + unsigned int i, nargs; + if (!check_gp_argument (1, i, nargs) + || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES) + return error_mark_node; + } + + /* Handle convert-like functions in which the first type suffix is + explicit. */ + if (type_suffix_ids[0] != NUM_TYPE_SUFFIXES) + return resolve_to (mode_suffix_id, type_suffix_ids[0], type); + + return resolve_to (mode_suffix_id, type); +} + +/* Resolve a (possibly predicated) unary function taking a scalar + argument (_n suffix). If the function uses merge predication, + there is an extra vector argument in the first position, and the + final governing predicate that specifies the values of inactive + elements. + + Return the function decl of the resolved function on success, + otherwise report a suitable error and return error_mark_node. */ +tree +function_resolver::resolve_unary_n () +{ + type_suffix_index type; + + /* Currently only support overrides for _m (vdupq). */ + if (pred != PRED_m) + return error_mark_node; + + if (pred == PRED_m) + { + if (!check_num_arguments (3)) + return error_mark_node; + + /* The inactive elements are the same as the active elements, + so we can use normal left-to-right resolution. */ + if ((type = infer_vector_type (0)) == NUM_TYPE_SUFFIXES + /* Predicates are the last argument. */ + || !require_vector_type (2 , VECTOR_TYPE_mve_pred16_t)) + return error_mark_node; + } + + /* Make sure the argument is scalar. */ + tree scalar_form = lookup_form (MODE_n, type); + + if (scalar_argument_p (1) && scalar_form) + return scalar_form; + + return error_mark_node; +} + +/* Resolve a (possibly predicated) function that takes NOPS like-typed + vector arguments followed by NIMM integer immediates. Return the + function decl of the resolved function on success, otherwise report + a suitable error and return error_mark_node. */ +tree +function_resolver::resolve_uniform (unsigned int nops, unsigned int nimm) +{ + unsigned int i, nargs; + type_suffix_index type; + if (!check_gp_argument (nops + nimm, i, nargs) + || (type = infer_vector_type (0 )) == NUM_TYPE_SUFFIXES) + return error_mark_node; + + unsigned int last_arg = i + 1 - nimm; + for (i = 0; i < last_arg; i++) + if (!require_matching_vector_type (i, type)) + return error_mark_node; + + for (i = last_arg; i < nargs; ++i) + if (!require_integer_immediate (i)) + return error_mark_node; + + return resolve_to (mode_suffix_id, type); +} + +/* Resolve a (possibly predicated) function that offers a choice between + taking: + + - NOPS like-typed vector arguments or + - NOPS - 1 like-typed vector arguments followed by a scalar argument + + Return the function decl of the resolved function on success, + otherwise report a suitable error and return error_mark_node. */ +tree +function_resolver::resolve_uniform_opt_n (unsigned int nops) +{ + unsigned int i, nargs; + type_suffix_index type; + if (!check_gp_argument (nops, i, nargs) + /* Unary operators should use resolve_unary, so using i - 1 is + safe. */ + || (type = infer_vector_type (i - 1)) == NUM_TYPE_SUFFIXES) + return error_mark_node; + + /* Skip last argument, may be scalar. */ + unsigned int last_arg = i; + for (i = 0; i < last_arg; i++) + if (!require_matching_vector_type (i, type)) + return error_mark_node; + + return finish_opt_n_resolution (last_arg, 0, type); +} + +/* If the call is erroneous, report an appropriate error and return + error_mark_node. Otherwise, if the function is overloaded, return + the decl of the non-overloaded function. Return NULL_TREE otherwise, + indicating that the call should be processed in the normal way. */ +tree +function_resolver::resolve () +{ + return shape->resolve (*this); +} + +function_checker::function_checker (location_t location, + const function_instance &instance, + tree fndecl, tree fntype, + unsigned int nargs, tree *args) + : function_call_info (location, instance, fndecl), + m_fntype (fntype), m_nargs (nargs), m_args (args) +{ + if (instance.has_inactive_argument ()) + m_base_arg = 1; + else + m_base_arg = 0; +} + +/* Return true if argument ARGNO exists. which it might not for + erroneous calls. It is safe to wave through checks if this + function returns false. */ +bool +function_checker::argument_exists_p (unsigned int argno) +{ + gcc_assert (argno < (unsigned int) type_num_arguments (m_fntype)); + return argno < m_nargs; +} + +/* Check that argument ARGNO is an integer constant expression and + store its value in VALUE_OUT if so. The caller should first + check that argument ARGNO exists. */ +bool +function_checker::require_immediate (unsigned int argno, + HOST_WIDE_INT &value_out) +{ + gcc_assert (argno < m_nargs); + tree arg = m_args[argno]; + + /* The type and range are unsigned, so read the argument as an + unsigned rather than signed HWI. */ + if (!tree_fits_uhwi_p (arg)) + { + report_non_ice (location, fndecl, argno); + return false; + } + + /* ...but treat VALUE_OUT as signed for error reporting, since printing + -1 is more user-friendly than the maximum uint64_t value. */ + value_out = tree_to_uhwi (arg); + return true; +} + +/* Check that argument REL_ARGNO is an integer constant expression that has + a valid value for enumeration type TYPE. REL_ARGNO counts from the end + of the predication arguments. */ +bool +function_checker::require_immediate_enum (unsigned int rel_argno, tree type) +{ + unsigned int argno = m_base_arg + rel_argno; + if (!argument_exists_p (argno)) + return true; + + HOST_WIDE_INT actual; + if (!require_immediate (argno, actual)) + return false; + + for (tree entry = TYPE_VALUES (type); entry; entry = TREE_CHAIN (entry)) + { + /* The value is an INTEGER_CST for C and a CONST_DECL wrapper + around an INTEGER_CST for C++. */ + tree value = TREE_VALUE (entry); + if (TREE_CODE (value) == CONST_DECL) + value = DECL_INITIAL (value); + if (wi::to_widest (value) == actual) + return true; + } + + report_not_enum (location, fndecl, argno, actual, type); + return false; +} + +/* Check that argument REL_ARGNO is an integer constant expression in the + range [MIN, MAX]. REL_ARGNO counts from the end of the predication + arguments. */ +bool +function_checker::require_immediate_range (unsigned int rel_argno, + HOST_WIDE_INT min, + HOST_WIDE_INT max) +{ + unsigned int argno = m_base_arg + rel_argno; + if (!argument_exists_p (argno)) + return true; + + /* Required because of the tree_to_uhwi -> HOST_WIDE_INT conversion + in require_immediate. */ + gcc_assert (min >= 0 && min <= max); + HOST_WIDE_INT actual; + if (!require_immediate (argno, actual)) + return false; + + if (!IN_RANGE (actual, min, max)) + { + report_out_of_range (location, fndecl, argno, actual, min, max); + return false; + } + + return true; +} + +/* Perform semantic checks on the call. Return true if the call is valid, + otherwise report a suitable error. */ +bool +function_checker::check () +{ + function_args_iterator iter; + tree type; + unsigned int i = 0; + FOREACH_FUNCTION_ARGS (m_fntype, type, iter) + { + if (type == void_type_node || i >= m_nargs) + break; + + if (i >= m_base_arg + && TREE_CODE (type) == ENUMERAL_TYPE + && !require_immediate_enum (i - m_base_arg, type)) + return false; + + i += 1; + } + + return shape->check (*this); +} + +gimple_folder::gimple_folder (const function_instance &instance, tree fndecl, + gcall *call_in) + : function_call_info (gimple_location (call_in), instance, fndecl), + call (call_in), lhs (gimple_call_lhs (call_in)) +{ +} + +/* Try to fold the call. Return the new statement on success and null + on failure. */ +gimple * +gimple_folder::fold () +{ + /* Don't fold anything when MVE is disabled; emit an error during + expansion instead. */ + if (!TARGET_HAVE_MVE) + return NULL; + + /* Punt if the function has a return type and no result location is + provided. The attributes should allow target-independent code to + remove the calls if appropriate. */ + if (!lhs && TREE_TYPE (gimple_call_fntype (call)) != void_type_node) + return NULL; + + return base->fold (*this); +} + +function_expander::function_expander (const function_instance &instance, + tree fndecl, tree call_expr_in, + rtx possible_target_in) + : function_call_info (EXPR_LOCATION (call_expr_in), instance, fndecl), + call_expr (call_expr_in), possible_target (possible_target_in) +{ +} + +/* Return the handler of direct optab OP for type suffix SUFFIX_I. */ +insn_code +function_expander::direct_optab_handler (optab op, unsigned int suffix_i) +{ + return ::direct_optab_handler (op, vector_mode (suffix_i)); +} + +/* For a function that does the equivalent of: + + OUTPUT = COND ? FN (INPUTS) : FALLBACK; + + return the value of FALLBACK. + + MODE is the mode of OUTPUT. + MERGE_ARGNO is the argument that provides FALLBACK for _m functions, + or DEFAULT_MERGE_ARGNO if we should apply the usual rules. + + ARGNO is the caller's index into args. If the returned value is + argument 0 (as for unary _m operations), increment ARGNO past the + returned argument. */ +rtx +function_expander::get_fallback_value (machine_mode mode, + unsigned int merge_argno, + unsigned int &argno) +{ + if (pred == PRED_z) + return CONST0_RTX (mode); + + gcc_assert (pred == PRED_m || pred == PRED_x); + + if (merge_argno == 0) + return args[argno++]; + + return args[merge_argno]; +} + +/* Return a REG rtx that can be used for the result of the function, + using the preferred target if suitable. */ +rtx +function_expander::get_reg_target () +{ + machine_mode target_mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl))); + if (!possible_target || GET_MODE (possible_target) != target_mode) + possible_target = gen_reg_rtx (target_mode); + return possible_target; +} + +/* Add an output operand to the instruction we're building, which has + code ICODE. Bind the output to the preferred target rtx if possible. */ +void +function_expander::add_output_operand (insn_code icode) +{ + unsigned int opno = m_ops.length (); + machine_mode mode = insn_data[icode].operand[opno].mode; + m_ops.safe_grow (opno + 1, true); + create_output_operand (&m_ops.last (), possible_target, mode); +} + +/* Add an input operand to the instruction we're building, which has + code ICODE. Calculate the value of the operand as follows: + + - If the operand is a predicate, coerce X to have the + mode that the instruction expects. + + - Otherwise use X directly. The expand machinery checks that X has + the right mode for the instruction. */ +void +function_expander::add_input_operand (insn_code icode, rtx x) +{ + unsigned int opno = m_ops.length (); + const insn_operand_data &operand = insn_data[icode].operand[opno]; + machine_mode mode = operand.mode; + if (mode == VOIDmode) + { + /* The only allowable use of VOIDmode is the wildcard + arm_any_register_operand, which is used to avoid + combinatorial explosion in the reinterpret patterns. */ + gcc_assert (operand.predicate == arm_any_register_operand); + mode = GET_MODE (x); + } + else if (VALID_MVE_PRED_MODE (mode)) + x = gen_lowpart (mode, x); + + m_ops.safe_grow (m_ops.length () + 1, true); + create_input_operand (&m_ops.last (), x, mode); +} + +/* Add an integer operand with value X to the instruction. */ +void +function_expander::add_integer_operand (HOST_WIDE_INT x) +{ + m_ops.safe_grow (m_ops.length () + 1, true); + create_integer_operand (&m_ops.last (), x); +} + +/* Generate instruction ICODE, given that its operands have already + been added to M_OPS. Return the value of the first operand. */ +rtx +function_expander::generate_insn (insn_code icode) +{ + expand_insn (icode, m_ops.length (), m_ops.address ()); + return function_returns_void_p () ? const0_rtx : m_ops[0].value; +} + +/* Implement the call using instruction ICODE, with a 1:1 mapping between + arguments and input operands. */ +rtx +function_expander::use_exact_insn (insn_code icode) +{ + unsigned int nops = insn_data[icode].n_operands; + if (!function_returns_void_p ()) + { + add_output_operand (icode); + nops -= 1; + } + for (unsigned int i = 0; i < nops; ++i) + add_input_operand (icode, args[i]); + return generate_insn (icode); +} + +/* Implement the call using instruction ICODE, which does not use a + predicate. */ +rtx +function_expander::use_unpred_insn (insn_code icode) +{ + gcc_assert (pred == PRED_none); + /* Discount the output operand. */ + unsigned int nops = insn_data[icode].n_operands - 1; + unsigned int i = 0; + + add_output_operand (icode); + for (; i < nops; ++i) + add_input_operand (icode, args[i]); + + return generate_insn (icode); +} + +/* Implement the call using instruction ICODE, which is a predicated + operation that returns arbitrary values for inactive lanes. */ +rtx +function_expander::use_pred_x_insn (insn_code icode) +{ + gcc_assert (pred == PRED_x); + unsigned int nops = args.length (); + + add_output_operand (icode); + /* Use first operand as arbitrary inactive input. */ + add_input_operand (icode, possible_target); + emit_clobber (possible_target); + /* Copy remaining arguments, including the final predicate. */ + for (unsigned int i = 0; i < nops; ++i) + add_input_operand (icode, args[i]); + + return generate_insn (icode); +} + +/* Implement the call using instruction ICODE, which does the equivalent of: + + OUTPUT = COND ? FN (INPUTS) : FALLBACK; + + The instruction operands are in the order above: OUTPUT, COND, INPUTS + and FALLBACK. MERGE_ARGNO is the argument that provides FALLBACK for _m + functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules. */ +rtx +function_expander::use_cond_insn (insn_code icode, unsigned int merge_argno) +{ + /* At present we never need to handle PRED_none, which would involve + creating a new predicate rather than using one supplied by the user. */ + gcc_assert (pred != PRED_none); + /* For MVE, we only handle PRED_m at present. */ + gcc_assert (pred == PRED_m); + + /* Discount the output, predicate and fallback value. */ + unsigned int nops = insn_data[icode].n_operands - 3; + machine_mode mode = insn_data[icode].operand[0].mode; + + unsigned int opno = 0; + rtx fallback_arg = NULL_RTX; + fallback_arg = get_fallback_value (mode, merge_argno, opno); + rtx pred_arg = args[nops + 1]; + + add_output_operand (icode); + add_input_operand (icode, fallback_arg); + for (unsigned int i = 0; i < nops; ++i) + add_input_operand (icode, args[opno + i]); + add_input_operand (icode, pred_arg); + return generate_insn (icode); +} + +/* Implement the call using a normal unpredicated optab for PRED_none. + + corresponds to: + + - CODE_FOR_SINT for signed integers + - CODE_FOR_UINT for unsigned integers + - CODE_FOR_FP for floating-point values */ +rtx +function_expander::map_to_rtx_codes (rtx_code code_for_sint, + rtx_code code_for_uint, + rtx_code code_for_fp) +{ + gcc_assert (pred == PRED_none); + rtx_code code = type_suffix (0).integer_p ? + (type_suffix (0).unsigned_p ? code_for_uint : code_for_sint) + : code_for_fp; + insn_code icode = direct_optab_handler (code_to_optab (code), 0); + if (icode == CODE_FOR_nothing) + gcc_unreachable (); + + return use_unpred_insn (icode); +} + +/* Expand the call and return its lhs. */ +rtx +function_expander::expand () +{ + unsigned int nargs = call_expr_nargs (call_expr); + args.reserve (nargs); + for (unsigned int i = 0; i < nargs; ++i) + args.quick_push (expand_normal (CALL_EXPR_ARG (call_expr, i))); + + return base->expand (*this); +} + +/* If we're implementing manual overloading, check whether the MVE + function with subcode CODE is overloaded, and if so attempt to + determine the corresponding non-overloaded function. The call + occurs at location LOCATION and has the arguments given by ARGLIST. + + If the call is erroneous, report an appropriate error and return + error_mark_node. Otherwise, if the function is overloaded, return + the decl of the non-overloaded function. Return NULL_TREE otherwise, + indicating that the call should be processed in the normal way. */ +tree +resolve_overloaded_builtin (location_t location, unsigned int code, + vec *arglist) +{ + if (code >= vec_safe_length (registered_functions)) + return NULL_TREE; + + registered_function &rfn = *(*registered_functions)[code]; + if (rfn.overloaded_p) + return function_resolver (location, rfn.instance, rfn.decl, + *arglist).resolve (); + return NULL_TREE; +} + +/* Perform any semantic checks needed for a call to the MVE function + with subcode CODE, such as testing for integer constant expressions. + The call occurs at location LOCATION and has NARGS arguments, + given by ARGS. FNDECL is the original function decl, before + overload resolution. + + Return true if the call is valid, otherwise report a suitable error. */ +bool +check_builtin_call (location_t location, vec, unsigned int code, + tree fndecl, unsigned int nargs, tree *args) +{ + const registered_function &rfn = *(*registered_functions)[code]; + if (!check_requires_float (location, rfn.decl, rfn.requires_float)) + return false; + + return function_checker (location, rfn.instance, fndecl, + TREE_TYPE (rfn.decl), nargs, args).check (); +} + +/* Attempt to fold STMT, given that it's a call to the MVE function + with subcode CODE. Return the new statement on success and null + on failure. Insert any other new statements at GSI. */ +gimple * +gimple_fold_builtin (unsigned int code, gcall *stmt) +{ + registered_function &rfn = *(*registered_functions)[code]; + return gimple_folder (rfn.instance, rfn.decl, stmt).fold (); +} + +/* Expand a call to the MVE function with subcode CODE. EXP is the call + expression and TARGET is the preferred location for the result. + Return the value of the lhs. */ +rtx +expand_builtin (unsigned int code, tree exp, rtx target) +{ + registered_function &rfn = *(*registered_functions)[code]; + if (!check_requires_float (EXPR_LOCATION (exp), rfn.decl, + rfn.requires_float)) + return target; + return function_expander (rfn.instance, rfn.decl, exp, target).expand (); +} + +} /* end namespace arm_mve */ + +using namespace arm_mve; + +inline void +gt_ggc_mx (function_instance *) +{ +} + +inline void +gt_pch_nx (function_instance *) +{ +} + +inline void +gt_pch_nx (function_instance *, gt_pointer_operator, void *) +{ +} #include "gt-arm-mve-builtins.h" diff --git a/gcc/config/arm/arm-mve-builtins.def b/gcc/config/arm/arm-mve-builtins.def index 69f3f81b473..49d07364fa2 100644 --- a/gcc/config/arm/arm-mve-builtins.def +++ b/gcc/config/arm/arm-mve-builtins.def @@ -17,10 +17,25 @@ along with GCC; see the file COPYING3. If not see . */ +#ifndef DEF_MVE_MODE +#define DEF_MVE_MODE(A, B, C, D) +#endif + #ifndef DEF_MVE_TYPE -#error "arm-mve-builtins.def included without defining DEF_MVE_TYPE" +#define DEF_MVE_TYPE(A, B) +#endif + +#ifndef DEF_MVE_TYPE_SUFFIX +#define DEF_MVE_TYPE_SUFFIX(A, B, C, D, E) #endif +#ifndef DEF_MVE_FUNCTION +#define DEF_MVE_FUNCTION(A, B, C, D) +#endif + +DEF_MVE_MODE (n, none, none, none) +DEF_MVE_MODE (offset, none, none, bytes) + #define REQUIRES_FLOAT false DEF_MVE_TYPE (mve_pred16_t, boolean_type_node) DEF_MVE_TYPE (uint8x16_t, unsigned_intQI_type_node) @@ -37,3 +52,26 @@ DEF_MVE_TYPE (int64x2_t, intDI_type_node) DEF_MVE_TYPE (float16x8_t, arm_fp16_type_node) DEF_MVE_TYPE (float32x4_t, float_type_node) #undef REQUIRES_FLOAT + +#define REQUIRES_FLOAT false +DEF_MVE_TYPE_SUFFIX (s8, int8x16_t, signed, 8, V16QImode) +DEF_MVE_TYPE_SUFFIX (s16, int16x8_t, signed, 16, V8HImode) +DEF_MVE_TYPE_SUFFIX (s32, int32x4_t, signed, 32, V4SImode) +DEF_MVE_TYPE_SUFFIX (s64, int64x2_t, signed, 64, V2DImode) +DEF_MVE_TYPE_SUFFIX (u8, uint8x16_t, unsigned, 8, V16QImode) +DEF_MVE_TYPE_SUFFIX (u16, uint16x8_t, unsigned, 16, V8HImode) +DEF_MVE_TYPE_SUFFIX (u32, uint32x4_t, unsigned, 32, V4SImode) +DEF_MVE_TYPE_SUFFIX (u64, uint64x2_t, unsigned, 64, V2DImode) +#undef REQUIRES_FLOAT + +#define REQUIRES_FLOAT true +DEF_MVE_TYPE_SUFFIX (f16, float16x8_t, float, 16, V8HFmode) +DEF_MVE_TYPE_SUFFIX (f32, float32x4_t, float, 32, V4SFmode) +#undef REQUIRES_FLOAT + +#include "arm-mve-builtins-base.def" + +#undef DEF_MVE_TYPE +#undef DEF_MVE_TYPE_SUFFIX +#undef DEF_MVE_FUNCTION +#undef DEF_MVE_MODE diff --git a/gcc/config/arm/arm-mve-builtins.h b/gcc/config/arm/arm-mve-builtins.h index 290a118ec92..a20d2fb5d86 100644 --- a/gcc/config/arm/arm-mve-builtins.h +++ b/gcc/config/arm/arm-mve-builtins.h @@ -20,7 +20,79 @@ #ifndef GCC_ARM_MVE_BUILTINS_H #define GCC_ARM_MVE_BUILTINS_H +/* The full name of an MVE ACLE function is the concatenation of: + + - the base name ("vadd", etc.) + - the "mode" suffix ("_n", "_index", etc.) + - the type suffixes ("_s32", "_b8", etc.) + - the predication suffix ("_x", "_z", etc.) + + Each piece of information is individually useful, so we retain this + classification throughout: + + - function_base represents the base name + + - mode_suffix_index represents the mode suffix + + - type_suffix_index represents individual type suffixes, while + type_suffix_pair represents a pair of them + + - prediction_index extends the predication suffix with an additional + alternative: PRED_implicit for implicitly-predicated operations + + In addition to its unique full name, a function may have a shorter + overloaded alias. This alias removes pieces of the suffixes that + can be inferred from the arguments, such as by shortening the mode + suffix or dropping some of the type suffixes. The base name and the + predication suffix stay the same. + + The function_shape class describes what arguments a given function + takes and what its overloaded alias is called. In broad terms, + function_base describes how the underlying instruction behaves while + function_shape describes how that instruction has been presented at + the language level. + + The static list of functions uses function_group to describe a group + of related functions. The function_builder class is responsible for + expanding this static description into a list of individual functions + and registering the associated built-in functions. function_instance + describes one of these individual functions in terms of the properties + described above. + + The classes involved in compiling a function call are: + + - function_resolver, which resolves an overloaded function call to a + specific function_instance and its associated function decl + + - function_checker, which checks whether the values of the arguments + conform to the ACLE specification + + - gimple_folder, which tries to fold a function call at the gimple level + + - function_expander, which expands a function call into rtl instructions + + function_resolver and function_checker operate at the language level + and so are associated with the function_shape. gimple_folder and + function_expander are concerned with the behavior of the function + and so are associated with the function_base. + + Note that we've specifically chosen not to fold calls in the frontend, + since MVE intrinsics will hardly ever fold a useful language-level + constant. */ namespace arm_mve { +/* The maximum number of vectors in an ACLE tuple type. */ +const unsigned int MAX_TUPLE_SIZE = 3; + +/* Used to represent the default merge argument index for _m functions. + The actual index depends on how many arguments the function takes. */ +const unsigned int DEFAULT_MERGE_ARGNO = 0; + +/* Flags that describe what a function might do, in addition to reading + its arguments and returning a result. */ +const unsigned int CP_READ_FPCR = 1U << 0; +const unsigned int CP_RAISE_FP_EXCEPTIONS = 1U << 1; +const unsigned int CP_READ_MEMORY = 1U << 2; +const unsigned int CP_WRITE_MEMORY = 1U << 3; /* Enumerates the MVE predicate and (data) vector types, together called "vector types" for brevity. */ @@ -30,11 +102,604 @@ enum vector_type_index VECTOR_TYPE_ ## ACLE_NAME, #include "arm-mve-builtins.def" NUM_VECTOR_TYPES -#undef DEF_MVE_TYPE }; +/* Classifies the available measurement units for an address displacement. */ +enum units_index +{ + UNITS_none, + UNITS_bytes +}; + +/* Describes the various uses of a governing predicate. */ +enum predication_index +{ + /* No governing predicate is present. */ + PRED_none, + + /* Merging predication: copy inactive lanes from the first data argument + to the vector result. */ + PRED_m, + + /* Plain predication: inactive lanes are not used to compute the + scalar result. */ + PRED_p, + + /* "Don't care" predication: set inactive lanes of the vector result + to arbitrary values. */ + PRED_x, + + /* Zero predication: set inactive lanes of the vector result to zero. */ + PRED_z, + + NUM_PREDS +}; + +/* Classifies element types, based on type suffixes with the bit count + removed. */ +enum type_class_index +{ + TYPE_bool, + TYPE_float, + TYPE_signed, + TYPE_unsigned, + NUM_TYPE_CLASSES +}; + +/* Classifies an operation into "modes"; for example, to distinguish + vector-scalar operations from vector-vector operations, or to + distinguish between different addressing modes. This classification + accounts for the function suffixes that occur between the base name + and the first type suffix. */ +enum mode_suffix_index +{ +#define DEF_MVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) MODE_##NAME, +#include "arm-mve-builtins.def" + MODE_none +}; + +/* Enumerates the possible type suffixes. Each suffix is associated with + a vector type, but for predicates provides extra information about the + element size. */ +enum type_suffix_index +{ +#define DEF_MVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE) \ + TYPE_SUFFIX_ ## NAME, +#include "arm-mve-builtins.def" + NUM_TYPE_SUFFIXES +}; + +/* Combines two type suffixes. */ +typedef enum type_suffix_index type_suffix_pair[2]; + +class function_base; +class function_shape; + +/* Static information about a mode suffix. */ +struct mode_suffix_info +{ + /* The suffix string itself. */ + const char *string; + + /* The type of the vector base address, or NUM_VECTOR_TYPES if the + mode does not include a vector base address. */ + vector_type_index base_vector_type; + + /* The type of the vector displacement, or NUM_VECTOR_TYPES if the + mode does not include a vector displacement. (Note that scalar + displacements are always int64_t.) */ + vector_type_index displacement_vector_type; + + /* The units in which the vector or scalar displacement is measured, + or UNITS_none if the mode doesn't take a displacement. */ + units_index displacement_units; +}; + +/* Static information about a type suffix. */ +struct type_suffix_info +{ + /* The suffix string itself. */ + const char *string; + + /* The associated ACLE vector or predicate type. */ + vector_type_index vector_type : 8; + + /* What kind of type the suffix represents. */ + type_class_index tclass : 8; + + /* The number of bits and bytes in an element. For predicates this + measures the associated data elements. */ + unsigned int element_bits : 8; + unsigned int element_bytes : 8; + + /* True if the suffix is for an integer type. */ + unsigned int integer_p : 1; + /* True if the suffix is for an unsigned type. */ + unsigned int unsigned_p : 1; + /* True if the suffix is for a floating-point type. */ + unsigned int float_p : 1; + unsigned int spare : 13; + + /* The associated vector or predicate mode. */ + machine_mode vector_mode : 16; +}; + +/* Static information about a set of functions. */ +struct function_group_info +{ + /* The base name, as a string. */ + const char *base_name; + + /* Describes the behavior associated with the function base name. */ + const function_base *const *base; + + /* The shape of the functions, as described above the class definition. + It's possible to have entries with the same base name but different + shapes. */ + const function_shape *const *shape; + + /* A list of the available type suffixes, and of the available predication + types. The function supports every combination of the two. + + The list of type suffixes is terminated by two NUM_TYPE_SUFFIXES + while the list of predication types is terminated by NUM_PREDS. + The list of type suffixes is lexicographically ordered based + on the index value. */ + const type_suffix_pair *types; + const predication_index *preds; + + /* Whether the function group requires a floating point abi. */ + bool requires_float; +}; + +/* Describes a single fully-resolved function (i.e. one that has a + unique full name). */ +class GTY((user)) function_instance +{ +public: + function_instance (const char *, const function_base *, + const function_shape *, mode_suffix_index, + const type_suffix_pair &, predication_index); + + bool operator== (const function_instance &) const; + bool operator!= (const function_instance &) const; + hashval_t hash () const; + + unsigned int call_properties () const; + bool reads_global_state_p () const; + bool modifies_global_state_p () const; + bool could_trap_p () const; + + unsigned int vectors_per_tuple () const; + + const mode_suffix_info &mode_suffix () const; + + const type_suffix_info &type_suffix (unsigned int) const; + tree scalar_type (unsigned int) const; + tree vector_type (unsigned int) const; + tree tuple_type (unsigned int) const; + machine_mode vector_mode (unsigned int) const; + machine_mode gp_mode (unsigned int) const; + + bool has_inactive_argument () const; + + /* The properties of the function. (The explicit "enum"s are required + for gengtype.) */ + const char *base_name; + const function_base *base; + const function_shape *shape; + enum mode_suffix_index mode_suffix_id; + type_suffix_pair type_suffix_ids; + enum predication_index pred; +}; + +class registered_function; + +/* A class for building and registering function decls. */ +class function_builder +{ +public: + function_builder (); + ~function_builder (); + + void add_unique_function (const function_instance &, tree, + vec &, bool, bool, bool); + void add_overloaded_function (const function_instance &, bool, bool); + void add_overloaded_functions (const function_group_info &, + mode_suffix_index, bool); + + void register_function_group (const function_group_info &, bool); + +private: + void append_name (const char *); + char *finish_name (); + + char *get_name (const function_instance &, bool, bool); + + tree get_attributes (const function_instance &); + + registered_function &add_function (const function_instance &, + const char *, tree, tree, + bool, bool, bool); + + /* The function type to use for functions that are resolved by + function_resolver. */ + tree m_overload_type; + + /* True if we should create a separate decl for each instance of an + overloaded function, instead of using function_resolver. */ + bool m_direct_overloads; + + /* Used for building up function names. */ + obstack m_string_obstack; + + /* Maps all overloaded function names that we've registered so far + to their associated function_instances. */ + hash_map m_overload_names; +}; + +/* A base class for handling calls to built-in functions. */ +class function_call_info : public function_instance +{ +public: + function_call_info (location_t, const function_instance &, tree); + + bool function_returns_void_p (); + + /* The location of the call. */ + location_t location; + + /* The FUNCTION_DECL that is being called. */ + tree fndecl; +}; + +/* A class for resolving an overloaded function call. */ +class function_resolver : public function_call_info +{ +public: + enum { SAME_SIZE = 256, HALF_SIZE, QUARTER_SIZE }; + static const type_class_index SAME_TYPE_CLASS = NUM_TYPE_CLASSES; + + function_resolver (location_t, const function_instance &, tree, + vec &); + + tree get_vector_type (type_suffix_index); + const char *get_scalar_type_name (type_suffix_index); + tree get_argument_type (unsigned int); + bool scalar_argument_p (unsigned int); + + tree report_no_such_form (type_suffix_index); + tree lookup_form (mode_suffix_index, + type_suffix_index = NUM_TYPE_SUFFIXES, + type_suffix_index = NUM_TYPE_SUFFIXES); + tree resolve_to (mode_suffix_index, + type_suffix_index = NUM_TYPE_SUFFIXES, + type_suffix_index = NUM_TYPE_SUFFIXES); + + type_suffix_index infer_vector_or_tuple_type (unsigned int, unsigned int); + type_suffix_index infer_vector_type (unsigned int); + + bool require_vector_or_scalar_type (unsigned int); + + bool require_vector_type (unsigned int, vector_type_index); + bool require_matching_vector_type (unsigned int, type_suffix_index); + bool require_derived_vector_type (unsigned int, unsigned int, + type_suffix_index, + type_class_index = SAME_TYPE_CLASS, + unsigned int = SAME_SIZE); + bool require_integer_immediate (unsigned int); + bool require_scalar_type (unsigned int, const char *); + bool require_derived_scalar_type (unsigned int, type_class_index, + unsigned int = SAME_SIZE); + + bool check_num_arguments (unsigned int); + bool check_gp_argument (unsigned int, unsigned int &, unsigned int &); + tree resolve_unary (type_class_index = SAME_TYPE_CLASS, + unsigned int = SAME_SIZE, bool = false); + tree resolve_unary_n (); + tree resolve_uniform (unsigned int, unsigned int = 0); + tree resolve_uniform_opt_n (unsigned int); + tree finish_opt_n_resolution (unsigned int, unsigned int, type_suffix_index, + type_class_index = SAME_TYPE_CLASS, + unsigned int = SAME_SIZE, + type_suffix_index = NUM_TYPE_SUFFIXES); + + tree resolve (); + +private: + /* The arguments to the overloaded function. */ + vec &m_arglist; +}; + +/* A class for checking that the semantic constraints on a function call are + satisfied, such as arguments being integer constant expressions with + a particular range. The parent class's FNDECL is the decl that was + called in the original source, before overload resolution. */ +class function_checker : public function_call_info +{ +public: + function_checker (location_t, const function_instance &, tree, + tree, unsigned int, tree *); + + bool require_immediate_enum (unsigned int, tree); + bool require_immediate_lane_index (unsigned int, unsigned int = 1); + bool require_immediate_range (unsigned int, HOST_WIDE_INT, HOST_WIDE_INT); + + bool check (); + +private: + bool argument_exists_p (unsigned int); + + bool require_immediate (unsigned int, HOST_WIDE_INT &); + + /* The type of the resolved function. */ + tree m_fntype; + + /* The arguments to the function. */ + unsigned int m_nargs; + tree *m_args; + + /* The first argument not associated with the function's predication + type. */ + unsigned int m_base_arg; +}; + +/* A class for folding a gimple function call. */ +class gimple_folder : public function_call_info +{ +public: + gimple_folder (const function_instance &, tree, + gcall *); + + gimple *fold (); + + /* The call we're folding. */ + gcall *call; + + /* The result of the call, or null if none. */ + tree lhs; +}; + +/* A class for expanding a function call into RTL. */ +class function_expander : public function_call_info +{ +public: + function_expander (const function_instance &, tree, tree, rtx); + rtx expand (); + + insn_code direct_optab_handler (optab, unsigned int = 0); + + rtx get_fallback_value (machine_mode, unsigned int, unsigned int &); + rtx get_reg_target (); + + void add_output_operand (insn_code); + void add_input_operand (insn_code, rtx); + void add_integer_operand (HOST_WIDE_INT); + rtx generate_insn (insn_code); + + rtx use_exact_insn (insn_code); + rtx use_unpred_insn (insn_code); + rtx use_pred_x_insn (insn_code); + rtx use_cond_insn (insn_code, unsigned int = DEFAULT_MERGE_ARGNO); + + rtx map_to_rtx_codes (rtx_code, rtx_code, rtx_code); + + /* The function call expression. */ + tree call_expr; + + /* For functions that return a value, this is the preferred location + of that value. It could be null or could have a different mode + from the function return type. */ + rtx possible_target; + + /* The expanded arguments. */ + auto_vec args; + +private: + /* Used to build up the operands to an instruction. */ + auto_vec m_ops; +}; + +/* Provides information about a particular function base name, and handles + tasks related to the base name. */ +class function_base +{ +public: + /* Return a set of CP_* flags that describe what the function might do, + in addition to reading its arguments and returning a result. */ + virtual unsigned int call_properties (const function_instance &) const; + + /* If the function operates on tuples of vectors, return the number + of vectors in the tuples, otherwise return 1. */ + virtual unsigned int vectors_per_tuple () const { return 1; } + + /* Try to fold the given gimple call. Return the new gimple statement + on success, otherwise return null. */ + virtual gimple *fold (gimple_folder &) const { return NULL; } + + /* Expand the given call into rtl. Return the result of the function, + or an arbitrary value if the function doesn't return a result. */ + virtual rtx expand (function_expander &) const = 0; +}; + +/* Classifies functions into "shapes". The idea is to take all the + type signatures for a set of functions, and classify what's left + based on: + + - the number of arguments + + - the process of determining the types in the signature from the mode + and type suffixes in the function name (including types that are not + affected by the suffixes) + + - which arguments must be integer constant expressions, and what range + those arguments have + + - the process for mapping overloaded names to "full" names. */ +class function_shape +{ +public: + virtual bool explicit_type_suffix_p (unsigned int, enum predication_index, enum mode_suffix_index) const = 0; + virtual bool explicit_mode_suffix_p (enum predication_index, enum mode_suffix_index) const = 0; + virtual bool skip_overload_p (enum predication_index, enum mode_suffix_index) const = 0; + + /* Define all functions associated with the given group. */ + virtual void build (function_builder &, + const function_group_info &, + bool) const = 0; + + /* Try to resolve the overloaded call. Return the non-overloaded + function decl on success and error_mark_node on failure. */ + virtual tree resolve (function_resolver &) const = 0; + + /* Check whether the given call is semantically valid. Return true + if it is, otherwise report an error and return false. */ + virtual bool check (function_checker &) const { return true; } +}; + +extern const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1]; +extern const mode_suffix_info mode_suffixes[MODE_none + 1]; + extern tree scalar_types[NUM_VECTOR_TYPES]; -extern tree acle_vector_types[3][NUM_VECTOR_TYPES + 1]; +extern tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1]; + +/* Return the ACLE type mve_pred16_t. */ +inline tree +get_mve_pred16_t (void) +{ + return acle_vector_types[0][VECTOR_TYPE_mve_pred16_t]; +} + +/* Try to find a mode with the given mode_suffix_info fields. Return the + mode on success or MODE_none on failure. */ +inline mode_suffix_index +find_mode_suffix (vector_type_index base_vector_type, + vector_type_index displacement_vector_type, + units_index displacement_units) +{ + for (unsigned int mode_i = 0; mode_i < ARRAY_SIZE (mode_suffixes); ++mode_i) + { + const mode_suffix_info &mode = mode_suffixes[mode_i]; + if (mode.base_vector_type == base_vector_type + && mode.displacement_vector_type == displacement_vector_type + && mode.displacement_units == displacement_units) + return mode_suffix_index (mode_i); + } + return MODE_none; +} + +/* Return the type suffix associated with ELEMENT_BITS-bit elements of type + class TCLASS. */ +inline type_suffix_index +find_type_suffix (type_class_index tclass, unsigned int element_bits) +{ + for (unsigned int i = 0; i < NUM_TYPE_SUFFIXES; ++i) + if (type_suffixes[i].tclass == tclass + && type_suffixes[i].element_bits == element_bits) + return type_suffix_index (i); + gcc_unreachable (); +} + +inline function_instance:: +function_instance (const char *base_name_in, + const function_base *base_in, + const function_shape *shape_in, + mode_suffix_index mode_suffix_id_in, + const type_suffix_pair &type_suffix_ids_in, + predication_index pred_in) + : base_name (base_name_in), base (base_in), shape (shape_in), + mode_suffix_id (mode_suffix_id_in), pred (pred_in) +{ + memcpy (type_suffix_ids, type_suffix_ids_in, sizeof (type_suffix_ids)); +} + +inline bool +function_instance::operator== (const function_instance &other) const +{ + return (base == other.base + && shape == other.shape + && mode_suffix_id == other.mode_suffix_id + && pred == other.pred + && type_suffix_ids[0] == other.type_suffix_ids[0] + && type_suffix_ids[1] == other.type_suffix_ids[1]); +} + +inline bool +function_instance::operator!= (const function_instance &other) const +{ + return !operator== (other); +} + +/* If the function operates on tuples of vectors, return the number + of vectors in the tuples, otherwise return 1. */ +inline unsigned int +function_instance::vectors_per_tuple () const +{ + return base->vectors_per_tuple (); +} + +/* Return information about the function's mode suffix. */ +inline const mode_suffix_info & +function_instance::mode_suffix () const +{ + return mode_suffixes[mode_suffix_id]; +} + +/* Return information about type suffix I. */ +inline const type_suffix_info & +function_instance::type_suffix (unsigned int i) const +{ + return type_suffixes[type_suffix_ids[i]]; +} + +/* Return the scalar type associated with type suffix I. */ +inline tree +function_instance::scalar_type (unsigned int i) const +{ + return scalar_types[type_suffix (i).vector_type]; +} + +/* Return the vector type associated with type suffix I. */ +inline tree +function_instance::vector_type (unsigned int i) const +{ + return acle_vector_types[0][type_suffix (i).vector_type]; +} + +/* If the function operates on tuples of vectors, return the tuple type + associated with type suffix I, otherwise return the vector type associated + with type suffix I. */ +inline tree +function_instance::tuple_type (unsigned int i) const +{ + unsigned int num_vectors = vectors_per_tuple (); + return acle_vector_types[num_vectors - 1][type_suffix (i).vector_type]; +} + +/* Return the vector or predicate mode associated with type suffix I. */ +inline machine_mode +function_instance::vector_mode (unsigned int i) const +{ + return type_suffix (i).vector_mode; +} + +/* Return true if the function has no return value. */ +inline bool +function_call_info::function_returns_void_p () +{ + return TREE_TYPE (TREE_TYPE (fndecl)) == void_type_node; +} + +/* Default implementation of function::call_properties, with conservatively + correct behavior for floating-point instructions. */ +inline unsigned int +function_base::call_properties (const function_instance &instance) const +{ + unsigned int flags = 0; + if (instance.type_suffix (0).float_p || instance.type_suffix (1).float_p) + flags |= CP_READ_FPCR | CP_RAISE_FP_EXCEPTIONS; + return flags; +} } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index 1bdbd3b8ab3..61fcd671437 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -215,7 +215,8 @@ extern opt_machine_mode arm_get_mask_mode (machine_mode mode); those groups. */ enum arm_builtin_class { - ARM_BUILTIN_GENERAL + ARM_BUILTIN_GENERAL, + ARM_BUILTIN_MVE }; /* Built-in function codes are structured so that the low @@ -229,6 +230,13 @@ const unsigned int ARM_BUILTIN_CLASS = (1 << ARM_BUILTIN_SHIFT) - 1; /* MVE functions. */ namespace arm_mve { void handle_arm_mve_types_h (); + void handle_arm_mve_h (bool); + tree resolve_overloaded_builtin (location_t, unsigned int, + vec *); + bool check_builtin_call (location_t, vec, unsigned int, + tree, unsigned int, tree *); + gimple *gimple_fold_builtin (unsigned int code, gcall *stmt); + rtx expand_builtin (unsigned int, tree, rtx); } /* Thumb functions. */ diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index bf7ff9a9704..004e6c6194e 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -69,6 +69,7 @@ #include "optabs-libfuncs.h" #include "gimplify.h" #include "gimple.h" +#include "gimple-iterator.h" #include "selftest.h" #include "tree-vectorizer.h" #include "opts.h" @@ -506,6 +507,9 @@ static const struct attribute_spec arm_attribute_table[] = #undef TARGET_FUNCTION_VALUE_REGNO_P #define TARGET_FUNCTION_VALUE_REGNO_P arm_function_value_regno_p +#undef TARGET_GIMPLE_FOLD_BUILTIN +#define TARGET_GIMPLE_FOLD_BUILTIN arm_gimple_fold_builtin + #undef TARGET_ASM_OUTPUT_MI_THUNK #define TARGET_ASM_OUTPUT_MI_THUNK arm_output_mi_thunk #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK @@ -2844,6 +2848,29 @@ arm_init_libfuncs (void) speculation_barrier_libfunc = init_one_libfunc ("__speculation_barrier"); } +/* Implement TARGET_GIMPLE_FOLD_BUILTIN. */ +static bool +arm_gimple_fold_builtin (gimple_stmt_iterator *gsi) +{ + gcall *stmt = as_a (gsi_stmt (*gsi)); + tree fndecl = gimple_call_fndecl (stmt); + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + unsigned int subcode = code >> ARM_BUILTIN_SHIFT; + gimple *new_stmt = NULL; + switch (code & ARM_BUILTIN_CLASS) + { + case ARM_BUILTIN_GENERAL: + break; + case ARM_BUILTIN_MVE: + new_stmt = arm_mve::gimple_fold_builtin (subcode, stmt); + } + if (!new_stmt) + return false; + + gsi_replace (gsi, new_stmt, true); + return true; +} + /* On AAPCS systems, this is the "struct __va_list". */ static GTY(()) tree va_list_type; diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 1262d668121..0d2ba968fc0 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -34,6 +34,12 @@ #endif #include "arm_mve_types.h" +#ifdef __ARM_MVE_PRESERVE_USER_NAMESPACE +#pragma GCC arm "arm_mve.h" true +#else +#pragma GCC arm "arm_mve.h" false +#endif + #ifndef __ARM_MVE_PRESERVE_USER_NAMESPACE #define vst4q(__addr, __value) __arm_vst4q(__addr, __value) #define vdupq_n(__a) __arm_vdupq_n(__a) diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md index 3139750c606..8e235f63ee6 100644 --- a/gcc/config/arm/predicates.md +++ b/gcc/config/arm/predicates.md @@ -903,3 +903,7 @@ (define_predicate "call_insn_operand" (define_special_predicate "aligned_operand" (ior (not (match_code "mem")) (match_test "MEM_ALIGN (op) >= GET_MODE_ALIGNMENT (mode)"))) + +;; A special predicate that doesn't match a particular mode. +(define_special_predicate "arm_any_register_operand" + (match_code "reg")) diff --git a/gcc/config/arm/t-arm b/gcc/config/arm/t-arm index 637e72af5bb..9a1b06368a1 100644 --- a/gcc/config/arm/t-arm +++ b/gcc/config/arm/t-arm @@ -154,15 +154,41 @@ arm-builtins.o: $(srcdir)/config/arm/arm-builtins.cc $(CONFIG_H) \ $(srcdir)/config/arm/arm-builtins.cc arm-mve-builtins.o: $(srcdir)/config/arm/arm-mve-builtins.cc $(CONFIG_H) \ - $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ - fold-const.h langhooks.h stringpool.h attribs.h diagnostic.h \ + $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(TM_P_H) \ + memmodel.h insn-codes.h optabs.h recog.h expr.h basic-block.h \ + function.h fold-const.h gimple.h gimple-fold.h emit-rtl.h langhooks.h \ + stringpool.h attribs.h diagnostic.h \ $(srcdir)/config/arm/arm-protos.h \ $(srcdir)/config/arm/arm-builtins.h \ $(srcdir)/config/arm/arm-mve-builtins.h \ - $(srcdir)/config/arm/arm-mve-builtins.def + $(srcdir)/config/arm/arm-mve-builtins-base.h \ + $(srcdir)/config/arm/arm-mve-builtins-shapes.h \ + $(srcdir)/config/arm/arm-mve-builtins.def \ + $(srcdir)/config/arm/arm-mve-builtins-base.def $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(srcdir)/config/arm/arm-mve-builtins.cc +arm-mve-builtins-shapes.o: \ + $(srcdir)/config/arm/arm-mve-builtins-shapes.cc \ + $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ + $(RTL_H) memmodel.h insn-codes.h optabs.h \ + $(srcdir)/config/arm/arm-mve-builtins.h \ + $(srcdir)/config/arm/arm-mve-builtins-shapes.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(srcdir)/config/arm/arm-mve-builtins-shapes.cc + +arm-mve-builtins-base.o: \ + $(srcdir)/config/arm/arm-mve-builtins-base.cc \ + $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \ + memmodel.h insn-codes.h $(OPTABS_H) \ + $(BASIC_BLOCK_H) $(FUNCTION_H) $(GIMPLE_H) \ + $(srcdir)/config/arm/arm-mve-builtins.h \ + $(srcdir)/config/arm/arm-mve-builtins-shapes.h \ + $(srcdir)/config/arm/arm-mve-builtins-base.h \ + $(srcdir)/config/arm/arm-mve-builtins-functions.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(srcdir)/config/arm/arm-mve-builtins-base.cc + arm-c.o: $(srcdir)/config/arm/arm-c.cc $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H) $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ From patchwork Tue Apr 18 13:45:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67920 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 91D23385020E for ; Tue, 18 Apr 2023 13:48:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 91D23385020E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825736; bh=/HpJc4sFyYAR+Qpm+jCdSZBNbqaL8o2J0RZk7L6t5VE=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=qZbUSNx0zsS0jER3aMlWS4o3+RU8yNb5MvDKTpMigXvK+m9yErQl0L8Mk5mcBx05o VdkE8S9rRlI18VhxnDMdcDHvWDmTamGACAZrwL85qFJ94Lycd7io57Bfb/DEJuKR1O eEfJ+H35S0BML8ifybY8/Sv/Ps/K2AEsCF4CAjLk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2066.outbound.protection.outlook.com [40.107.22.66]) by sourceware.org (Postfix) with ESMTPS id C2AC23857722 for ; Tue, 18 Apr 2023 13:47:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C2AC23857722 Received: from AM6PR02CA0023.eurprd02.prod.outlook.com (2603:10a6:20b:6e::36) by AM8PR08MB5635.eurprd08.prod.outlook.com (2603:10a6:20b:1c5::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:22 +0000 Received: from AM7EUR03FT065.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:6e:cafe::9a) by AM6PR02CA0023.outlook.office365.com (2603:10a6:20b:6e::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +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 AM7EUR03FT065.mail.protection.outlook.com (100.127.140.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +0000 Received: ("Tessian outbound 945aec65ec65:v136"); Tue, 18 Apr 2023 13:47:22 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 5ae00c0d4bb8b6cf X-CR-MTA-TID: 64aa7808 Received: from a1372b3fcd75.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 77AC596D-7770-4950-8445-4F5C94592FAD.1; Tue, 18 Apr 2023 13:47:10 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a1372b3fcd75.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jipqQQxRXcVo1i4J++ztJ0MJYc82SkkrbAB60jASWvJ7y1kc3WTPY1XtTdC4RWbPveg60HiADC5/OYk5gsv08YJ+nZIKEYyA95Gvc/Nqz8QVBUBuwRg7ph5sPgjPzYLJGRVAIlEYSyWLkksBT1GKhB2Na28cCBe2UStz+bcXSxMT5myDaeAjCR10A+ICtEhOPkd8ZRrlU6ULmj1Nsx5X/0ShuBXnL2j8iQCmNnRxTIq1vIq0zyHeHqEZyBNkjmhCdDgbk6Es+WODbuc8Gt+eDDsBkI3e92hXz9DW8cAQ8ZoYNixAic/f2adkGjyH7CGIjKEcpXo4fvcP2qOkU3/SPA== 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=/HpJc4sFyYAR+Qpm+jCdSZBNbqaL8o2J0RZk7L6t5VE=; b=ICeNL+DVmJaEqRvTx2aG3NVmYD8f7hLJ3SAx8u5oTXMC0ITrpQokWthQ1nDAtqvpXozCGMPeOQyCGD/zahVOSCAg9YH2mB6ygA4TSXo/7naW3s3aUu90Mo1ofY8TcqVuBk9h1Dqk5emmgo/Nue71eDznGaovWVKOF+BCW0TziLrgFH/0SFY9d1Hi/ikZtQ5V+F9LSlhaMSCatYyIX9jPcxXHsJMmnmZi1I5yYrIesc1NCrdwUJlw4LvwLxc4aKqArL6E1D1yTPZ+PdeujCnzPCJJXJNsYji9l8Pyw3lqCSQWQOz0buWD6lLntp/RJp52YBam3YXNTkY8LRHt27HADA== 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 Received: from AS9PR04CA0033.eurprd04.prod.outlook.com (2603:10a6:20b:46a::8) by AS8PR08MB8565.eurprd08.prod.outlook.com (2603:10a6:20b:568::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.30; Tue, 18 Apr 2023 13:47:05 +0000 Received: from AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46a:cafe::9c) by AS9PR04CA0033.outlook.office365.com (2603:10a6:20b:46a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:05 +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 AM7EUR03FT056.mail.protection.outlook.com (100.127.140.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:05 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:03 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:03 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 03/22] arm: [MVE intrinsics] Rework vreinterpretq Date: Tue, 18 Apr 2023 15:45:49 +0200 Message-ID: <20230418134608.244751-4-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT056:EE_|AS8PR08MB8565:EE_|AM7EUR03FT065:EE_|AM8PR08MB5635:EE_ X-MS-Office365-Filtering-Correlation-Id: ac9bef37-b87b-458b-2e0e-08db40136f73 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: QEQpiESMmGIU3Odq9vUdKtWs+8yxAiLkGBYmLgxgQsOZSHNMJUAGgiuE7voVUPRcE3l38hyM017VBc+PZLpkSdCeiTNYBT58hQYKF06Vcq1nLu189U+RPnJyeFHnQxGsqX0slQYTZscjCcuQgmyAC7GmGTkdUZM7L0RIOpvIBndsuCIOL3ORBIv6HmspV6846WLWJowtvWDbHZ9xRcCYWNW2NIHUejxtiLwC4w/tW7SPuSzeKTKh08coickVPFiiLxnWjUbz+fvGjZIcTxiBtphLrdHJKxfjmVVhsfNcI80dUKnBZyEh1G1+i03nDU/VkPvZCVNPtBFTNLBup+7B2dQCKZTS1BMvLgFF/Po7a5WzR4HUNMtsQ9BmmscT/FU7IKA+nK1XQPa1Zr6+CDRjBRlSKwvDJBvuIjA/lanvocDmDCGkusLrm4xNaY6minKT97VZL6ymu9E1yGxVDfxKmYSTJYW7pIWUxPltTR/A/X/wuT2FTQL78xh46Jejna9PoEHdqA7/IEnue52nFIAkKpSl2dr8YmWPQGjqc/K0DcRsTDHB1qEsN2Equ0sdNYEfcOR/4Jg1Ua0zrVB4cBljfP7fqA/wUAZGokCmZ7ZESe0HmXpAJKAhX7FJt/zDK2ZNO0jbER4MbTrgrNkFht/hGQ5gk/KZFemlqBXe6kZS1QBoMHjBKkIm/tNCw4/+6IHEHU88Hyl2MoLW7h2O7Y104o6CYk8lFDdrI7pIkLwamF4= 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:(13230028)(4636009)(136003)(396003)(346002)(376002)(39860400002)(451199021)(36840700001)(46966006)(5660300002)(7696005)(2906002)(70586007)(4326008)(36756003)(70206006)(30864003)(44832011)(86362001)(8936002)(81166007)(41300700001)(82310400005)(6666004)(478600001)(316002)(356005)(8676002)(82740400003)(40480700001)(6636002)(110136005)(26005)(1076003)(336012)(426003)(36860700001)(2616005)(84970400001)(47076005)(186003)(83380400001)(36900700001)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB8565 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: c1271ed5-1a75-4be0-6951-08db401365bd X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QLrbXmkx02GjP8Koe2LFhdmv1bHYxENdPTBnjIePKL2738/SxvY2DWAW65HIl6MHjs1gvWzo2pWszjdfT+v2ohvJIuKdsP4DeRC+JUBd9BN7W5XofvpipUwf60lluFD95EEl2+jr6+O++W+25B6jiDApOxuhuVwDQWpkqcVYGHejfeRsf4LfpTXMlF6NnTosJ1SYUJuhHUzxWMjxTKL9C6zYlUhv7dqwzZpjWSVMapG6j4dvKnobM6gW/aDVlCE+heKTrCMYYIPXu1geLsz6djc4SFaeXhG3nqHKyM8dGLaMoxwGmrPxdar+qfM9kWampFbKXKSw9kSm/5X8v3jeJTDCXSaaMrkzfYoGCZn5TtlOTCckcHY2A7SB1haqYh2B1dZCYl+rQQxrvsPrBgiOcmN7DBhXOcNM2muNavtPqmOTb1YMf0xINVSNS9BALeMatni4RxKTgtfitT98gAT6YElu3pBni4ix4tx9ot5qcFbK2BgtTpyMeLGstuzVYXJog3pts739kFbKnBzqcBu74ST1QjnJAOskgkBPrcdkuqxlpihKRJKEQSPi/B1YhH5fQ2dmVc5COWkLwCyQwC5nLsVAYzZ0DExC6yIV5qgzBEaXLGZEo1rCu5Gw4uPbGMQYkskJR2f/AwYFF/edl2mmFjVR8S0dq3GOzXUzvpS65hmZA/uOJ21Er7gLshp+FNefNUL8PU8HOMrg8KJNkeroFaa/sRkQ2ciydqzAu0CFjTs= 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:(13230028)(4636009)(346002)(136003)(376002)(39860400002)(396003)(451199021)(36840700001)(40470700004)(46966006)(36756003)(8936002)(8676002)(40460700003)(44832011)(5660300002)(2906002)(30864003)(82310400005)(86362001)(40480700001)(478600001)(7696005)(84970400001)(6666004)(6636002)(110136005)(186003)(2616005)(36860700001)(1076003)(70586007)(70206006)(26005)(41300700001)(82740400003)(316002)(83380400001)(81166007)(4326008)(47076005)(426003)(336012)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:22.0651 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ac9bef37-b87b-458b-2e0e-08db40136f73 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: AM7EUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB5635 X-Spam-Status: No, score=-12.3 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, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch implements vreinterpretq using the new MVE intrinsics framework. The old definitions for vreinterpretq are removed as a consequence. 2022-09-08 Murray Steele Christophe Lyon gcc/ * config/arm/arm-mve-builtins-base.cc (vreinterpretq_impl): New class. * config/arm/arm-mve-builtins-base.def: Define vreinterpretq. * config/arm/arm-mve-builtins-base.h (vreinterpretq): New declaration. * config/arm/arm-mve-builtins-shapes.cc (parse_element_type): New function. (parse_type): Likewise. (parse_signature): Likewise. (build_one): Likewise. (build_all): Likewise. (overloaded_base): New struct. (unary_convert_def): Likewise. * config/arm/arm-mve-builtins-shapes.h (unary_convert): Declare. * config/arm/arm-mve-builtins.cc (TYPES_reinterpret_signed1): New macro. (TYPES_reinterpret_unsigned1): Likewise. (TYPES_reinterpret_integer): Likewise. (TYPES_reinterpret_integer1): Likewise. (TYPES_reinterpret_float1): Likewise. (TYPES_reinterpret_float): Likewise. (reinterpret_integer): New. (reinterpret_float): New. (handle_arm_mve_h): Register builtins. * config/arm/arm_mve.h (vreinterpretq_s16): Remove. (vreinterpretq_s32): Likewise. (vreinterpretq_s64): Likewise. (vreinterpretq_s8): Likewise. (vreinterpretq_u16): Likewise. (vreinterpretq_u32): Likewise. (vreinterpretq_u64): Likewise. (vreinterpretq_u8): Likewise. (vreinterpretq_f16): Likewise. (vreinterpretq_f32): Likewise. (vreinterpretq_s16_s32): Likewise. (vreinterpretq_s16_s64): Likewise. (vreinterpretq_s16_s8): Likewise. (vreinterpretq_s16_u16): Likewise. (vreinterpretq_s16_u32): Likewise. (vreinterpretq_s16_u64): Likewise. (vreinterpretq_s16_u8): Likewise. (vreinterpretq_s32_s16): Likewise. (vreinterpretq_s32_s64): Likewise. (vreinterpretq_s32_s8): Likewise. (vreinterpretq_s32_u16): Likewise. (vreinterpretq_s32_u32): Likewise. (vreinterpretq_s32_u64): Likewise. (vreinterpretq_s32_u8): Likewise. (vreinterpretq_s64_s16): Likewise. (vreinterpretq_s64_s32): Likewise. (vreinterpretq_s64_s8): Likewise. (vreinterpretq_s64_u16): Likewise. (vreinterpretq_s64_u32): Likewise. (vreinterpretq_s64_u64): Likewise. (vreinterpretq_s64_u8): Likewise. (vreinterpretq_s8_s16): Likewise. (vreinterpretq_s8_s32): Likewise. (vreinterpretq_s8_s64): Likewise. (vreinterpretq_s8_u16): Likewise. (vreinterpretq_s8_u32): Likewise. (vreinterpretq_s8_u64): Likewise. (vreinterpretq_s8_u8): Likewise. (vreinterpretq_u16_s16): Likewise. (vreinterpretq_u16_s32): Likewise. (vreinterpretq_u16_s64): Likewise. (vreinterpretq_u16_s8): Likewise. (vreinterpretq_u16_u32): Likewise. (vreinterpretq_u16_u64): Likewise. (vreinterpretq_u16_u8): Likewise. (vreinterpretq_u32_s16): Likewise. (vreinterpretq_u32_s32): Likewise. (vreinterpretq_u32_s64): Likewise. (vreinterpretq_u32_s8): Likewise. (vreinterpretq_u32_u16): Likewise. (vreinterpretq_u32_u64): Likewise. (vreinterpretq_u32_u8): Likewise. (vreinterpretq_u64_s16): Likewise. (vreinterpretq_u64_s32): Likewise. (vreinterpretq_u64_s64): Likewise. (vreinterpretq_u64_s8): Likewise. (vreinterpretq_u64_u16): Likewise. (vreinterpretq_u64_u32): Likewise. (vreinterpretq_u64_u8): Likewise. (vreinterpretq_u8_s16): Likewise. (vreinterpretq_u8_s32): Likewise. (vreinterpretq_u8_s64): Likewise. (vreinterpretq_u8_s8): Likewise. (vreinterpretq_u8_u16): Likewise. (vreinterpretq_u8_u32): Likewise. (vreinterpretq_u8_u64): Likewise. (vreinterpretq_s32_f16): Likewise. (vreinterpretq_s32_f32): Likewise. (vreinterpretq_u16_f16): Likewise. (vreinterpretq_u16_f32): Likewise. (vreinterpretq_u32_f16): Likewise. (vreinterpretq_u32_f32): Likewise. (vreinterpretq_u64_f16): Likewise. (vreinterpretq_u64_f32): Likewise. (vreinterpretq_u8_f16): Likewise. (vreinterpretq_u8_f32): Likewise. (vreinterpretq_f16_f32): Likewise. (vreinterpretq_f16_s16): Likewise. (vreinterpretq_f16_s32): Likewise. (vreinterpretq_f16_s64): Likewise. (vreinterpretq_f16_s8): Likewise. (vreinterpretq_f16_u16): Likewise. (vreinterpretq_f16_u32): Likewise. (vreinterpretq_f16_u64): Likewise. (vreinterpretq_f16_u8): Likewise. (vreinterpretq_f32_f16): Likewise. (vreinterpretq_f32_s16): Likewise. (vreinterpretq_f32_s32): Likewise. (vreinterpretq_f32_s64): Likewise. (vreinterpretq_f32_s8): Likewise. (vreinterpretq_f32_u16): Likewise. (vreinterpretq_f32_u32): Likewise. (vreinterpretq_f32_u64): Likewise. (vreinterpretq_f32_u8): Likewise. (vreinterpretq_s16_f16): Likewise. (vreinterpretq_s16_f32): Likewise. (vreinterpretq_s64_f16): Likewise. (vreinterpretq_s64_f32): Likewise. (vreinterpretq_s8_f16): Likewise. (vreinterpretq_s8_f32): Likewise. (__arm_vreinterpretq_f16): Likewise. (__arm_vreinterpretq_f32): Likewise. (__arm_vreinterpretq_s16): Likewise. (__arm_vreinterpretq_s32): Likewise. (__arm_vreinterpretq_s64): Likewise. (__arm_vreinterpretq_s8): Likewise. (__arm_vreinterpretq_u16): Likewise. (__arm_vreinterpretq_u32): Likewise. (__arm_vreinterpretq_u64): Likewise. (__arm_vreinterpretq_u8): Likewise. * config/arm/arm_mve_types.h (__arm_vreinterpretq_s16_s32): Remove. (__arm_vreinterpretq_s16_s64): Likewise. (__arm_vreinterpretq_s16_s8): Likewise. (__arm_vreinterpretq_s16_u16): Likewise. (__arm_vreinterpretq_s16_u32): Likewise. (__arm_vreinterpretq_s16_u64): Likewise. (__arm_vreinterpretq_s16_u8): Likewise. (__arm_vreinterpretq_s32_s16): Likewise. (__arm_vreinterpretq_s32_s64): Likewise. (__arm_vreinterpretq_s32_s8): Likewise. (__arm_vreinterpretq_s32_u16): Likewise. (__arm_vreinterpretq_s32_u32): Likewise. (__arm_vreinterpretq_s32_u64): Likewise. (__arm_vreinterpretq_s32_u8): Likewise. (__arm_vreinterpretq_s64_s16): Likewise. (__arm_vreinterpretq_s64_s32): Likewise. (__arm_vreinterpretq_s64_s8): Likewise. (__arm_vreinterpretq_s64_u16): Likewise. (__arm_vreinterpretq_s64_u32): Likewise. (__arm_vreinterpretq_s64_u64): Likewise. (__arm_vreinterpretq_s64_u8): Likewise. (__arm_vreinterpretq_s8_s16): Likewise. (__arm_vreinterpretq_s8_s32): Likewise. (__arm_vreinterpretq_s8_s64): Likewise. (__arm_vreinterpretq_s8_u16): Likewise. (__arm_vreinterpretq_s8_u32): Likewise. (__arm_vreinterpretq_s8_u64): Likewise. (__arm_vreinterpretq_s8_u8): Likewise. (__arm_vreinterpretq_u16_s16): Likewise. (__arm_vreinterpretq_u16_s32): Likewise. (__arm_vreinterpretq_u16_s64): Likewise. (__arm_vreinterpretq_u16_s8): Likewise. (__arm_vreinterpretq_u16_u32): Likewise. (__arm_vreinterpretq_u16_u64): Likewise. (__arm_vreinterpretq_u16_u8): Likewise. (__arm_vreinterpretq_u32_s16): Likewise. (__arm_vreinterpretq_u32_s32): Likewise. (__arm_vreinterpretq_u32_s64): Likewise. (__arm_vreinterpretq_u32_s8): Likewise. (__arm_vreinterpretq_u32_u16): Likewise. (__arm_vreinterpretq_u32_u64): Likewise. (__arm_vreinterpretq_u32_u8): Likewise. (__arm_vreinterpretq_u64_s16): Likewise. (__arm_vreinterpretq_u64_s32): Likewise. (__arm_vreinterpretq_u64_s64): Likewise. (__arm_vreinterpretq_u64_s8): Likewise. (__arm_vreinterpretq_u64_u16): Likewise. (__arm_vreinterpretq_u64_u32): Likewise. (__arm_vreinterpretq_u64_u8): Likewise. (__arm_vreinterpretq_u8_s16): Likewise. (__arm_vreinterpretq_u8_s32): Likewise. (__arm_vreinterpretq_u8_s64): Likewise. (__arm_vreinterpretq_u8_s8): Likewise. (__arm_vreinterpretq_u8_u16): Likewise. (__arm_vreinterpretq_u8_u32): Likewise. (__arm_vreinterpretq_u8_u64): Likewise. (__arm_vreinterpretq_s32_f16): Likewise. (__arm_vreinterpretq_s32_f32): Likewise. (__arm_vreinterpretq_s16_f16): Likewise. (__arm_vreinterpretq_s16_f32): Likewise. (__arm_vreinterpretq_s64_f16): Likewise. (__arm_vreinterpretq_s64_f32): Likewise. (__arm_vreinterpretq_s8_f16): Likewise. (__arm_vreinterpretq_s8_f32): Likewise. (__arm_vreinterpretq_u16_f16): Likewise. (__arm_vreinterpretq_u16_f32): Likewise. (__arm_vreinterpretq_u32_f16): Likewise. (__arm_vreinterpretq_u32_f32): Likewise. (__arm_vreinterpretq_u64_f16): Likewise. (__arm_vreinterpretq_u64_f32): Likewise. (__arm_vreinterpretq_u8_f16): Likewise. (__arm_vreinterpretq_u8_f32): Likewise. (__arm_vreinterpretq_f16_f32): Likewise. (__arm_vreinterpretq_f16_s16): Likewise. (__arm_vreinterpretq_f16_s32): Likewise. (__arm_vreinterpretq_f16_s64): Likewise. (__arm_vreinterpretq_f16_s8): Likewise. (__arm_vreinterpretq_f16_u16): Likewise. (__arm_vreinterpretq_f16_u32): Likewise. (__arm_vreinterpretq_f16_u64): Likewise. (__arm_vreinterpretq_f16_u8): Likewise. (__arm_vreinterpretq_f32_f16): Likewise. (__arm_vreinterpretq_f32_s16): Likewise. (__arm_vreinterpretq_f32_s32): Likewise. (__arm_vreinterpretq_f32_s64): Likewise. (__arm_vreinterpretq_f32_s8): Likewise. (__arm_vreinterpretq_f32_u16): Likewise. (__arm_vreinterpretq_f32_u32): Likewise. (__arm_vreinterpretq_f32_u64): Likewise. (__arm_vreinterpretq_f32_u8): Likewise. (__arm_vreinterpretq_s16): Likewise. (__arm_vreinterpretq_s32): Likewise. (__arm_vreinterpretq_s64): Likewise. (__arm_vreinterpretq_s8): Likewise. (__arm_vreinterpretq_u16): Likewise. (__arm_vreinterpretq_u32): Likewise. (__arm_vreinterpretq_u64): Likewise. (__arm_vreinterpretq_u8): Likewise. (__arm_vreinterpretq_f16): Likewise. (__arm_vreinterpretq_f32): Likewise. * config/arm/mve.md (@arm_mve_reinterpret): New pattern. * config/arm/unspecs.md: (REINTERPRET): New unspec. gcc/testsuite/ * g++.target/arm/mve.exp: Add general-c++ and general directories. * g++.target/arm/mve/general-c++/nomve_fp_1.c: New test. * g++.target/arm/mve/general-c++/vreinterpretq_1.C: New test. * gcc.target/arm/mve/general-c/nomve_fp_1.c: New test. * gcc.target/arm/mve/general-c/vreinterpretq_1.c: New test. --- gcc/config/arm/arm-mve-builtins-base.cc | 29 + gcc/config/arm/arm-mve-builtins-base.def | 2 + gcc/config/arm/arm-mve-builtins-base.h | 2 + gcc/config/arm/arm-mve-builtins-shapes.cc | 28 + gcc/config/arm/arm-mve-builtins-shapes.h | 8 + gcc/config/arm/arm-mve-builtins.cc | 60 + gcc/config/arm/arm_mve.h | 300 ---- gcc/config/arm/arm_mve_types.h | 1365 +---------------- gcc/config/arm/mve.md | 18 + gcc/config/arm/unspecs.md | 1 + gcc/testsuite/g++.target/arm/mve.exp | 8 +- .../arm/mve/general-c++/nomve_fp_1.c | 15 + .../arm/mve/general-c++/vreinterpretq_1.C | 25 + .../gcc.target/arm/mve/general-c/nomve_fp_1.c | 15 + .../arm/mve/general-c/vreinterpretq_1.c | 25 + 15 files changed, 286 insertions(+), 1615 deletions(-) create mode 100644 gcc/testsuite/g++.target/arm/mve/general-c++/nomve_fp_1.c create mode 100644 gcc/testsuite/g++.target/arm/mve/general-c++/vreinterpretq_1.C create mode 100644 gcc/testsuite/gcc.target/arm/mve/general-c/nomve_fp_1.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/general-c/vreinterpretq_1.c diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index e9f285faf2b..ad8d500afc6 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -38,8 +38,37 @@ using namespace arm_mve; namespace { +/* Implements vreinterpretq_* intrinsics. */ +class vreinterpretq_impl : public quiet +{ + gimple * + fold (gimple_folder &f) const override + { + /* Punt to rtl if the effect of the reinterpret on registers does not + conform to GCC's endianness model. */ + if (!targetm.can_change_mode_class (f.vector_mode (0), + f.vector_mode (1), VFP_REGS)) + return NULL; + + /* Otherwise vreinterpret corresponds directly to a VIEW_CONVERT_EXPR + reinterpretation. */ + tree rhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (f.lhs), + gimple_call_arg (f.call, 0)); + return gimple_build_assign (f.lhs, VIEW_CONVERT_EXPR, rhs); + } + + rtx + expand (function_expander &e) const override + { + machine_mode mode = e.vector_mode (0); + return e.use_exact_insn (code_for_arm_mve_reinterpret (mode)); + } +}; + } /* end anonymous namespace */ namespace arm_mve { +FUNCTION (vreinterpretq, vreinterpretq_impl,) + } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index d15ba2e23e8..5c0c1b9cee7 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -18,7 +18,9 @@ . */ #define REQUIRES_FLOAT false +DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none) #undef REQUIRES_FLOAT #define REQUIRES_FLOAT true +DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_float, none) #undef REQUIRES_FLOAT diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index c4d7b750cd5..60e7bd24eda 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -23,6 +23,8 @@ namespace arm_mve { namespace functions { +extern const function_base *const vreinterpretq; + } /* end namespace arm_mve::functions */ } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index f20660d8319..d0da0ffef91 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -338,6 +338,34 @@ struct overloaded_base : public function_shape } }; +/* _t foo_t0[_t1](_t) + + where the target type must be specified explicitly but the source + type can be inferred. + + Example: vreinterpretq. + int16x8_t [__arm_]vreinterpretq_s16[_s8](int8x16_t a) + int32x4_t [__arm_]vreinterpretq_s32[_s8](int8x16_t a) + int8x16_t [__arm_]vreinterpretq_s8[_s16](int16x8_t a) + int8x16_t [__arm_]vreinterpretq_s8[_s32](int32x4_t a) */ +struct unary_convert_def : public overloaded_base<1> +{ + void + build (function_builder &b, const function_group_info &group, + bool preserve_user_namespace) const override + { + b.add_overloaded_functions (group, MODE_none, preserve_user_namespace); + build_all (b, "v0,v1", group, MODE_none, preserve_user_namespace); + } + + tree + resolve (function_resolver &r) const override + { + return r.resolve_unary (); + } +}; +SHAPE (unary_convert) + } /* end namespace arm_mve */ #undef SHAPE diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h index 9e353b85a76..04d19a02890 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.h +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -22,8 +22,16 @@ namespace arm_mve { + /* The naming convention is: + + - to use names like "unary" etc. if the rules are somewhat generic, + especially if there are no ranges involved. */ + namespace shapes { + + extern const function_shape *const unary_convert; + } /* end namespace arm_mve::shapes */ } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc index b0cceb75ceb..e409a029346 100644 --- a/gcc/config/arm/arm-mve-builtins.cc +++ b/gcc/config/arm/arm-mve-builtins.cc @@ -199,6 +199,52 @@ CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = { #define TYPES_signed_32(S, D) \ S (s32) +#define TYPES_reinterpret_signed1(D, A) \ + D (A, s8), D (A, s16), D (A, s32), D (A, s64) + +#define TYPES_reinterpret_unsigned1(D, A) \ + D (A, u8), D (A, u16), D (A, u32), D (A, u64) + +#define TYPES_reinterpret_integer(S, D) \ + TYPES_reinterpret_unsigned1 (D, s8), \ + D (s8, s16), D (s8, s32), D (s8, s64), \ + TYPES_reinterpret_unsigned1 (D, s16), \ + D (s16, s8), D (s16, s32), D (s16, s64), \ + TYPES_reinterpret_unsigned1 (D, s32), \ + D (s32, s8), D (s32, s16), D (s32, s64), \ + TYPES_reinterpret_unsigned1 (D, s64), \ + D (s64, s8), D (s64, s16), D (s64, s32), \ + TYPES_reinterpret_signed1 (D, u8), \ + D (u8, u16), D (u8, u32), D (u8, u64), \ + TYPES_reinterpret_signed1 (D, u16), \ + D (u16, u8), D (u16, u32), D (u16, u64), \ + TYPES_reinterpret_signed1 (D, u32), \ + D (u32, u8), D (u32, u16), D (u32, u64), \ + TYPES_reinterpret_signed1 (D, u64), \ + D (u64, u8), D (u64, u16), D (u64, u32) + +/* { _s8 _s16 _s32 _s64 } x { _s8 _s16 _s32 _s64 } + { _u8 _u16 _u32 _u64 } { _u8 _u16 _u32 _u64 }. */ +#define TYPES_reinterpret_integer1(D, A) \ + TYPES_reinterpret_signed1 (D, A), \ + TYPES_reinterpret_unsigned1 (D, A) + +#define TYPES_reinterpret_float1(D, A) \ + D (A, f16), D (A, f32) + +#define TYPES_reinterpret_float(S, D) \ + TYPES_reinterpret_float1 (D, s8), \ + TYPES_reinterpret_float1 (D, s16), \ + TYPES_reinterpret_float1 (D, s32), \ + TYPES_reinterpret_float1 (D, s64), \ + TYPES_reinterpret_float1 (D, u8), \ + TYPES_reinterpret_float1 (D, u16), \ + TYPES_reinterpret_float1 (D, u32), \ + TYPES_reinterpret_float1 (D, u64), \ + TYPES_reinterpret_integer1 (D, f16), \ + TYPES_reinterpret_integer1 (D, f32), \ + D (f16, f32), D (f32, f16) + /* Describe a pair of type suffixes in which only the first is used. */ #define DEF_VECTOR_TYPE(X) { TYPE_SUFFIX_ ## X, NUM_TYPE_SUFFIXES } @@ -231,6 +277,8 @@ DEF_MVE_TYPES_ARRAY (integer_16_32); DEF_MVE_TYPES_ARRAY (integer_32); DEF_MVE_TYPES_ARRAY (signed_16_32); DEF_MVE_TYPES_ARRAY (signed_32); +DEF_MVE_TYPES_ARRAY (reinterpret_integer); +DEF_MVE_TYPES_ARRAY (reinterpret_float); /* Used by functions that have no governing predicate. */ static const predication_index preds_none[] = { PRED_none, NUM_PREDS }; @@ -253,6 +301,14 @@ static const predication_index preds_p_or_none[] = { PRED_p, PRED_none, NUM_PREDS }; +/* A list of all MVE ACLE functions. */ +static CONSTEXPR const function_group_info function_groups[] = { +#define DEF_MVE_FUNCTION(NAME, SHAPE, TYPES, PREDS) \ + { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, preds_##PREDS, \ + REQUIRES_FLOAT }, +#include "arm-mve-builtins.def" +}; + /* The scalar type associated with each vector type. */ extern GTY(()) tree scalar_types[NUM_VECTOR_TYPES]; tree scalar_types[NUM_VECTOR_TYPES]; @@ -431,6 +487,10 @@ handle_arm_mve_h (bool preserve_user_namespace) /* Define MVE functions. */ function_table = new hash_table (1023); + function_builder builder; + for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i) + builder.register_function_group (function_groups[i], + preserve_user_namespace); } /* Return true if CANDIDATE is equivalent to MODEL_TYPE for overloading diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 0d2ba968fc0..7688b5a7e53 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -358,14 +358,6 @@ #define vstrwq_scatter_shifted_offset_p(__base, __offset, __value, __p) __arm_vstrwq_scatter_shifted_offset_p(__base, __offset, __value, __p) #define vstrwq_scatter_shifted_offset(__base, __offset, __value) __arm_vstrwq_scatter_shifted_offset(__base, __offset, __value) #define vuninitializedq(__v) __arm_vuninitializedq(__v) -#define vreinterpretq_s16(__a) __arm_vreinterpretq_s16(__a) -#define vreinterpretq_s32(__a) __arm_vreinterpretq_s32(__a) -#define vreinterpretq_s64(__a) __arm_vreinterpretq_s64(__a) -#define vreinterpretq_s8(__a) __arm_vreinterpretq_s8(__a) -#define vreinterpretq_u16(__a) __arm_vreinterpretq_u16(__a) -#define vreinterpretq_u32(__a) __arm_vreinterpretq_u32(__a) -#define vreinterpretq_u64(__a) __arm_vreinterpretq_u64(__a) -#define vreinterpretq_u8(__a) __arm_vreinterpretq_u8(__a) #define vddupq_m(__inactive, __a, __imm, __p) __arm_vddupq_m(__inactive, __a, __imm, __p) #define vddupq_u8(__a, __imm) __arm_vddupq_u8(__a, __imm) #define vddupq_u32(__a, __imm) __arm_vddupq_u32(__a, __imm) @@ -518,8 +510,6 @@ #define vfmsq_m(__a, __b, __c, __p) __arm_vfmsq_m(__a, __b, __c, __p) #define vmaxnmq_m(__inactive, __a, __b, __p) __arm_vmaxnmq_m(__inactive, __a, __b, __p) #define vminnmq_m(__inactive, __a, __b, __p) __arm_vminnmq_m(__inactive, __a, __b, __p) -#define vreinterpretq_f16(__a) __arm_vreinterpretq_f16(__a) -#define vreinterpretq_f32(__a) __arm_vreinterpretq_f32(__a) #define vminnmq_x(__a, __b, __p) __arm_vminnmq_x(__a, __b, __p) #define vmaxnmq_x(__a, __b, __p) __arm_vmaxnmq_x(__a, __b, __p) #define vcmulq_x(__a, __b, __p) __arm_vcmulq_x(__a, __b, __p) @@ -2365,96 +2355,6 @@ #define vaddq_u32(__a, __b) __arm_vaddq_u32(__a, __b) #define vaddq_f16(__a, __b) __arm_vaddq_f16(__a, __b) #define vaddq_f32(__a, __b) __arm_vaddq_f32(__a, __b) -#define vreinterpretq_s16_s32(__a) __arm_vreinterpretq_s16_s32(__a) -#define vreinterpretq_s16_s64(__a) __arm_vreinterpretq_s16_s64(__a) -#define vreinterpretq_s16_s8(__a) __arm_vreinterpretq_s16_s8(__a) -#define vreinterpretq_s16_u16(__a) __arm_vreinterpretq_s16_u16(__a) -#define vreinterpretq_s16_u32(__a) __arm_vreinterpretq_s16_u32(__a) -#define vreinterpretq_s16_u64(__a) __arm_vreinterpretq_s16_u64(__a) -#define vreinterpretq_s16_u8(__a) __arm_vreinterpretq_s16_u8(__a) -#define vreinterpretq_s32_s16(__a) __arm_vreinterpretq_s32_s16(__a) -#define vreinterpretq_s32_s64(__a) __arm_vreinterpretq_s32_s64(__a) -#define vreinterpretq_s32_s8(__a) __arm_vreinterpretq_s32_s8(__a) -#define vreinterpretq_s32_u16(__a) __arm_vreinterpretq_s32_u16(__a) -#define vreinterpretq_s32_u32(__a) __arm_vreinterpretq_s32_u32(__a) -#define vreinterpretq_s32_u64(__a) __arm_vreinterpretq_s32_u64(__a) -#define vreinterpretq_s32_u8(__a) __arm_vreinterpretq_s32_u8(__a) -#define vreinterpretq_s64_s16(__a) __arm_vreinterpretq_s64_s16(__a) -#define vreinterpretq_s64_s32(__a) __arm_vreinterpretq_s64_s32(__a) -#define vreinterpretq_s64_s8(__a) __arm_vreinterpretq_s64_s8(__a) -#define vreinterpretq_s64_u16(__a) __arm_vreinterpretq_s64_u16(__a) -#define vreinterpretq_s64_u32(__a) __arm_vreinterpretq_s64_u32(__a) -#define vreinterpretq_s64_u64(__a) __arm_vreinterpretq_s64_u64(__a) -#define vreinterpretq_s64_u8(__a) __arm_vreinterpretq_s64_u8(__a) -#define vreinterpretq_s8_s16(__a) __arm_vreinterpretq_s8_s16(__a) -#define vreinterpretq_s8_s32(__a) __arm_vreinterpretq_s8_s32(__a) -#define vreinterpretq_s8_s64(__a) __arm_vreinterpretq_s8_s64(__a) -#define vreinterpretq_s8_u16(__a) __arm_vreinterpretq_s8_u16(__a) -#define vreinterpretq_s8_u32(__a) __arm_vreinterpretq_s8_u32(__a) -#define vreinterpretq_s8_u64(__a) __arm_vreinterpretq_s8_u64(__a) -#define vreinterpretq_s8_u8(__a) __arm_vreinterpretq_s8_u8(__a) -#define vreinterpretq_u16_s16(__a) __arm_vreinterpretq_u16_s16(__a) -#define vreinterpretq_u16_s32(__a) __arm_vreinterpretq_u16_s32(__a) -#define vreinterpretq_u16_s64(__a) __arm_vreinterpretq_u16_s64(__a) -#define vreinterpretq_u16_s8(__a) __arm_vreinterpretq_u16_s8(__a) -#define vreinterpretq_u16_u32(__a) __arm_vreinterpretq_u16_u32(__a) -#define vreinterpretq_u16_u64(__a) __arm_vreinterpretq_u16_u64(__a) -#define vreinterpretq_u16_u8(__a) __arm_vreinterpretq_u16_u8(__a) -#define vreinterpretq_u32_s16(__a) __arm_vreinterpretq_u32_s16(__a) -#define vreinterpretq_u32_s32(__a) __arm_vreinterpretq_u32_s32(__a) -#define vreinterpretq_u32_s64(__a) __arm_vreinterpretq_u32_s64(__a) -#define vreinterpretq_u32_s8(__a) __arm_vreinterpretq_u32_s8(__a) -#define vreinterpretq_u32_u16(__a) __arm_vreinterpretq_u32_u16(__a) -#define vreinterpretq_u32_u64(__a) __arm_vreinterpretq_u32_u64(__a) -#define vreinterpretq_u32_u8(__a) __arm_vreinterpretq_u32_u8(__a) -#define vreinterpretq_u64_s16(__a) __arm_vreinterpretq_u64_s16(__a) -#define vreinterpretq_u64_s32(__a) __arm_vreinterpretq_u64_s32(__a) -#define vreinterpretq_u64_s64(__a) __arm_vreinterpretq_u64_s64(__a) -#define vreinterpretq_u64_s8(__a) __arm_vreinterpretq_u64_s8(__a) -#define vreinterpretq_u64_u16(__a) __arm_vreinterpretq_u64_u16(__a) -#define vreinterpretq_u64_u32(__a) __arm_vreinterpretq_u64_u32(__a) -#define vreinterpretq_u64_u8(__a) __arm_vreinterpretq_u64_u8(__a) -#define vreinterpretq_u8_s16(__a) __arm_vreinterpretq_u8_s16(__a) -#define vreinterpretq_u8_s32(__a) __arm_vreinterpretq_u8_s32(__a) -#define vreinterpretq_u8_s64(__a) __arm_vreinterpretq_u8_s64(__a) -#define vreinterpretq_u8_s8(__a) __arm_vreinterpretq_u8_s8(__a) -#define vreinterpretq_u8_u16(__a) __arm_vreinterpretq_u8_u16(__a) -#define vreinterpretq_u8_u32(__a) __arm_vreinterpretq_u8_u32(__a) -#define vreinterpretq_u8_u64(__a) __arm_vreinterpretq_u8_u64(__a) -#define vreinterpretq_s32_f16(__a) __arm_vreinterpretq_s32_f16(__a) -#define vreinterpretq_s32_f32(__a) __arm_vreinterpretq_s32_f32(__a) -#define vreinterpretq_u16_f16(__a) __arm_vreinterpretq_u16_f16(__a) -#define vreinterpretq_u16_f32(__a) __arm_vreinterpretq_u16_f32(__a) -#define vreinterpretq_u32_f16(__a) __arm_vreinterpretq_u32_f16(__a) -#define vreinterpretq_u32_f32(__a) __arm_vreinterpretq_u32_f32(__a) -#define vreinterpretq_u64_f16(__a) __arm_vreinterpretq_u64_f16(__a) -#define vreinterpretq_u64_f32(__a) __arm_vreinterpretq_u64_f32(__a) -#define vreinterpretq_u8_f16(__a) __arm_vreinterpretq_u8_f16(__a) -#define vreinterpretq_u8_f32(__a) __arm_vreinterpretq_u8_f32(__a) -#define vreinterpretq_f16_f32(__a) __arm_vreinterpretq_f16_f32(__a) -#define vreinterpretq_f16_s16(__a) __arm_vreinterpretq_f16_s16(__a) -#define vreinterpretq_f16_s32(__a) __arm_vreinterpretq_f16_s32(__a) -#define vreinterpretq_f16_s64(__a) __arm_vreinterpretq_f16_s64(__a) -#define vreinterpretq_f16_s8(__a) __arm_vreinterpretq_f16_s8(__a) -#define vreinterpretq_f16_u16(__a) __arm_vreinterpretq_f16_u16(__a) -#define vreinterpretq_f16_u32(__a) __arm_vreinterpretq_f16_u32(__a) -#define vreinterpretq_f16_u64(__a) __arm_vreinterpretq_f16_u64(__a) -#define vreinterpretq_f16_u8(__a) __arm_vreinterpretq_f16_u8(__a) -#define vreinterpretq_f32_f16(__a) __arm_vreinterpretq_f32_f16(__a) -#define vreinterpretq_f32_s16(__a) __arm_vreinterpretq_f32_s16(__a) -#define vreinterpretq_f32_s32(__a) __arm_vreinterpretq_f32_s32(__a) -#define vreinterpretq_f32_s64(__a) __arm_vreinterpretq_f32_s64(__a) -#define vreinterpretq_f32_s8(__a) __arm_vreinterpretq_f32_s8(__a) -#define vreinterpretq_f32_u16(__a) __arm_vreinterpretq_f32_u16(__a) -#define vreinterpretq_f32_u32(__a) __arm_vreinterpretq_f32_u32(__a) -#define vreinterpretq_f32_u64(__a) __arm_vreinterpretq_f32_u64(__a) -#define vreinterpretq_f32_u8(__a) __arm_vreinterpretq_f32_u8(__a) -#define vreinterpretq_s16_f16(__a) __arm_vreinterpretq_s16_f16(__a) -#define vreinterpretq_s16_f32(__a) __arm_vreinterpretq_s16_f32(__a) -#define vreinterpretq_s64_f16(__a) __arm_vreinterpretq_s64_f16(__a) -#define vreinterpretq_s64_f32(__a) __arm_vreinterpretq_s64_f32(__a) -#define vreinterpretq_s8_f16(__a) __arm_vreinterpretq_s8_f16(__a) -#define vreinterpretq_s8_f32(__a) __arm_vreinterpretq_s8_f32(__a) #define vuninitializedq_u8(void) __arm_vuninitializedq_u8(void) #define vuninitializedq_u16(void) __arm_vuninitializedq_u16(void) #define vuninitializedq_u32(void) __arm_vuninitializedq_u32(void) @@ -37874,126 +37774,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t]: __arm_vuninitializedq_f16 (), \ int (*)[__ARM_mve_type_float32x4_t]: __arm_vuninitializedq_f32 ());}) -#define __arm_vreinterpretq_f16(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_f16_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_f16_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_f16_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_f16_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_f16_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_f16_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_f16_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_f16_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_f16_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_f32(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_f32_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_f32_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_f32_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_f32_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_f32_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_f32_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_f32_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_f32_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_f32_f16 (__ARM_mve_coerce(__p0, float16x8_t)));}) - -#define __arm_vreinterpretq_s16(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_s16_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_s16_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_s16_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_s16_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s16_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s16_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s16_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s16_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_s16_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_s32(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_s32_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_s32_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_s32_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_s32_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s32_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s32_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s32_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s32_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_s32_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_s64(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_s64_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_s64_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_s64_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_s64_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s64_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s64_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s64_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s64_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_s64_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_s8(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_s8_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_s8_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_s8_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_s8_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s8_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s8_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s8_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s8_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_s8_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_u16(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_u16_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u16_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u16_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u16_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_u16_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u16_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_u16_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_u16_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_u16_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_u32(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_u32_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u32_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u32_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u32_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_u32_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_u32_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u32_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_u32_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_u32_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_u64(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_u64_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u64_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u64_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u64_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_u64_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_u64_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_u64_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u64_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_u64_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - -#define __arm_vreinterpretq_u8(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_float16x8_t]: __arm_vreinterpretq_u8_f16 (__ARM_mve_coerce(__p0, float16x8_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u8_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u8_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u8_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u8_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_u8_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_u8_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_u8_u64 (__ARM_mve_coerce(__p0, uint64x2_t)), \ - int (*)[__ARM_mve_type_float32x4_t]: __arm_vreinterpretq_u8_f32 (__ARM_mve_coerce(__p0, float32x4_t)));}) - #define __arm_vstrwq_scatter_base_wb(p0,p1,p2) ({ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p2)])0, \ int (*)[__ARM_mve_type_int32x4_t]: __arm_vstrwq_scatter_base_wb_s32 (p0, p1, __ARM_mve_coerce(__p2, int32x4_t)), \ @@ -39931,86 +39711,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint32x4_t]: __arm_vuninitializedq_u32 (), \ int (*)[__ARM_mve_type_uint64x2_t]: __arm_vuninitializedq_u64 ());}) -#define __arm_vreinterpretq_s16(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_s16_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_s16_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_s16_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s16_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s16_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s16_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s16_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - -#define __arm_vreinterpretq_s32(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_s32_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_s32_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_s32_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s32_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s32_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s32_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s32_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - -#define __arm_vreinterpretq_s64(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_s64_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_s64_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_s64_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s64_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s64_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s64_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s64_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - -#define __arm_vreinterpretq_s8(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_s8_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_s8_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_s8_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_s8_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_s8_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_s8_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_s8_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - -#define __arm_vreinterpretq_u16(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u16_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u16_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u16_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_u16_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u16_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_u16_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_u16_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - -#define __arm_vreinterpretq_u32(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u32_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u32_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u32_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_u32_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_u32_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u32_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_u32_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - -#define __arm_vreinterpretq_u64(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u64_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u64_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u64_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_uint8x16_t]: __arm_vreinterpretq_u64_u8 (__ARM_mve_coerce(__p0, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_u64_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_u64_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u64_s64 (__ARM_mve_coerce(__p0, int64x2_t)));}) - -#define __arm_vreinterpretq_u8(p0) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vreinterpretq_u8_s16 (__ARM_mve_coerce(__p0, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vreinterpretq_u8_s32 (__ARM_mve_coerce(__p0, int32x4_t)), \ - int (*)[__ARM_mve_type_int64x2_t]: __arm_vreinterpretq_u8_s64 (__ARM_mve_coerce(__p0, int64x2_t)), \ - int (*)[__ARM_mve_type_int8x16_t]: __arm_vreinterpretq_u8_s8 (__ARM_mve_coerce(__p0, int8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vreinterpretq_u8_u16 (__ARM_mve_coerce(__p0, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vreinterpretq_u8_u32 (__ARM_mve_coerce(__p0, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint64x2_t]: __arm_vreinterpretq_u8_u64 (__ARM_mve_coerce(__p0, uint64x2_t)));}) - #define __arm_vabsq_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vabsq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ diff --git a/gcc/config/arm/arm_mve_types.h b/gcc/config/arm/arm_mve_types.h index 12bb519142f..ae2591faa03 100644 --- a/gcc/config/arm/arm_mve_types.h +++ b/gcc/config/arm/arm_mve_types.h @@ -29,1124 +29,101 @@ typedef float float32_t; #pragma GCC arm "arm_mve_types.h" -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_s32 (int32x4_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_s64 (int64x2_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_s8 (int8x16_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_u16 (uint16x8_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_u32 (uint32x4_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_u64 (uint64x2_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_u8 (uint8x16_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_s16 (int16x8_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_s64 (int64x2_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_s8 (int8x16_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_u16 (uint16x8_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_u32 (uint32x4_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_u64 (uint64x2_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_u8 (uint8x16_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_s16 (int16x8_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_s32 (int32x4_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_s8 (int8x16_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_u16 (uint16x8_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_u32 (uint32x4_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_u64 (uint64x2_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_u8 (uint8x16_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_s16 (int16x8_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_s32 (int32x4_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_s64 (int64x2_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_u16 (uint16x8_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_u32 (uint32x4_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_u64 (uint64x2_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_u8 (uint8x16_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_s16 (int16x8_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_s32 (int32x4_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_s64 (int64x2_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_s8 (int8x16_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_u32 (uint32x4_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_u64 (uint64x2_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_u8 (uint8x16_t __a) -{ - return (uint16x8_t) __a; -} - - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_s16 (int16x8_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_s32 (int32x4_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_s64 (int64x2_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_s8 (int8x16_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_u16 (uint16x8_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_u64 (uint64x2_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_u8 (uint8x16_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_s16 (int16x8_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_s32 (int32x4_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_s64 (int64x2_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_s8 (int8x16_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_u16 (uint16x8_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_u32 (uint32x4_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_u8 (uint8x16_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_s16 (int16x8_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_s32 (int32x4_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_s64 (int64x2_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_s8 (int8x16_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_u16 (uint16x8_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_u32 (uint32x4_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_u64 (uint64x2_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u8 (void) -{ - uint8x16_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u16 (void) -{ - uint16x8_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u32 (void) -{ - uint32x4_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u64 (void) -{ - uint64x2_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s8 (void) -{ - int8x16_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s16 (void) -{ - int16x8_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s32 (void) -{ - int32x4_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s64 (void) -{ - int64x2_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -#if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */ - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_f16 (float16x8_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32_f32 (float32x4_t __a) -{ - return (int32x4_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_f16 (float16x8_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16_f32 (float32x4_t __a) -{ - return (int16x8_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_f16 (float16x8_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64_f32 (float32x4_t __a) -{ - return (int64x2_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_f16 (float16x8_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8_f32 (float32x4_t __a) -{ - return (int8x16_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_f16 (float16x8_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16_f32 (float32x4_t __a) -{ - return (uint16x8_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_f16 (float16x8_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32_f32 (float32x4_t __a) -{ - return (uint32x4_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_f16 (float16x8_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64_f32 (float32x4_t __a) -{ - return (uint64x2_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_f16 (float16x8_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8_f32 (float32x4_t __a) -{ - return (uint8x16_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_f32 (float32x4_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_s16 (int16x8_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_s32 (int32x4_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_s64 (int64x2_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_s8 (int8x16_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_u16 (uint16x8_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_u32 (uint32x4_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_u64 (uint64x2_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16_u8 (uint8x16_t __a) -{ - return (float16x8_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_f16 (float16x8_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_s16 (int16x8_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_s32 (int32x4_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_s64 (int64x2_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_s8 (int8x16_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_u16 (uint16x8_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_u32 (uint32x4_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_u64 (uint64x2_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32_u8 (uint8x16_t __a) -{ - return (float32x4_t) __a; -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_f16 (void) -{ - float16x8_t __uninit; - __asm__ ("": "=w" (__uninit)); - return __uninit; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_f32 (void) -{ - float32x4_t __uninit; - __asm__ ("": "=w" (__uninit)); - return __uninit; -} - -#endif - -#ifdef __cplusplus - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (int32x4_t __a) -{ - return __arm_vreinterpretq_s16_s32 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (int64x2_t __a) -{ - return __arm_vreinterpretq_s16_s64 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (int8x16_t __a) -{ - return __arm_vreinterpretq_s16_s8 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (uint16x8_t __a) -{ - return __arm_vreinterpretq_s16_u16 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (uint32x4_t __a) -{ - return __arm_vreinterpretq_s16_u32 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (uint64x2_t __a) -{ - return __arm_vreinterpretq_s16_u64 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (uint8x16_t __a) -{ - return __arm_vreinterpretq_s16_u8 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (int16x8_t __a) -{ - return __arm_vreinterpretq_s32_s16 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (int64x2_t __a) -{ - return __arm_vreinterpretq_s32_s64 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (int8x16_t __a) -{ - return __arm_vreinterpretq_s32_s8 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (uint16x8_t __a) -{ - return __arm_vreinterpretq_s32_u16 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (uint32x4_t __a) -{ - return __arm_vreinterpretq_s32_u32 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (uint64x2_t __a) -{ - return __arm_vreinterpretq_s32_u64 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (uint8x16_t __a) -{ - return __arm_vreinterpretq_s32_u8 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (int16x8_t __a) -{ - return __arm_vreinterpretq_s64_s16 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (int32x4_t __a) -{ - return __arm_vreinterpretq_s64_s32 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (int8x16_t __a) -{ - return __arm_vreinterpretq_s64_s8 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (uint16x8_t __a) -{ - return __arm_vreinterpretq_s64_u16 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (uint32x4_t __a) -{ - return __arm_vreinterpretq_s64_u32 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (uint64x2_t __a) -{ - return __arm_vreinterpretq_s64_u64 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (uint8x16_t __a) -{ - return __arm_vreinterpretq_s64_u8 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (int16x8_t __a) -{ - return __arm_vreinterpretq_s8_s16 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (int32x4_t __a) -{ - return __arm_vreinterpretq_s8_s32 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (int64x2_t __a) -{ - return __arm_vreinterpretq_s8_s64 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (uint16x8_t __a) -{ - return __arm_vreinterpretq_s8_u16 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (uint32x4_t __a) -{ - return __arm_vreinterpretq_s8_u32 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (uint64x2_t __a) -{ - return __arm_vreinterpretq_s8_u64 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (uint8x16_t __a) -{ - return __arm_vreinterpretq_s8_u8 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (int16x8_t __a) -{ - return __arm_vreinterpretq_u16_s16 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (int32x4_t __a) -{ - return __arm_vreinterpretq_u16_s32 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (int64x2_t __a) -{ - return __arm_vreinterpretq_u16_s64 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (int8x16_t __a) -{ - return __arm_vreinterpretq_u16_s8 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (uint32x4_t __a) -{ - return __arm_vreinterpretq_u16_u32 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (uint64x2_t __a) -{ - return __arm_vreinterpretq_u16_u64 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (uint8x16_t __a) -{ - return __arm_vreinterpretq_u16_u8 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (int16x8_t __a) -{ - return __arm_vreinterpretq_u32_s16 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (int32x4_t __a) -{ - return __arm_vreinterpretq_u32_s32 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (int64x2_t __a) -{ - return __arm_vreinterpretq_u32_s64 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (int8x16_t __a) -{ - return __arm_vreinterpretq_u32_s8 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (uint16x8_t __a) -{ - return __arm_vreinterpretq_u32_u16 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (uint64x2_t __a) -{ - return __arm_vreinterpretq_u32_u64 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (uint8x16_t __a) -{ - return __arm_vreinterpretq_u32_u8 (__a); -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (int16x8_t __a) -{ - return __arm_vreinterpretq_u64_s16 (__a); -} - -__extension__ extern __inline uint64x2_t +__extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (int32x4_t __a) +__arm_vuninitializedq_u8 (void) { - return __arm_vreinterpretq_u64_s32 (__a); + uint8x16_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint64x2_t +__extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (int64x2_t __a) +__arm_vuninitializedq_u16 (void) { - return __arm_vreinterpretq_u64_s64 (__a); + uint16x8_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint64x2_t +__extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (int8x16_t __a) +__arm_vuninitializedq_u32 (void) { - return __arm_vreinterpretq_u64_s8 (__a); + uint32x4_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } __extension__ extern __inline uint64x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (uint16x8_t __a) +__arm_vuninitializedq_u64 (void) { - return __arm_vreinterpretq_u64_u16 (__a); + uint64x2_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint64x2_t +__extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (uint32x4_t __a) +__arm_vuninitializedq_s8 (void) { - return __arm_vreinterpretq_u64_u32 (__a); + int8x16_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint64x2_t +__extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (uint8x16_t __a) +__arm_vuninitializedq_s16 (void) { - return __arm_vreinterpretq_u64_u8 (__a); + int16x8_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint8x16_t +__extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (int16x8_t __a) +__arm_vuninitializedq_s32 (void) { - return __arm_vreinterpretq_u8_s16 (__a); + int32x4_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint8x16_t +__extension__ extern __inline int64x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (int32x4_t __a) +__arm_vuninitializedq_s64 (void) { - return __arm_vreinterpretq_u8_s32 (__a); + int64x2_t __uninit; + __asm__ ("": "=w"(__uninit)); + return __uninit; } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (int64x2_t __a) -{ - return __arm_vreinterpretq_u8_s64 (__a); -} +#if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */ -__extension__ extern __inline uint8x16_t +__extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (int8x16_t __a) +__arm_vuninitializedq_f16 (void) { - return __arm_vreinterpretq_u8_s8 (__a); + float16x8_t __uninit; + __asm__ ("": "=w" (__uninit)); + return __uninit; } -__extension__ extern __inline uint8x16_t +__extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (uint16x8_t __a) +__arm_vuninitializedq_f32 (void) { - return __arm_vreinterpretq_u8_u16 (__a); + float32x4_t __uninit; + __asm__ ("": "=w" (__uninit)); + return __uninit; } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (uint32x4_t __a) -{ - return __arm_vreinterpretq_u8_u32 (__a); -} +#endif -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (uint64x2_t __a) -{ - return __arm_vreinterpretq_u8_u64 (__a); -} +#ifdef __cplusplus __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) @@ -1205,244 +182,6 @@ __arm_vuninitializedq (int64x2_t /* __v ATTRIBUTE UNUSED */) } #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */ -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (float16x8_t __a) -{ - return __arm_vreinterpretq_s32_f16 (__a); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s32 (float32x4_t __a) -{ - return __arm_vreinterpretq_s32_f32 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (float16x8_t __a) -{ - return __arm_vreinterpretq_s16_f16 (__a); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s16 (float32x4_t __a) -{ - return __arm_vreinterpretq_s16_f32 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (float16x8_t __a) -{ - return __arm_vreinterpretq_s64_f16 (__a); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s64 (float32x4_t __a) -{ - return __arm_vreinterpretq_s64_f32 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (float16x8_t __a) -{ - return __arm_vreinterpretq_s8_f16 (__a); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_s8 (float32x4_t __a) -{ - return __arm_vreinterpretq_s8_f32 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (float16x8_t __a) -{ - return __arm_vreinterpretq_u16_f16 (__a); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u16 (float32x4_t __a) -{ - return __arm_vreinterpretq_u16_f32 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (float16x8_t __a) -{ - return __arm_vreinterpretq_u32_f16 (__a); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u32 (float32x4_t __a) -{ - return __arm_vreinterpretq_u32_f32 (__a); -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (float16x8_t __a) -{ - return __arm_vreinterpretq_u64_f16 (__a); -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u64 (float32x4_t __a) -{ - return __arm_vreinterpretq_u64_f32 (__a); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (float16x8_t __a) -{ - return __arm_vreinterpretq_u8_f16 (__a); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_u8 (float32x4_t __a) -{ - return __arm_vreinterpretq_u8_f32 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (float32x4_t __a) -{ - return __arm_vreinterpretq_f16_f32 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (int16x8_t __a) -{ - return __arm_vreinterpretq_f16_s16 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (int32x4_t __a) -{ - return __arm_vreinterpretq_f16_s32 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (int64x2_t __a) -{ - return __arm_vreinterpretq_f16_s64 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (int8x16_t __a) -{ - return __arm_vreinterpretq_f16_s8 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (uint16x8_t __a) -{ - return __arm_vreinterpretq_f16_u16 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (uint32x4_t __a) -{ - return __arm_vreinterpretq_f16_u32 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (uint64x2_t __a) -{ - return __arm_vreinterpretq_f16_u64 (__a); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f16 (uint8x16_t __a) -{ - return __arm_vreinterpretq_f16_u8 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (float16x8_t __a) -{ - return __arm_vreinterpretq_f32_f16 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (int16x8_t __a) -{ - return __arm_vreinterpretq_f32_s16 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (int32x4_t __a) -{ - return __arm_vreinterpretq_f32_s32 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (int64x2_t __a) -{ - return __arm_vreinterpretq_f32_s64 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (int8x16_t __a) -{ - return __arm_vreinterpretq_f32_s8 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (uint16x8_t __a) -{ - return __arm_vreinterpretq_f32_u16 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (uint32x4_t __a) -{ - return __arm_vreinterpretq_f32_u32 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (uint64x2_t __a) -{ - return __arm_vreinterpretq_f32_u64 (__a); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vreinterpretq_f32 (uint8x16_t __a) -{ - return __arm_vreinterpretq_f32_u8 (__a); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vuninitializedq (float16x8_t /* __v ATTRIBUTE UNUSED */) diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 35eab6c94bf..ab688396f97 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -10561,3 +10561,21 @@ (define_expand "vcond_mask_" } DONE; }) + +;; Reinterpret operand 1 in operand 0's mode, without changing its contents. +(define_expand "@arm_mve_reinterpret" + [(set (match_operand:MVE_vecs 0 "register_operand") + (unspec:MVE_vecs + [(match_operand 1 "arm_any_register_operand")] + REINTERPRET))] + "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (mode)) + || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (mode))" + { + machine_mode src_mode = GET_MODE (operands[1]); + if (targetm.can_change_mode_class (mode, src_mode, VFP_REGS)) + { + emit_move_insn (operands[0], gen_lowpart (mode, operands[1])); + DONE; + } + } +) diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md index 84384ee798d..dccda283573 100644 --- a/gcc/config/arm/unspecs.md +++ b/gcc/config/arm/unspecs.md @@ -1255,4 +1255,5 @@ (define_c_enum "unspec" [ SQRSHRL_64 SQRSHRL_48 VSHLCQ_M_ + REINTERPRET ]) diff --git a/gcc/testsuite/g++.target/arm/mve.exp b/gcc/testsuite/g++.target/arm/mve.exp index cd824035540..f75ec20ea64 100644 --- a/gcc/testsuite/g++.target/arm/mve.exp +++ b/gcc/testsuite/g++.target/arm/mve.exp @@ -42,8 +42,12 @@ set dg-do-what-default "assemble" dg-init # Main loop. -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/../../gcc.target/arm/mve/intrinsics/*.\[cCS\]]] \ - "" $DEFAULT_CXXFLAGS +set gcc_subdir [string replace $subdir 0 2 gcc] +set files [glob -nocomplain \ + "$srcdir/$subdir/../../gcc.target/arm/mve/intrinsics/*.\[cCS\]" \ + "$srcdir/$gcc_subdir/mve/general/*.\[cCS\]" \ + "$srcdir/$subdir/mve/general-c++/*.\[cCS\]"] +dg-runtest [lsort $files] "" $DEFAULT_CXXFLAGS # All done. set dg-do-what-default ${save-dg-do-what-default} diff --git a/gcc/testsuite/g++.target/arm/mve/general-c++/nomve_fp_1.c b/gcc/testsuite/g++.target/arm/mve/general-c++/nomve_fp_1.c new file mode 100644 index 00000000000..e0692ceb8c8 --- /dev/null +++ b/gcc/testsuite/g++.target/arm/mve/general-c++/nomve_fp_1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* Do not use dg-add-options arm_v8_1m_mve, because this might expand to "", + which could imply mve+fp depending on the user settings. We want to make + sure the '+fp' extension is not enabled. */ +/* { dg-options "-mfpu=auto -march=armv8.1-m.main+mve" } */ + +#include + +void +f1 (uint8x16_t v) +{ + vreinterpretq_f16 (v); /* { dg-error {ACLE function 'void vreinterpretq_f16\(uint8x16_t\)' requires ISA extension 'mve.fp'} } */ + /* { dg-message {note: you can enable mve.fp by using the command-line option '-march', or by using the 'target' attribute or pragma} "" {target *-*-*} .-1 } */ +} diff --git a/gcc/testsuite/g++.target/arm/mve/general-c++/vreinterpretq_1.C b/gcc/testsuite/g++.target/arm/mve/general-c++/vreinterpretq_1.C new file mode 100644 index 00000000000..8b29ee58163 --- /dev/null +++ b/gcc/testsuite/g++.target/arm/mve/general-c++/vreinterpretq_1.C @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ +/* { dg-add-options arm_v8_1m_mve_fp } */ + +#include + +void +f1 (int8x16_t s8, uint16x8_t u16, float32x4_t f32) +{ + __arm_vreinterpretq_s8 (); /* { dg-error {no matching function for call to '__arm_vreinterpretq_s8\(\)'} } */ + __arm_vreinterpretq_s8 (s8, s8); /* { dg-error {no matching function for call to '__arm_vreinterpretq_s8\(int8x16_t\&, int8x16_t\&\)'} } */ + __arm_vreinterpretq_s8 (0); /* { dg-error {no matching function for call to '__arm_vreinterpretq_s8\(int\)'} } */ + __arm_vreinterpretq_s8 (s8); /* { dg-error {no matching function for call to '__arm_vreinterpretq_s8\(int8x16_t\&\)'} } */ + __arm_vreinterpretq_s8 (u16); + __arm_vreinterpretq_u16 (); /* { dg-error {no matching function for call to '__arm_vreinterpretq_u16\(\)'} } */ + __arm_vreinterpretq_u16 (u16, u16); /* { dg-error {no matching function for call to '__arm_vreinterpretq_u16\(uint16x8_t\&, uint16x8_t\&\)'} } */ + __arm_vreinterpretq_u16 (0); /* { dg-error {no matching function for call to '__arm_vreinterpretq_u16\(int\)'} } */ + __arm_vreinterpretq_u16 (u16); /* { dg-error {no matching function for call to '__arm_vreinterpretq_u16\(uint16x8_t\&\)'} } */ + __arm_vreinterpretq_u16 (f32); + __arm_vreinterpretq_f32 (); /* { dg-error {no matching function for call to '__arm_vreinterpretq_f32\(\)'} } */ + __arm_vreinterpretq_f32 (f32, f32); /* { dg-error {no matching function for call to '__arm_vreinterpretq_f32\(float32x4_t\&, float32x4_t\&\)'} } */ + __arm_vreinterpretq_f32 (0); /* { dg-error {no matching function for call to '__arm_vreinterpretq_f32\(int\)'} } */ + __arm_vreinterpretq_f32 (f32); /* { dg-error {no matching function for call to '__arm_vreinterpretq_f32\(float32x4_t\&\)'} } */ + __arm_vreinterpretq_f32 (s8); +} diff --git a/gcc/testsuite/gcc.target/arm/mve/general-c/nomve_fp_1.c b/gcc/testsuite/gcc.target/arm/mve/general-c/nomve_fp_1.c new file mode 100644 index 00000000000..21c2af16a61 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/general-c/nomve_fp_1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* Do not use dg-add-options arm_v8_1m_mve, because this might expand to "", + which could imply mve+fp depending on the user settings. We want to make + sure the '+fp' extension is not enabled. */ +/* { dg-options "-mfpu=auto -march=armv8.1-m.main+mve" } */ + +#include + +void +foo (uint8x16_t v) +{ + vreinterpretq_f16 (v); /* { dg-error {ACLE function '__arm_vreinterpretq_f16_u8' requires ISA extension 'mve.fp'} } */ + /* { dg-message {note: you can enable mve.fp by using the command-line option '-march', or by using the 'target' attribute or pragma} "" {target *-*-*} .-1 } */ +} diff --git a/gcc/testsuite/gcc.target/arm/mve/general-c/vreinterpretq_1.c b/gcc/testsuite/gcc.target/arm/mve/general-c/vreinterpretq_1.c new file mode 100644 index 00000000000..0297bd50198 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/general-c/vreinterpretq_1.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ +/* { dg-add-options arm_v8_1m_mve_fp } */ + +#include + +void +f1 (int8x16_t s8, uint16x8_t u16, float32x4_t f32) +{ + __arm_vreinterpretq_s8 (); /* { dg-error {too few arguments to function '__arm_vreinterpretq_s8'} } */ + __arm_vreinterpretq_s8 (s8, s8); /* { dg-error {too many arguments to function '__arm_vreinterpretq_s8'} } */ + __arm_vreinterpretq_s8 (0); /* { dg-error {passing 'int' to argument 1 of '__arm_vreinterpretq_s8', which expects an MVE vector type} } */ + __arm_vreinterpretq_s8 (s8); /* { dg-error {'__arm_vreinterpretq_s8' has no form that takes 'int8x16_t' arguments} } */ + __arm_vreinterpretq_s8 (u16); + __arm_vreinterpretq_u16 (); /* { dg-error {too few arguments to function '__arm_vreinterpretq_u16'} } */ + __arm_vreinterpretq_u16 (u16, u16); /* { dg-error {too many arguments to function '__arm_vreinterpretq_u16'} } */ + __arm_vreinterpretq_u16 (0); /* { dg-error {passing 'int' to argument 1 of '__arm_vreinterpretq_u16', which expects an MVE vector type} } */ + __arm_vreinterpretq_u16 (u16); /* { dg-error {'__arm_vreinterpretq_u16' has no form that takes 'uint16x8_t' arguments} } */ + __arm_vreinterpretq_u16 (f32); + __arm_vreinterpretq_f32 (); /* { dg-error {too few arguments to function '__arm_vreinterpretq_f32'} } */ + __arm_vreinterpretq_f32 (f32, f32); /* { dg-error {too many arguments to function '__arm_vreinterpretq_f32'} } */ + __arm_vreinterpretq_f32 (0); /* { dg-error {passing 'int' to argument 1 of '__arm_vreinterpretq_f32', which expects an MVE vector type} } */ + __arm_vreinterpretq_f32 (f32); /* { dg-error {'__arm_vreinterpretq_f32' has no form that takes 'float32x4_t' arguments} } */ + __arm_vreinterpretq_f32 (s8); +} From patchwork Tue Apr 18 13:45:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67921 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E80C838708E0 for ; Tue, 18 Apr 2023 13:49:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E80C838708E0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825746; bh=Jr3nnJto0R2CNwKjaAI4+pKiXvseY8TCJwlfdVPmR94=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=KMmiylKPOR/JpsRLz1zkP3EAL2TebSFh/lCKbrul6wejOU8B0+/0qn+xlIiWXolBQ nUjVFjCXEtu+V942UScohdrdTZSrCjaUKlPXqiwEnt1LQFh76bfGIbW4VyVsgzn0H8 MjEB9KoesZBsysDGbs6fpiWCGxzgquvhaiEU7/C4= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2054.outbound.protection.outlook.com [40.107.8.54]) by sourceware.org (Postfix) with ESMTPS id DE0A3385694B for ; Tue, 18 Apr 2023 13:47:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DE0A3385694B Received: from DB9PR06CA0021.eurprd06.prod.outlook.com (2603:10a6:10:1db::26) by DU0PR08MB9725.eurprd08.prod.outlook.com (2603:10a6:10:447::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.30; Tue, 18 Apr 2023 13:47:33 +0000 Received: from DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:1db:cafe::f5) by DB9PR06CA0021.outlook.office365.com (2603:10a6:10:1db::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:33 +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 DBAEUR03FT004.mail.protection.outlook.com (100.127.142.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:32 +0000 Received: ("Tessian outbound 3570909035da:v136"); Tue, 18 Apr 2023 13:47:32 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: d2350143ff459a54 X-CR-MTA-TID: 64aa7808 Received: from 8b7a7f2d2d41.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7BE6C8B9-7019-4729-86CF-07D8B97A7C86.1; Tue, 18 Apr 2023 13:47:26 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8b7a7f2d2d41.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nvgC6leUuyso3ONnHXkvIA9WVqW2jBk0dA/7IFFWYxd5rqSQQayATqU+elb9yPEA80h8EY52QGiqZ3un1PZvNzg7L+qi4LCYiZRx7oGbSnIC0ig5U0IwfnXH+SJHREU9yiadbh/pYZStk+exuo73l3A4D/dZskRCH2ZwlvsbGRwCoZbSMg8590stF+A2yMDA5VQADeQRSiBue9WolBEb5v5ysZGQxEqPh0mygfEYJAATKWcV/jIH/Ab7husQygA0gQljHhpQ5hRwRsA6zpweQznGAoExTHNg7tGmAJ342nfGQXgu0fgQ/pk4Wh4l96coKwEOTMATlImXPPXXVwi9XQ== 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=Jr3nnJto0R2CNwKjaAI4+pKiXvseY8TCJwlfdVPmR94=; b=U9BmCoyY9NuCAgY44kf26bm0HEdz5phQLjIP+rCoTpGIxAyyXnJOuo1+YO1MyWF+mHQr7M68KfRScL0M6ivysUXVTIEsu5N9YT3wMbjZldgJnQVLjD5QRLIawsnwm1ZnGW0+PlzlDzq58+nXMip+KlWQRzWuPpGhKdfnhxDdVvrs4qrnXJVNMcrr3BYB8oL7x0l5pgpQge/moFYa+5bXIBgcBwevPmaRJMPQQC661ySuJkSiVuALFiIQiA1VpAofRHuVR4/rgh3f2772npF3t0rE/Tdw4NJT8QysDoA0cYCnWyV6UTyzEVCmze2dEo+OBRWaO9UFoa991MQ9aNtr2Q== 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 Received: from AS9PR04CA0046.eurprd04.prod.outlook.com (2603:10a6:20b:46a::26) by DB4PR08MB8151.eurprd08.prod.outlook.com (2603:10a6:10:381::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:10 +0000 Received: from AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46a:cafe::96) by AS9PR04CA0046.outlook.office365.com (2603:10a6:20b:46a::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:10 +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 AM7EUR03FT056.mail.protection.outlook.com (100.127.140.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:10 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:06 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:06 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 04/22] arm: [MVE intrinsics] Rework vuninitialized Date: Tue, 18 Apr 2023 15:45:50 +0200 Message-ID: <20230418134608.244751-5-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT056:EE_|DB4PR08MB8151:EE_|DBAEUR03FT004:EE_|DU0PR08MB9725:EE_ X-MS-Office365-Filtering-Correlation-Id: 113003b4-a0d0-4f32-6d98-08db401375ed 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: g3fH3zsGeElyJb5La5mc8Iupv9AHVGwsEXtXE9v9gYqTw4E0qVKEh3Gh5maHwXV6rTmbpgc/iTqX3keju+MPXLhvnFERaXDxvRTkpahnopPfoeUxXRjS0nRAngmZY8sjLbon1/g7zO9XvlI/4tCkhEzs5IdAq2zrfAdA+hAiEwJ0ZQOBxugOV9Fl/wCDC1YfRDAWp6aA+bOTWlXbt65aQtGMhMCKiKu9X6LzqcbyvBblWZnbgUU3wlz3Nkd9blZL1j726SdmMO02wvCnFLQhPneLXxia0MAiAZccoNVW6tTxfj2zruIYsyAspAcvkLjMnJf3k2azSeC7giGUnFTSWXS8ADhc2p/9V5jyMjp2BckpCpmfeHTVRdNDeYaAEb9cTUZ2SIFU8OymyNbly0dkb/RPpXdI7nU3NW+fEmdS//Wyp0OFygB+r6dVRIf4Sf0RX1AyjP8C9RzRIRcRDpI56S2NMLTSIBYpFu9Aoi1z2avjLmXgSOwOepPh6z2hlKRCtaDeYGx36UVEXBmLf7JdM+x5lszO87WurJZCa3tsr2vLI+04CburFZOcJ9mE2Jx7MeyKQsj/Suu6eu+kB44weid+ZdCsTciDeVkKHUPxAkTn071iB6NgjnHIc0LYFCy8h3fnQd5mX0dcd3hmp+C9nRu5ewtyKHXpBkm42RZVl22PDNugTkLNGLfk+d3YshZW4/YEH+YznobbYp32lOgBng== 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:(13230028)(4636009)(396003)(39850400004)(376002)(136003)(346002)(451199021)(46966006)(36840700001)(36756003)(82310400005)(86362001)(30864003)(2906002)(40480700001)(7696005)(2616005)(6666004)(186003)(36860700001)(47076005)(336012)(83380400001)(426003)(1076003)(26005)(316002)(4326008)(478600001)(70586007)(70206006)(81166007)(41300700001)(356005)(82740400003)(6636002)(110136005)(5660300002)(44832011)(8936002)(8676002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8151 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 08ef4b5e-db62-452a-c7c0-08db40136851 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pd0HzjXGbLXzD0oRa0dnB2S5qOnMAAlMhxvn3Vuel/tZFJCj77fTcQxe7sdaDLXgw+r8wppim88rEsSQAavk+TFkP4L5oSehip5vI8U/fJfbsLddyb5gt/NNk4wAroXBNqQ+n1MBo3z2jEtvIec4cpO58P43DWNf7tzZzl3bafx9ZZ4IJJwfrfpmiMUint0c/SajFLc0j/8sPZvue0lvlg9iQChF6DElY7C+fgs/IRwVp4BzHMRuUY2E5vOFiWE7clew+HqCqRZWD+LEn3KCEWlYp90BFQBfscKNUEbAfQ1DSXtYBLm+AL8nsbZ2Za/R/jAPa1lSbqBciT3bl33B+/hHVRHPxlSetWCkje4EfQY7IPBrSU96saDlA/UhdQrTOTs5S7X9JALEdfPAuGrnDC7eOlF4rPmkXeGuWoAamAHffu9fSOntDwbYB2zUODe8PBBS5LXLcFtF8Tws0SLTPHpV+v/CYEXcU3Fo5efxo39Limavge2jkBc6vTV4jfeiZkz0+acdsN3kGx5POyT4/yRdn8VCcTGtw1Vksb7nCSa6aSG9cM+lscp/z/PM8FIVZEi1+cvSsbDimxcsB69x7DtFuLxiSJOH7oCJg1mJQ0BavSTpUIfjarqJq43MFQfxQcM+8gR7AzXcmyziKP0+xw43ZVl+PCLXs6+lKezLv0HVyqjj1TxuqtR/iaWwEgV7prsTHoS811/bdNeSzY9Oug== 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:(13230028)(4636009)(136003)(346002)(396003)(39860400002)(376002)(451199021)(46966006)(36840700001)(40470700004)(86362001)(110136005)(478600001)(83380400001)(36756003)(36860700001)(47076005)(2616005)(40480700001)(336012)(26005)(40460700003)(1076003)(82740400003)(7696005)(6666004)(186003)(82310400005)(316002)(4326008)(81166007)(30864003)(70206006)(70586007)(41300700001)(2906002)(426003)(8936002)(8676002)(44832011)(5660300002)(6636002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:32.9951 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 113003b4-a0d0-4f32-6d98-08db401375ed 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: DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9725 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Implement vuninitialized using the new MVE builtins framework. We need to keep the overloaded __arm_vuninitializedq definitions because their resolution depends on the result type only, which is not currently supported by the resolver. 2022-09-08 Murray Steele Christophe Lyon gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (class vuninitializedq_impl): New. * config/arm/arm-mve-builtins-base.def (vuninitializedq): New. * config/arm/arm-mve-builtins-base.h (vuninitializedq): New declaration. * config/arm/arm-mve-builtins-shapes.cc (inherent): New. * config/arm/arm-mve-builtins-shapes.h (inherent): New declaration. * config/arm/arm_mve_types.h (__arm_vuninitializedq): Move to ... * config/arm/arm_mve.h (__arm_vuninitializedq): ... here. (__arm_vuninitializedq_u8): Remove. (__arm_vuninitializedq_u16): Remove. (__arm_vuninitializedq_u32): Remove. (__arm_vuninitializedq_u64): Remove. (__arm_vuninitializedq_s8): Remove. (__arm_vuninitializedq_s16): Remove. (__arm_vuninitializedq_s32): Remove. (__arm_vuninitializedq_s64): Remove. (__arm_vuninitializedq_f16): Remove. (__arm_vuninitializedq_f32): Remove. --- gcc/config/arm/arm-mve-builtins-base.cc | 14 ++ gcc/config/arm/arm-mve-builtins-base.def | 2 + gcc/config/arm/arm-mve-builtins-base.h | 1 + gcc/config/arm/arm-mve-builtins-shapes.cc | 16 ++ gcc/config/arm/arm-mve-builtins-shapes.h | 7 +- gcc/config/arm/arm_mve.h | 73 ++++++++++ gcc/config/arm/arm_mve_types.h | 169 ---------------------- 7 files changed, 112 insertions(+), 170 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index ad8d500afc6..02a3b23865c 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -65,10 +65,24 @@ class vreinterpretq_impl : public quiet } }; +/* Implements vuninitializedq_* intrinsics. */ +class vuninitializedq_impl : public quiet +{ + + rtx + expand (function_expander &e) const override + { + rtx target = e.get_reg_target (); + emit_clobber (copy_rtx (target)); + return target; + } +}; + } /* end anonymous namespace */ namespace arm_mve { FUNCTION (vreinterpretq, vreinterpretq_impl,) +FUNCTION (vuninitializedq, vuninitializedq_impl,) } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index 5c0c1b9cee7..f669642a259 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -19,8 +19,10 @@ #define REQUIRES_FLOAT false DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none) +DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none) #undef REQUIRES_FLOAT #define REQUIRES_FLOAT true DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_float, none) +DEF_MVE_FUNCTION (vuninitializedq, inherent, all_float, none) #undef REQUIRES_FLOAT diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index 60e7bd24eda..ec309cbe572 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -24,6 +24,7 @@ namespace arm_mve { namespace functions { extern const function_base *const vreinterpretq; +extern const function_base *const vuninitializedq; } /* end namespace arm_mve::functions */ } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index d0da0ffef91..ce476aa196e 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -338,6 +338,22 @@ struct overloaded_base : public function_shape } }; +/* [xN]_t vfoo_t0(). + + Example: vuninitializedq. + int8x16_t [__arm_]vuninitializedq_s8(void) + int8x16_t [__arm_]vuninitializedq(int8x16_t t) */ +struct inherent_def : public nonoverloaded_base +{ + void + build (function_builder &b, const function_group_info &group, + bool preserve_user_namespace) const override + { + build_all (b, "t0", group, MODE_none, preserve_user_namespace); + } +}; +SHAPE (inherent) + /* _t foo_t0[_t1](_t) where the target type must be specified explicitly but the source diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h index 04d19a02890..a491369425c 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.h +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -25,11 +25,16 @@ namespace arm_mve /* The naming convention is: - to use names like "unary" etc. if the rules are somewhat generic, - especially if there are no ranges involved. */ + especially if there are no ranges involved. + + Also: + + - "inherent" means that the function takes no arguments. */ namespace shapes { + extern const function_shape *const inherent; extern const function_shape *const unary_convert; } /* end namespace arm_mve::shapes */ diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 7688b5a7e53..5dc5ecef134 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -35382,6 +35382,79 @@ __arm_vgetq_lane (float32x4_t __a, const int __idx) } #endif /* MVE Floating point. */ + +__extension__ extern __inline uint8x16_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (uint8x16_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_u8 (); +} + +__extension__ extern __inline uint16x8_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (uint16x8_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_u16 (); +} + +__extension__ extern __inline uint32x4_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (uint32x4_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_u32 (); +} + +__extension__ extern __inline uint64x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (uint64x2_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_u64 (); +} + +__extension__ extern __inline int8x16_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (int8x16_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_s8 (); +} + +__extension__ extern __inline int16x8_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (int16x8_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_s16 (); +} + +__extension__ extern __inline int32x4_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (int32x4_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_s32 (); +} + +__extension__ extern __inline int64x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (int64x2_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_s64 (); +} + +#if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */ +__extension__ extern __inline float16x8_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (float16x8_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_f16 (); +} + +__extension__ extern __inline float32x4_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +__arm_vuninitializedq (float32x4_t /* __v ATTRIBUTE UNUSED */) +{ + return __arm_vuninitializedq_f32 (); +} +#endif /* __ARM_FEATURE_MVE & 2 (MVE floating point) */ + #else enum { __ARM_mve_type_fp_n = 1, diff --git a/gcc/config/arm/arm_mve_types.h b/gcc/config/arm/arm_mve_types.h index ae2591faa03..32942e51a74 100644 --- a/gcc/config/arm/arm_mve_types.h +++ b/gcc/config/arm/arm_mve_types.h @@ -29,173 +29,4 @@ typedef float float32_t; #pragma GCC arm "arm_mve_types.h" -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u8 (void) -{ - uint8x16_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u16 (void) -{ - uint16x8_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u32 (void) -{ - uint32x4_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_u64 (void) -{ - uint64x2_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s8 (void) -{ - int8x16_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s16 (void) -{ - int16x8_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s32 (void) -{ - int32x4_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_s64 (void) -{ - int64x2_t __uninit; - __asm__ ("": "=w"(__uninit)); - return __uninit; -} - -#if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */ - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_f16 (void) -{ - float16x8_t __uninit; - __asm__ ("": "=w" (__uninit)); - return __uninit; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq_f32 (void) -{ - float32x4_t __uninit; - __asm__ ("": "=w" (__uninit)); - return __uninit; -} - -#endif - -#ifdef __cplusplus - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (uint8x16_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_u8 (); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (uint16x8_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_u16 (); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (uint32x4_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_u32 (); -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (uint64x2_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_u64 (); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (int8x16_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_s8 (); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (int16x8_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_s16 (); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (int32x4_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_s32 (); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (int64x2_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_s64 (); -} - -#if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */ -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (float16x8_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_f16 (); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vuninitializedq (float32x4_t /* __v ATTRIBUTE UNUSED */) -{ - return __arm_vuninitializedq_f32 (); -} -#endif /* __ARM_FEATURE_MVE & 2 (MVE floating point) */ -#endif /* __cplusplus */ - #endif /* _GCC_ARM_MVE_H. */ From patchwork Tue Apr 18 13:45:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67922 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CFE93383302A for ; Tue, 18 Apr 2023 13:49:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CFE93383302A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825769; bh=SOlJw5YduTgES+zEBpr0eHGqnaHZpNWqLV+RJ6aRH7s=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=C6u6sir5c/MxYFpB/pftpFUyZYYKjzWVBTIzmegaTRbaTARE10wdkimVMHDO1+1OY 9yb9j3bxhLT0z0acU83UOU5N4vt0h3FjmmMjGArY5uNORDREfqzRpcYygOVaoN91ic YxkEp2IkF99PBeNr758xZGY0nLlAjBUVWKjf9mlA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2062.outbound.protection.outlook.com [40.107.22.62]) by sourceware.org (Postfix) with ESMTPS id 1E01B3857711 for ; Tue, 18 Apr 2023 13:47:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1E01B3857711 Received: from AM6P194CA0028.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::41) by AM0PR08MB5489.eurprd08.prod.outlook.com (2603:10a6:208:18e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:35 +0000 Received: from AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:90:cafe::bc) by AM6P194CA0028.outlook.office365.com (2603:10a6:209:90::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:35 +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 AM7EUR03FT058.mail.protection.outlook.com (100.127.140.247) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:35 +0000 Received: ("Tessian outbound 3a01b65b5aad:v136"); Tue, 18 Apr 2023 13:47:35 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 82d221db7da05c2e X-CR-MTA-TID: 64aa7808 Received: from b8df48cbbd4e.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id B8D722B3-3AF7-4A4A-8E37-1F4FE5D6C743.1; Tue, 18 Apr 2023 13:47:23 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b8df48cbbd4e.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JRRWPsZBWKp+oVuk0BKK8EFKkX2RIpWksVsdxowAph8xRZYuRyD50sxh2op3/Nwe0InbGLd8HRID57fT3IgB4tBfNt02jznEc05eV4aPY9od0uLeFvZMng8veJUQAponQA/PQecAtNUWJ9YXIhPerQeuCZb2LJ2ARMyksmR1dmVldcSfsmAVCewLvosr60DM/NSPpf/K+1JmoaMGueWjYgpbNqP107TxTax2ljZ7sRdx2GfAm/FrWtU5ZzTYCMLrJOgOoJ/zrFxILNJ4MvvUifI8ILuv/06Z5fDlPt3yzSwTE14zuNBlJuuLnPpWVxb9xb4HDyT2wquO3235nt/9sA== 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=SOlJw5YduTgES+zEBpr0eHGqnaHZpNWqLV+RJ6aRH7s=; b=BK8gaAbvA2+qg1aqLrNM6J3h/InQH1vcjjs5Lo3914naSAYcZhcnxkLJu/mDUdCYTw5jU1oreT1IrpLpROaIpBTXlI4buYTP+MGqDv2W+fHJusxmQRXm1AMBb268S3+prRXfTn953goL8AgvoYp1Kx+ht4qo1p07fq03VVaeQ7NZy41CeTf8DvvTn88s7VwqcEmxV8hN6VVEdSw1RC8X7bxfJzhEOqT160+i/mKhb4wObC5M30NxdE2e1QJgyyeNMjCUO/ARwLSeP4cxwqvma781EkDhpI255urGnakGeEfDZDNNKbk8mD4H9ImbiUMfMIznKGrJTnSAnu8wHRaFnQ== 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 Received: from AM5PR0502CA0023.eurprd05.prod.outlook.com (2603:10a6:203:91::33) by AS4PR08MB7501.eurprd08.prod.outlook.com (2603:10a6:20b:4e5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:11 +0000 Received: from AM7EUR03FT062.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:91:cafe::a9) by AM5PR0502CA0023.outlook.office365.com (2603:10a6:203:91::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.46 via Frontend Transport; Tue, 18 Apr 2023 13:47:11 +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 AM7EUR03FT062.mail.protection.outlook.com (100.127.140.99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.16 via Frontend Transport; Tue, 18 Apr 2023 13:47:10 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:07 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:07 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 05/22] arm: [MVE intrinsics] add binary_opt_n shape Date: Tue, 18 Apr 2023 15:45:51 +0200 Message-ID: <20230418134608.244751-6-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT062:EE_|AS4PR08MB7501:EE_|AM7EUR03FT058:EE_|AM0PR08MB5489:EE_ X-MS-Office365-Filtering-Correlation-Id: 43a5917e-892e-48dc-6790-08db401377a5 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: t6FjYL3RNAfj3Q4ytbNxijr1yf0nRDvlO/mPiUqEcUV9RKDgBXoL38mVcwLcnEy7mTeapZGMCXRJlE3O2i2mUVMLt3tSyaduSDmG+67+hsxEV2lasJouIJxhzUUSAGqNAE0sWUSpJc5naMRHnuOISsZWK3TQ0mCETUmQK/yg2hZYY3bW4hgqYhJBc9pOOamWB7e4bTx6eSLXdkBs4tsKjj6yR1/t0L1XAsR3H2hsorDWxpJPRerFH6F4PxxTercicn96j5C/8B1AmCwZEPc7tfGaZ2UiTnvBaxanYr5+YIoMAY+eX8QOboBftx0/qF8tROQg3Q+0VJVAiiVkyUwHjLDmcqgBg2hJ8ckzWQi0oeApWURD0pc45G6KURmvXIzCKPcAmWTvC9ibR4+jSVzc/uLMtp0TXPMQkGpnA7p6PCp4w0HfFofihiHZdsOILnFAJIfM3rmjkxBAxDk2OF5+BKVkhGHTkQsck4/6kWWA+7tnUo/To9dsto4nPoJ8xVpUeB2Ouc/+nB3EAyv08fCT2Oeyw5kOCOOScMjPOSGBjZJ7NBJdZMypEkMGLNxLkkH5IZINWJCYIa1BGWW/WBm2CnxcGY3drZRMpQxpJs3o/OEl2ZdvFJcqbF7SOqa8pizM6pv+dGbv1NHwMMWv/ugCLdH804sjdzlSiZ4Do1o5glenA1hVT2iAuVgEoJc/QGNQ+FU8ed1XVDYaZBU3LcY9Xg== 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:(13230028)(4636009)(136003)(346002)(396003)(39860400002)(376002)(451199021)(36840700001)(46966006)(7696005)(6666004)(478600001)(110136005)(86362001)(36860700001)(36756003)(47076005)(2616005)(426003)(336012)(40480700001)(186003)(1076003)(26005)(82740400003)(82310400005)(81166007)(356005)(316002)(4326008)(70206006)(70586007)(2906002)(44832011)(8676002)(8936002)(5660300002)(41300700001)(6636002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7501 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 90cc76e5-d6fa-4e69-df52-08db401368d1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v/TwspBCTYbnoG0zo8mwE9iM07UxryqMltsUA6wrkcQN3tna1Z4pPoRFAtiRACmQq43ixoTDH7pgHKpxf8YlhjAoZ1/uWD3Ikxnd1x/kbMX66NTV3+SsZ8KFr/kYNR7YGso4ZxFDDDalN/jhiE8vB6d36ZNnh78p7O4WgyLCMkHoC5ykNSkVWqRpihwjyvofTgx0K4DXmR0j1Xmf3SaW+Npim61euTAChg1PFnfpRp46yNi5A2Pq4Yist6m6TokdT/kTxNEcNN4csV2JGlwizywMpBr8ePuUN/iPJvCqSjWoeV9qWU4WMd3FKwILN/sPlpVZFoBXHXlXzexm6+bt63lVx9B+sMclFbvuwh/fXdVyaDKh7GjUiyA316Mr9EF4QCVNTX4tpSXMXc1KdlDp5ccIXRZU4MfzSyWONRte+noIHV4t2ZjcUMg3pjR0mvkeAsbzYyAFm2SxgrvWPAgSpRxoWPk8qDnIopbzhsZosGyKJ33nHXYsqNbvxioOiTU3hAGx1VF5HW5YDWObhzXtiBmBAjqsu1cPM0lzNqSreyWxZvLzLR4k0LvBxX+c2hZUNn/Jbk5f8a23zfzUQS8MhtAepmG7K2lPdraHi4XkoR4ciHpAb3soDchfu6zClhmThf5aHCmTR4Ki2Y/EdNSzAq+BD0QhkHAOSs46xOSPc6E56Wsd56bUPhvr4YqFvbdxKVaqui77VV4DcZ96PAXNPQ== 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:(13230028)(4636009)(346002)(136003)(376002)(396003)(39860400002)(451199021)(36840700001)(40470700004)(46966006)(44832011)(5660300002)(8936002)(4326008)(70206006)(70586007)(2906002)(8676002)(41300700001)(316002)(6636002)(478600001)(110136005)(6666004)(7696005)(1076003)(26005)(186003)(36860700001)(2616005)(47076005)(426003)(336012)(81166007)(82310400005)(40460700003)(36756003)(40480700001)(82740400003)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:35.8317 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 43a5917e-892e-48dc-6790-08db401377a5 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: AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5489 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch adds the binary_opt_n shape description. gcc/ * config/arm/arm-mve-builtins-shapes.cc (binary_opt_n): New. * config/arm/arm-mve-builtins-shapes.h (binary_opt_n): New. --- gcc/config/arm/arm-mve-builtins-shapes.cc | 32 +++++++++++++++++++++++ gcc/config/arm/arm-mve-builtins-shapes.h | 1 + 2 files changed, 33 insertions(+) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index ce476aa196e..033b304060a 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -338,6 +338,38 @@ struct overloaded_base : public function_shape } }; +/* _t vfoo[_t0](_t, _t) + _t vfoo[_n_t0](_t, _t) + + i.e. the standard shape for binary operations that operate on + uniform types. + + Example: vaddq. + int8x16_t [__arm_]vaddq[_s8](int8x16_t a, int8x16_t b) + int8x16_t [__arm_]vaddq[_n_s8](int8x16_t a, int8_t b) + int8x16_t [__arm_]vaddq_m[_s8](int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) + int8x16_t [__arm_]vaddq_m[_n_s8](int8x16_t inactive, int8x16_t a, int8_t b, mve_pred16_t p) + int8x16_t [__arm_]vaddq_x[_s8](int8x16_t a, int8x16_t b, mve_pred16_t p) + int8x16_t [__arm_]vaddq_x[_n_s8](int8x16_t a, int8_t b, mve_pred16_t p) */ +struct binary_opt_n_def : public overloaded_base<0> +{ + void + build (function_builder &b, const function_group_info &group, + bool preserve_user_namespace) const override + { + b.add_overloaded_functions (group, MODE_none, preserve_user_namespace); + build_all (b, "v0,v0,v0", group, MODE_none, preserve_user_namespace); + build_all (b, "v0,v0,s0", group, MODE_n, preserve_user_namespace); + } + + tree + resolve (function_resolver &r) const override + { + return r.resolve_uniform_opt_n (2); + } +}; +SHAPE (binary_opt_n) + /* [xN]_t vfoo_t0(). Example: vuninitializedq. diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h index a491369425c..43798fdde57 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.h +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -34,6 +34,7 @@ namespace arm_mve namespace shapes { + extern const function_shape *const binary_opt_n; extern const function_shape *const inherent; extern const function_shape *const unary_convert; From patchwork Tue Apr 18 13:45:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67931 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 22547380DBFA for ; Tue, 18 Apr 2023 13:51:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 22547380DBFA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825913; bh=/eo8WNYc6aDLebaDLjRcacYl0ayufQFTlAO9DiAugwE=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=ehSZh0Yl7sRHAMstbuBpVf7OMbD3Z/OVgrY/WDa4hUmxVlFqasWHN8Hg7xpt/Q+KU 6ELUMpuaBgzT/M4ncbatUuSkYtXUPQAlFES+GuOEgfJqUbiZBu0/MCEU5br9yzZXJt Xwmr2RgmQAt4Fmqu9jGclV33Pbk32MIKepspLxUE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2087.outbound.protection.outlook.com [40.107.105.87]) by sourceware.org (Postfix) with ESMTPS id 170AD3857715 for ; Tue, 18 Apr 2023 13:47:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 170AD3857715 Received: from DUZPR01CA0284.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b7::22) by AS8PR08MB8039.eurprd08.prod.outlook.com (2603:10a6:20b:549::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.30; Tue, 18 Apr 2023 13:47:31 +0000 Received: from DBAEUR03FT055.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4b7:cafe::7b) by DUZPR01CA0284.outlook.office365.com (2603:10a6:10:4b7::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:31 +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 DBAEUR03FT055.mail.protection.outlook.com (100.127.142.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:31 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Tue, 18 Apr 2023 13:47:31 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 2ff407388bc8d40a X-CR-MTA-TID: 64aa7808 Received: from 001ccfbc2b27.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 0FD07722-0403-4483-9A62-A8A5169E2264.1; Tue, 18 Apr 2023 13:47:24 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 001ccfbc2b27.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e+l0orgbLKLq2J0qCUeawyrTi07qawmt+rEuyh+IENuWVRehwrFpCBk7Y/lRdEzq7v1Yd69teZkM81VXWrrvw43nI8+HUHEZ2OME9Ko2XF9aN0UfBlKc88RZ4SWHST8N1vwpdkyUG6vw9szxsC84ONauq6W72kHXSdhGBx70UfNFM/bfVTn3N1p/TbPJhudbgElkVImBENJrGul18TpmtHTqW3b2VAGuKOClaHfE5dt/d8ES46vYSpRSvv1zcuYBR4TPicZo2LGYC24TjQQLNBTW4TEkGa8/+IkUJnOL4RPzSoxNWLFDg5+RFYOgwdvt76IfT4bqbOrJXy+ukYne1Q== 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=/eo8WNYc6aDLebaDLjRcacYl0ayufQFTlAO9DiAugwE=; b=lTQmKBqSeA0SYnXkBUpCbnIYphC/lv23JNKpyzQBb0M0JF48VJC+hUUHUkLAo14k9rUM3Wcw5MB0tqazbCuEmZUb782ZFZs9gjsRWYYG0HLAV826D0K9VKNVnztgIDdz52c/sZYN4Tuv7mk5CK9sCQZfUg+N33OhtZyiqrW8lrH+Vbn2i6iC/KMkQVBS+II3AOKDPKUz/mQ+UsL1hDNEEj1Ei8guXGmw/62k48G+9F5/lAhzF6ohukLbatbMaOz+9r31qppyFjo45WCwF8C8dTFcKlZwxT8NdsfpFIkmKsSmzMjeA2vwNgGNbvzgi3V81jZiW5ezZqvtjCxg4YZHpw== 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 Received: from AM5PR0502CA0014.eurprd05.prod.outlook.com (2603:10a6:203:91::24) by AS8PR08MB6328.eurprd08.prod.outlook.com (2603:10a6:20b:33e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:12 +0000 Received: from AM7EUR03FT062.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:91:cafe::4f) by AM5PR0502CA0014.outlook.office365.com (2603:10a6:203:91::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.46 via Frontend Transport; Tue, 18 Apr 2023 13:47:12 +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 AM7EUR03FT062.mail.protection.outlook.com (100.127.140.99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.16 via Frontend Transport; Tue, 18 Apr 2023 13:47:12 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:11 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:11 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 06/22] arm: [MVE intrinsics] add unspec_based_mve_function_exact_insn Date: Tue, 18 Apr 2023 15:45:52 +0200 Message-ID: <20230418134608.244751-7-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT062:EE_|AS8PR08MB6328:EE_|DBAEUR03FT055:EE_|AS8PR08MB8039:EE_ X-MS-Office365-Filtering-Correlation-Id: 16e517d3-56aa-412f-0861-08db40137529 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: 1LeVsjmP3sFx0J2Fa5XBzIUnNsTjawjHCxzNQeXp9x44TFTiz5wPOhxxuM4teB6RxjIrYVopU9eSxrDIibX6AU3HE5xOMm/Scj5ACIBIKxwH5NkbTwM91lZTOLw/Zklr3IMR10wTyExuWVCHfo0qI7fIqEnnPZ9wY83I2z6F6wS7NyI49J2ZH5upmEE/C/xktEccFrHqVj2ExOFwhcV3NyAH35cjHisiBFZz7PhLmupRiu82uh8XX6i/x3JaI3xr36yusK9zeGaZHWZJfEdB3REoK6se39LE61R3BCKorOPQRdilbZhvWdvWKf+YPinlySlwU6kMktkdtM6aixplDdBHThnGnONazlj9bUfmoMQFp4EQ7m8nCh/4xI5P4HwhgCmAszdm8L6YyKonelFdmKiIKDNwWDKpxTi2OORaa3ZV9cJ5pc0TodTnu7lFhVPHRfrOgRLKwmks0dQ9tkqzSgsldBKy7HY0y36NR1g2gLA/jUC31/aRgFODV859fNjNpeDTVpBp/d/hDbMBJ4tnw8aztPPjkP5AcqQO/ezC/aGYpxB2+4hMidP1DifRhzhJUHFWfyu6iV12kx9Rs4bTFBgl71z937qQDeynxEswAcmBaxTBdmsZXk/M7z4tWSnc6JH1qC0nvnwo+ilWqwRZc9uW3XbEdKTSGWR3lyKqE7QLXiPjK4QOwcqir5U/D8WLnl9oHDyxTAY3vBiaGuN2CA== 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:(13230028)(4636009)(346002)(376002)(136003)(396003)(39860400002)(451199021)(46966006)(36840700001)(186003)(8676002)(8936002)(7696005)(36756003)(26005)(1076003)(2906002)(44832011)(40480700001)(5660300002)(82310400005)(316002)(478600001)(86362001)(4326008)(70206006)(70586007)(6636002)(110136005)(82740400003)(81166007)(2616005)(6666004)(336012)(426003)(36860700001)(356005)(47076005)(41300700001)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6328 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT055.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 40884e71-31a1-4e7b-ccf5-08db401369e8 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cD/f2H4lryKpQBAfTXsStyD0xakDJCZaOp+yx9gWy2rNQvsCH91iIvCSDf0jYpnuzfdWdT6N4ymzIZ2sTBx8ygpL3+StRiV+VSl6pLvpaZJN9eK6DWUwqIcFB/IsXyyFQKkBkmybIIlMDEj/VLuK4bwRyxGCT5MYFI/mKPnmKCC5niuhu9wzG8U+B1abJR52YrCZdhmtj2ousOc0GEvxAIiHes+FmGuvgJtG3Ca/x44k6vaBYD/A+kOyCqN5x1o6QgY66aEyW2mZf0FFzOJuMPp9fWF3aWCaJT9oAfpz3VZDMeHZla1JKUj6TTz+0fjQFz6KAtgKeRJ24AQTcnGjSAv5Q+GWK84RqkjZFQ1zAxnN8R6PJu5QTWtWSzrYixjkhi0FHhlhFxXGLowDweZn39BQCrEfH4HlA4HKFWm7XsrI0iehQI5rGGDCK5yr55VF3hm585ymx38USg8Nt7C04MxamDVuBBeMWP/8VWeWpXrop8K98UOBMftGB+L8RGkc1dIsa24fFP48jdO396pPqbt+gkxQK62nGyx2I6pKIfYa5n6RmcHW7QcXG9cdlO0pY3X+rdJCGUClG0kvWaPnP1fLztITK1TEknpFb4HxRZBBrhtZa2U1Jlw0l45riI9DgTwsVCOyDqKZd4lvFy5+rBSn34hfsuC7QmxPXGcFWjlYOVr/+z0MWXZ/l78Bv+mdlvTX0Ver9sZ+DcFwD20k9g== 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:(13230028)(4636009)(346002)(376002)(39860400002)(396003)(136003)(451199021)(40470700004)(36840700001)(46966006)(8676002)(8936002)(41300700001)(5660300002)(44832011)(81166007)(2906002)(4326008)(316002)(70206006)(70586007)(6636002)(426003)(110136005)(86362001)(478600001)(82740400003)(6666004)(7696005)(40460700003)(186003)(82310400005)(1076003)(36756003)(40480700001)(336012)(26005)(36860700001)(2616005)(47076005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:31.7080 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 16e517d3-56aa-412f-0861-08db40137529 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: DBAEUR03FT055.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB8039 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Introduce a function that will be used to build intrinsics which use RTX codes for the non-predicated, no-mode version, and UNSPECS otherwise. 2022-09-08 Christophe Lyon gcc/ChangeLog: * config/arm/arm-mve-builtins-functions.h (class unspec_based_mve_function_base): New. (class unspec_based_mve_function_exact_insn): New. --- gcc/config/arm/arm-mve-builtins-functions.h | 186 ++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/gcc/config/arm/arm-mve-builtins-functions.h b/gcc/config/arm/arm-mve-builtins-functions.h index dff01999bcd..6d992b270b0 100644 --- a/gcc/config/arm/arm-mve-builtins-functions.h +++ b/gcc/config/arm/arm-mve-builtins-functions.h @@ -39,6 +39,192 @@ public: } }; +/* An incomplete function_base for functions that have an associated + rtx_code for signed integers, unsigned integers and floating-point + values for the non-predicated, non-suffixed intrinsic, and unspec + codes, with separate codes for signed integers, unsigned integers + and floating-point values. The class simply records information + about the mapping for derived classes to use. */ +class unspec_based_mve_function_base : public function_base +{ +public: + CONSTEXPR unspec_based_mve_function_base (rtx_code code_for_sint, + rtx_code code_for_uint, + rtx_code code_for_fp, + int unspec_for_n_sint, + int unspec_for_n_uint, + int unspec_for_n_fp, + int unspec_for_m_sint, + int unspec_for_m_uint, + int unspec_for_m_fp, + int unspec_for_m_n_sint, + int unspec_for_m_n_uint, + int unspec_for_m_n_fp) + : m_code_for_sint (code_for_sint), + m_code_for_uint (code_for_uint), + m_code_for_fp (code_for_fp), + m_unspec_for_n_sint (unspec_for_n_sint), + m_unspec_for_n_uint (unspec_for_n_uint), + m_unspec_for_n_fp (unspec_for_n_fp), + m_unspec_for_m_sint (unspec_for_m_sint), + m_unspec_for_m_uint (unspec_for_m_uint), + m_unspec_for_m_fp (unspec_for_m_fp), + m_unspec_for_m_n_sint (unspec_for_m_n_sint), + m_unspec_for_m_n_uint (unspec_for_m_n_uint), + m_unspec_for_m_n_fp (unspec_for_m_n_fp) + {} + + /* The rtx code to use for signed, unsigned integers and + floating-point values respectively. */ + rtx_code m_code_for_sint; + rtx_code m_code_for_uint; + rtx_code m_code_for_fp; + + /* The unspec code associated with signed-integer, unsigned-integer + and floating-point operations respectively. It covers the cases + with the _n suffix, and/or the _m predicate. */ + int m_unspec_for_n_sint; + int m_unspec_for_n_uint; + int m_unspec_for_n_fp; + int m_unspec_for_m_sint; + int m_unspec_for_m_uint; + int m_unspec_for_m_fp; + int m_unspec_for_m_n_sint; + int m_unspec_for_m_n_uint; + int m_unspec_for_m_n_fp; +}; + +/* Map the function directly to CODE (UNSPEC, M) where M is the vector + mode associated with type suffix 0, except when there is no + predicate and no _n suffix, in which case we use the appropriate + rtx_code. This is useful when the basic operation is mapped to a + standard RTX code and all other versions use different unspecs. */ +class unspec_based_mve_function_exact_insn : public unspec_based_mve_function_base +{ +public: + CONSTEXPR unspec_based_mve_function_exact_insn (rtx_code code_for_sint, + rtx_code code_for_uint, + rtx_code code_for_fp, + int unspec_for_n_sint, + int unspec_for_n_uint, + int unspec_for_n_fp, + int unspec_for_m_sint, + int unspec_for_m_uint, + int unspec_for_m_fp, + int unspec_for_m_n_sint, + int unspec_for_m_n_uint, + int unspec_for_m_n_fp) + : unspec_based_mve_function_base (code_for_sint, + code_for_uint, + code_for_fp, + unspec_for_n_sint, + unspec_for_n_uint, + unspec_for_n_fp, + unspec_for_m_sint, + unspec_for_m_uint, + unspec_for_m_fp, + unspec_for_m_n_sint, + unspec_for_m_n_uint, + unspec_for_m_n_fp) + {} + + rtx + expand (function_expander &e) const override + { + /* No suffix, no predicate, use the right RTX code. */ + if ((e.mode_suffix_id != MODE_n) + && (e.pred == PRED_none)) + return e.map_to_rtx_codes (m_code_for_sint, m_code_for_uint, + m_code_for_fp); + + insn_code code; + switch (e.pred) + { + case PRED_none: + if (e.mode_suffix_id == MODE_n) + /* No predicate, _n suffix. */ + { + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_n (m_unspec_for_n_uint, m_unspec_for_n_uint, e.vector_mode (0)); + else + code = code_for_mve_q_n (m_unspec_for_n_sint, m_unspec_for_n_sint, e.vector_mode (0)); + else + code = code_for_mve_q_n_f (m_unspec_for_n_fp, e.vector_mode (0)); + + return e.use_exact_insn (code); + } + gcc_unreachable (); + break; + + case PRED_m: + switch (e.mode_suffix_id) + { + case MODE_none: + /* No suffix, "m" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m (m_unspec_for_m_uint, m_unspec_for_m_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m (m_unspec_for_m_sint, m_unspec_for_m_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_f (m_unspec_for_m_fp, e.vector_mode (0)); + break; + + case MODE_n: + /* _n suffix, "m" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m_n (m_unspec_for_m_n_uint, m_unspec_for_m_n_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n (m_unspec_for_m_n_sint, m_unspec_for_m_n_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n_f (m_unspec_for_m_n_fp, e.vector_mode (0)); + break; + + default: + gcc_unreachable (); + } + return e.use_cond_insn (code, 0); + + case PRED_x: + switch (e.mode_suffix_id) + { + case MODE_none: + /* No suffix, "x" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m (m_unspec_for_m_uint, m_unspec_for_m_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m (m_unspec_for_m_sint, m_unspec_for_m_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_f (m_unspec_for_m_fp, e.vector_mode (0)); + break; + + case MODE_n: + /* _n suffix, "x" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m_n (m_unspec_for_m_n_uint, m_unspec_for_m_n_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n (m_unspec_for_m_n_sint, m_unspec_for_m_n_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n_f (m_unspec_for_m_n_fp, e.vector_mode (0)); + break; + + default: + gcc_unreachable (); + } + return e.use_pred_x_insn (code); + + default: + gcc_unreachable (); + } + + gcc_unreachable (); + } +}; + } /* end namespace arm_mve */ /* Declare the global function base NAME, creating it from an instance From patchwork Tue Apr 18 13:45:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67923 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C1ECE3882038 for ; Tue, 18 Apr 2023 13:49:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C1ECE3882038 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825790; bh=hS/lQQRYOTONRibJi87yGr16nw2VLTdVypGJUMIOFDI=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=kaFHFA61DA+ZtL9lmtBo87CE4vRW0bNlzimhGhWPRyJH2VjlTfBk2ovVFEWfA6p6X HSlCS/y4HFxJJKUoarxdx6X+CAqaaBX7GswPSaz1li9s2rqI5E9wqxRlX/efYXGKLf ejC2mBPOR4NoN9eqdaH2tCDlA0B4AJ6fR1FRRCkM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2068.outbound.protection.outlook.com [40.107.21.68]) by sourceware.org (Postfix) with ESMTPS id 4D58E385771A for ; Tue, 18 Apr 2023 13:47:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4D58E385771A Received: from DUZPR01CA0093.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bb::21) by DU0PR08MB9821.eurprd08.prod.outlook.com (2603:10a6:10:446::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:22 +0000 Received: from DBAEUR03FT064.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4bb:cafe::b0) by DUZPR01CA0093.outlook.office365.com (2603:10a6:10:4bb::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +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 DBAEUR03FT064.mail.protection.outlook.com (100.127.143.3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +0000 Received: ("Tessian outbound 3a01b65b5aad:v136"); Tue, 18 Apr 2023 13:47:22 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: a7e14d427514fdd7 X-CR-MTA-TID: 64aa7808 Received: from 936fb613a4f7.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id CD20853D-8877-4B4F-8582-97C99DB7D9BF.1; Tue, 18 Apr 2023 13:47:16 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 936fb613a4f7.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m/jdB0rhoNKs2iCYFpgj3+yhvLJ341RfXM5ELG69je4rJBviEd/ooF0v2sb5dzKxoogIIh4l3js3HxgxCqXslxFWazfpmrFO86TkJvBWjHLILCQbuhUp4u5Xhf122iZlq1a846Ye7Hi1UwJIzrQgF/+dpoo1KgaDcpatynrRd5IOwYYD9y58l2bNYBKqnd04qyqliJzYRMyPcMMHVXG60J18S5qTUNnoMApxUyaUHgDon8e+a0CVTKrZ3ut0Kb/Pe9JFrgJiZYggkWqjh6UiShUbiMcMO7R5quoJa/Ropze0QZcCCeMkxR5mNyL1d2fbrIZTYGrHlK94v4ir+GmwEQ== 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=hS/lQQRYOTONRibJi87yGr16nw2VLTdVypGJUMIOFDI=; b=flRrh/eCSP/khIadjtoCS8SikkAroxDtdFdA18GsNRQljIWYT5ZuW1mip8udhRqJNht6jUpklQZsm3hclnJwNICJhV3szj8BdcpeH/k4HNHNczkHoyy+hxzpdAhKxwprfgz3V4/N0MX+w2Uxrjk5G4SHADYLkKk9XS5Id7BaoG5u+HnBLcCbH43hAHKZpECd45QNCt+ymDy5EUbSZ1d4BvUAbz7aTHwmi2ETXlBkgD4kEfSqRc23i+4+9VYNDxMwSIoTxlDZusDCfqtSObBpFUweDUEoekELfxwotOQWXq1hvX5dYS26AtB6azAyLXG4BB9D0LiweuGmlJNOKBfZPQ== 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 Received: from AM5PR0502CA0020.eurprd05.prod.outlook.com (2603:10a6:203:91::30) by PAVPR08MB8845.eurprd08.prod.outlook.com (2603:10a6:102:2ff::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:13 +0000 Received: from AM7EUR03FT062.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:91:cafe::26) by AM5PR0502CA0020.outlook.office365.com (2603:10a6:203:91::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.46 via Frontend Transport; Tue, 18 Apr 2023 13:47:13 +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 AM7EUR03FT062.mail.protection.outlook.com (100.127.140.99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.16 via Frontend Transport; Tue, 18 Apr 2023 13:47:13 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:12 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:12 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 07/22] arm: [MVE intrinsics] factorize vadd vsubq vmulq Date: Tue, 18 Apr 2023 15:45:53 +0200 Message-ID: <20230418134608.244751-8-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT062:EE_|PAVPR08MB8845:EE_|DBAEUR03FT064:EE_|DU0PR08MB9821:EE_ X-MS-Office365-Filtering-Correlation-Id: ef3a8238-d8c6-4768-8d91-08db40136f9c 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: WynJWeCDaNcMW9uHQjaHaQw8m9r5vKIbQw939OAk4VwGwAg4RKtnVsGyRuXuSF2pVBJKu5E6I9/pPqpKZjY1AUiSinFk/i4a8MCwF0PSSwfU2k9L9Wylxh5ct00KTegmsELFYL/6n/lqiIz73zQipx2g03cEXn0v5xPyg8NsPU4MAlkq2AnHSlbUHzF7bwx8krr7vkefm7eWpPxjYEOVixoQPxw6dwNe4A8Ub5WxcqUGuAkX7FksOCQwW2buR7ozlUV3FPdifqKu0tC0GhT/dgbnjbRb6kjL/ikfzxq2pa1bXkzybf2JRK9yD3GyhwMo/7bdq0KxfYGQ64V6ZpU0wIt/UJr6Ni164Irjmoqn+f6P7dYzAt6H92EJmXhwiPBcnuVZUUECfXsHRfNK0ndKfKplQuZphH7TKXP2nclSr815UFmjTl99j5gcro0DB/USKth7D5oALc1D/AVqizuEXv/DFGKKgrmQgMeaHcudGSODSC9jigIXBiXpNwv/767OqBuz0IV9nTSQm41pGDLPdHq6OJFYAjY5rVsqkemBVjCpoEnDoX6o6gyx4n0vgnD3/lOSDrQZoXjc+hsEMNasCI2lK9ip3R+9CG/EfmFG5czSilQcGnsoMYJCAgpfk7GX5ss5U97X8LYaeojG0XAbQnxWsRBNB8uvo9LwKJm+PytyaxKsIdVdW3u3qBcfZTUAkIEU8kaQz0LGUB6JcH/i/Q== 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:(13230028)(4636009)(396003)(39860400002)(346002)(376002)(136003)(451199021)(46966006)(36840700001)(36860700001)(2616005)(40480700001)(47076005)(83380400001)(426003)(336012)(26005)(82310400005)(1076003)(186003)(86362001)(70586007)(4326008)(82740400003)(356005)(70206006)(2906002)(30864003)(8936002)(316002)(44832011)(41300700001)(81166007)(478600001)(110136005)(6636002)(6666004)(36756003)(5660300002)(7696005)(8676002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB8845 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT064.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4be710bd-1519-48f6-002d-08db40136a60 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NppmScn1Y4C1kaBsSJCpWWcHwUpzA2ZsV0dNCKmKWLwN3d+A8AVWLJpEQOmFQBVi6XU0JEHGJ9aKBOYE8LwgO29e7ZgI0dqQ0l7jYnidKNAX8JFmr9WVm9Q96cYMgwiEgxDy0b9wU/iiMie+PH6vcoEjhaa2fA8CqLeEWVvGpmQqip1RgcejCWmvbWRMZKaqRNJ6+e0abNOqDSov/8r6mbOANcseeT+vdvajdjADUrmvcShGnJxW4HWJjktPNQA++0bphBa4p3hc5lQY3RlWx6saZTsB+a6dAUyfPAv94bCmefVtHcJqslX9fJKOgLPdthycpq6I/JOfnE+IN0Z2JtSeJka+INvyc/Ll1mo8y8TBW3TEYrea1g4w5nI4NYyIwADeYvj5TQ1HYb2h5fzECJw1660vjOMm18Yy1ioDQjt5TuR0aqquCf2xNK68b98cOO6Q5H6RA5fm36LWVn4vA80Zs8gkKIBla+gkbT3HcN6j8gEywo+Ewr4DQ1Ms9ko2kSDUMeOWp1DGmHc/iPPJtb2Wi1Awsr0k8Mib1UIkRqg+ty6BLI2q8aM6zA+t7NCE24eDqnecLkp/8dTyVBPeI8uqfqtgKvOO74eGSuJwlNO/FOycj0MPm8DH6+LsYs79zhpnqQEwF/QsLRK6seoxDWV8MzK8NusYegjsC5Z35fpy3CY7fnKh1oL0F18isrQ+i7I5TEZYir+sXY6oSW6X0Q== 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:(13230028)(4636009)(136003)(346002)(376002)(39860400002)(396003)(451199021)(46966006)(36840700001)(40470700004)(1076003)(186003)(26005)(2616005)(40480700001)(110136005)(426003)(336012)(83380400001)(82310400005)(7696005)(36860700001)(47076005)(40460700003)(6666004)(36756003)(6636002)(41300700001)(316002)(44832011)(5660300002)(82740400003)(2906002)(30864003)(4326008)(478600001)(86362001)(8936002)(81166007)(8676002)(70586007)(70206006); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:22.3988 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ef3a8238-d8c6-4768-8d91-08db40136f9c 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: DBAEUR03FT064.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9821 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" In order to avoid using a huge switch when generating all the intrinsics (e.g. mve_vaddq_n_sv4si, ...), we want to generate a single function taking the builtin code as parameter (e.g. mve_q_n (VADDQ_S, ....) This is achieved by using the new mve_insn iterator. Having done that, it becomes easier to share similar patterns, to avoid useless/error-prone code duplication. 2022-09-08 Christophe Lyon gcc/ChangeLog: * config/arm/iterators.md (MVE_INT_BINARY_RTX, MVE_INT_M_BINARY) (MVE_INT_M_N_BINARY, MVE_INT_N_BINARY, MVE_FP_M_BINARY) (MVE_FP_M_N_BINARY, MVE_FP_N_BINARY, mve_addsubmul, mve_insn): New iterators. * config/arm/mve.md (mve_vsubq_n_f, mve_vaddq_n_f, mve_vmulq_n_f): Factorize into ... (@mve_q_n_f): ... this. (mve_vaddq_n_, mve_vmulq_n_) (mve_vsubq_n_): Factorize into ... (@mve_q_n_): ... this. (mve_vaddq, mve_vmulq, mve_vsubq): Factorize into ... (mve_q): ... this. (mve_vaddq_f, mve_vmulq_f, mve_vsubq_f): Factorize into ... (mve_q_f): ... this. (mve_vaddq_m_, mve_vmulq_m_) (mve_vsubq_m_): Factorize into ... (@mve_q_m_): ... this, (mve_vaddq_m_n_, mve_vmulq_m_n_) (mve_vsubq_m_n_): Factorize into ... (@mve_q_m_n_): ... this. (mve_vaddq_m_f, mve_vmulq_m_f, mve_vsubq_m_f): Factorize into ... (@mve_q_m_f): ... this. (mve_vaddq_m_n_f, mve_vmulq_m_n_f) (mve_vsubq_m_n_f): Factorize into ... (@mve_q_m_n_f): ... this. --- gcc/config/arm/iterators.md | 57 +++++++ gcc/config/arm/mve.md | 317 +++++------------------------------- 2 files changed, 99 insertions(+), 275 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 39895ad62aa..d3bef594775 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -330,6 +330,63 @@ (define_code_iterator FCVT [unsigned_float float]) ;; Saturating addition, subtraction (define_code_iterator SSPLUSMINUS [ss_plus ss_minus]) +;; MVE integer binary operations. +(define_code_iterator MVE_INT_BINARY_RTX [plus minus mult]) + +(define_int_iterator MVE_INT_M_BINARY [ + VADDQ_M_S VADDQ_M_U + VMULQ_M_S VMULQ_M_U + VSUBQ_M_S VSUBQ_M_U + ]) + +(define_int_iterator MVE_INT_M_N_BINARY [ + VADDQ_M_N_S VADDQ_M_N_U + VMULQ_M_N_S VMULQ_M_N_U + VSUBQ_M_N_S VSUBQ_M_N_U + ]) + +(define_int_iterator MVE_INT_N_BINARY [ + VADDQ_N_S VADDQ_N_U + VMULQ_N_S VMULQ_N_U + VSUBQ_N_S VSUBQ_N_U + ]) + +(define_int_iterator MVE_FP_M_BINARY [ + VADDQ_M_F + VMULQ_M_F + VSUBQ_M_F + ]) + +(define_int_iterator MVE_FP_M_N_BINARY [ + VADDQ_M_N_F + VMULQ_M_N_F + VSUBQ_M_N_F + ]) + +(define_int_iterator MVE_FP_N_BINARY [ + VADDQ_N_F + VMULQ_N_F + VSUBQ_N_F + ]) + +(define_code_attr mve_addsubmul [ + (minus "vsub") + (mult "vmul") + (plus "vadd") + ]) + +(define_int_attr mve_insn [ + (VADDQ_M_N_S "vadd") (VADDQ_M_N_U "vadd") (VADDQ_M_N_F "vadd") + (VADDQ_M_S "vadd") (VADDQ_M_U "vadd") (VADDQ_M_F "vadd") + (VADDQ_N_S "vadd") (VADDQ_N_U "vadd") (VADDQ_N_F "vadd") + (VMULQ_M_N_S "vmul") (VMULQ_M_N_U "vmul") (VMULQ_M_N_F "vmul") + (VMULQ_M_S "vmul") (VMULQ_M_U "vmul") (VMULQ_M_F "vmul") + (VMULQ_N_S "vmul") (VMULQ_N_U "vmul") (VMULQ_N_F "vmul") + (VSUBQ_M_N_S "vsub") (VSUBQ_M_N_U "vsub") (VSUBQ_M_N_F "vsub") + (VSUBQ_M_S "vsub") (VSUBQ_M_U "vsub") (VSUBQ_M_F "vsub") + (VSUBQ_N_S "vsub") (VSUBQ_N_U "vsub") (VSUBQ_N_F "vsub") + ]) + ;; plus and minus are the only SHIFTABLE_OPS for which Thumb2 allows ;; a stack pointer operand. The minus operation is a candidate for an rsub ;; and hence only plus is supported. diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index ab688396f97..5167fbc6add 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -668,21 +668,6 @@ (define_insn "mve_vpnotv16bi" [(set_attr "type" "mve_move") ]) -;; -;; [vsubq_n_f]) -;; -(define_insn "mve_vsubq_n_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VSUBQ_N_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vsub.f\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vbrsrq_n_f]) ;; @@ -871,16 +856,18 @@ (define_insn "mve_vabdq_" ;; ;; [vaddq_n_s, vaddq_n_u]) +;; [vsubq_n_s, vsubq_n_u]) +;; [vmulq_n_s, vmulq_n_u]) ;; -(define_insn "mve_vaddq_n_" +(define_insn "@mve_q_n_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") (match_operand: 2 "s_register_operand" "r")] - VADDQ_N)) + MVE_INT_N_BINARY)) ] "TARGET_HAVE_MVE" - "vadd.i%#\t%q0, %q1, %2" + ".i%#\t%q0, %q1, %2" [(set_attr "type" "mve_move") ]) @@ -1362,26 +1349,13 @@ (define_insn "mve_vmulltq_int_" ]) ;; -;; [vmulq_n_u, vmulq_n_s]) -;; -(define_insn "mve_vmulq_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VMULQ_N)) - ] - "TARGET_HAVE_MVE" - "vmul.i%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - -;; +;; [vaddq_s, vaddq_u]) ;; [vmulq_u, vmulq_s]) +;; [vsubq_s, vsubq_u]) ;; (define_insn "mve_vmulq_" [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") + (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") (match_operand:MVE_2 2 "s_register_operand" "w")] VMULQ)) @@ -1391,14 +1365,14 @@ (define_insn "mve_vmulq_" [(set_attr "type" "mve_move") ]) -(define_insn "mve_vmulq" +(define_insn "mve_q" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w"))) + (MVE_INT_BINARY_RTX:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") + (match_operand:MVE_2 2 "s_register_operand" "w"))) ] "TARGET_HAVE_MVE" - "vmul.i%#\t%q0, %q1, %q2" + ".i%#\t%q0, %q1, %q2" [(set_attr "type" "mve_move") ]) @@ -1768,21 +1742,6 @@ (define_insn "mve_vshlq_r_" [(set_attr "type" "mve_move") ]) -;; -;; [vsubq_n_s, vsubq_n_u]) -;; -(define_insn "mve_vsubq_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VSUBQ_N)) - ] - "TARGET_HAVE_MVE" - "vsub.i%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vsubq_s, vsubq_u]) ;; @@ -1798,17 +1757,6 @@ (define_insn "mve_vsubq_" [(set_attr "type" "mve_move") ]) -(define_insn "mve_vsubq" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE" - "vsub.i%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vabdq_f]) ;; @@ -1841,16 +1789,18 @@ (define_insn "mve_vaddlvaq_v4si" ;; ;; [vaddq_n_f]) +;; [vsubq_n_f]) +;; [vmulq_n_f]) ;; -(define_insn "mve_vaddq_n_f" +(define_insn "@mve_q_n_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") (match_operand: 2 "s_register_operand" "r")] - VADDQ_N_F)) + MVE_FP_N_BINARY)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vadd.f%#\t%q0, %q1, %2" + ".f%#\t%q0, %q1, %2" [(set_attr "type" "mve_move") ]) @@ -2224,31 +2174,18 @@ (define_insn "mve_vmovntq_" ]) ;; +;; [vaddq_f]) ;; [vmulq_f]) +;; [vsubq_f]) ;; -(define_insn "mve_vmulq_f" +(define_insn "mve_q_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") + (MVE_INT_BINARY_RTX:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") (match_operand:MVE_0 2 "s_register_operand" "w"))) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vmul.f%# %q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vmulq_n_f]) -;; -(define_insn "mve_vmulq_n_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VMULQ_N_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vmul.f%# %q0, %q1, %2" + ".f%#\t%q0, %q1, %q2" [(set_attr "type" "mve_move") ]) @@ -2490,20 +2427,6 @@ (define_insn "mve_vshlltq_n_" [(set_attr "type" "mve_move") ]) -;; -;; [vsubq_f]) -;; -(define_insn "mve_vsubq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") - (match_operand:MVE_0 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vsub.f%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vmulltq_poly_p]) ;; @@ -5032,23 +4955,6 @@ (define_insn "mve_vsriq_m_n_" [(set_attr "type" "mve_move") (set_attr "length" "8")]) -;; -;; [vsubq_m_u, vsubq_m_s]) -;; -(define_insn "mve_vsubq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VSUBQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vsubt.i%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length" "8")]) - ;; ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s]) ;; @@ -5084,35 +4990,39 @@ (define_insn "mve_vabdq_m_" ;; ;; [vaddq_m_n_s, vaddq_m_n_u]) +;; [vsubq_m_n_s, vsubq_m_n_u]) +;; [vmulq_m_n_s, vmulq_m_n_u]) ;; -(define_insn "mve_vaddq_m_n_" +(define_insn "@mve_q_m_n_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand: 3 "s_register_operand" "r") (match_operand: 4 "vpr_register_operand" "Up")] - VADDQ_M_N)) + MVE_INT_M_N_BINARY)) ] "TARGET_HAVE_MVE" - "vpst\;vaddt.i%# %q0, %q2, %3" + "vpst\;t.i%# %q0, %q2, %3" [(set_attr "type" "mve_move") (set_attr "length""8")]) ;; ;; [vaddq_m_u, vaddq_m_s]) +;; [vsubq_m_u, vsubq_m_s]) +;; [vmulq_m_u, vmulq_m_s]) ;; -(define_insn "mve_vaddq_m_" +(define_insn "@mve_q_m_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand:MVE_2 3 "s_register_operand" "w") (match_operand: 4 "vpr_register_operand" "Up")] - VADDQ_M)) + MVE_INT_M_BINARY)) ] "TARGET_HAVE_MVE" - "vpst\;vaddt.i%# %q0, %q2, %q3" + "vpst\;t.i%# %q0, %q2, %q3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -5422,40 +5332,6 @@ (define_insn "mve_vmulltq_int_m_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vmulq_m_n_u, vmulq_m_n_s]) -;; -(define_insn "mve_vmulq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VMULQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmult.i%# %q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmulq_m_s, vmulq_m_u]) -;; -(define_insn "mve_vmulq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VMULQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmult.i%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vornq_m_u, vornq_m_s]) ;; @@ -5796,23 +5672,6 @@ (define_insn "mve_vsliq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vsubq_m_n_s, vsubq_m_n_u]) -;; -(define_insn "mve_vsubq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VSUBQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vsubt.i%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vhcaddq_rot270_m_s]) ;; @@ -6613,35 +6472,39 @@ (define_insn "mve_vabdq_m_f" ;; ;; [vaddq_m_f]) +;; [vsubq_m_f]) +;; [vmulq_m_f]) ;; -(define_insn "mve_vaddq_m_f" +(define_insn "@mve_q_m_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") (match_operand:MVE_0 2 "s_register_operand" "w") (match_operand:MVE_0 3 "s_register_operand" "w") (match_operand: 4 "vpr_register_operand" "Up")] - VADDQ_M_F)) + MVE_FP_M_BINARY)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vaddt.f%# %q0, %q2, %q3" + "vpst\;t.f%# %q0, %q2, %q3" [(set_attr "type" "mve_move") (set_attr "length""8")]) ;; ;; [vaddq_m_n_f]) +;; [vsubq_m_n_f]) +;; [vmulq_m_n_f]) ;; -(define_insn "mve_vaddq_m_n_f" +(define_insn "@mve_q_m_n_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") (match_operand:MVE_0 2 "s_register_operand" "w") (match_operand: 3 "s_register_operand" "r") (match_operand: 4 "vpr_register_operand" "Up")] - VADDQ_M_N_F)) + MVE_FP_M_N_BINARY)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vaddt.f%# %q0, %q2, %3" + "vpst\;t.f%# %q0, %q2, %3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -6985,40 +6848,6 @@ (define_insn "mve_vminnmq_m_f" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vmulq_m_f]) -;; -(define_insn "mve_vmulq_m_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand:MVE_0 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VMULQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vmult.f%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmulq_m_n_f]) -;; -(define_insn "mve_vmulq_m_n_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VMULQ_M_N_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vmult.f%# %q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vornq_m_f]) ;; @@ -7053,40 +6882,6 @@ (define_insn "mve_vorrq_m_f" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vsubq_m_f]) -;; -(define_insn "mve_vsubq_m_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand:MVE_0 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VSUBQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vsubt.f%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vsubq_m_n_f]) -;; -(define_insn "mve_vsubq_m_n_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VSUBQ_M_N_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vsubt.f%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vstrbq_s vstrbq_u] ;; @@ -8927,34 +8722,6 @@ (define_insn "mve_vstrwq_scatter_shifted_offset_v4si_insn" "vstrw.32\t%q2, [%0, %q1, uxtw #2]" [(set_attr "length" "4")]) -;; -;; [vaddq_s, vaddq_u]) -;; -(define_insn "mve_vaddq" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE" - "vadd.i%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vaddq_f]) -;; -(define_insn "mve_vaddq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") - (match_operand:MVE_0 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vadd.f%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vidupq_n_u]) ;; From patchwork Tue Apr 18 13:45:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67925 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A6BC1385414F for ; Tue, 18 Apr 2023 13:50:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A6BC1385414F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825828; bh=qzlRqMwWp2VCJ0osirkILQjgGGGRPHDWVmoh0Rs//F8=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=BcNVJ5IMgbKeMB5JnJNS4k0O3T/mSnYtWLsD9Uo0fPBrtdcp+CMWyF4JNkXgYYI12 uAGu8yWh/Jgk+1zesdVnr1Hqpqut/oQ8Uty+cv9GiHpZcxHfTFV8pz9jWE/5sgL73+ DkCq7ziSBU2Y9oDQntfme/yDyNkbskmwP4J7dBdE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2087.outbound.protection.outlook.com [40.107.21.87]) by sourceware.org (Postfix) with ESMTPS id BFC173856954 for ; Tue, 18 Apr 2023 13:47:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BFC173856954 Received: from DUZPR01CA0288.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b7::21) by DBAPR08MB5669.eurprd08.prod.outlook.com (2603:10a6:10:1ac::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:36 +0000 Received: from DBAEUR03FT055.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4b7:cafe::6f) by DUZPR01CA0288.outlook.office365.com (2603:10a6:10:4b7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:34 +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 DBAEUR03FT055.mail.protection.outlook.com (100.127.142.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:34 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Tue, 18 Apr 2023 13:47:34 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 8b7d3872d238af8a X-CR-MTA-TID: 64aa7808 Received: from 2699a58858e8.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 5EE377E0-2081-4E76-B828-A7BA71A327DD.1; Tue, 18 Apr 2023 13:47:27 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2699a58858e8.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Dwvzmy74BwyiAo5zwWyrYVggMMzYboSg2iflI2BzWWEDv/rN5VZpzXmaUK1xC/UpstPrc72TJfZq56kQevSrvX9Z4Pm8DJuyQG8farRXb9OM9ODimuVlvlFjEM1IYIJamDvsVR5loQC9RJ5GZ0PY4t+uYTKyWln0ikto0QOxHdmBLDBlwwp+vmd/AyfpM8w/fu2UU+As8iD/4Yo5gkI2Kg1MTR68VpN+5kwQGHknTqaSnXbFkH/yjOztyopADeqMsqWq8dncAbKyVCCPZybE8iwvbFP19DSZjCr0Ly2vdbdwpMXeeQReB7Etqt4hDjJ3QpCbK62+E9vv/US2d2C/qg== 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=qzlRqMwWp2VCJ0osirkILQjgGGGRPHDWVmoh0Rs//F8=; b=RYYiL4uSeVLPaDbn33HPTJD1uC/q0lP1QQaC7BR2sfndV7ErWYvt1+mTqPjjUj93X+1p0Yw/KGbwHlKNedTj8nmM4NDLd6p8iGS17yw+P/9WUgsUHD5IVrd10dMXi/ZcHMAzeE5vvI/edWSpJIHMOhNx7HCCeBUJzYYTjm/x4EM2bNxR6oWNUrjJrGriMXJAt0OR4/NxhQEZ8Lld++Inb61iiIrtmlZC3jFc1LpfHi671syvvnONokO/vqSwIVU+qRQeC/YAAqPkmFF6oORl9630g6M5U67UNRQVlYS7pialpHNrq/NMtyNXMPc3aXGpnIGkTsQBfCjRGdx012ZpjA== 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 Received: from AS9PR05CA0088.eurprd05.prod.outlook.com (2603:10a6:20b:499::33) by AM8PR08MB6385.eurprd08.prod.outlook.com (2603:10a6:20b:36a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:18 +0000 Received: from AM7EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:499:cafe::97) by AS9PR05CA0088.outlook.office365.com (2603:10a6:20b:499::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:18 +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 AM7EUR03FT016.mail.protection.outlook.com (100.127.140.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:18 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:13 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:13 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 08/22] arm: [MVE intrinsics] rework vaddq vmulq vsubq Date: Tue, 18 Apr 2023 15:45:54 +0200 Message-ID: <20230418134608.244751-9-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT016:EE_|AM8PR08MB6385:EE_|DBAEUR03FT055:EE_|DBAPR08MB5669:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f0b08d0-14df-4d2a-9aa0-08db4013770a 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: Ha78DCI83s+ROZtLUjpVLxKRs3G7KTFgKewARvWXPrg8F1NxzHN4GPtMXFHvkOrCLbi2ajwSISyc+PAq5g7KRQga+Il+NDOfVf7q8xgVWbRALbugR9I01fFWe9ljlvofR9q2+ZvGZVvxBDL8gjdabS2vJqmJtoIMZHhY46JJMhNwpTCp4ZvsAfBmTiJAojjlGJsedwUSaOy5kKsX8WNaDjZTcBCIp4r0OUP1PvgzerCaihUsRCGqWlz1XfmFmCpMbNsctDvDFyzN2R/+/NZwyHt+z6I9hrV/sH7JlJ6iHVkH8BTCGzCY4MIvo7RKRlrJFxP4ObD5daf8ZLKEzdiKM+tiLm5ocqU30gdODvmwcq7U8SZvAqbDzT1PDdAkHPMoHD6quEJ0AjF3/vyEL5aixhYQYyubIW1aYIfZS6rL88qPMzVqqa80ZfNTLuPm7YMMLFiADrZaTNJsL8iNy2ZZUK7q3dEInI2EIW9bLHQVkPkGt8tVa28hiEm7BFBBNdp7Hdvz0WzMJLqRieFiQlcKt/f0uPHD+WeFaqom+0WQcQydh0dG/85B/KcYu5Je5NoX2banCbK9g+09Uurw8R3PwpWKwFHU7s0K+gEf0/UJuHLJDojb8d8pQRXxtXojWAutdKUQTwBcpxgycd9Esu1gxmop8i6vSd/oBDXTbyGfxyUSU7UYdikRFxYdkxfM6Y8E 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:(13230028)(4636009)(346002)(376002)(39860400002)(396003)(136003)(451199021)(36840700001)(46966006)(478600001)(6636002)(110136005)(316002)(70206006)(70586007)(4326008)(1076003)(40480700001)(336012)(83380400001)(186003)(426003)(36756003)(2616005)(47076005)(86362001)(30864003)(82310400005)(2906002)(7696005)(6666004)(26005)(82740400003)(356005)(36860700001)(81166007)(8936002)(41300700001)(5660300002)(8676002)(44832011)(36900700001)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6385 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT055.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 1c487ea5-9ecb-4a12-8e98-08db40136d04 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DidXGOtwsVJiqGorm7tLcDbG6bloPVz+5kD+8IZh1/RIM3E9KDYanw2T1iF/5rD2CgUNyFYrljhK9NSEdYkzYzHeSvQyH7xzlIy0hi7oWGwNMQAN7YvKfsSnndnY/YTx+Vh6rQuYsZliHp+6frWmILcGLKvISwTvQUW9P3a3T5uWxo36k5SmMp/pOXF6n1PMOwOtxrAP7XtNtKh3uD9+2PWeVxuPk3AXnihZU4yFyXq7YDyVSfcP1HGjz//w4y6Af82KSVFNG0cqpxHobmFBDMpy7TPmo5cjOo8YhuMLS7RnxvbKCHUxXerYMoPxtii1iClVHSgONWiM2VppQ9dFtg/6g0fd9RyUXh2/m5A9ydWcsd61czIdjFmMeXsFSo4mymHUnZ4gsAPoElR+FRvLBiwsLgOnSpgEoSsTNvo6eBJTxqKKHouzurr0IRN/XRYDFIbeBaXOU8mnICbP9qVKIg0EWx+wAl2wrkCL+ywPe0eMOzWx9gSvKSF1I6QXQNFU4ibnGKBXulQQ7Q02Wo60OrmgHdKEdzP1nKFkschoT4Kbtu0bpT1My71uX9ZING7FrTT72+Ftq8/ovxo4HCOQTXXwBTIv9jWfOiWEAyOrJ28XHqG3Tzazn/9HgD0pet0agAbf2JwRSY+jYQi+I1pIkpI4PUT49ELwYzrCoXzeTwzS1Z3NmoPxMNKF63udDA9o 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:(13230028)(4636009)(346002)(136003)(376002)(396003)(39850400004)(451199021)(36840700001)(40470700004)(46966006)(36756003)(8936002)(8676002)(40460700003)(44832011)(5660300002)(2906002)(30864003)(82310400005)(86362001)(40480700001)(478600001)(7696005)(6666004)(6636002)(110136005)(186003)(2616005)(36860700001)(1076003)(70586007)(70206006)(26005)(41300700001)(82740400003)(316002)(83380400001)(81166007)(4326008)(47076005)(426003)(336012)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:34.8640 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0f0b08d0-14df-4d2a-9aa0-08db4013770a 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: DBAEUR03FT055.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5669 X-Spam-Status: No, score=-12.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, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Implement vaddq, vmulq, vsubq using the new MVE builtins framework. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-base.cc (FUNCTION_WITH_RTX_M_N): New. (vaddq, vmulq, vsubq): New. * config/arm/arm-mve-builtins-base.def (vaddq, vmulq, vsubq): New. * config/arm/arm-mve-builtins-base.h (vaddq, vmulq, vsubq): New. * config/arm/arm_mve.h (vaddq): Remove. (vaddq_m): Remove. (vaddq_x): Remove. (vaddq_n_u8): Remove. (vaddq_n_s8): Remove. (vaddq_n_u16): Remove. (vaddq_n_s16): Remove. (vaddq_n_u32): Remove. (vaddq_n_s32): Remove. (vaddq_n_f16): Remove. (vaddq_n_f32): Remove. (vaddq_m_n_s8): Remove. (vaddq_m_n_s32): Remove. (vaddq_m_n_s16): Remove. (vaddq_m_n_u8): Remove. (vaddq_m_n_u32): Remove. (vaddq_m_n_u16): Remove. (vaddq_m_s8): Remove. (vaddq_m_s32): Remove. (vaddq_m_s16): Remove. (vaddq_m_u8): Remove. (vaddq_m_u32): Remove. (vaddq_m_u16): Remove. (vaddq_m_f32): Remove. (vaddq_m_f16): Remove. (vaddq_m_n_f32): Remove. (vaddq_m_n_f16): Remove. (vaddq_s8): Remove. (vaddq_s16): Remove. (vaddq_s32): Remove. (vaddq_u8): Remove. (vaddq_u16): Remove. (vaddq_u32): Remove. (vaddq_f16): Remove. (vaddq_f32): Remove. (vaddq_x_s8): Remove. (vaddq_x_s16): Remove. (vaddq_x_s32): Remove. (vaddq_x_n_s8): Remove. (vaddq_x_n_s16): Remove. (vaddq_x_n_s32): Remove. (vaddq_x_u8): Remove. (vaddq_x_u16): Remove. (vaddq_x_u32): Remove. (vaddq_x_n_u8): Remove. (vaddq_x_n_u16): Remove. (vaddq_x_n_u32): Remove. (vaddq_x_f16): Remove. (vaddq_x_f32): Remove. (vaddq_x_n_f16): Remove. (vaddq_x_n_f32): Remove. (__arm_vaddq_n_u8): Remove. (__arm_vaddq_n_s8): Remove. (__arm_vaddq_n_u16): Remove. (__arm_vaddq_n_s16): Remove. (__arm_vaddq_n_u32): Remove. (__arm_vaddq_n_s32): Remove. (__arm_vaddq_m_n_s8): Remove. (__arm_vaddq_m_n_s32): Remove. (__arm_vaddq_m_n_s16): Remove. (__arm_vaddq_m_n_u8): Remove. (__arm_vaddq_m_n_u32): Remove. (__arm_vaddq_m_n_u16): Remove. (__arm_vaddq_m_s8): Remove. (__arm_vaddq_m_s32): Remove. (__arm_vaddq_m_s16): Remove. (__arm_vaddq_m_u8): Remove. (__arm_vaddq_m_u32): Remove. (__arm_vaddq_m_u16): Remove. (__arm_vaddq_s8): Remove. (__arm_vaddq_s16): Remove. (__arm_vaddq_s32): Remove. (__arm_vaddq_u8): Remove. (__arm_vaddq_u16): Remove. (__arm_vaddq_u32): Remove. (__arm_vaddq_x_s8): Remove. (__arm_vaddq_x_s16): Remove. (__arm_vaddq_x_s32): Remove. (__arm_vaddq_x_n_s8): Remove. (__arm_vaddq_x_n_s16): Remove. (__arm_vaddq_x_n_s32): Remove. (__arm_vaddq_x_u8): Remove. (__arm_vaddq_x_u16): Remove. (__arm_vaddq_x_u32): Remove. (__arm_vaddq_x_n_u8): Remove. (__arm_vaddq_x_n_u16): Remove. (__arm_vaddq_x_n_u32): Remove. (__arm_vaddq_n_f16): Remove. (__arm_vaddq_n_f32): Remove. (__arm_vaddq_m_f32): Remove. (__arm_vaddq_m_f16): Remove. (__arm_vaddq_m_n_f32): Remove. (__arm_vaddq_m_n_f16): Remove. (__arm_vaddq_f16): Remove. (__arm_vaddq_f32): Remove. (__arm_vaddq_x_f16): Remove. (__arm_vaddq_x_f32): Remove. (__arm_vaddq_x_n_f16): Remove. (__arm_vaddq_x_n_f32): Remove. (__arm_vaddq): Remove. (__arm_vaddq_m): Remove. (__arm_vaddq_x): Remove. (vmulq): Remove. (vmulq_m): Remove. (vmulq_x): Remove. (vmulq_u8): Remove. (vmulq_n_u8): Remove. (vmulq_s8): Remove. (vmulq_n_s8): Remove. (vmulq_u16): Remove. (vmulq_n_u16): Remove. (vmulq_s16): Remove. (vmulq_n_s16): Remove. (vmulq_u32): Remove. (vmulq_n_u32): Remove. (vmulq_s32): Remove. (vmulq_n_s32): Remove. (vmulq_n_f16): Remove. (vmulq_f16): Remove. (vmulq_n_f32): Remove. (vmulq_f32): Remove. (vmulq_m_n_s8): Remove. (vmulq_m_n_s32): Remove. (vmulq_m_n_s16): Remove. (vmulq_m_n_u8): Remove. (vmulq_m_n_u32): Remove. (vmulq_m_n_u16): Remove. (vmulq_m_s8): Remove. (vmulq_m_s32): Remove. (vmulq_m_s16): Remove. (vmulq_m_u8): Remove. (vmulq_m_u32): Remove. (vmulq_m_u16): Remove. (vmulq_m_f32): Remove. (vmulq_m_f16): Remove. (vmulq_m_n_f32): Remove. (vmulq_m_n_f16): Remove. (vmulq_x_s8): Remove. (vmulq_x_s16): Remove. (vmulq_x_s32): Remove. (vmulq_x_n_s8): Remove. (vmulq_x_n_s16): Remove. (vmulq_x_n_s32): Remove. (vmulq_x_u8): Remove. (vmulq_x_u16): Remove. (vmulq_x_u32): Remove. (vmulq_x_n_u8): Remove. (vmulq_x_n_u16): Remove. (vmulq_x_n_u32): Remove. (vmulq_x_f16): Remove. (vmulq_x_f32): Remove. (vmulq_x_n_f16): Remove. (vmulq_x_n_f32): Remove. (__arm_vmulq_u8): Remove. (__arm_vmulq_n_u8): Remove. (__arm_vmulq_s8): Remove. (__arm_vmulq_n_s8): Remove. (__arm_vmulq_u16): Remove. (__arm_vmulq_n_u16): Remove. (__arm_vmulq_s16): Remove. (__arm_vmulq_n_s16): Remove. (__arm_vmulq_u32): Remove. (__arm_vmulq_n_u32): Remove. (__arm_vmulq_s32): Remove. (__arm_vmulq_n_s32): Remove. (__arm_vmulq_m_n_s8): Remove. (__arm_vmulq_m_n_s32): Remove. (__arm_vmulq_m_n_s16): Remove. (__arm_vmulq_m_n_u8): Remove. (__arm_vmulq_m_n_u32): Remove. (__arm_vmulq_m_n_u16): Remove. (__arm_vmulq_m_s8): Remove. (__arm_vmulq_m_s32): Remove. (__arm_vmulq_m_s16): Remove. (__arm_vmulq_m_u8): Remove. (__arm_vmulq_m_u32): Remove. (__arm_vmulq_m_u16): Remove. (__arm_vmulq_x_s8): Remove. (__arm_vmulq_x_s16): Remove. (__arm_vmulq_x_s32): Remove. (__arm_vmulq_x_n_s8): Remove. (__arm_vmulq_x_n_s16): Remove. (__arm_vmulq_x_n_s32): Remove. (__arm_vmulq_x_u8): Remove. (__arm_vmulq_x_u16): Remove. (__arm_vmulq_x_u32): Remove. (__arm_vmulq_x_n_u8): Remove. (__arm_vmulq_x_n_u16): Remove. (__arm_vmulq_x_n_u32): Remove. (__arm_vmulq_n_f16): Remove. (__arm_vmulq_f16): Remove. (__arm_vmulq_n_f32): Remove. (__arm_vmulq_f32): Remove. (__arm_vmulq_m_f32): Remove. (__arm_vmulq_m_f16): Remove. (__arm_vmulq_m_n_f32): Remove. (__arm_vmulq_m_n_f16): Remove. (__arm_vmulq_x_f16): Remove. (__arm_vmulq_x_f32): Remove. (__arm_vmulq_x_n_f16): Remove. (__arm_vmulq_x_n_f32): Remove. (__arm_vmulq): Remove. (__arm_vmulq_m): Remove. (__arm_vmulq_x): Remove. (vsubq): Remove. (vsubq_m): Remove. (vsubq_x): Remove. (vsubq_n_f16): Remove. (vsubq_n_f32): Remove. (vsubq_u8): Remove. (vsubq_n_u8): Remove. (vsubq_s8): Remove. (vsubq_n_s8): Remove. (vsubq_u16): Remove. (vsubq_n_u16): Remove. (vsubq_s16): Remove. (vsubq_n_s16): Remove. (vsubq_u32): Remove. (vsubq_n_u32): Remove. (vsubq_s32): Remove. (vsubq_n_s32): Remove. (vsubq_f16): Remove. (vsubq_f32): Remove. (vsubq_m_s8): Remove. (vsubq_m_u8): Remove. (vsubq_m_s16): Remove. (vsubq_m_u16): Remove. (vsubq_m_s32): Remove. (vsubq_m_u32): Remove. (vsubq_m_n_s8): Remove. (vsubq_m_n_s32): Remove. (vsubq_m_n_s16): Remove. (vsubq_m_n_u8): Remove. (vsubq_m_n_u32): Remove. (vsubq_m_n_u16): Remove. (vsubq_m_f32): Remove. (vsubq_m_f16): Remove. (vsubq_m_n_f32): Remove. (vsubq_m_n_f16): Remove. (vsubq_x_s8): Remove. (vsubq_x_s16): Remove. (vsubq_x_s32): Remove. (vsubq_x_n_s8): Remove. (vsubq_x_n_s16): Remove. (vsubq_x_n_s32): Remove. (vsubq_x_u8): Remove. (vsubq_x_u16): Remove. (vsubq_x_u32): Remove. (vsubq_x_n_u8): Remove. (vsubq_x_n_u16): Remove. (vsubq_x_n_u32): Remove. (vsubq_x_f16): Remove. (vsubq_x_f32): Remove. (vsubq_x_n_f16): Remove. (vsubq_x_n_f32): Remove. (__arm_vsubq_u8): Remove. (__arm_vsubq_n_u8): Remove. (__arm_vsubq_s8): Remove. (__arm_vsubq_n_s8): Remove. (__arm_vsubq_u16): Remove. (__arm_vsubq_n_u16): Remove. (__arm_vsubq_s16): Remove. (__arm_vsubq_n_s16): Remove. (__arm_vsubq_u32): Remove. (__arm_vsubq_n_u32): Remove. (__arm_vsubq_s32): Remove. (__arm_vsubq_n_s32): Remove. (__arm_vsubq_m_s8): Remove. (__arm_vsubq_m_u8): Remove. (__arm_vsubq_m_s16): Remove. (__arm_vsubq_m_u16): Remove. (__arm_vsubq_m_s32): Remove. (__arm_vsubq_m_u32): Remove. (__arm_vsubq_m_n_s8): Remove. (__arm_vsubq_m_n_s32): Remove. (__arm_vsubq_m_n_s16): Remove. (__arm_vsubq_m_n_u8): Remove. (__arm_vsubq_m_n_u32): Remove. (__arm_vsubq_m_n_u16): Remove. (__arm_vsubq_x_s8): Remove. (__arm_vsubq_x_s16): Remove. (__arm_vsubq_x_s32): Remove. (__arm_vsubq_x_n_s8): Remove. (__arm_vsubq_x_n_s16): Remove. (__arm_vsubq_x_n_s32): Remove. (__arm_vsubq_x_u8): Remove. (__arm_vsubq_x_u16): Remove. (__arm_vsubq_x_u32): Remove. (__arm_vsubq_x_n_u8): Remove. (__arm_vsubq_x_n_u16): Remove. (__arm_vsubq_x_n_u32): Remove. (__arm_vsubq_n_f16): Remove. (__arm_vsubq_n_f32): Remove. (__arm_vsubq_f16): Remove. (__arm_vsubq_f32): Remove. (__arm_vsubq_m_f32): Remove. (__arm_vsubq_m_f16): Remove. (__arm_vsubq_m_n_f32): Remove. (__arm_vsubq_m_n_f16): Remove. (__arm_vsubq_x_f16): Remove. (__arm_vsubq_x_f32): Remove. (__arm_vsubq_x_n_f16): Remove. (__arm_vsubq_x_n_f32): Remove. (__arm_vsubq): Remove. (__arm_vsubq_m): Remove. (__arm_vsubq_x): Remove. * config/arm/arm_mve_builtins.def (vsubq_u, vsubq_s, vsubq_f): Remove. (vmulq_u, vmulq_s, vmulq_f): Remove. * config/arm/mve.md (mve_vsubq_): Remove. (mve_vmulq_): Remove. --- gcc/config/arm/arm-mve-builtins-base.cc | 11 + gcc/config/arm/arm-mve-builtins-base.def | 6 + gcc/config/arm/arm-mve-builtins-base.h | 3 + gcc/config/arm/arm_mve.h | 2498 ---------------------- gcc/config/arm/arm_mve_builtins.def | 6 - gcc/config/arm/mve.md | 27 - 6 files changed, 20 insertions(+), 2531 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index 02a3b23865c..48b09bffd0c 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -82,7 +82,18 @@ class vuninitializedq_impl : public quiet namespace arm_mve { + /* Helper for builtins with RTX codes, _m predicated and _n overrides. */ +#define FUNCTION_WITH_RTX_M_N(NAME, RTX, UNSPEC) FUNCTION \ + (NAME, unspec_based_mve_function_exact_insn, \ + (RTX, RTX, RTX, \ + UNSPEC##_N_S, UNSPEC##_N_U, UNSPEC##_N_F, \ + UNSPEC##_M_S, UNSPEC##_M_U, UNSPEC##_M_F, \ + UNSPEC##_M_N_S, UNSPEC##_M_N_U, UNSPEC##_M_N_F)) + +FUNCTION_WITH_RTX_M_N (vaddq, PLUS, VADDQ) +FUNCTION_WITH_RTX_M_N (vmulq, MULT, VMULQ) FUNCTION (vreinterpretq, vreinterpretq_impl,) +FUNCTION_WITH_RTX_M_N (vsubq, MINUS, VSUBQ) FUNCTION (vuninitializedq, vuninitializedq_impl,) } /* end namespace arm_mve */ diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index f669642a259..624558c08b2 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -18,11 +18,17 @@ . */ #define REQUIRES_FLOAT false +DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none) +DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none) #undef REQUIRES_FLOAT #define REQUIRES_FLOAT true +DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_float, mx_or_none) +DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_float, none) +DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vuninitializedq, inherent, all_float, none) #undef REQUIRES_FLOAT diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index ec309cbe572..30f8549c495 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -23,7 +23,10 @@ namespace arm_mve { namespace functions { +extern const function_base *const vaddq; +extern const function_base *const vmulq; extern const function_base *const vreinterpretq; +extern const function_base *const vsubq; extern const function_base *const vuninitializedq; } /* end namespace arm_mve::functions */ diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 5dc5ecef134..42a1af2ae15 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -61,14 +61,12 @@ #define vaddlvq_p(__a, __p) __arm_vaddlvq_p(__a, __p) #define vcmpneq(__a, __b) __arm_vcmpneq(__a, __b) #define vshlq(__a, __b) __arm_vshlq(__a, __b) -#define vsubq(__a, __b) __arm_vsubq(__a, __b) #define vrmulhq(__a, __b) __arm_vrmulhq(__a, __b) #define vrhaddq(__a, __b) __arm_vrhaddq(__a, __b) #define vqsubq(__a, __b) __arm_vqsubq(__a, __b) #define vqaddq(__a, __b) __arm_vqaddq(__a, __b) #define vorrq(__a, __b) __arm_vorrq(__a, __b) #define vornq(__a, __b) __arm_vornq(__a, __b) -#define vmulq(__a, __b) __arm_vmulq(__a, __b) #define vmulltq_int(__a, __b) __arm_vmulltq_int(__a, __b) #define vmullbq_int(__a, __b) __arm_vmullbq_int(__a, __b) #define vmulhq(__a, __b) __arm_vmulhq(__a, __b) @@ -89,7 +87,6 @@ #define vandq(__a, __b) __arm_vandq(__a, __b) #define vaddvq_p(__a, __p) __arm_vaddvq_p(__a, __p) #define vaddvaq(__a, __b) __arm_vaddvaq(__a, __b) -#define vaddq(__a, __b) __arm_vaddq(__a, __b) #define vabdq(__a, __b) __arm_vabdq(__a, __b) #define vshlq_r(__a, __b) __arm_vshlq_r(__a, __b) #define vrshlq(__a, __b) __arm_vrshlq(__a, __b) @@ -235,12 +232,10 @@ #define vqmovunbq_m(__a, __b, __p) __arm_vqmovunbq_m(__a, __b, __p) #define vqmovuntq_m(__a, __b, __p) __arm_vqmovuntq_m(__a, __b, __p) #define vsriq_m(__a, __b, __imm, __p) __arm_vsriq_m(__a, __b, __imm, __p) -#define vsubq_m(__inactive, __a, __b, __p) __arm_vsubq_m(__inactive, __a, __b, __p) #define vqshluq_m(__inactive, __a, __imm, __p) __arm_vqshluq_m(__inactive, __a, __imm, __p) #define vabavq_p(__a, __b, __c, __p) __arm_vabavq_p(__a, __b, __c, __p) #define vshlq_m(__inactive, __a, __b, __p) __arm_vshlq_m(__inactive, __a, __b, __p) #define vabdq_m(__inactive, __a, __b, __p) __arm_vabdq_m(__inactive, __a, __b, __p) -#define vaddq_m(__inactive, __a, __b, __p) __arm_vaddq_m(__inactive, __a, __b, __p) #define vandq_m(__inactive, __a, __b, __p) __arm_vandq_m(__inactive, __a, __b, __p) #define vbicq_m(__inactive, __a, __b, __p) __arm_vbicq_m(__inactive, __a, __b, __p) #define vbrsrq_m(__inactive, __a, __b, __p) __arm_vbrsrq_m(__inactive, __a, __b, __p) @@ -262,7 +257,6 @@ #define vmulhq_m(__inactive, __a, __b, __p) __arm_vmulhq_m(__inactive, __a, __b, __p) #define vmullbq_int_m(__inactive, __a, __b, __p) __arm_vmullbq_int_m(__inactive, __a, __b, __p) #define vmulltq_int_m(__inactive, __a, __b, __p) __arm_vmulltq_int_m(__inactive, __a, __b, __p) -#define vmulq_m(__inactive, __a, __b, __p) __arm_vmulq_m(__inactive, __a, __b, __p) #define vornq_m(__inactive, __a, __b, __p) __arm_vornq_m(__inactive, __a, __b, __p) #define vorrq_m(__inactive, __a, __b, __p) __arm_vorrq_m(__inactive, __a, __b, __p) #define vqaddq_m(__inactive, __a, __b, __p) __arm_vqaddq_m(__inactive, __a, __b, __p) @@ -394,7 +388,6 @@ #define vmaxq_x(__a, __b, __p) __arm_vmaxq_x(__a, __b, __p) #define vabdq_x(__a, __b, __p) __arm_vabdq_x(__a, __b, __p) #define vabsq_x(__a, __p) __arm_vabsq_x(__a, __p) -#define vaddq_x(__a, __b, __p) __arm_vaddq_x(__a, __b, __p) #define vclsq_x(__a, __p) __arm_vclsq_x(__a, __p) #define vclzq_x(__a, __p) __arm_vclzq_x(__a, __p) #define vnegq_x(__a, __p) __arm_vnegq_x(__a, __p) @@ -403,8 +396,6 @@ #define vmullbq_int_x(__a, __b, __p) __arm_vmullbq_int_x(__a, __b, __p) #define vmulltq_poly_x(__a, __b, __p) __arm_vmulltq_poly_x(__a, __b, __p) #define vmulltq_int_x(__a, __b, __p) __arm_vmulltq_int_x(__a, __b, __p) -#define vmulq_x(__a, __b, __p) __arm_vmulq_x(__a, __b, __p) -#define vsubq_x(__a, __b, __p) __arm_vsubq_x(__a, __b, __p) #define vcaddq_rot90_x(__a, __b, __p) __arm_vcaddq_rot90_x(__a, __b, __p) #define vcaddq_rot270_x(__a, __b, __p) __arm_vcaddq_rot270_x(__a, __b, __p) #define vhaddq_x(__a, __b, __p) __arm_vhaddq_x(__a, __b, __p) @@ -651,8 +642,6 @@ #define vctp64q(__a) __arm_vctp64q(__a) #define vctp8q(__a) __arm_vctp8q(__a) #define vpnot(__a) __arm_vpnot(__a) -#define vsubq_n_f16(__a, __b) __arm_vsubq_n_f16(__a, __b) -#define vsubq_n_f32(__a, __b) __arm_vsubq_n_f32(__a, __b) #define vbrsrq_n_f16(__a, __b) __arm_vbrsrq_n_f16(__a, __b) #define vbrsrq_n_f32(__a, __b) __arm_vbrsrq_n_f32(__a, __b) #define vcvtq_n_f16_s16(__a, __imm6) __arm_vcvtq_n_f16_s16(__a, __imm6) @@ -693,8 +682,6 @@ #define vshlq_u8(__a, __b) __arm_vshlq_u8(__a, __b) #define vshlq_u16(__a, __b) __arm_vshlq_u16(__a, __b) #define vshlq_u32(__a, __b) __arm_vshlq_u32(__a, __b) -#define vsubq_u8(__a, __b) __arm_vsubq_u8(__a, __b) -#define vsubq_n_u8(__a, __b) __arm_vsubq_n_u8(__a, __b) #define vrmulhq_u8(__a, __b) __arm_vrmulhq_u8(__a, __b) #define vrhaddq_u8(__a, __b) __arm_vrhaddq_u8(__a, __b) #define vqsubq_u8(__a, __b) __arm_vqsubq_u8(__a, __b) @@ -703,8 +690,6 @@ #define vqaddq_n_u8(__a, __b) __arm_vqaddq_n_u8(__a, __b) #define vorrq_u8(__a, __b) __arm_vorrq_u8(__a, __b) #define vornq_u8(__a, __b) __arm_vornq_u8(__a, __b) -#define vmulq_u8(__a, __b) __arm_vmulq_u8(__a, __b) -#define vmulq_n_u8(__a, __b) __arm_vmulq_n_u8(__a, __b) #define vmulltq_int_u8(__a, __b) __arm_vmulltq_int_u8(__a, __b) #define vmullbq_int_u8(__a, __b) __arm_vmullbq_int_u8(__a, __b) #define vmulhq_u8(__a, __b) __arm_vmulhq_u8(__a, __b) @@ -731,7 +716,6 @@ #define vandq_u8(__a, __b) __arm_vandq_u8(__a, __b) #define vaddvq_p_u8(__a, __p) __arm_vaddvq_p_u8(__a, __p) #define vaddvaq_u8(__a, __b) __arm_vaddvaq_u8(__a, __b) -#define vaddq_n_u8(__a, __b) __arm_vaddq_n_u8(__a, __b) #define vabdq_u8(__a, __b) __arm_vabdq_u8(__a, __b) #define vshlq_r_u8(__a, __b) __arm_vshlq_r_u8(__a, __b) #define vrshlq_u8(__a, __b) __arm_vrshlq_u8(__a, __b) @@ -761,8 +745,6 @@ #define vcmpeqq_n_s8(__a, __b) __arm_vcmpeqq_n_s8(__a, __b) #define vqshluq_n_s8(__a, __imm) __arm_vqshluq_n_s8(__a, __imm) #define vaddvq_p_s8(__a, __p) __arm_vaddvq_p_s8(__a, __p) -#define vsubq_s8(__a, __b) __arm_vsubq_s8(__a, __b) -#define vsubq_n_s8(__a, __b) __arm_vsubq_n_s8(__a, __b) #define vshlq_r_s8(__a, __b) __arm_vshlq_r_s8(__a, __b) #define vrshlq_s8(__a, __b) __arm_vrshlq_s8(__a, __b) #define vrshlq_n_s8(__a, __b) __arm_vrshlq_n_s8(__a, __b) @@ -782,8 +764,6 @@ #define vqaddq_n_s8(__a, __b) __arm_vqaddq_n_s8(__a, __b) #define vorrq_s8(__a, __b) __arm_vorrq_s8(__a, __b) #define vornq_s8(__a, __b) __arm_vornq_s8(__a, __b) -#define vmulq_s8(__a, __b) __arm_vmulq_s8(__a, __b) -#define vmulq_n_s8(__a, __b) __arm_vmulq_n_s8(__a, __b) #define vmulltq_int_s8(__a, __b) __arm_vmulltq_int_s8(__a, __b) #define vmullbq_int_s8(__a, __b) __arm_vmullbq_int_s8(__a, __b) #define vmulhq_s8(__a, __b) __arm_vmulhq_s8(__a, __b) @@ -808,13 +788,10 @@ #define vbicq_s8(__a, __b) __arm_vbicq_s8(__a, __b) #define vandq_s8(__a, __b) __arm_vandq_s8(__a, __b) #define vaddvaq_s8(__a, __b) __arm_vaddvaq_s8(__a, __b) -#define vaddq_n_s8(__a, __b) __arm_vaddq_n_s8(__a, __b) #define vabdq_s8(__a, __b) __arm_vabdq_s8(__a, __b) #define vshlq_n_s8(__a, __imm) __arm_vshlq_n_s8(__a, __imm) #define vrshrq_n_s8(__a, __imm) __arm_vrshrq_n_s8(__a, __imm) #define vqshlq_n_s8(__a, __imm) __arm_vqshlq_n_s8(__a, __imm) -#define vsubq_u16(__a, __b) __arm_vsubq_u16(__a, __b) -#define vsubq_n_u16(__a, __b) __arm_vsubq_n_u16(__a, __b) #define vrmulhq_u16(__a, __b) __arm_vrmulhq_u16(__a, __b) #define vrhaddq_u16(__a, __b) __arm_vrhaddq_u16(__a, __b) #define vqsubq_u16(__a, __b) __arm_vqsubq_u16(__a, __b) @@ -823,8 +800,6 @@ #define vqaddq_n_u16(__a, __b) __arm_vqaddq_n_u16(__a, __b) #define vorrq_u16(__a, __b) __arm_vorrq_u16(__a, __b) #define vornq_u16(__a, __b) __arm_vornq_u16(__a, __b) -#define vmulq_u16(__a, __b) __arm_vmulq_u16(__a, __b) -#define vmulq_n_u16(__a, __b) __arm_vmulq_n_u16(__a, __b) #define vmulltq_int_u16(__a, __b) __arm_vmulltq_int_u16(__a, __b) #define vmullbq_int_u16(__a, __b) __arm_vmullbq_int_u16(__a, __b) #define vmulhq_u16(__a, __b) __arm_vmulhq_u16(__a, __b) @@ -851,7 +826,6 @@ #define vandq_u16(__a, __b) __arm_vandq_u16(__a, __b) #define vaddvq_p_u16(__a, __p) __arm_vaddvq_p_u16(__a, __p) #define vaddvaq_u16(__a, __b) __arm_vaddvaq_u16(__a, __b) -#define vaddq_n_u16(__a, __b) __arm_vaddq_n_u16(__a, __b) #define vabdq_u16(__a, __b) __arm_vabdq_u16(__a, __b) #define vshlq_r_u16(__a, __b) __arm_vshlq_r_u16(__a, __b) #define vrshlq_u16(__a, __b) __arm_vrshlq_u16(__a, __b) @@ -881,8 +855,6 @@ #define vcmpeqq_n_s16(__a, __b) __arm_vcmpeqq_n_s16(__a, __b) #define vqshluq_n_s16(__a, __imm) __arm_vqshluq_n_s16(__a, __imm) #define vaddvq_p_s16(__a, __p) __arm_vaddvq_p_s16(__a, __p) -#define vsubq_s16(__a, __b) __arm_vsubq_s16(__a, __b) -#define vsubq_n_s16(__a, __b) __arm_vsubq_n_s16(__a, __b) #define vshlq_r_s16(__a, __b) __arm_vshlq_r_s16(__a, __b) #define vrshlq_s16(__a, __b) __arm_vrshlq_s16(__a, __b) #define vrshlq_n_s16(__a, __b) __arm_vrshlq_n_s16(__a, __b) @@ -902,8 +874,6 @@ #define vqaddq_n_s16(__a, __b) __arm_vqaddq_n_s16(__a, __b) #define vorrq_s16(__a, __b) __arm_vorrq_s16(__a, __b) #define vornq_s16(__a, __b) __arm_vornq_s16(__a, __b) -#define vmulq_s16(__a, __b) __arm_vmulq_s16(__a, __b) -#define vmulq_n_s16(__a, __b) __arm_vmulq_n_s16(__a, __b) #define vmulltq_int_s16(__a, __b) __arm_vmulltq_int_s16(__a, __b) #define vmullbq_int_s16(__a, __b) __arm_vmullbq_int_s16(__a, __b) #define vmulhq_s16(__a, __b) __arm_vmulhq_s16(__a, __b) @@ -928,13 +898,10 @@ #define vbicq_s16(__a, __b) __arm_vbicq_s16(__a, __b) #define vandq_s16(__a, __b) __arm_vandq_s16(__a, __b) #define vaddvaq_s16(__a, __b) __arm_vaddvaq_s16(__a, __b) -#define vaddq_n_s16(__a, __b) __arm_vaddq_n_s16(__a, __b) #define vabdq_s16(__a, __b) __arm_vabdq_s16(__a, __b) #define vshlq_n_s16(__a, __imm) __arm_vshlq_n_s16(__a, __imm) #define vrshrq_n_s16(__a, __imm) __arm_vrshrq_n_s16(__a, __imm) #define vqshlq_n_s16(__a, __imm) __arm_vqshlq_n_s16(__a, __imm) -#define vsubq_u32(__a, __b) __arm_vsubq_u32(__a, __b) -#define vsubq_n_u32(__a, __b) __arm_vsubq_n_u32(__a, __b) #define vrmulhq_u32(__a, __b) __arm_vrmulhq_u32(__a, __b) #define vrhaddq_u32(__a, __b) __arm_vrhaddq_u32(__a, __b) #define vqsubq_u32(__a, __b) __arm_vqsubq_u32(__a, __b) @@ -943,8 +910,6 @@ #define vqaddq_n_u32(__a, __b) __arm_vqaddq_n_u32(__a, __b) #define vorrq_u32(__a, __b) __arm_vorrq_u32(__a, __b) #define vornq_u32(__a, __b) __arm_vornq_u32(__a, __b) -#define vmulq_u32(__a, __b) __arm_vmulq_u32(__a, __b) -#define vmulq_n_u32(__a, __b) __arm_vmulq_n_u32(__a, __b) #define vmulltq_int_u32(__a, __b) __arm_vmulltq_int_u32(__a, __b) #define vmullbq_int_u32(__a, __b) __arm_vmullbq_int_u32(__a, __b) #define vmulhq_u32(__a, __b) __arm_vmulhq_u32(__a, __b) @@ -971,7 +936,6 @@ #define vandq_u32(__a, __b) __arm_vandq_u32(__a, __b) #define vaddvq_p_u32(__a, __p) __arm_vaddvq_p_u32(__a, __p) #define vaddvaq_u32(__a, __b) __arm_vaddvaq_u32(__a, __b) -#define vaddq_n_u32(__a, __b) __arm_vaddq_n_u32(__a, __b) #define vabdq_u32(__a, __b) __arm_vabdq_u32(__a, __b) #define vshlq_r_u32(__a, __b) __arm_vshlq_r_u32(__a, __b) #define vrshlq_u32(__a, __b) __arm_vrshlq_u32(__a, __b) @@ -1001,8 +965,6 @@ #define vcmpeqq_n_s32(__a, __b) __arm_vcmpeqq_n_s32(__a, __b) #define vqshluq_n_s32(__a, __imm) __arm_vqshluq_n_s32(__a, __imm) #define vaddvq_p_s32(__a, __p) __arm_vaddvq_p_s32(__a, __p) -#define vsubq_s32(__a, __b) __arm_vsubq_s32(__a, __b) -#define vsubq_n_s32(__a, __b) __arm_vsubq_n_s32(__a, __b) #define vshlq_r_s32(__a, __b) __arm_vshlq_r_s32(__a, __b) #define vrshlq_s32(__a, __b) __arm_vrshlq_s32(__a, __b) #define vrshlq_n_s32(__a, __b) __arm_vrshlq_n_s32(__a, __b) @@ -1022,8 +984,6 @@ #define vqaddq_n_s32(__a, __b) __arm_vqaddq_n_s32(__a, __b) #define vorrq_s32(__a, __b) __arm_vorrq_s32(__a, __b) #define vornq_s32(__a, __b) __arm_vornq_s32(__a, __b) -#define vmulq_s32(__a, __b) __arm_vmulq_s32(__a, __b) -#define vmulq_n_s32(__a, __b) __arm_vmulq_n_s32(__a, __b) #define vmulltq_int_s32(__a, __b) __arm_vmulltq_int_s32(__a, __b) #define vmullbq_int_s32(__a, __b) __arm_vmullbq_int_s32(__a, __b) #define vmulhq_s32(__a, __b) __arm_vmulhq_s32(__a, __b) @@ -1048,7 +1008,6 @@ #define vbicq_s32(__a, __b) __arm_vbicq_s32(__a, __b) #define vandq_s32(__a, __b) __arm_vandq_s32(__a, __b) #define vaddvaq_s32(__a, __b) __arm_vaddvaq_s32(__a, __b) -#define vaddq_n_s32(__a, __b) __arm_vaddq_n_s32(__a, __b) #define vabdq_s32(__a, __b) __arm_vabdq_s32(__a, __b) #define vshlq_n_s32(__a, __imm) __arm_vshlq_n_s32(__a, __imm) #define vrshrq_n_s32(__a, __imm) __arm_vrshrq_n_s32(__a, __imm) @@ -1078,7 +1037,6 @@ #define vcmpgeq_f16(__a, __b) __arm_vcmpgeq_f16(__a, __b) #define vcmpeqq_n_f16(__a, __b) __arm_vcmpeqq_n_f16(__a, __b) #define vcmpeqq_f16(__a, __b) __arm_vcmpeqq_f16(__a, __b) -#define vsubq_f16(__a, __b) __arm_vsubq_f16(__a, __b) #define vqmovntq_s16(__a, __b) __arm_vqmovntq_s16(__a, __b) #define vqmovnbq_s16(__a, __b) __arm_vqmovnbq_s16(__a, __b) #define vqdmulltq_s16(__a, __b) __arm_vqdmulltq_s16(__a, __b) @@ -1087,8 +1045,6 @@ #define vqdmullbq_n_s16(__a, __b) __arm_vqdmullbq_n_s16(__a, __b) #define vorrq_f16(__a, __b) __arm_vorrq_f16(__a, __b) #define vornq_f16(__a, __b) __arm_vornq_f16(__a, __b) -#define vmulq_n_f16(__a, __b) __arm_vmulq_n_f16(__a, __b) -#define vmulq_f16(__a, __b) __arm_vmulq_f16(__a, __b) #define vmovntq_s16(__a, __b) __arm_vmovntq_s16(__a, __b) #define vmovnbq_s16(__a, __b) __arm_vmovnbq_s16(__a, __b) #define vmlsldavxq_s16(__a, __b) __arm_vmlsldavxq_s16(__a, __b) @@ -1112,7 +1068,6 @@ #define vcaddq_rot270_f16(__a, __b) __arm_vcaddq_rot270_f16(__a, __b) #define vbicq_f16(__a, __b) __arm_vbicq_f16(__a, __b) #define vandq_f16(__a, __b) __arm_vandq_f16(__a, __b) -#define vaddq_n_f16(__a, __b) __arm_vaddq_n_f16(__a, __b) #define vabdq_f16(__a, __b) __arm_vabdq_f16(__a, __b) #define vshlltq_n_s8(__a, __imm) __arm_vshlltq_n_s8(__a, __imm) #define vshllbq_n_s8(__a, __imm) __arm_vshllbq_n_s8(__a, __imm) @@ -1143,7 +1098,6 @@ #define vcmpgeq_f32(__a, __b) __arm_vcmpgeq_f32(__a, __b) #define vcmpeqq_n_f32(__a, __b) __arm_vcmpeqq_n_f32(__a, __b) #define vcmpeqq_f32(__a, __b) __arm_vcmpeqq_f32(__a, __b) -#define vsubq_f32(__a, __b) __arm_vsubq_f32(__a, __b) #define vqmovntq_s32(__a, __b) __arm_vqmovntq_s32(__a, __b) #define vqmovnbq_s32(__a, __b) __arm_vqmovnbq_s32(__a, __b) #define vqdmulltq_s32(__a, __b) __arm_vqdmulltq_s32(__a, __b) @@ -1152,8 +1106,6 @@ #define vqdmullbq_n_s32(__a, __b) __arm_vqdmullbq_n_s32(__a, __b) #define vorrq_f32(__a, __b) __arm_vorrq_f32(__a, __b) #define vornq_f32(__a, __b) __arm_vornq_f32(__a, __b) -#define vmulq_n_f32(__a, __b) __arm_vmulq_n_f32(__a, __b) -#define vmulq_f32(__a, __b) __arm_vmulq_f32(__a, __b) #define vmovntq_s32(__a, __b) __arm_vmovntq_s32(__a, __b) #define vmovnbq_s32(__a, __b) __arm_vmovnbq_s32(__a, __b) #define vmlsldavxq_s32(__a, __b) __arm_vmlsldavxq_s32(__a, __b) @@ -1177,7 +1129,6 @@ #define vcaddq_rot270_f32(__a, __b) __arm_vcaddq_rot270_f32(__a, __b) #define vbicq_f32(__a, __b) __arm_vbicq_f32(__a, __b) #define vandq_f32(__a, __b) __arm_vandq_f32(__a, __b) -#define vaddq_n_f32(__a, __b) __arm_vaddq_n_f32(__a, __b) #define vabdq_f32(__a, __b) __arm_vabdq_f32(__a, __b) #define vshlltq_n_s16(__a, __imm) __arm_vshlltq_n_s16(__a, __imm) #define vshllbq_n_s16(__a, __imm) __arm_vshllbq_n_s16(__a, __imm) @@ -1681,34 +1632,28 @@ #define vqmovntq_m_u32(__a, __b, __p) __arm_vqmovntq_m_u32(__a, __b, __p) #define vrev32q_m_u16(__inactive, __a, __p) __arm_vrev32q_m_u16(__inactive, __a, __p) #define vsriq_m_n_s8(__a, __b, __imm, __p) __arm_vsriq_m_n_s8(__a, __b, __imm, __p) -#define vsubq_m_s8(__inactive, __a, __b, __p) __arm_vsubq_m_s8(__inactive, __a, __b, __p) #define vcvtq_m_n_f16_u16(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_f16_u16(__inactive, __a, __imm6, __p) #define vqshluq_m_n_s8(__inactive, __a, __imm, __p) __arm_vqshluq_m_n_s8(__inactive, __a, __imm, __p) #define vabavq_p_s8(__a, __b, __c, __p) __arm_vabavq_p_s8(__a, __b, __c, __p) #define vsriq_m_n_u8(__a, __b, __imm, __p) __arm_vsriq_m_n_u8(__a, __b, __imm, __p) #define vshlq_m_u8(__inactive, __a, __b, __p) __arm_vshlq_m_u8(__inactive, __a, __b, __p) -#define vsubq_m_u8(__inactive, __a, __b, __p) __arm_vsubq_m_u8(__inactive, __a, __b, __p) #define vabavq_p_u8(__a, __b, __c, __p) __arm_vabavq_p_u8(__a, __b, __c, __p) #define vshlq_m_s8(__inactive, __a, __b, __p) __arm_vshlq_m_s8(__inactive, __a, __b, __p) #define vcvtq_m_n_f16_s16(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_f16_s16(__inactive, __a, __imm6, __p) #define vsriq_m_n_s16(__a, __b, __imm, __p) __arm_vsriq_m_n_s16(__a, __b, __imm, __p) -#define vsubq_m_s16(__inactive, __a, __b, __p) __arm_vsubq_m_s16(__inactive, __a, __b, __p) #define vcvtq_m_n_f32_u32(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_f32_u32(__inactive, __a, __imm6, __p) #define vqshluq_m_n_s16(__inactive, __a, __imm, __p) __arm_vqshluq_m_n_s16(__inactive, __a, __imm, __p) #define vabavq_p_s16(__a, __b, __c, __p) __arm_vabavq_p_s16(__a, __b, __c, __p) #define vsriq_m_n_u16(__a, __b, __imm, __p) __arm_vsriq_m_n_u16(__a, __b, __imm, __p) #define vshlq_m_u16(__inactive, __a, __b, __p) __arm_vshlq_m_u16(__inactive, __a, __b, __p) -#define vsubq_m_u16(__inactive, __a, __b, __p) __arm_vsubq_m_u16(__inactive, __a, __b, __p) #define vabavq_p_u16(__a, __b, __c, __p) __arm_vabavq_p_u16(__a, __b, __c, __p) #define vshlq_m_s16(__inactive, __a, __b, __p) __arm_vshlq_m_s16(__inactive, __a, __b, __p) #define vcvtq_m_n_f32_s32(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_f32_s32(__inactive, __a, __imm6, __p) #define vsriq_m_n_s32(__a, __b, __imm, __p) __arm_vsriq_m_n_s32(__a, __b, __imm, __p) -#define vsubq_m_s32(__inactive, __a, __b, __p) __arm_vsubq_m_s32(__inactive, __a, __b, __p) #define vqshluq_m_n_s32(__inactive, __a, __imm, __p) __arm_vqshluq_m_n_s32(__inactive, __a, __imm, __p) #define vabavq_p_s32(__a, __b, __c, __p) __arm_vabavq_p_s32(__a, __b, __c, __p) #define vsriq_m_n_u32(__a, __b, __imm, __p) __arm_vsriq_m_n_u32(__a, __b, __imm, __p) #define vshlq_m_u32(__inactive, __a, __b, __p) __arm_vshlq_m_u32(__inactive, __a, __b, __p) -#define vsubq_m_u32(__inactive, __a, __b, __p) __arm_vsubq_m_u32(__inactive, __a, __b, __p) #define vabavq_p_u32(__a, __b, __c, __p) __arm_vabavq_p_u32(__a, __b, __c, __p) #define vshlq_m_s32(__inactive, __a, __b, __p) __arm_vshlq_m_s32(__inactive, __a, __b, __p) #define vabdq_m_s8(__inactive, __a, __b, __p) __arm_vabdq_m_s8(__inactive, __a, __b, __p) @@ -1717,18 +1662,6 @@ #define vabdq_m_u8(__inactive, __a, __b, __p) __arm_vabdq_m_u8(__inactive, __a, __b, __p) #define vabdq_m_u32(__inactive, __a, __b, __p) __arm_vabdq_m_u32(__inactive, __a, __b, __p) #define vabdq_m_u16(__inactive, __a, __b, __p) __arm_vabdq_m_u16(__inactive, __a, __b, __p) -#define vaddq_m_n_s8(__inactive, __a, __b, __p) __arm_vaddq_m_n_s8(__inactive, __a, __b, __p) -#define vaddq_m_n_s32(__inactive, __a, __b, __p) __arm_vaddq_m_n_s32(__inactive, __a, __b, __p) -#define vaddq_m_n_s16(__inactive, __a, __b, __p) __arm_vaddq_m_n_s16(__inactive, __a, __b, __p) -#define vaddq_m_n_u8(__inactive, __a, __b, __p) __arm_vaddq_m_n_u8(__inactive, __a, __b, __p) -#define vaddq_m_n_u32(__inactive, __a, __b, __p) __arm_vaddq_m_n_u32(__inactive, __a, __b, __p) -#define vaddq_m_n_u16(__inactive, __a, __b, __p) __arm_vaddq_m_n_u16(__inactive, __a, __b, __p) -#define vaddq_m_s8(__inactive, __a, __b, __p) __arm_vaddq_m_s8(__inactive, __a, __b, __p) -#define vaddq_m_s32(__inactive, __a, __b, __p) __arm_vaddq_m_s32(__inactive, __a, __b, __p) -#define vaddq_m_s16(__inactive, __a, __b, __p) __arm_vaddq_m_s16(__inactive, __a, __b, __p) -#define vaddq_m_u8(__inactive, __a, __b, __p) __arm_vaddq_m_u8(__inactive, __a, __b, __p) -#define vaddq_m_u32(__inactive, __a, __b, __p) __arm_vaddq_m_u32(__inactive, __a, __b, __p) -#define vaddq_m_u16(__inactive, __a, __b, __p) __arm_vaddq_m_u16(__inactive, __a, __b, __p) #define vandq_m_s8(__inactive, __a, __b, __p) __arm_vandq_m_s8(__inactive, __a, __b, __p) #define vandq_m_s32(__inactive, __a, __b, __p) __arm_vandq_m_s32(__inactive, __a, __b, __p) #define vandq_m_s16(__inactive, __a, __b, __p) __arm_vandq_m_s16(__inactive, __a, __b, __p) @@ -1852,18 +1785,6 @@ #define vmulltq_int_m_u8(__inactive, __a, __b, __p) __arm_vmulltq_int_m_u8(__inactive, __a, __b, __p) #define vmulltq_int_m_u32(__inactive, __a, __b, __p) __arm_vmulltq_int_m_u32(__inactive, __a, __b, __p) #define vmulltq_int_m_u16(__inactive, __a, __b, __p) __arm_vmulltq_int_m_u16(__inactive, __a, __b, __p) -#define vmulq_m_n_s8(__inactive, __a, __b, __p) __arm_vmulq_m_n_s8(__inactive, __a, __b, __p) -#define vmulq_m_n_s32(__inactive, __a, __b, __p) __arm_vmulq_m_n_s32(__inactive, __a, __b, __p) -#define vmulq_m_n_s16(__inactive, __a, __b, __p) __arm_vmulq_m_n_s16(__inactive, __a, __b, __p) -#define vmulq_m_n_u8(__inactive, __a, __b, __p) __arm_vmulq_m_n_u8(__inactive, __a, __b, __p) -#define vmulq_m_n_u32(__inactive, __a, __b, __p) __arm_vmulq_m_n_u32(__inactive, __a, __b, __p) -#define vmulq_m_n_u16(__inactive, __a, __b, __p) __arm_vmulq_m_n_u16(__inactive, __a, __b, __p) -#define vmulq_m_s8(__inactive, __a, __b, __p) __arm_vmulq_m_s8(__inactive, __a, __b, __p) -#define vmulq_m_s32(__inactive, __a, __b, __p) __arm_vmulq_m_s32(__inactive, __a, __b, __p) -#define vmulq_m_s16(__inactive, __a, __b, __p) __arm_vmulq_m_s16(__inactive, __a, __b, __p) -#define vmulq_m_u8(__inactive, __a, __b, __p) __arm_vmulq_m_u8(__inactive, __a, __b, __p) -#define vmulq_m_u32(__inactive, __a, __b, __p) __arm_vmulq_m_u32(__inactive, __a, __b, __p) -#define vmulq_m_u16(__inactive, __a, __b, __p) __arm_vmulq_m_u16(__inactive, __a, __b, __p) #define vornq_m_s8(__inactive, __a, __b, __p) __arm_vornq_m_s8(__inactive, __a, __b, __p) #define vornq_m_s32(__inactive, __a, __b, __p) __arm_vornq_m_s32(__inactive, __a, __b, __p) #define vornq_m_s16(__inactive, __a, __b, __p) __arm_vornq_m_s16(__inactive, __a, __b, __p) @@ -2008,12 +1929,6 @@ #define vsliq_m_n_u8(__a, __b, __imm, __p) __arm_vsliq_m_n_u8(__a, __b, __imm, __p) #define vsliq_m_n_u32(__a, __b, __imm, __p) __arm_vsliq_m_n_u32(__a, __b, __imm, __p) #define vsliq_m_n_u16(__a, __b, __imm, __p) __arm_vsliq_m_n_u16(__a, __b, __imm, __p) -#define vsubq_m_n_s8(__inactive, __a, __b, __p) __arm_vsubq_m_n_s8(__inactive, __a, __b, __p) -#define vsubq_m_n_s32(__inactive, __a, __b, __p) __arm_vsubq_m_n_s32(__inactive, __a, __b, __p) -#define vsubq_m_n_s16(__inactive, __a, __b, __p) __arm_vsubq_m_n_s16(__inactive, __a, __b, __p) -#define vsubq_m_n_u8(__inactive, __a, __b, __p) __arm_vsubq_m_n_u8(__inactive, __a, __b, __p) -#define vsubq_m_n_u32(__inactive, __a, __b, __p) __arm_vsubq_m_n_u32(__inactive, __a, __b, __p) -#define vsubq_m_n_u16(__inactive, __a, __b, __p) __arm_vsubq_m_n_u16(__inactive, __a, __b, __p) #define vmlaldavaq_p_s32(__a, __b, __c, __p) __arm_vmlaldavaq_p_s32(__a, __b, __c, __p) #define vmlaldavaq_p_s16(__a, __b, __c, __p) __arm_vmlaldavaq_p_s16(__a, __b, __c, __p) #define vmlaldavaq_p_u32(__a, __b, __c, __p) __arm_vmlaldavaq_p_u32(__a, __b, __c, __p) @@ -2091,10 +2006,6 @@ #define vshrntq_m_n_u16(__a, __b, __imm, __p) __arm_vshrntq_m_n_u16(__a, __b, __imm, __p) #define vabdq_m_f32(__inactive, __a, __b, __p) __arm_vabdq_m_f32(__inactive, __a, __b, __p) #define vabdq_m_f16(__inactive, __a, __b, __p) __arm_vabdq_m_f16(__inactive, __a, __b, __p) -#define vaddq_m_f32(__inactive, __a, __b, __p) __arm_vaddq_m_f32(__inactive, __a, __b, __p) -#define vaddq_m_f16(__inactive, __a, __b, __p) __arm_vaddq_m_f16(__inactive, __a, __b, __p) -#define vaddq_m_n_f32(__inactive, __a, __b, __p) __arm_vaddq_m_n_f32(__inactive, __a, __b, __p) -#define vaddq_m_n_f16(__inactive, __a, __b, __p) __arm_vaddq_m_n_f16(__inactive, __a, __b, __p) #define vandq_m_f32(__inactive, __a, __b, __p) __arm_vandq_m_f32(__inactive, __a, __b, __p) #define vandq_m_f16(__inactive, __a, __b, __p) __arm_vandq_m_f16(__inactive, __a, __b, __p) #define vbicq_m_f32(__inactive, __a, __b, __p) __arm_vbicq_m_f32(__inactive, __a, __b, __p) @@ -2139,18 +2050,10 @@ #define vmaxnmq_m_f16(__inactive, __a, __b, __p) __arm_vmaxnmq_m_f16(__inactive, __a, __b, __p) #define vminnmq_m_f32(__inactive, __a, __b, __p) __arm_vminnmq_m_f32(__inactive, __a, __b, __p) #define vminnmq_m_f16(__inactive, __a, __b, __p) __arm_vminnmq_m_f16(__inactive, __a, __b, __p) -#define vmulq_m_f32(__inactive, __a, __b, __p) __arm_vmulq_m_f32(__inactive, __a, __b, __p) -#define vmulq_m_f16(__inactive, __a, __b, __p) __arm_vmulq_m_f16(__inactive, __a, __b, __p) -#define vmulq_m_n_f32(__inactive, __a, __b, __p) __arm_vmulq_m_n_f32(__inactive, __a, __b, __p) -#define vmulq_m_n_f16(__inactive, __a, __b, __p) __arm_vmulq_m_n_f16(__inactive, __a, __b, __p) #define vornq_m_f32(__inactive, __a, __b, __p) __arm_vornq_m_f32(__inactive, __a, __b, __p) #define vornq_m_f16(__inactive, __a, __b, __p) __arm_vornq_m_f16(__inactive, __a, __b, __p) #define vorrq_m_f32(__inactive, __a, __b, __p) __arm_vorrq_m_f32(__inactive, __a, __b, __p) #define vorrq_m_f16(__inactive, __a, __b, __p) __arm_vorrq_m_f16(__inactive, __a, __b, __p) -#define vsubq_m_f32(__inactive, __a, __b, __p) __arm_vsubq_m_f32(__inactive, __a, __b, __p) -#define vsubq_m_f16(__inactive, __a, __b, __p) __arm_vsubq_m_f16(__inactive, __a, __b, __p) -#define vsubq_m_n_f32(__inactive, __a, __b, __p) __arm_vsubq_m_n_f32(__inactive, __a, __b, __p) -#define vsubq_m_n_f16(__inactive, __a, __b, __p) __arm_vsubq_m_n_f16(__inactive, __a, __b, __p) #define vstrbq_s8( __addr, __value) __arm_vstrbq_s8( __addr, __value) #define vstrbq_u8( __addr, __value) __arm_vstrbq_u8( __addr, __value) #define vstrbq_u16( __addr, __value) __arm_vstrbq_u16( __addr, __value) @@ -2347,14 +2250,6 @@ #define vstrwq_scatter_shifted_offset_p_u32(__base, __offset, __value, __p) __arm_vstrwq_scatter_shifted_offset_p_u32(__base, __offset, __value, __p) #define vstrwq_scatter_shifted_offset_s32(__base, __offset, __value) __arm_vstrwq_scatter_shifted_offset_s32(__base, __offset, __value) #define vstrwq_scatter_shifted_offset_u32(__base, __offset, __value) __arm_vstrwq_scatter_shifted_offset_u32(__base, __offset, __value) -#define vaddq_s8(__a, __b) __arm_vaddq_s8(__a, __b) -#define vaddq_s16(__a, __b) __arm_vaddq_s16(__a, __b) -#define vaddq_s32(__a, __b) __arm_vaddq_s32(__a, __b) -#define vaddq_u8(__a, __b) __arm_vaddq_u8(__a, __b) -#define vaddq_u16(__a, __b) __arm_vaddq_u16(__a, __b) -#define vaddq_u32(__a, __b) __arm_vaddq_u32(__a, __b) -#define vaddq_f16(__a, __b) __arm_vaddq_f16(__a, __b) -#define vaddq_f32(__a, __b) __arm_vaddq_f32(__a, __b) #define vuninitializedq_u8(void) __arm_vuninitializedq_u8(void) #define vuninitializedq_u16(void) __arm_vuninitializedq_u16(void) #define vuninitializedq_u32(void) __arm_vuninitializedq_u32(void) @@ -2484,18 +2379,6 @@ #define vabsq_x_s8(__a, __p) __arm_vabsq_x_s8(__a, __p) #define vabsq_x_s16(__a, __p) __arm_vabsq_x_s16(__a, __p) #define vabsq_x_s32(__a, __p) __arm_vabsq_x_s32(__a, __p) -#define vaddq_x_s8(__a, __b, __p) __arm_vaddq_x_s8(__a, __b, __p) -#define vaddq_x_s16(__a, __b, __p) __arm_vaddq_x_s16(__a, __b, __p) -#define vaddq_x_s32(__a, __b, __p) __arm_vaddq_x_s32(__a, __b, __p) -#define vaddq_x_n_s8(__a, __b, __p) __arm_vaddq_x_n_s8(__a, __b, __p) -#define vaddq_x_n_s16(__a, __b, __p) __arm_vaddq_x_n_s16(__a, __b, __p) -#define vaddq_x_n_s32(__a, __b, __p) __arm_vaddq_x_n_s32(__a, __b, __p) -#define vaddq_x_u8(__a, __b, __p) __arm_vaddq_x_u8(__a, __b, __p) -#define vaddq_x_u16(__a, __b, __p) __arm_vaddq_x_u16(__a, __b, __p) -#define vaddq_x_u32(__a, __b, __p) __arm_vaddq_x_u32(__a, __b, __p) -#define vaddq_x_n_u8(__a, __b, __p) __arm_vaddq_x_n_u8(__a, __b, __p) -#define vaddq_x_n_u16(__a, __b, __p) __arm_vaddq_x_n_u16(__a, __b, __p) -#define vaddq_x_n_u32(__a, __b, __p) __arm_vaddq_x_n_u32(__a, __b, __p) #define vclsq_x_s8(__a, __p) __arm_vclsq_x_s8(__a, __p) #define vclsq_x_s16(__a, __p) __arm_vclsq_x_s16(__a, __p) #define vclsq_x_s32(__a, __p) __arm_vclsq_x_s32(__a, __p) @@ -2530,30 +2413,6 @@ #define vmulltq_int_x_u8(__a, __b, __p) __arm_vmulltq_int_x_u8(__a, __b, __p) #define vmulltq_int_x_u16(__a, __b, __p) __arm_vmulltq_int_x_u16(__a, __b, __p) #define vmulltq_int_x_u32(__a, __b, __p) __arm_vmulltq_int_x_u32(__a, __b, __p) -#define vmulq_x_s8(__a, __b, __p) __arm_vmulq_x_s8(__a, __b, __p) -#define vmulq_x_s16(__a, __b, __p) __arm_vmulq_x_s16(__a, __b, __p) -#define vmulq_x_s32(__a, __b, __p) __arm_vmulq_x_s32(__a, __b, __p) -#define vmulq_x_n_s8(__a, __b, __p) __arm_vmulq_x_n_s8(__a, __b, __p) -#define vmulq_x_n_s16(__a, __b, __p) __arm_vmulq_x_n_s16(__a, __b, __p) -#define vmulq_x_n_s32(__a, __b, __p) __arm_vmulq_x_n_s32(__a, __b, __p) -#define vmulq_x_u8(__a, __b, __p) __arm_vmulq_x_u8(__a, __b, __p) -#define vmulq_x_u16(__a, __b, __p) __arm_vmulq_x_u16(__a, __b, __p) -#define vmulq_x_u32(__a, __b, __p) __arm_vmulq_x_u32(__a, __b, __p) -#define vmulq_x_n_u8(__a, __b, __p) __arm_vmulq_x_n_u8(__a, __b, __p) -#define vmulq_x_n_u16(__a, __b, __p) __arm_vmulq_x_n_u16(__a, __b, __p) -#define vmulq_x_n_u32(__a, __b, __p) __arm_vmulq_x_n_u32(__a, __b, __p) -#define vsubq_x_s8(__a, __b, __p) __arm_vsubq_x_s8(__a, __b, __p) -#define vsubq_x_s16(__a, __b, __p) __arm_vsubq_x_s16(__a, __b, __p) -#define vsubq_x_s32(__a, __b, __p) __arm_vsubq_x_s32(__a, __b, __p) -#define vsubq_x_n_s8(__a, __b, __p) __arm_vsubq_x_n_s8(__a, __b, __p) -#define vsubq_x_n_s16(__a, __b, __p) __arm_vsubq_x_n_s16(__a, __b, __p) -#define vsubq_x_n_s32(__a, __b, __p) __arm_vsubq_x_n_s32(__a, __b, __p) -#define vsubq_x_u8(__a, __b, __p) __arm_vsubq_x_u8(__a, __b, __p) -#define vsubq_x_u16(__a, __b, __p) __arm_vsubq_x_u16(__a, __b, __p) -#define vsubq_x_u32(__a, __b, __p) __arm_vsubq_x_u32(__a, __b, __p) -#define vsubq_x_n_u8(__a, __b, __p) __arm_vsubq_x_n_u8(__a, __b, __p) -#define vsubq_x_n_u16(__a, __b, __p) __arm_vsubq_x_n_u16(__a, __b, __p) -#define vsubq_x_n_u32(__a, __b, __p) __arm_vsubq_x_n_u32(__a, __b, __p) #define vcaddq_rot90_x_s8(__a, __b, __p) __arm_vcaddq_rot90_x_s8(__a, __b, __p) #define vcaddq_rot90_x_s16(__a, __b, __p) __arm_vcaddq_rot90_x_s16(__a, __b, __p) #define vcaddq_rot90_x_s32(__a, __b, __p) __arm_vcaddq_rot90_x_s32(__a, __b, __p) @@ -2722,20 +2581,8 @@ #define vabdq_x_f32(__a, __b, __p) __arm_vabdq_x_f32(__a, __b, __p) #define vabsq_x_f16(__a, __p) __arm_vabsq_x_f16(__a, __p) #define vabsq_x_f32(__a, __p) __arm_vabsq_x_f32(__a, __p) -#define vaddq_x_f16(__a, __b, __p) __arm_vaddq_x_f16(__a, __b, __p) -#define vaddq_x_f32(__a, __b, __p) __arm_vaddq_x_f32(__a, __b, __p) -#define vaddq_x_n_f16(__a, __b, __p) __arm_vaddq_x_n_f16(__a, __b, __p) -#define vaddq_x_n_f32(__a, __b, __p) __arm_vaddq_x_n_f32(__a, __b, __p) #define vnegq_x_f16(__a, __p) __arm_vnegq_x_f16(__a, __p) #define vnegq_x_f32(__a, __p) __arm_vnegq_x_f32(__a, __p) -#define vmulq_x_f16(__a, __b, __p) __arm_vmulq_x_f16(__a, __b, __p) -#define vmulq_x_f32(__a, __b, __p) __arm_vmulq_x_f32(__a, __b, __p) -#define vmulq_x_n_f16(__a, __b, __p) __arm_vmulq_x_n_f16(__a, __b, __p) -#define vmulq_x_n_f32(__a, __b, __p) __arm_vmulq_x_n_f32(__a, __b, __p) -#define vsubq_x_f16(__a, __b, __p) __arm_vsubq_x_f16(__a, __b, __p) -#define vsubq_x_f32(__a, __b, __p) __arm_vsubq_x_f32(__a, __b, __p) -#define vsubq_x_n_f16(__a, __b, __p) __arm_vsubq_x_n_f16(__a, __b, __p) -#define vsubq_x_n_f32(__a, __b, __p) __arm_vsubq_x_n_f32(__a, __b, __p) #define vcaddq_rot90_x_f16(__a, __b, __p) __arm_vcaddq_rot90_x_f16(__a, __b, __p) #define vcaddq_rot90_x_f32(__a, __b, __p) __arm_vcaddq_rot90_x_f32(__a, __b, __p) #define vcaddq_rot270_x_f16(__a, __b, __p) __arm_vcaddq_rot270_x_f16(__a, __b, __p) @@ -3659,19 +3506,6 @@ __arm_vshlq_u32 (uint32x4_t __a, int32x4_t __b) { return __builtin_mve_vshlq_uv4si (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vsubq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vsubq_n_uv16qi (__a, __b); -} __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) @@ -3729,20 +3563,6 @@ __arm_vornq_u8 (uint8x16_t __a, uint8x16_t __b) return __builtin_mve_vornq_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vmulq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vmulq_n_uv16qi (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int_u8 (uint8x16_t __a, uint8x16_t __b) @@ -3927,13 +3747,6 @@ __arm_vaddvaq_u8 (uint32_t __a, uint8x16_t __b) return __builtin_mve_vaddvaq_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vaddq_n_uv16qi (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_u8 (uint8x16_t __a, uint8x16_t __b) @@ -4137,20 +3950,6 @@ __arm_vaddvq_p_s8 (int8x16_t __a, mve_pred16_t __p) return __builtin_mve_vaddvq_p_sv16qi (__a, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vsubq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vsubq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshlq_r_s8 (int8x16_t __a, int32_t __b) @@ -4284,20 +4083,6 @@ __arm_vornq_s8 (int8x16_t __a, int8x16_t __b) return __builtin_mve_vornq_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vmulq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vmulq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int_s8 (int8x16_t __a, int8x16_t __b) @@ -4466,13 +4251,6 @@ __arm_vaddvaq_s8 (int32_t __a, int8x16_t __b) return __builtin_mve_vaddvaq_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vaddq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_s8 (int8x16_t __a, int8x16_t __b) @@ -4501,20 +4279,6 @@ __arm_vqshlq_n_s8 (int8x16_t __a, const int __imm) return __builtin_mve_vqshlq_n_sv16qi (__a, __imm); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vsubq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vsubq_n_uv8hi (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrmulhq_u16 (uint16x8_t __a, uint16x8_t __b) @@ -4571,20 +4335,6 @@ __arm_vornq_u16 (uint16x8_t __a, uint16x8_t __b) return __builtin_mve_vornq_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vmulq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vmulq_n_uv8hi (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int_u16 (uint16x8_t __a, uint16x8_t __b) @@ -4769,13 +4519,6 @@ __arm_vaddvaq_u16 (uint32_t __a, uint16x8_t __b) return __builtin_mve_vaddvaq_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vaddq_n_uv8hi (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_u16 (uint16x8_t __a, uint16x8_t __b) @@ -4979,20 +4722,6 @@ __arm_vaddvq_p_s16 (int16x8_t __a, mve_pred16_t __p) return __builtin_mve_vaddvq_p_sv8hi (__a, __p); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vsubq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vsubq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshlq_r_s16 (int16x8_t __a, int32_t __b) @@ -5126,20 +4855,6 @@ __arm_vornq_s16 (int16x8_t __a, int16x8_t __b) return __builtin_mve_vornq_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vmulq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vmulq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int_s16 (int16x8_t __a, int16x8_t __b) @@ -5308,13 +5023,6 @@ __arm_vaddvaq_s16 (int32_t __a, int16x8_t __b) return __builtin_mve_vaddvaq_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vaddq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_s16 (int16x8_t __a, int16x8_t __b) @@ -5343,20 +5051,6 @@ __arm_vqshlq_n_s16 (int16x8_t __a, const int __imm) return __builtin_mve_vqshlq_n_sv8hi (__a, __imm); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vsubq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vsubq_n_uv4si (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrmulhq_u32 (uint32x4_t __a, uint32x4_t __b) @@ -5413,20 +5107,6 @@ __arm_vornq_u32 (uint32x4_t __a, uint32x4_t __b) return __builtin_mve_vornq_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vmulq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vmulq_n_uv4si (__a, __b); -} - __extension__ extern __inline uint64x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int_u32 (uint32x4_t __a, uint32x4_t __b) @@ -5611,13 +5291,6 @@ __arm_vaddvaq_u32 (uint32_t __a, uint32x4_t __b) return __builtin_mve_vaddvaq_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vaddq_n_uv4si (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_u32 (uint32x4_t __a, uint32x4_t __b) @@ -5821,20 +5494,6 @@ __arm_vaddvq_p_s32 (int32x4_t __a, mve_pred16_t __p) return __builtin_mve_vaddvq_p_sv4si (__a, __p); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vsubq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vsubq_n_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshlq_r_s32 (int32x4_t __a, int32_t __b) @@ -5968,20 +5627,6 @@ __arm_vornq_s32 (int32x4_t __a, int32x4_t __b) return __builtin_mve_vornq_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vmulq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vmulq_n_sv4si (__a, __b); -} - __extension__ extern __inline int64x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int_s32 (int32x4_t __a, int32x4_t __b) @@ -6150,13 +5795,6 @@ __arm_vaddvaq_s32 (int32_t __a, int32x4_t __b) return __builtin_mve_vaddvaq_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vaddq_n_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_s32 (int32x4_t __a, int32x4_t __b) @@ -9355,13 +8993,6 @@ __arm_vsriq_m_n_s8 (int8x16_t __a, int8x16_t __b, const int __imm, mve_pred16_t return __builtin_mve_vsriq_m_n_sv16qi (__a, __b, __imm, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_sv16qi (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshluq_m_n_s8 (uint8x16_t __inactive, int8x16_t __a, const int __imm, mve_pred16_t __p) @@ -9390,13 +9021,6 @@ __arm_vshlq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, int8x16_t __b, mve_pred return __builtin_mve_vshlq_m_uv16qi (__inactive, __a, __b, __p); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_uv16qi (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabavq_p_u8 (uint32_t __a, uint8x16_t __b, uint8x16_t __c, mve_pred16_t __p) @@ -9418,13 +9042,6 @@ __arm_vsriq_m_n_s16 (int16x8_t __a, int16x8_t __b, const int __imm, mve_pred16_t return __builtin_mve_vsriq_m_n_sv8hi (__a, __b, __imm, __p); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_sv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshluq_m_n_s16 (uint16x8_t __inactive, int16x8_t __a, const int __imm, mve_pred16_t __p) @@ -9453,13 +9070,6 @@ __arm_vshlq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, int16x8_t __b, mve_pre return __builtin_mve_vshlq_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabavq_p_u16 (uint32_t __a, uint16x8_t __b, uint16x8_t __c, mve_pred16_t __p) @@ -9481,13 +9091,6 @@ __arm_vsriq_m_n_s32 (int32x4_t __a, int32x4_t __b, const int __imm, mve_pred16_t return __builtin_mve_vsriq_m_n_sv4si (__a, __b, __imm, __p); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_sv4si (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshluq_m_n_s32 (uint32x4_t __inactive, int32x4_t __a, const int __imm, mve_pred16_t __p) @@ -9516,13 +9119,6 @@ __arm_vshlq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, int32x4_t __b, mve_pre return __builtin_mve_vshlq_m_uv4si (__inactive, __a, __b, __p); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_uv4si (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabavq_p_u32 (uint32_t __a, uint32x4_t __b, uint32x4_t __c, mve_pred16_t __p) @@ -9579,90 +9175,6 @@ __arm_vabdq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pr return __builtin_mve_vabdq_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vandq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -10524,90 +10036,6 @@ __arm_vmulltq_int_m_u16 (uint32x4_t __inactive, uint16x8_t __a, uint16x8_t __b, return __builtin_mve_vmulltq_int_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -11616,48 +11044,6 @@ __arm_vsliq_m_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __imm, mve_pred16 return __builtin_mve_vsliq_m_n_uv8hi (__a, __b, __imm, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int64_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlaldavaq_p_s32 (int64_t __a, int32x4_t __b, int32x4_t __c, mve_pred16_t __p) @@ -13333,48 +12719,6 @@ __arm_vstrwq_scatter_shifted_offset_u32 (uint32_t * __base, uint32x4_t __offset, __builtin_mve_vstrwq_scatter_shifted_offset_uv4si ((__builtin_neon_si *) __base, __offset, __value); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __a + __b; -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __a + __b; -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __a + __b; -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __a + __b; -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __a + __b; -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __a + __b; -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vddupq_m_n_u8 (uint8x16_t __inactive, uint32_t __a, const int __imm, mve_pred16_t __p) @@ -14325,90 +13669,6 @@ __arm_vabsq_x_s32 (int32x4_t __a, mve_pred16_t __p) return __builtin_mve_vabsq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_s8 (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_s16 (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_s32 (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_u8 (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_u16 (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_u32 (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vclsq_x_s8 (int8x16_t __a, mve_pred16_t __p) @@ -14647,174 +13907,6 @@ __arm_vmulltq_int_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __builtin_mve_vmulltq_int_m_uv4si (__arm_vuninitializedq_u64 (), __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_s8 (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_s16 (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_s32 (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_u8 (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_u16 (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_u32 (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_s8 (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_s16 (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_s32 (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_u8 (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_u16 (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_u32 (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -16970,20 +16062,6 @@ __arm_vcvtmq_s32_f32 (float32x4_t __a) return __builtin_mve_vcvtmq_sv4si (__a); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_f16 (float16x8_t __a, float16_t __b) -{ - return __builtin_mve_vsubq_n_fv8hf (__a, __b); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_n_f32 (float32x4_t __a, float32_t __b) -{ - return __builtin_mve_vsubq_n_fv4sf (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbrsrq_n_f16 (float16x8_t __a, int32_t __b) @@ -17152,13 +16230,6 @@ __arm_vcmpeqq_f16 (float16x8_t __a, float16x8_t __b) return __builtin_mve_vcmpeqq_fv8hf (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_f16 (float16x8_t __a, float16x8_t __b) -{ - return __builtin_mve_vsubq_fv8hf (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vorrq_f16 (float16x8_t __a, float16x8_t __b) @@ -17173,20 +16244,6 @@ __arm_vornq_f16 (float16x8_t __a, float16x8_t __b) return __builtin_mve_vornq_fv8hf (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_f16 (float16x8_t __a, float16_t __b) -{ - return __builtin_mve_vmulq_n_fv8hf (__a, __b); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_f16 (float16x8_t __a, float16x8_t __b) -{ - return __builtin_mve_vmulq_fv8hf (__a, __b); -} - __extension__ extern __inline float16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vminnmvq_f16 (float16_t __a, float16x8_t __b) @@ -17306,13 +16363,6 @@ __arm_vandq_f16 (float16x8_t __a, float16x8_t __b) return __builtin_mve_vandq_fv8hf (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_f16 (float16x8_t __a, float16_t __b) -{ - return __builtin_mve_vaddq_n_fv8hf (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_f16 (float16x8_t __a, float16x8_t __b) @@ -17404,13 +16454,6 @@ __arm_vcmpeqq_f32 (float32x4_t __a, float32x4_t __b) return __builtin_mve_vcmpeqq_fv4sf (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_f32 (float32x4_t __a, float32x4_t __b) -{ - return __builtin_mve_vsubq_fv4sf (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vorrq_f32 (float32x4_t __a, float32x4_t __b) @@ -17425,20 +16468,6 @@ __arm_vornq_f32 (float32x4_t __a, float32x4_t __b) return __builtin_mve_vornq_fv4sf (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_n_f32 (float32x4_t __a, float32_t __b) -{ - return __builtin_mve_vmulq_n_fv4sf (__a, __b); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_f32 (float32x4_t __a, float32x4_t __b) -{ - return __builtin_mve_vmulq_fv4sf (__a, __b); -} - __extension__ extern __inline float32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vminnmvq_f32 (float32_t __a, float32x4_t __b) @@ -17558,13 +16587,6 @@ __arm_vandq_f32 (float32x4_t __a, float32x4_t __b) return __builtin_mve_vandq_fv4sf (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_n_f32 (float32x4_t __a, float32_t __b) -{ - return __builtin_mve_vaddq_n_fv4sf (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_f32 (float32x4_t __a, float32x4_t __b) @@ -18350,34 +17372,6 @@ __arm_vabdq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve return __builtin_mve_vabdq_m_fv8hf (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_fv8hf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_f32 (float32x4_t __inactive, float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m_n_f16 (float16x8_t __inactive, float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_fv8hf (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vandq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) @@ -18686,34 +17680,6 @@ __arm_vminnmq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, m return __builtin_mve_vminnmq_m_fv8hf (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_fv8hf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_f32 (float32x4_t __inactive, float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m_n_f16 (float16x8_t __inactive, float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_fv8hf (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) @@ -18742,34 +17708,6 @@ __arm_vorrq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve return __builtin_mve_vorrq_m_fv8hf (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_fv8hf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_f32 (float32x4_t __inactive, float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m_n_f16 (float16x8_t __inactive, float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_fv8hf (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vld1q_f32 (float32_t const * __base) @@ -18994,20 +17932,6 @@ __arm_vstrwq_scatter_shifted_offset_p_f32 (float32_t * __base, uint32x4_t __offs __builtin_mve_vstrwq_scatter_shifted_offset_p_fv4sf ((__builtin_neon_si *) __base, __offset, __value, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_f16 (float16x8_t __a, float16x8_t __b) -{ - return __a + __b; -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_f32 (float32x4_t __a, float32x4_t __b) -{ - return __a + __b; -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vldrwq_gather_base_wb_f32 (uint32x4_t * __addr, const int __offset) @@ -19112,34 +18036,6 @@ __arm_vabsq_x_f32 (float32x4_t __a, mve_pred16_t __p) return __builtin_mve_vabsq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_f16 (float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x_n_f32 (float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vaddq_m_n_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vnegq_x_f16 (float16x8_t __a, mve_pred16_t __p) @@ -19154,62 +18050,6 @@ __arm_vnegq_x_f32 (float32x4_t __a, mve_pred16_t __p) return __builtin_mve_vnegq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_f16 (float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x_n_f32 (float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulq_m_n_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_f16 (float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x_n_f32 (float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vsubq_m_n_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) @@ -20448,20 +19288,6 @@ __arm_vshlq (uint32x4_t __a, int32x4_t __b) return __arm_vshlq_u32 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vsubq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vsubq_n_u8 (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrmulhq (uint8x16_t __a, uint8x16_t __b) @@ -20518,20 +19344,6 @@ __arm_vornq (uint8x16_t __a, uint8x16_t __b) return __arm_vornq_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vmulq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vmulq_n_u8 (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int (uint8x16_t __a, uint8x16_t __b) @@ -20714,13 +19526,6 @@ __arm_vaddvaq (uint32_t __a, uint8x16_t __b) return __arm_vaddvaq_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vaddq_n_u8 (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (uint8x16_t __a, uint8x16_t __b) @@ -20924,20 +19729,6 @@ __arm_vaddvq_p (int8x16_t __a, mve_pred16_t __p) return __arm_vaddvq_p_s8 (__a, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vsubq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (int8x16_t __a, int8_t __b) -{ - return __arm_vsubq_n_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshlq_r (int8x16_t __a, int32_t __b) @@ -21071,20 +19862,6 @@ __arm_vornq (int8x16_t __a, int8x16_t __b) return __arm_vornq_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vmulq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (int8x16_t __a, int8_t __b) -{ - return __arm_vmulq_n_s8 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int (int8x16_t __a, int8x16_t __b) @@ -21253,13 +20030,6 @@ __arm_vaddvaq (int32_t __a, int8x16_t __b) return __arm_vaddvaq_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (int8x16_t __a, int8_t __b) -{ - return __arm_vaddq_n_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (int8x16_t __a, int8x16_t __b) @@ -21288,20 +20058,6 @@ __arm_vqshlq_n (int8x16_t __a, const int __imm) return __arm_vqshlq_n_s8 (__a, __imm); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vsubq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vsubq_n_u16 (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrmulhq (uint16x8_t __a, uint16x8_t __b) @@ -21358,20 +20114,6 @@ __arm_vornq (uint16x8_t __a, uint16x8_t __b) return __arm_vornq_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vmulq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vmulq_n_u16 (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int (uint16x8_t __a, uint16x8_t __b) @@ -21554,13 +20296,6 @@ __arm_vaddvaq (uint32_t __a, uint16x8_t __b) return __arm_vaddvaq_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vaddq_n_u16 (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (uint16x8_t __a, uint16x8_t __b) @@ -21764,20 +20499,6 @@ __arm_vaddvq_p (int16x8_t __a, mve_pred16_t __p) return __arm_vaddvq_p_s16 (__a, __p); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vsubq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (int16x8_t __a, int16_t __b) -{ - return __arm_vsubq_n_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshlq_r (int16x8_t __a, int32_t __b) @@ -21911,20 +20632,6 @@ __arm_vornq (int16x8_t __a, int16x8_t __b) return __arm_vornq_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vmulq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (int16x8_t __a, int16_t __b) -{ - return __arm_vmulq_n_s16 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int (int16x8_t __a, int16x8_t __b) @@ -22093,13 +20800,6 @@ __arm_vaddvaq (int32_t __a, int16x8_t __b) return __arm_vaddvaq_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (int16x8_t __a, int16_t __b) -{ - return __arm_vaddq_n_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (int16x8_t __a, int16x8_t __b) @@ -22128,20 +20828,6 @@ __arm_vqshlq_n (int16x8_t __a, const int __imm) return __arm_vqshlq_n_s16 (__a, __imm); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vsubq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vsubq_n_u32 (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrmulhq (uint32x4_t __a, uint32x4_t __b) @@ -22198,20 +20884,6 @@ __arm_vornq (uint32x4_t __a, uint32x4_t __b) return __arm_vornq_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vmulq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vmulq_n_u32 (__a, __b); -} - __extension__ extern __inline uint64x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int (uint32x4_t __a, uint32x4_t __b) @@ -22394,13 +21066,6 @@ __arm_vaddvaq (uint32_t __a, uint32x4_t __b) return __arm_vaddvaq_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vaddq_n_u32 (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (uint32x4_t __a, uint32x4_t __b) @@ -22604,20 +21269,6 @@ __arm_vaddvq_p (int32x4_t __a, mve_pred16_t __p) return __arm_vaddvq_p_s32 (__a, __p); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vsubq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (int32x4_t __a, int32_t __b) -{ - return __arm_vsubq_n_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshlq_r (int32x4_t __a, int32_t __b) @@ -22751,20 +21402,6 @@ __arm_vornq (int32x4_t __a, int32x4_t __b) return __arm_vornq_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vmulq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (int32x4_t __a, int32_t __b) -{ - return __arm_vmulq_n_s32 (__a, __b); -} - __extension__ extern __inline int64x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmulltq_int (int32x4_t __a, int32x4_t __b) @@ -22933,13 +21570,6 @@ __arm_vaddvaq (int32_t __a, int32x4_t __b) return __arm_vaddvaq_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (int32x4_t __a, int32_t __b) -{ - return __arm_vaddq_n_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (int32x4_t __a, int32x4_t __b) @@ -26097,13 +24727,6 @@ __arm_vsriq_m (int8x16_t __a, int8x16_t __b, const int __imm, mve_pred16_t __p) return __arm_vsriq_m_n_s8 (__a, __b, __imm, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_s8 (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshluq_m (uint8x16_t __inactive, int8x16_t __a, const int __imm, mve_pred16_t __p) @@ -26132,13 +24755,6 @@ __arm_vshlq_m (uint8x16_t __inactive, uint8x16_t __a, int8x16_t __b, mve_pred16_ return __arm_vshlq_m_u8 (__inactive, __a, __b, __p); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_u8 (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabavq_p (uint32_t __a, uint8x16_t __b, uint8x16_t __c, mve_pred16_t __p) @@ -26160,13 +24776,6 @@ __arm_vsriq_m (int16x8_t __a, int16x8_t __b, const int __imm, mve_pred16_t __p) return __arm_vsriq_m_n_s16 (__a, __b, __imm, __p); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_s16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshluq_m (uint16x8_t __inactive, int16x8_t __a, const int __imm, mve_pred16_t __p) @@ -26195,13 +24804,6 @@ __arm_vshlq_m (uint16x8_t __inactive, uint16x8_t __a, int16x8_t __b, mve_pred16_ return __arm_vshlq_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabavq_p (uint32_t __a, uint16x8_t __b, uint16x8_t __c, mve_pred16_t __p) @@ -26223,13 +24825,6 @@ __arm_vsriq_m (int32x4_t __a, int32x4_t __b, const int __imm, mve_pred16_t __p) return __arm_vsriq_m_n_s32 (__a, __b, __imm, __p); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_s32 (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshluq_m (uint32x4_t __inactive, int32x4_t __a, const int __imm, mve_pred16_t __p) @@ -26258,13 +24853,6 @@ __arm_vshlq_m (uint32x4_t __inactive, uint32x4_t __a, int32x4_t __b, mve_pred16_ return __arm_vshlq_m_u32 (__inactive, __a, __b, __p); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_u32 (__inactive, __a, __b, __p); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabavq_p (uint32_t __a, uint32x4_t __b, uint32x4_t __c, mve_pred16_t __p) @@ -26321,90 +24909,6 @@ __arm_vabdq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16 return __arm_vabdq_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vandq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -27266,90 +25770,6 @@ __arm_vmulltq_int_m (uint32x4_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_ return __arm_vmulltq_int_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -28358,48 +26778,6 @@ __arm_vsliq_m (uint16x8_t __a, uint16x8_t __b, const int __imm, mve_pred16_t __p return __arm_vsliq_m_n_u16 (__a, __b, __imm, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int64_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlaldavaq_p (int64_t __a, int32x4_t __b, int32x4_t __c, mve_pred16_t __p) @@ -29849,48 +28227,6 @@ __arm_vstrwq_scatter_shifted_offset (uint32_t * __base, uint32x4_t __offset, uin __arm_vstrwq_scatter_shifted_offset_u32 (__base, __offset, __value); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vaddq_s8 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vaddq_s16 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vaddq_s32 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vaddq_u8 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vaddq_u16 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vaddq_u32 (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vddupq_m (uint8x16_t __inactive, uint32_t __a, const int __imm, mve_pred16_t __p) @@ -30598,90 +28934,6 @@ __arm_vabsq_x (int32x4_t __a, mve_pred16_t __p) return __arm_vabsq_x_s32 (__a, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_u32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_u32 (__a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vclsq_x (int8x16_t __a, mve_pred16_t __p) @@ -30920,174 +29172,6 @@ __arm_vmulltq_int_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __arm_vmulltq_int_x_u32 (__a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_u32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_u32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_u32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_u32 (__a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -32847,20 +30931,6 @@ __arm_vcvtq (uint32x4_t __a) return __arm_vcvtq_f32_u32 (__a); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (float16x8_t __a, float16_t __b) -{ - return __arm_vsubq_n_f16 (__a, __b); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (float32x4_t __a, float32_t __b) -{ - return __arm_vsubq_n_f32 (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbrsrq (float16x8_t __a, int32_t __b) @@ -32987,13 +31057,6 @@ __arm_vcmpeqq (float16x8_t __a, float16x8_t __b) return __arm_vcmpeqq_f16 (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (float16x8_t __a, float16x8_t __b) -{ - return __arm_vsubq_f16 (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vorrq (float16x8_t __a, float16x8_t __b) @@ -33008,20 +31071,6 @@ __arm_vornq (float16x8_t __a, float16x8_t __b) return __arm_vornq_f16 (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (float16x8_t __a, float16_t __b) -{ - return __arm_vmulq_n_f16 (__a, __b); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (float16x8_t __a, float16x8_t __b) -{ - return __arm_vmulq_f16 (__a, __b); -} - __extension__ extern __inline float16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vminnmvq (float16_t __a, float16x8_t __b) @@ -33141,13 +31190,6 @@ __arm_vandq (float16x8_t __a, float16x8_t __b) return __arm_vandq_f16 (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (float16x8_t __a, float16_t __b) -{ - return __arm_vaddq_n_f16 (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (float16x8_t __a, float16x8_t __b) @@ -33239,13 +31281,6 @@ __arm_vcmpeqq (float32x4_t __a, float32x4_t __b) return __arm_vcmpeqq_f32 (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq (float32x4_t __a, float32x4_t __b) -{ - return __arm_vsubq_f32 (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vorrq (float32x4_t __a, float32x4_t __b) @@ -33260,20 +31295,6 @@ __arm_vornq (float32x4_t __a, float32x4_t __b) return __arm_vornq_f32 (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (float32x4_t __a, float32_t __b) -{ - return __arm_vmulq_n_f32 (__a, __b); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq (float32x4_t __a, float32x4_t __b) -{ - return __arm_vmulq_f32 (__a, __b); -} - __extension__ extern __inline float32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vminnmvq (float32_t __a, float32x4_t __b) @@ -33393,13 +31414,6 @@ __arm_vandq (float32x4_t __a, float32x4_t __b) return __arm_vandq_f32 (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (float32x4_t __a, float32_t __b) -{ - return __arm_vaddq_n_f32 (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (float32x4_t __a, float32x4_t __b) @@ -34170,34 +32184,6 @@ __arm_vabdq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pre return __arm_vabdq_m_f16 (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_f16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (float32x4_t __inactive, float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_m (float16x8_t __inactive, float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_m_n_f16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vandq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) @@ -34506,34 +32492,6 @@ __arm_vminnmq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_p return __arm_vminnmq_m_f16 (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_f16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (float32x4_t __inactive, float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_m (float16x8_t __inactive, float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_m_n_f16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) @@ -34562,34 +32520,6 @@ __arm_vorrq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pre return __arm_vorrq_m_f16 (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_f16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (float32x4_t __inactive, float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_m (float16x8_t __inactive, float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_m_n_f16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vld1q (float32_t const * __base) @@ -34772,20 +32702,6 @@ __arm_vstrwq_scatter_shifted_offset_p (float32_t * __base, uint32x4_t __offset, __arm_vstrwq_scatter_shifted_offset_p_f32 (__base, __offset, __value, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (float16x8_t __a, float16x8_t __b) -{ - return __arm_vaddq_f16 (__a, __b); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq (float32x4_t __a, float32x4_t __b) -{ - return __arm_vaddq_f32 (__a, __b); -} - __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb (uint32x4_t * __addr, const int __offset, float32x4_t __value) @@ -34856,34 +32772,6 @@ __arm_vabsq_x (float32x4_t __a, mve_pred16_t __p) return __arm_vabsq_x_f32 (__a, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_f32 (__a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vaddq_x (float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __arm_vaddq_x_n_f32 (__a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vnegq_x (float16x8_t __a, mve_pred16_t __p) @@ -34898,62 +32786,6 @@ __arm_vnegq_x (float32x4_t __a, mve_pred16_t __p) return __arm_vnegq_x_f32 (__a, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_f32 (__a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulq_x (float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __arm_vmulq_x_n_f32 (__a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_f32 (__a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (float16x8_t __a, float16_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vsubq_x (float32x4_t __a, float32_t __b, mve_pred16_t __p) -{ - return __arm_vsubq_x_n_f32 (__a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) @@ -35846,26 +33678,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vabdq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vabdq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) -#define __arm_vaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vaddq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vaddq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vaddq_n_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce2(p1, double)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vaddq_n_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce2(p1, double)));}) - #define __arm_vandq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -35906,26 +33718,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vornq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vornq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) -#define __arm_vmulq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vmulq_n_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce2(p1, double)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vmulq_n_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce2(p1, double)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vmulq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vmulq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) - #define __arm_vcaddq_rot270(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -36147,26 +33939,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vminnmq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vminnmq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) -#define __arm_vsubq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vsubq_n_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce2(p1, double)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vsubq_n_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce2(p1, double)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vsubq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vsubq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vsubq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vsubq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsubq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsubq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vsubq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vsubq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) - #define __arm_vminnmvq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -37288,27 +35060,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vabdq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vabdq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vaddq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vaddq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vaddq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vaddq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vaddq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vaddq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vaddq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vaddq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vaddq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vaddq_m_n_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce2(p2, double), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vaddq_m_n_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce2(p2, double), p3));}) - #define __arm_vandq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -37479,27 +35230,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vminnmq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vminnmq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vmulq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vmulq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vmulq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vmulq_m_n_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce2(p2, double), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vmulq_m_n_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce2(p2, double), p3));}) - #define __arm_vornq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -37513,27 +35243,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vornq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vornq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vsubq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vsubq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vsubq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vsubq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vsubq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsubq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsubq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vsubq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vsubq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vsubq_m_n_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce2(p2, double), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vsubq_m_n_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce2(p2, double), p3));}) - #define __arm_vorrq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -37879,26 +35588,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t]: __arm_vabsq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), p2), \ int (*)[__ARM_mve_type_float32x4_t]: __arm_vabsq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), p2));}) -#define __arm_vaddq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vaddq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vaddq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vaddq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vaddq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vaddq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vaddq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vaddq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vaddq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vaddq_x_n_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce2(p2, double), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vaddq_x_n_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce2(p2, double), p3));}) - #define __arm_vandq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -38014,26 +35703,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vminnmq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vminnmq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vmulq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vmulq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vmulq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vmulq_x_n_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce2(p2, double), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vmulq_x_n_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce2(p2, double), p3));}) - #define __arm_vnegq_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vnegq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ @@ -38115,26 +35784,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t]: __arm_vrndxq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), p2), \ int (*)[__ARM_mve_type_float32x4_t]: __arm_vrndxq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), p2));}) -#define __arm_vsubq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vsubq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vsubq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vsubq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vsubq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsubq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsubq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vsubq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vsubq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_fp_n]: __arm_vsubq_x_n_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce2(p2, double), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_fp_n]: __arm_vsubq_x_n_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce2(p2, double), p3));}) - #define __arm_vcmulq_rot90_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -38307,22 +35956,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int16x8_t]: __arm_vshlq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int32x4_t]: __arm_vshlq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vsubq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vsubq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vsubq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vsubq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vsubq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsubq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsubq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)));}) - #define __arm_vshlq_r(p0,p1) ({ __typeof(p0) __p0 = (p0); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vshlq_r_s8 (__ARM_mve_coerce(__p0, int8x16_t), p1), \ @@ -38508,22 +36141,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vornq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vornq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vmulq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vmulltq_int(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -38687,22 +36304,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vbicq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vbicq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)));}) - #define __arm_vandq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -39375,23 +36976,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int16x8_t]: __arm_vqmovunbq_m_s16 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, int16x8_t), p2), \ int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int32x4_t]: __arm_vqmovunbq_m_s32 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, int32x4_t), p2));}) -#define __arm_vsubq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vsubq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vsubq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vsubq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vsubq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsubq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsubq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vabavq_p(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -39513,40 +37097,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_vaddq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vaddq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vaddq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vaddq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vaddq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vaddq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vaddq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - -#define __arm_vmulq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vstrwq_scatter_base(p0,p1,p2) ({ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p2)])0, \ int (*)[__ARM_mve_type_int32x4_t]: __arm_vstrwq_scatter_base_s32(p0, p1, __ARM_mve_coerce(__p2, int32x4_t)), \ @@ -39790,22 +37340,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t]: __arm_vabsq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), p2), \ int (*)[__ARM_mve_type_int32x4_t]: __arm_vabsq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), p2));}) -#define __arm_vaddq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vaddq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vaddq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vaddq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vaddq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vaddq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vaddq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vaddq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3));}) - #define __arm_vcaddq_rot270_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -39892,22 +37426,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulltq_poly_x_p8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulltq_poly_x_p16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3));}) -#define __arm_vmulq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmulq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3));}) - #define __arm_vnegq_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vnegq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ @@ -40014,22 +37532,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16_t_ptr]: __arm_vld4q_u16 (__ARM_mve_coerce1(p0, uint16_t *)), \ int (*)[__ARM_mve_type_uint32_t_ptr]: __arm_vld4q_u32 (__ARM_mve_coerce1(p0, uint32_t *)))) -#define __arm_vsubq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vsubq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vsubq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vsubq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vsubq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsubq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsubq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vsubq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3));}) - #define __arm_vgetq_lane(p0,p1) ({ __typeof(p0) __p0 = (p0); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vgetq_lane_s8 (__ARM_mve_coerce(__p0, int8x16_t), p1), \ diff --git a/gcc/config/arm/arm_mve_builtins.def b/gcc/config/arm/arm_mve_builtins.def index 5e5510f6e37..8de765de3b0 100644 --- a/gcc/config/arm/arm_mve_builtins.def +++ b/gcc/config/arm/arm_mve_builtins.def @@ -92,7 +92,6 @@ VAR1 (BINOP_UNONE_UNONE_PRED, vaddlvq_p_u, v4si) VAR3 (BINOP_PRED_NONE_NONE, vcmpneq_, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vshlq_s, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_NONE, vshlq_u, v16qi, v8hi, v4si) -VAR3 (BINOP_UNONE_UNONE_UNONE, vsubq_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vsubq_n_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vrmulhq_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vrhaddq_u, v16qi, v8hi, v4si) @@ -102,7 +101,6 @@ VAR3 (BINOP_UNONE_UNONE_UNONE, vqaddq_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vqaddq_n_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vorrq_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vornq_u, v16qi, v8hi, v4si) -VAR3 (BINOP_UNONE_UNONE_UNONE, vmulq_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vmulq_n_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vmulltq_int_u, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_UNONE_UNONE, vmullbq_int_u, v16qi, v8hi, v4si) @@ -155,7 +153,6 @@ VAR3 (BINOP_PRED_NONE_NONE, vcmpeqq_, v16qi, v8hi, v4si) VAR3 (BINOP_PRED_NONE_NONE, vcmpeqq_n_, v16qi, v8hi, v4si) VAR3 (BINOP_UNONE_NONE_IMM, vqshluq_n_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_PRED, vaddvq_p_s, v16qi, v8hi, v4si) -VAR3 (BINOP_NONE_NONE_NONE, vsubq_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vsubq_n_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vshlq_r_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vrshlq_s, v16qi, v8hi, v4si) @@ -176,7 +173,6 @@ VAR3 (BINOP_NONE_NONE_NONE, vqaddq_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vqaddq_n_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vorrq_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vornq_s, v16qi, v8hi, v4si) -VAR3 (BINOP_NONE_NONE_NONE, vmulq_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vmulq_n_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vmulltq_int_s, v16qi, v8hi, v4si) VAR3 (BINOP_NONE_NONE_NONE, vmullbq_int_s, v16qi, v8hi, v4si) @@ -230,7 +226,6 @@ VAR2 (BINOP_PRED_NONE_NONE, vcmpgeq_n_f, v8hf, v4sf) VAR2 (BINOP_PRED_NONE_NONE, vcmpgeq_f, v8hf, v4sf) VAR2 (BINOP_PRED_NONE_NONE, vcmpeqq_n_f, v8hf, v4sf) VAR2 (BINOP_PRED_NONE_NONE, vcmpeqq_f, v8hf, v4sf) -VAR2 (BINOP_NONE_NONE_NONE, vsubq_f, v8hf, v4sf) VAR2 (BINOP_NONE_NONE_NONE, vqmovntq_s, v8hi, v4si) VAR2 (BINOP_NONE_NONE_NONE, vqmovnbq_s, v8hi, v4si) VAR2 (BINOP_NONE_NONE_NONE, vqdmulltq_s, v8hi, v4si) @@ -240,7 +235,6 @@ VAR2 (BINOP_NONE_NONE_NONE, vqdmullbq_n_s, v8hi, v4si) VAR2 (BINOP_NONE_NONE_NONE, vorrq_f, v8hf, v4sf) VAR2 (BINOP_NONE_NONE_NONE, vornq_f, v8hf, v4sf) VAR2 (BINOP_NONE_NONE_NONE, vmulq_n_f, v8hf, v4sf) -VAR2 (BINOP_NONE_NONE_NONE, vmulq_f, v8hf, v4sf) VAR2 (BINOP_NONE_NONE_NONE, vmovntq_s, v8hi, v4si) VAR2 (BINOP_NONE_NONE_NONE, vmovnbq_s, v8hi, v4si) VAR2 (BINOP_NONE_NONE_NONE, vmlsldavxq_s, v8hi, v4si) diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 5167fbc6add..ccb3cf23304 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -1353,18 +1353,6 @@ (define_insn "mve_vmulltq_int_" ;; [vmulq_u, vmulq_s]) ;; [vsubq_s, vsubq_u]) ;; -(define_insn "mve_vmulq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VMULQ)) - ] - "TARGET_HAVE_MVE" - "vmul.i%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - (define_insn "mve_q" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") @@ -1742,21 +1730,6 @@ (define_insn "mve_vshlq_r_" [(set_attr "type" "mve_move") ]) -;; -;; [vsubq_s, vsubq_u]) -;; -(define_insn "mve_vsubq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VSUBQ)) - ] - "TARGET_HAVE_MVE" - "vsub.i%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vabdq_f]) ;; From patchwork Tue Apr 18 13:45:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67927 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B2F473889829 for ; Tue, 18 Apr 2023 13:50:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B2F473889829 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825851; bh=vnnIpjszV2uGGn4XHQY6qlOaQvZIjiiu0Z08qpi8sVk=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=avVOraTyi93Ih+obZQ6HLiLNs/NYdgbpPJ+WS3/KXhOIAzF3sLqmRswQgv4HBAXjZ 2f1nr60uNxtSSLxZgjvNGDHpFj+9gEugzX1AzgO1UgPenKQyRfYkeBCZh4oXfagRcQ RdYyMVyEH0c6mY7rIUvl2xKa+BzSbNg47uUpjR/E= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on2070.outbound.protection.outlook.com [40.107.14.70]) by sourceware.org (Postfix) with ESMTPS id 538503856948 for ; Tue, 18 Apr 2023 13:47:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 538503856948 Received: from DB6PR07CA0017.eurprd07.prod.outlook.com (2603:10a6:6:2d::27) by DU0PR08MB8661.eurprd08.prod.outlook.com (2603:10a6:10:403::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20; Tue, 18 Apr 2023 13:47:32 +0000 Received: from DBAEUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:6:2d:cafe::b1) by DB6PR07CA0017.outlook.office365.com (2603:10a6:6:2d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:32 +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 DBAEUR03FT016.mail.protection.outlook.com (100.127.142.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:32 +0000 Received: ("Tessian outbound 945aec65ec65:v136"); Tue, 18 Apr 2023 13:47:32 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: fa961f13667daa49 X-CR-MTA-TID: 64aa7808 Received: from 08b714f7ef28.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id D6CD8911-C5D5-415B-B572-D70B32DCC966.1; Tue, 18 Apr 2023 13:47:23 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 08b714f7ef28.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PKfSjAbIO6wTbFidXDf50loiJVw6V3SNhETjlp9nwWanGNIGnCGuc0wmZnQDfZYye8uByeme25kqFcYV07+fpu8CpwjwjP9lxxOT8EF4cP529srGInBy69OvX4M/BIQI4PuRF7evP53MvSbRThN3WRDPKtcQZ5MXgZcW8h8v5U63fbWytqY2PCd2qRrKulNY8vZXcJqtLoN0CX2XQS0L+OHt4gTi6xSUdljbFznMse5e0098pMHhO28T66GQMuvGHzCU8KrA8g+eRJkM3ngjmMZbikuBsaVuuLHPotd7bgQ33+T2vta6WfDUiFRJEVnp2WmAmqP4n9TUyHImJLRtWw== 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=vnnIpjszV2uGGn4XHQY6qlOaQvZIjiiu0Z08qpi8sVk=; b=NiudPqX5qxKl4T0pi+1LdHElyPJgVwqcUDwK4PQurHAAlMyN/kHXIMJ72GB6rvt6syEP7xptBTJfPHNy/B+ncVpJrssXVzqJpEhXAbJbE2DQqgnVgsaZyGTCxrQrQzfCeuIUvcLaoPvZ3Qi/9tru+fGJLAvw2upTEzfIuaWv55hxdtJKzFX1OGrPpO+Zku6gemr+l8yoWbujqhHNFvLUVcSdLfQgc8QjSc0042Ux1sm52gAkGm/o/yd/JyohWkTQWkCxHNEocNqnQsXT4rCShtVRT26gMmnK77HOPIU0nc16+h1Dcg+VuxbCxFuVgDP/iHPZ1wzl2QLdghHDCUP8Hw== 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 Received: from AS9PR05CA0075.eurprd05.prod.outlook.com (2603:10a6:20b:499::35) by DU0PR08MB9728.eurprd08.prod.outlook.com (2603:10a6:10:444::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:18 +0000 Received: from AM7EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:499:cafe::71) by AS9PR05CA0075.outlook.office365.com (2603:10a6:20b:499::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:18 +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 AM7EUR03FT016.mail.protection.outlook.com (100.127.140.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:18 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:14 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:14 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 09/22] arm: [MVE intrinsics] add binary shape Date: Tue, 18 Apr 2023 15:45:55 +0200 Message-ID: <20230418134608.244751-10-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT016:EE_|DU0PR08MB9728:EE_|DBAEUR03FT016:EE_|DU0PR08MB8661:EE_ X-MS-Office365-Filtering-Correlation-Id: 5637fccb-c439-434e-306e-08db4013756d 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: kJQoSiFesdCCMOmPJUYbw5nAyvEDjPmBI8QZqiZyuNVTUIP3HCdkKfUT9EZilvWEKnsPokiiceRKY/okyhgD5UoLGyQwYNYcsENxBiiuyJ8UmmSAaF+HBlkgWOklAlmzMH6YohsXyMqKFkLIaYCGcV2/bv+Uq8u0Gb/4FtUcrsRybMSx8ccjg2On/aZAtnYpjla2WvHMZeFT2rybLm6EeZhTXr4hyiAz5X2gdT/xAtzrzvPYjzB9kShv0+iQ7bpK+a2HUbUXWQ9KSrXpajN67DsGHRWDPIGezgezYM3J2w4XtbIi0pnGQF+lKRY87T8YL0bXe/VN5GWdjcJl10IcPcOgeCrlYeJFEGYbB6pdzLXFQriLXO+ZDuoYbQ7TfhqrU+rK3SpP1CFiaLi0yMoUhCrHvCaFfgGwzNtIh3QUaOVr7/j5ne/CiFYhzO13ERhFknrbnwx4K1pc4feArew1g8VO0bl156U6GYt/vBb53IpycpA9dkkFsowLNAnSjfzXgosi8x81AAe8lvvKSGlx90I4l1zpFU+mZSfCgw7Vu/pqSIINIx8AMRCM6iEQMlJM9LU2Qitgc5H9Hrao5LtoGyRt2G51Pbs+MU2n0M8BqCVHZO3y5lZkXAuPv/On4gDlOttgG6mRNNXz3OLfr9LTy6gRsU4KqAjRqGF2pII5USjsKYlgXRTY78LW70S2R8BeJHIKVkBfyqAwlL4dRH+feA== 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:(13230028)(4636009)(376002)(396003)(136003)(39860400002)(346002)(451199021)(46966006)(36840700001)(36756003)(6636002)(4326008)(110136005)(316002)(70586007)(70206006)(7696005)(478600001)(6666004)(41300700001)(5660300002)(82310400005)(8676002)(8936002)(40480700001)(2906002)(44832011)(82740400003)(86362001)(81166007)(356005)(426003)(2616005)(336012)(1076003)(26005)(186003)(36860700001)(47076005)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9728 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT016.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 91b8822d-1039-4e2f-ecd3-08db40136d44 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BoM2iqlHoOAqbmAR9GbMMdmkIW6kTjKJPUrB0WU4j+Sx3gpXwORYWevD03T5IfDMjgLoUrYQSvPbZz0yMJcFg57rGuHyr2qXqXgGqud9yVibKab0UiCA11iIsVL61cE8xMF0AHuN80Fmfl+uDQ1XaPUGAutVpXg/KbPL7PJXmcaSChqm3WmIIiLXUjQgO1CwEzhvsD+n8MfaPSv3eCQGCxVC4975nXBZvLbPrWEhxAzB/wLKEseu5dZGBSSnE6H+FHOzR5ePl++5kEGpGXIYFCCTW5qnoitv50MGsGv3JU/Bz9XvjyawGrcJv3luaC0pcpV/FuW4pLdFksosa/fM6bclAB6/fJkbKndM8qtLcFdA6iZ/ItBMqTaY+FilREXaC0mRP0qZlF2XIEHWN0Y17nRf4fZJ6fSq2pZUbTboMSX85x7FAiv5rJbAOf9nZe3ldgGPshe/fyh8RI2c8Kr/egKP1QZjPSkjkoddRAFIKCLXkmbgTnfAluMpepK6EyKP5c88uiMNT34pZiZdr/WyJ9wup71tRQvLS0lSPum84cNOwlkoaYDlgEGoTnvrmwJGlDlmzOG3L6ps4OY5jBf4KrNJ3xxJNBY+QXy/kvldE+mUkCcETRGRqpKkch9dCFAj30aPnnCpzWCljmoXFBtPWulZpNOIIfMMIooxhVsFNSFQe6Rl9JL0XLrDDSmJ8q4ZCngasDgbS1eHinzyCJqYBw== 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:(13230028)(4636009)(136003)(346002)(396003)(39860400002)(376002)(451199021)(36840700001)(40470700004)(46966006)(7696005)(6666004)(478600001)(110136005)(86362001)(36860700001)(36756003)(47076005)(2616005)(426003)(336012)(40480700001)(186003)(1076003)(26005)(40460700003)(82740400003)(82310400005)(81166007)(316002)(4326008)(70206006)(70586007)(2906002)(44832011)(8676002)(8936002)(5660300002)(41300700001)(6636002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:32.1547 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5637fccb-c439-434e-306e-08db4013756d 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: DBAEUR03FT016.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8661 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch adds the binary shape description. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-shapes.cc (binary): New. * config/arm/arm-mve-builtins-shapes.h (binary): New. --- gcc/config/arm/arm-mve-builtins-shapes.cc | 27 +++++++++++++++++++++++ gcc/config/arm/arm-mve-builtins-shapes.h | 1 + 2 files changed, 28 insertions(+) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index 033b304060a..e69faae4e2c 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -338,6 +338,33 @@ struct overloaded_base : public function_shape } }; +/* _t vfoo[_t0](_t, _t) + + i.e. the standard shape for binary operations that operate on + uniform types. + + Example: vandq. + int8x16_t [__arm_]vandq[_s8](int8x16_t a, int8x16_t b) + int8x16_t [__arm_]vandq_m[_s8](int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) + int8x16_t [__arm_]vandq_x[_s8](int8x16_t a, int8x16_t b, mve_pred16_t p) */ +struct binary_def : public overloaded_base<0> +{ + void + build (function_builder &b, const function_group_info &group, + bool preserve_user_namespace) const override + { + b.add_overloaded_functions (group, MODE_none, preserve_user_namespace); + build_all (b, "v0,v0,v0", group, MODE_none, preserve_user_namespace); + } + + tree + resolve (function_resolver &r) const override + { + return r.resolve_uniform (2); + } +}; +SHAPE (binary) + /* _t vfoo[_t0](_t, _t) _t vfoo[_n_t0](_t, _t) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h index 43798fdde57..b00ee5eb57a 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.h +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -34,6 +34,7 @@ namespace arm_mve namespace shapes { + extern const function_shape *const binary; extern const function_shape *const binary_opt_n; extern const function_shape *const inherent; extern const function_shape *const unary_convert; From patchwork Tue Apr 18 13:45:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67926 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CB69A3829BFC for ; Tue, 18 Apr 2023 13:50:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CB69A3829BFC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825830; bh=DIvJyqiBZZIPwSkAVIm3DDT9YueQ1Z7bgiltmSWvPLA=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=cIawhfnL5z/bBbm79KwHMjIJ0xWlDymqOuXnMUECSH8SOe4t3cfCzpuuu2Nw8Ed62 o7DywVBCJpUK0rK7hti9oPUc23RJNT7y5q27H/4LZoF6p5XuCB/Hq/fwktmYRnvvxm USu0tY5AtExqfW5dpdGLwsEuUUOqt9i672ChQkK0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2070.outbound.protection.outlook.com [40.107.21.70]) by sourceware.org (Postfix) with ESMTPS id 615C43858C50 for ; Tue, 18 Apr 2023 13:47:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 615C43858C50 Received: from AS9PR04CA0039.eurprd04.prod.outlook.com (2603:10a6:20b:46a::33) by DB9PR08MB6540.eurprd08.prod.outlook.com (2603:10a6:10:260::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:35 +0000 Received: from AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46a:cafe::e2) by AS9PR04CA0039.outlook.office365.com (2603:10a6:20b:46a::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:35 +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 AM7EUR03FT056.mail.protection.outlook.com (100.127.140.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:35 +0000 Received: ("Tessian outbound 5bb4c51d5a1f:v136"); Tue, 18 Apr 2023 13:47:35 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 52d8a86d6ac8026c X-CR-MTA-TID: 64aa7808 Received: from fc1273248526.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id DABF61C0-CB63-45A5-B6C5-B54444F78087.1; Tue, 18 Apr 2023 13:47:24 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id fc1273248526.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dnISEk2Jn/tN6zkDrkkH2kj8E2KOn789uy7o98nvfIhpdhB+BzR3A1QfPocCoLfqGJznNB949WjlUh7rHjopRgWlAQaAUJyfC2Fkz18bx5vSqte1bxapyfHrgOO0An/S/njap5Llsqd+nUm4tA/Ky5701zIQfvt8SLScsOOAo8Ak5vjw22w4UWrXEgD0X4L1N33Jysgnvf91YvZqACFtDKIubEnqqjZIwp7QQ6EdGKFw/wN/gRcIqb85jyIVHa4/3kCDeNmJycwBEDvfhjmWQtjdjzPspEyS5rkWtmzVaNluwd5W7ah0HuueeEexvkKrOPHq/ihfMvG4JcGM8NxIJQ== 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=DIvJyqiBZZIPwSkAVIm3DDT9YueQ1Z7bgiltmSWvPLA=; b=hS4sgu9R4lkp4FCVtMkL00vDcTz1n0qbcdpowBW+s4WVb8T5PSDYeceVL9Vrs4iuf9l3xGETY8cy7hPHMh6zxhrV79nkwgWXaDbKUC17DiSiZHMAXlSKvtPy2/08DzVcGdxZe+/gjM90FJcn2xKs5I8y8U1vHAC+DSU6zW9ybCK/ySSxmVPXPm5NcWGiiw/3199lNJiGy9Gs6bWtPNmdmWyqrr+ZBbIo1JOzRJASAZeGUKUCj5sb698fYM+pqn9pyKG+dqvbq8ECbZ0gci3Wogkjo2ZuR7uPMd0s2cIxL05GcdrV0gNLQ2UegbSAW0BI4vJQEJNaKXFbINnvjVwRCw== 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 Received: from AS9PR05CA0063.eurprd05.prod.outlook.com (2603:10a6:20b:499::18) by AS8PR08MB6727.eurprd08.prod.outlook.com (2603:10a6:20b:393::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:19 +0000 Received: from AM7EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:499:cafe::1c) by AS9PR05CA0063.outlook.office365.com (2603:10a6:20b:499::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:19 +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 AM7EUR03FT016.mail.protection.outlook.com (100.127.140.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:19 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:16 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:15 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 10/22] arm: [MVE intrinsics] factorize vandq veorq vorrq vbicq Date: Tue, 18 Apr 2023 15:45:56 +0200 Message-ID: <20230418134608.244751-11-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT016:EE_|AS8PR08MB6727:EE_|AM7EUR03FT056:EE_|DB9PR08MB6540:EE_ X-MS-Office365-Filtering-Correlation-Id: d44de717-4ee4-4ebf-a02f-08db4013778b 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: WYDoLXJMlYm475OjILDLZa2j0QrGIfm+0lCUJOyBzse+X4xwweJ+MFtFuecB/TRafQKRHPOeVSKusiPpGfD4bTyXH7hYog+C54AjpYJx73fnt6UHD1z6crZpEYLtGV8HqzyTNKa0l3pWhynt/TNr5sVTsmzV09bUp1FCjzhOcM3kot6LJKhObK1LSzm/arkDZvRb4XCpC/0he4uAaGuOQAH+5IWN4tjmg93FcjAffLxIFg8UJY/IDs41gaajBqu6f0yPjnJt77BW+1MfFBNqjJgDvQUw1EXYSkwxLH1npRg45Kg32NnYJnJRoQh/fwjATgG2JS0eMmDBerrQlcjjRiCQRLpa/XtHQ35KqPnjh7fCm0YKdtzNP2zFNh5H5pTQs8SDRu0c5boMptaZBXyRFqCTsJdm3A3i1/MTWIvxYHroqB5grmlXNNW8mU28Ex3GdTXPS0fucQPXDG1TD5EcXVLCCUAlY6+Fbwrtm6VNlZENrAnc3i4c5v3rU4vF6nbgY2pFuuWfFxgIU963gngqfFSlJRIzr8mxA79wE6Qohs/TWqcBBylAQiTfcL00mR5CQtsUeHYVtITq+fwewJK1rX426HlN/Kb15l7Hlp1B5UiPYuoP0A4VcPx2ITodpv/Zvf3B93TNfRS8Bg5xAD7djRwcWk89PJVP4Y+TSLq9MglQPQG9jmjM8WrFVmevpuVzF017Cb3D7QiDZB6KCshibw== 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:(13230028)(4636009)(376002)(136003)(346002)(396003)(39860400002)(451199021)(36840700001)(46966006)(336012)(6666004)(7696005)(478600001)(86362001)(110136005)(2616005)(47076005)(36756003)(426003)(36860700001)(40480700001)(26005)(83380400001)(1076003)(186003)(82740400003)(356005)(70586007)(70206006)(81166007)(30864003)(316002)(2906002)(4326008)(8936002)(5660300002)(8676002)(44832011)(41300700001)(82310400005)(6636002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6727 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b030698c-2d3e-4541-0787-08db40136e06 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Pwcz+G3IoUjpdxqEZ1BE8LVkUH/dJjQG6Qp0qpHpQ45Z1e537u9Ew00bTHbiQqywJHlR4f0fVRrfkdGdMMjh60/bXHQkN0FzOkT0oVgpj2O/Kh5h9p8eq5V5iXYa981k1fGMk5X0PNR1FFbVnWltAM1KJUw33lOohaZwH/tdvDM1YKM+JbU3gCGXOU9if8nKFQu8BEjIXRqMvxJrX5MT1+xmWpImMWZU+7EsQoS6hlTEZkmfrjo8f39/kKgR5IGhaglmAI9W+IgjjXl5jKlI4c5mjV+myaQXCvdYNO0Ex51fHLDGDBmHxJWYGUM7mgJFTNfc3JJA4PgiHPYWrw437v2F5WRkxz81A/FXmSTQwgb9AYCMWJ1982CeE9w8PwV3HpFAiNpqYH6uSwugtnWjLjaF9ugmGEllQqvrZ2j49M920ero+llwp2FU7+1TG6UJZKnmAJubx5swUp+I+78bzrvA8Rd6O9uQeQeR4Aj6Sf2/QMg61vmxGlOmeD4nL98hsC0X3iB6TYTrv8UK38Xx1WJ3GYdgVgYsX8ke+ybUi9Gyo/at9teTENp3f4WSuqO8zEadBsM2S53ina0T7RGlqVZqZnwmGbD9xdW+YrMe6Ati6520HllUwc5/k2l8fC2ostG0iC7kRY0hcYazSpdkudA1wi4l7J5uXS/ttsbZHsm5vCn1wPae8XPTGDrCxxyrNv2zo72LNEEdFF5TtBJpOA== 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:(13230028)(4636009)(346002)(136003)(376002)(39860400002)(396003)(451199021)(36840700001)(40470700004)(46966006)(36756003)(8936002)(8676002)(40460700003)(44832011)(5660300002)(2906002)(30864003)(82310400005)(86362001)(40480700001)(478600001)(7696005)(6666004)(6636002)(110136005)(186003)(2616005)(36860700001)(1076003)(70586007)(70206006)(26005)(41300700001)(82740400003)(316002)(83380400001)(81166007)(4326008)(47076005)(426003)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:35.6471 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d44de717-4ee4-4ebf-a02f-08db4013778b 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: AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6540 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Factorize vandq, veorq, vorrq, vbicq so that they use the same parameterized names. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_INT_M_BINARY_LOGIC) (MVE_FP_M_BINARY_LOGIC): New. (MVE_INT_M_N_BINARY_LOGIC): New. (MVE_INT_N_BINARY_LOGIC): New. (mve_insn): Add vand, veor, vorr, vbic. * config/arm/mve.md (mve_vandq_m_) (mve_veorq_m_, mve_vorrq_m_) (mve_vbicq_m_): Merge into ... (@mve_q_m_): ... this. (mve_vandq_m_f, mve_veorq_m_f, mve_vorrq_m_f) (mve_vbicq_m_f): Merge into ... (@mve_q_m_f): ... this. (mve_vorrq_n_) (mve_vbicq_n_): Merge into ... (@mve_q_n_): ... this. (mve_vorrq_m_n_, mve_vbicq_m_n_): Merge into ... (@mve_q_m_n_): ... this. --- gcc/config/arm/iterators.md | 32 +++++++ gcc/config/arm/mve.md | 161 +++++------------------------------- 2 files changed, 51 insertions(+), 142 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index d3bef594775..b0ea1af77d2 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -339,24 +339,48 @@ (define_int_iterator MVE_INT_M_BINARY [ VSUBQ_M_S VSUBQ_M_U ]) +(define_int_iterator MVE_INT_M_BINARY_LOGIC [ + VANDQ_M_S VANDQ_M_U + VBICQ_M_S VBICQ_M_U + VEORQ_M_S VEORQ_M_U + VORRQ_M_S VORRQ_M_U + ]) + (define_int_iterator MVE_INT_M_N_BINARY [ VADDQ_M_N_S VADDQ_M_N_U VMULQ_M_N_S VMULQ_M_N_U VSUBQ_M_N_S VSUBQ_M_N_U ]) +(define_int_iterator MVE_INT_M_N_BINARY_LOGIC [ + VBICQ_M_N_S VBICQ_M_N_U + VORRQ_M_N_S VORRQ_M_N_U + ]) + (define_int_iterator MVE_INT_N_BINARY [ VADDQ_N_S VADDQ_N_U VMULQ_N_S VMULQ_N_U VSUBQ_N_S VSUBQ_N_U ]) +(define_int_iterator MVE_INT_N_BINARY_LOGIC [ + VBICQ_N_S VBICQ_N_U + VORRQ_N_S VORRQ_N_U + ]) + (define_int_iterator MVE_FP_M_BINARY [ VADDQ_M_F VMULQ_M_F VSUBQ_M_F ]) +(define_int_iterator MVE_FP_M_BINARY_LOGIC [ + VANDQ_M_F + VBICQ_M_F + VEORQ_M_F + VORRQ_M_F + ]) + (define_int_iterator MVE_FP_M_N_BINARY [ VADDQ_M_N_F VMULQ_M_N_F @@ -379,9 +403,17 @@ (define_int_attr mve_insn [ (VADDQ_M_N_S "vadd") (VADDQ_M_N_U "vadd") (VADDQ_M_N_F "vadd") (VADDQ_M_S "vadd") (VADDQ_M_U "vadd") (VADDQ_M_F "vadd") (VADDQ_N_S "vadd") (VADDQ_N_U "vadd") (VADDQ_N_F "vadd") + (VANDQ_M_S "vand") (VANDQ_M_U "vand") (VANDQ_M_F "vand") + (VBICQ_M_N_S "vbic") (VBICQ_M_N_U "vbic") + (VBICQ_M_S "vbic") (VBICQ_M_U "vbic") (VBICQ_M_F "vbic") + (VBICQ_N_S "vbic") (VBICQ_N_U "vbic") + (VEORQ_M_S "veor") (VEORQ_M_U "veor") (VEORQ_M_F "veor") (VMULQ_M_N_S "vmul") (VMULQ_M_N_U "vmul") (VMULQ_M_N_F "vmul") (VMULQ_M_S "vmul") (VMULQ_M_U "vmul") (VMULQ_M_F "vmul") (VMULQ_N_S "vmul") (VMULQ_N_U "vmul") (VMULQ_N_F "vmul") + (VORRQ_M_N_S "vorr") (VORRQ_M_N_U "vorr") + (VORRQ_M_S "vorr") (VORRQ_M_U "vorr") (VORRQ_M_F "vorr") + (VORRQ_N_S "vorr") (VORRQ_N_U "vorr") (VSUBQ_M_N_S "vsub") (VSUBQ_M_N_U "vsub") (VSUBQ_M_N_F "vsub") (VSUBQ_M_S "vsub") (VSUBQ_M_U "vsub") (VSUBQ_M_F "vsub") (VSUBQ_N_S "vsub") (VSUBQ_N_U "vsub") (VSUBQ_N_F "vsub") diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index ccb3cf23304..fbae1d3791f 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -1805,21 +1805,6 @@ (define_insn "mve_vbicq_f" [(set_attr "type" "mve_move") ]) -;; -;; [vbicq_n_s, vbicq_n_u]) -;; -(define_insn "mve_vbicq_n_" - [ - (set (match_operand:MVE_5 0 "s_register_operand" "=w") - (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") - (match_operand:SI 2 "immediate_operand" "i")] - VBICQ_N)) - ] - "TARGET_HAVE_MVE" - "vbic.i%# %q0, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270]) ;; @@ -2191,17 +2176,18 @@ (define_insn "mve_vorrq_f" ]) ;; +;; [vbicq_n_s, vbicq_n_u]) ;; [vorrq_n_u, vorrq_n_s]) ;; -(define_insn "mve_vorrq_n_" +(define_insn "@mve_q_n_" [ (set (match_operand:MVE_5 0 "s_register_operand" "=w") (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") (match_operand:SI 2 "immediate_operand" "i")] - VORRQ_N)) + MVE_INT_N_BINARY_LOGIC)) ] "TARGET_HAVE_MVE" - "vorr.i%# %q0, %2" + ".i%# %q0, %2" [(set_attr "type" "mve_move") ]) @@ -2445,21 +2431,6 @@ (define_insn "mve_vrmlaldavhq_v4si" [(set_attr "type" "mve_move") ]) -;; -;; [vbicq_m_n_s, vbicq_m_n_u]) -;; -(define_insn "mve_vbicq_m_n_" - [ - (set (match_operand:MVE_5 0 "s_register_operand" "=w") - (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") - (match_operand:SI 2 "immediate_operand" "i") - (match_operand: 3 "vpr_register_operand" "Up")] - VBICQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vbict.i%# %q0, %2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) ;; ;; [vcmpeqq_m_f]) ;; @@ -4269,20 +4240,22 @@ (define_insn "mve_vnegq_m_f" (set_attr "length""8")]) ;; +;; [vbicq_m_n_s, vbicq_m_n_u]) ;; [vorrq_m_n_s, vorrq_m_n_u]) ;; -(define_insn "mve_vorrq_m_n_" +(define_insn "@mve_q_m_n_" [ (set (match_operand:MVE_5 0 "s_register_operand" "=w") (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") (match_operand:SI 2 "immediate_operand" "i") (match_operand: 3 "vpr_register_operand" "Up")] - VORRQ_M_N)) + MVE_INT_M_N_BINARY_LOGIC)) ] "TARGET_HAVE_MVE" - "vpst\;vorrt.i%# %q0, %2" + "vpst\;t.i%# %q0, %2" [(set_attr "type" "mve_move") (set_attr "length""8")]) + ;; ;; [vpselq_f]) ;; @@ -5001,35 +4974,21 @@ (define_insn "@mve_q_m_" ;; ;; [vandq_m_u, vandq_m_s]) -;; -(define_insn "mve_vandq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VANDQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vandt %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; ;; [vbicq_m_u, vbicq_m_s]) +;; [veorq_m_u, veorq_m_s]) +;; [vorrq_m_u, vorrq_m_s]) ;; -(define_insn "mve_vbicq_m_" +(define_insn "@mve_q_m_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand:MVE_2 3 "s_register_operand" "w") (match_operand: 4 "vpr_register_operand" "Up")] - VBICQ_M)) + MVE_INT_M_BINARY_LOGIC)) ] "TARGET_HAVE_MVE" - "vpst\;vbict %q0, %q2, %q3" + "vpst\;t %q0, %q2, %q3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -5084,23 +5043,6 @@ (define_insn "mve_vcaddq_rot90_m_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [veorq_m_s, veorq_m_u]) -;; -(define_insn "mve_veorq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VEORQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;veort %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vhaddq_m_n_s, vhaddq_m_n_u]) ;; @@ -5322,23 +5264,6 @@ (define_insn "mve_vornq_m_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vorrq_m_s, vorrq_m_u]) -;; -(define_insn "mve_vorrq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VORRQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vorrt %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqaddq_m_n_u, vqaddq_m_n_s]) ;; @@ -6483,35 +6408,21 @@ (define_insn "@mve_q_m_n_f" ;; ;; [vandq_m_f]) -;; -(define_insn "mve_vandq_m_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand:MVE_0 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VANDQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vandt %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; ;; [vbicq_m_f]) +;; [veorq_m_f]) +;; [vorrq_m_f]) ;; -(define_insn "mve_vbicq_m_f" +(define_insn "@mve_q_m_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") (match_operand:MVE_0 2 "s_register_operand" "w") (match_operand:MVE_0 3 "s_register_operand" "w") (match_operand: 4 "vpr_register_operand" "Up")] - VBICQ_M_F)) + MVE_FP_M_BINARY_LOGIC)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vbict %q0, %q2, %q3" + "vpst\;t %q0, %q2, %q3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -6702,23 +6613,6 @@ (define_insn "mve_vcmulq_rot90_m_f" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [veorq_m_f]) -;; -(define_insn "mve_veorq_m_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand:MVE_0 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VEORQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;veort %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vfmaq_m_f]) ;; @@ -6838,23 +6732,6 @@ (define_insn "mve_vornq_m_f" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vorrq_m_f]) -;; -(define_insn "mve_vorrq_m_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") - (match_operand:MVE_0 2 "s_register_operand" "w") - (match_operand:MVE_0 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VORRQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vorrt %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vstrbq_s vstrbq_u] ;; From patchwork Tue Apr 18 13:45:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67935 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0F0563882ADD for ; Tue, 18 Apr 2023 13:53:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0F0563882ADD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825985; bh=u93z80o9SgN4LxJqS0agFZxok5f+H/zVVZvaFxsVyco=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=paOX1kQK7sknPzqhIEjH9PNaY/pJ2I7E722cFJBz4L0AMX/zzsu3bUHLnwQf3Jr1M LdvwpJrbd87hXg8gFqTJbCkZRqRSKsur7q8oj7x83OIoi/Ac5Y4kw5bELtFg/DPDTh pEHjP+wDlHkPUU5KDN5TQqj/iAdrDgnKD6YojiV0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2075.outbound.protection.outlook.com [40.107.8.75]) by sourceware.org (Postfix) with ESMTPS id 99F0E3856DD2 for ; Tue, 18 Apr 2023 13:47:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 99F0E3856DD2 Received: from DB6PR0601CA0027.eurprd06.prod.outlook.com (2603:10a6:4:17::13) by DB5PR08MB10215.eurprd08.prod.outlook.com (2603:10a6:10:4a5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:39 +0000 Received: from DBAEUR03FT044.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:17:cafe::68) by DB6PR0601CA0027.outlook.office365.com (2603:10a6:4:17::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:39 +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 DBAEUR03FT044.mail.protection.outlook.com (100.127.142.189) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:39 +0000 Received: ("Tessian outbound 3a01b65b5aad:v136"); Tue, 18 Apr 2023 13:47:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: a06b9615d86a0545 X-CR-MTA-TID: 64aa7808 Received: from b24ae77dd71e.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 2A884646-3912-487D-A449-B9919255F5F5.1; Tue, 18 Apr 2023 13:47:32 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b24ae77dd71e.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kGSSNVokgXfH30zEaLmRWpVfYxQAbZ5GDiCNHtoy2dKvL0LW/D2oUv3Vcwy1J7zcKZYcVpZq2K7vmobsU76CO6UX4/Jc2RYQxPJPbSIUIhvz9pS4likgPdpgh7cBwb5NkfGzFSBXJ9fUM7SA2cCdG0b9ijtncutrCrgVldrICdoVWf4d9mF09iTBim1aN7/H1zSDGLHOegJR1BzKOL59Zdfj3YUlgkGVW7BtSPLpgCiQ7NVg54mWGURqr2r70F91w0oLnJ6SpceIqtNvTrJajFlJLe+5/FVCjjRIYxqyL81xdn+vWPUR68LGhRZO4ejHtTAqCImkDnyGrwShfAVxxg== 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=u93z80o9SgN4LxJqS0agFZxok5f+H/zVVZvaFxsVyco=; b=Q0o+B6T0ne39nPnwpw7YX7xdvud/mQZrOA4UINz9+YVlSEHhSzEyedpeqdO6HzKQVwtArmNpDBeT+Hm9ZXPWGZ187xotC02Gstlfz4ru4ePZ1ypZbedaCSdwiLjGnXE3SmzrpfsYi5CumuYVcP7u39gbfuPSEgdWP6wdk+ucc5Fj+6AQafBTRpbR1VWv9VarfwyrAxZLdroj97jsG8UkbQ0RK+XxfghYtNgFhXmeoo285P4cjkFT7FI6mxDfUHSYiJU88imIjnVRlNVVioxmr5HtmL7GL1MQRcEO/QB49+/GPDfq5N3EvvKMnL6DlJsnt5RhrxAmQ7GCsbylLjfqUw== 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 Received: from AS9PR05CA0062.eurprd05.prod.outlook.com (2603:10a6:20b:499::7) by DB9PR08MB9731.eurprd08.prod.outlook.com (2603:10a6:10:45d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:20 +0000 Received: from AM7EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:499:cafe::a9) by AS9PR05CA0062.outlook.office365.com (2603:10a6:20b:499::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:20 +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 AM7EUR03FT016.mail.protection.outlook.com (100.127.140.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:20 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:17 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:16 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 11/22] arm: [MVE intrinsics] rework vandq veorq Date: Tue, 18 Apr 2023 15:45:57 +0200 Message-ID: <20230418134608.244751-12-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT016:EE_|DB9PR08MB9731:EE_|DBAEUR03FT044:EE_|DB5PR08MB10215:EE_ X-MS-Office365-Filtering-Correlation-Id: 0997c7f3-4800-489a-383d-08db40137a09 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: o6dL7J6eBkDzYIX0299x9Raq5IItE+eEvAS9+lNgxyNfK8TA31BP1XDf4W38IE9FhJ31gIUzO5c3efZ3fX1nVU2VPLBt1ga1voUIofkdd04ZBIyJFIO5lvGSpOIIUYu0xXr1KYyJKc4TNEXLy9sEhs6ULjdBsr01ydTtAFF+YLhZTrHMtvUYU86ET6Odygt/oPDSp0FtkRQpAUO9MhOKxSqA1DjUkB61RVw/qJz9x6Kgr8gD+t2tkhd942aNqKHGVPL7WQ6On0izIq1BT39AQpKcUJzJUg2OYWOE9qE0To6kgmZLetqytTh1MQz9XwXqHIAuCUZ337SGhp8ROHMcBkD2fbx2JA7RtBg2hS/DQ84fGLw2gIbM1doGa40/lXm9FiSpX/g8uiNoe4deKhtcW5Cubrrt+/DcjgckEpQB1hy3ie6MrBE6vfBBtfqnW7jzhQk8JiwVCXfamuRDDx2GfzNEQ48jmUIrEQPZ4wjNU/fgD4dCKYt6oSO69UaInuqSBqZIg6GQuMhoIzsxqxSunV0hSAHfRejTsPlLMqne8gAwq+llPITDFd2Ena3EeY2MTZk1PdZ3mQ4Mxw5XLuEboV/KkiStbd8bwktMmq++bmZRnDHe0lFbb9StdGZwXYS/R4uH+MPykALeQASXEYovqnM+eq0CP38wavjR/1cSjs4TorOVV5oi/8V9wQ1kOOdYNoi8gXAwdofX60othrhKBw== 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:(13230028)(4636009)(396003)(136003)(39860400002)(346002)(376002)(451199021)(36840700001)(46966006)(82740400003)(26005)(186003)(1076003)(7696005)(6666004)(2906002)(30864003)(426003)(336012)(2616005)(40480700001)(41300700001)(5660300002)(4326008)(316002)(47076005)(8676002)(8936002)(6636002)(70206006)(70586007)(44832011)(110136005)(478600001)(82310400005)(86362001)(36756003)(83380400001)(36860700001)(81166007)(356005)(36900700001)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB9731 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT044.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: f313cbf4-cd72-40f7-dc82-08db40136e3c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eXoKNXUD6nzL3/fipRERlpnXbi4ACaObGi5Nt/BUSKftRKeR1wgfedDvHoJ9KQIGZR55mpeOwn/tdBE3Br2l5+7dPI0XisS4lSH9xMGX/OMgeUdAkmkTdDCHIWWCidh96jp6c5c5ACp3GjDpMeCydVpor69XfykXV/i4lKH3cwyKeDsxtKlfQzmkPpxOpJ9zfBcAqk0WzzXEdOHaBmvlQctmXyknpV5LRLaoT7iqL3OGbrwX5VoeMSdYHlN72/cGyciLDrqg7Daj7G8E08quiqROv58L6a4yApEgPNKnmw3/ql5r91oN92KO9n/IL9Qot325qFvP5FMAXoA7AzVu+mwqkpnE2c9AbRPknGJ/bOLIfiSp00bOX9hAX2dqgS0hgt1b86gHMR0EgLVzAeeR5CwF8U+Qx4JLcaMBTZyracE2+jb1Xmj/exhNnwbb4RJUfSSp5nUmQWRyxdU5wZZpdBXZUyiH9b8zu+DXQmm63So56zp91Dk+HNrfL2gN/Z9NVrg0P9cmfItMieYvETuUdJeTvZ4rnXSRJ+92bYgkkiHC4QWBLVmTiQoB/bR2+EgwfsynJjR/9eKtdI6z9qAWKVoMmNjbU4QxOfkuCHyXX8fTLOPytJLP1Z3/CxRG3hYFyb0BvTOUO8JBft85OSMwy+xi8fFcToRXqtqEnUQlR+RG81gxG6+DpfKrYNO7XqtVWOjdOJskcI59Y7wmwPyQzw== 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:(13230028)(4636009)(136003)(376002)(396003)(346002)(39850400004)(451199021)(40470700004)(36840700001)(46966006)(4326008)(6636002)(316002)(110136005)(70206006)(70586007)(6666004)(7696005)(478600001)(40480700001)(82310400005)(8676002)(8936002)(41300700001)(5660300002)(2906002)(30864003)(44832011)(81166007)(82740400003)(36756003)(86362001)(426003)(2616005)(336012)(1076003)(26005)(40460700003)(186003)(36860700001)(47076005)(83380400001)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:39.8881 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0997c7f3-4800-489a-383d-08db40137a09 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: DBAEUR03FT044.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB10215 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Implement vamdq, veorq using the new MVE builtins framework. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-base.cc (FUNCTION_WITH_RTX_M): New. (vandq,veorq): New. * config/arm/arm-mve-builtins-base.def (vandq, veorq): New. * config/arm/arm-mve-builtins-base.h (vandq, veorq): New. * config/arm/arm_mve.h (vandq): Remove. (vandq_m): Remove. (vandq_x): Remove. (vandq_u8): Remove. (vandq_s8): Remove. (vandq_u16): Remove. (vandq_s16): Remove. (vandq_u32): Remove. (vandq_s32): Remove. (vandq_f16): Remove. (vandq_f32): Remove. (vandq_m_s8): Remove. (vandq_m_s32): Remove. (vandq_m_s16): Remove. (vandq_m_u8): Remove. (vandq_m_u32): Remove. (vandq_m_u16): Remove. (vandq_m_f32): Remove. (vandq_m_f16): Remove. (vandq_x_s8): Remove. (vandq_x_s16): Remove. (vandq_x_s32): Remove. (vandq_x_u8): Remove. (vandq_x_u16): Remove. (vandq_x_u32): Remove. (vandq_x_f16): Remove. (vandq_x_f32): Remove. (__arm_vandq_u8): Remove. (__arm_vandq_s8): Remove. (__arm_vandq_u16): Remove. (__arm_vandq_s16): Remove. (__arm_vandq_u32): Remove. (__arm_vandq_s32): Remove. (__arm_vandq_m_s8): Remove. (__arm_vandq_m_s32): Remove. (__arm_vandq_m_s16): Remove. (__arm_vandq_m_u8): Remove. (__arm_vandq_m_u32): Remove. (__arm_vandq_m_u16): Remove. (__arm_vandq_x_s8): Remove. (__arm_vandq_x_s16): Remove. (__arm_vandq_x_s32): Remove. (__arm_vandq_x_u8): Remove. (__arm_vandq_x_u16): Remove. (__arm_vandq_x_u32): Remove. (__arm_vandq_f16): Remove. (__arm_vandq_f32): Remove. (__arm_vandq_m_f32): Remove. (__arm_vandq_m_f16): Remove. (__arm_vandq_x_f16): Remove. (__arm_vandq_x_f32): Remove. (__arm_vandq): Remove. (__arm_vandq_m): Remove. (__arm_vandq_x): Remove. (veorq_m): Remove. (veorq_x): Remove. (veorq_u8): Remove. (veorq_s8): Remove. (veorq_u16): Remove. (veorq_s16): Remove. (veorq_u32): Remove. (veorq_s32): Remove. (veorq_f16): Remove. (veorq_f32): Remove. (veorq_m_s8): Remove. (veorq_m_s32): Remove. (veorq_m_s16): Remove. (veorq_m_u8): Remove. (veorq_m_u32): Remove. (veorq_m_u16): Remove. (veorq_m_f32): Remove. (veorq_m_f16): Remove. (veorq_x_s8): Remove. (veorq_x_s16): Remove. (veorq_x_s32): Remove. (veorq_x_u8): Remove. (veorq_x_u16): Remove. (veorq_x_u32): Remove. (veorq_x_f16): Remove. (veorq_x_f32): Remove. (__arm_veorq_u8): Remove. (__arm_veorq_s8): Remove. (__arm_veorq_u16): Remove. (__arm_veorq_s16): Remove. (__arm_veorq_u32): Remove. (__arm_veorq_s32): Remove. (__arm_veorq_m_s8): Remove. (__arm_veorq_m_s32): Remove. (__arm_veorq_m_s16): Remove. (__arm_veorq_m_u8): Remove. (__arm_veorq_m_u32): Remove. (__arm_veorq_m_u16): Remove. (__arm_veorq_x_s8): Remove. (__arm_veorq_x_s16): Remove. (__arm_veorq_x_s32): Remove. (__arm_veorq_x_u8): Remove. (__arm_veorq_x_u16): Remove. (__arm_veorq_x_u32): Remove. (__arm_veorq_f16): Remove. (__arm_veorq_f32): Remove. (__arm_veorq_m_f32): Remove. (__arm_veorq_m_f16): Remove. (__arm_veorq_x_f16): Remove. (__arm_veorq_x_f32): Remove. (__arm_veorq): Remove. (__arm_veorq_m): Remove. (__arm_veorq_x): Remove. --- gcc/config/arm/arm-mve-builtins-base.cc | 10 + gcc/config/arm/arm-mve-builtins-base.def | 4 + gcc/config/arm/arm-mve-builtins-base.h | 2 + gcc/config/arm/arm_mve.h | 862 ----------------------- 4 files changed, 16 insertions(+), 862 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index 48b09bffd0c..51fed8f671f 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -90,7 +90,17 @@ namespace arm_mve { UNSPEC##_M_S, UNSPEC##_M_U, UNSPEC##_M_F, \ UNSPEC##_M_N_S, UNSPEC##_M_N_U, UNSPEC##_M_N_F)) + /* Helper for builtins with RTX codes, and _m predicated overrides. */ +#define FUNCTION_WITH_RTX_M(NAME, RTX, UNSPEC) FUNCTION \ + (NAME, unspec_based_mve_function_exact_insn, \ + (RTX, RTX, RTX, \ + -1, -1, -1, \ + UNSPEC##_M_S, UNSPEC##_M_U, UNSPEC##_M_F, \ + -1, -1, -1)) + FUNCTION_WITH_RTX_M_N (vaddq, PLUS, VADDQ) +FUNCTION_WITH_RTX_M (vandq, AND, VANDQ) +FUNCTION_WITH_RTX_M (veorq, XOR, VEORQ) FUNCTION_WITH_RTX_M_N (vmulq, MULT, VMULQ) FUNCTION (vreinterpretq, vreinterpretq_impl,) FUNCTION_WITH_RTX_M_N (vsubq, MINUS, VSUBQ) diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index 624558c08b2..a933c9fc91e 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -19,6 +19,8 @@ #define REQUIRES_FLOAT false DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vandq, binary, all_integer, mx_or_none) +DEF_MVE_FUNCTION (veorq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none) DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_integer, mx_or_none) @@ -27,6 +29,8 @@ DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none) #define REQUIRES_FLOAT true DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_float, mx_or_none) +DEF_MVE_FUNCTION (vandq, binary, all_float, mx_or_none) +DEF_MVE_FUNCTION (veorq, binary, all_float, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_float, none) DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_float, mx_or_none) diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index 30f8549c495..4fcf55715b6 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -24,6 +24,8 @@ namespace arm_mve { namespace functions { extern const function_base *const vaddq; +extern const function_base *const vandq; +extern const function_base *const veorq; extern const function_base *const vmulq; extern const function_base *const vreinterpretq; extern const function_base *const vsubq; diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 42a1af2ae15..0ad0122e44f 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -77,14 +77,12 @@ #define vmaxq(__a, __b) __arm_vmaxq(__a, __b) #define vhsubq(__a, __b) __arm_vhsubq(__a, __b) #define vhaddq(__a, __b) __arm_vhaddq(__a, __b) -#define veorq(__a, __b) __arm_veorq(__a, __b) #define vcmphiq(__a, __b) __arm_vcmphiq(__a, __b) #define vcmpeqq(__a, __b) __arm_vcmpeqq(__a, __b) #define vcmpcsq(__a, __b) __arm_vcmpcsq(__a, __b) #define vcaddq_rot90(__a, __b) __arm_vcaddq_rot90(__a, __b) #define vcaddq_rot270(__a, __b) __arm_vcaddq_rot270(__a, __b) #define vbicq(__a, __b) __arm_vbicq(__a, __b) -#define vandq(__a, __b) __arm_vandq(__a, __b) #define vaddvq_p(__a, __p) __arm_vaddvq_p(__a, __p) #define vaddvaq(__a, __b) __arm_vaddvaq(__a, __b) #define vabdq(__a, __b) __arm_vabdq(__a, __b) @@ -236,12 +234,10 @@ #define vabavq_p(__a, __b, __c, __p) __arm_vabavq_p(__a, __b, __c, __p) #define vshlq_m(__inactive, __a, __b, __p) __arm_vshlq_m(__inactive, __a, __b, __p) #define vabdq_m(__inactive, __a, __b, __p) __arm_vabdq_m(__inactive, __a, __b, __p) -#define vandq_m(__inactive, __a, __b, __p) __arm_vandq_m(__inactive, __a, __b, __p) #define vbicq_m(__inactive, __a, __b, __p) __arm_vbicq_m(__inactive, __a, __b, __p) #define vbrsrq_m(__inactive, __a, __b, __p) __arm_vbrsrq_m(__inactive, __a, __b, __p) #define vcaddq_rot270_m(__inactive, __a, __b, __p) __arm_vcaddq_rot270_m(__inactive, __a, __b, __p) #define vcaddq_rot90_m(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m(__inactive, __a, __b, __p) -#define veorq_m(__inactive, __a, __b, __p) __arm_veorq_m(__inactive, __a, __b, __p) #define vhaddq_m(__inactive, __a, __b, __p) __arm_vhaddq_m(__inactive, __a, __b, __p) #define vhcaddq_rot270_m(__inactive, __a, __b, __p) __arm_vhcaddq_rot270_m(__inactive, __a, __b, __p) #define vhcaddq_rot90_m(__inactive, __a, __b, __p) __arm_vhcaddq_rot90_m(__inactive, __a, __b, __p) @@ -404,10 +400,8 @@ #define vhsubq_x(__a, __b, __p) __arm_vhsubq_x(__a, __b, __p) #define vrhaddq_x(__a, __b, __p) __arm_vrhaddq_x(__a, __b, __p) #define vrmulhq_x(__a, __b, __p) __arm_vrmulhq_x(__a, __b, __p) -#define vandq_x(__a, __b, __p) __arm_vandq_x(__a, __b, __p) #define vbicq_x(__a, __b, __p) __arm_vbicq_x(__a, __b, __p) #define vbrsrq_x(__a, __b, __p) __arm_vbrsrq_x(__a, __b, __p) -#define veorq_x(__a, __b, __p) __arm_veorq_x(__a, __b, __p) #define vmovlbq_x(__a, __p) __arm_vmovlbq_x(__a, __p) #define vmovltq_x(__a, __p) __arm_vmovltq_x(__a, __p) #define vmvnq_x(__a, __p) __arm_vmvnq_x(__a, __p) @@ -702,7 +696,6 @@ #define vhsubq_n_u8(__a, __b) __arm_vhsubq_n_u8(__a, __b) #define vhaddq_u8(__a, __b) __arm_vhaddq_u8(__a, __b) #define vhaddq_n_u8(__a, __b) __arm_vhaddq_n_u8(__a, __b) -#define veorq_u8(__a, __b) __arm_veorq_u8(__a, __b) #define vcmpneq_n_u8(__a, __b) __arm_vcmpneq_n_u8(__a, __b) #define vcmphiq_u8(__a, __b) __arm_vcmphiq_u8(__a, __b) #define vcmphiq_n_u8(__a, __b) __arm_vcmphiq_n_u8(__a, __b) @@ -713,7 +706,6 @@ #define vcaddq_rot90_u8(__a, __b) __arm_vcaddq_rot90_u8(__a, __b) #define vcaddq_rot270_u8(__a, __b) __arm_vcaddq_rot270_u8(__a, __b) #define vbicq_u8(__a, __b) __arm_vbicq_u8(__a, __b) -#define vandq_u8(__a, __b) __arm_vandq_u8(__a, __b) #define vaddvq_p_u8(__a, __p) __arm_vaddvq_p_u8(__a, __p) #define vaddvaq_u8(__a, __b) __arm_vaddvaq_u8(__a, __b) #define vabdq_u8(__a, __b) __arm_vabdq_u8(__a, __b) @@ -781,12 +773,10 @@ #define vhcaddq_rot270_s8(__a, __b) __arm_vhcaddq_rot270_s8(__a, __b) #define vhaddq_s8(__a, __b) __arm_vhaddq_s8(__a, __b) #define vhaddq_n_s8(__a, __b) __arm_vhaddq_n_s8(__a, __b) -#define veorq_s8(__a, __b) __arm_veorq_s8(__a, __b) #define vcaddq_rot90_s8(__a, __b) __arm_vcaddq_rot90_s8(__a, __b) #define vcaddq_rot270_s8(__a, __b) __arm_vcaddq_rot270_s8(__a, __b) #define vbrsrq_n_s8(__a, __b) __arm_vbrsrq_n_s8(__a, __b) #define vbicq_s8(__a, __b) __arm_vbicq_s8(__a, __b) -#define vandq_s8(__a, __b) __arm_vandq_s8(__a, __b) #define vaddvaq_s8(__a, __b) __arm_vaddvaq_s8(__a, __b) #define vabdq_s8(__a, __b) __arm_vabdq_s8(__a, __b) #define vshlq_n_s8(__a, __imm) __arm_vshlq_n_s8(__a, __imm) @@ -812,7 +802,6 @@ #define vhsubq_n_u16(__a, __b) __arm_vhsubq_n_u16(__a, __b) #define vhaddq_u16(__a, __b) __arm_vhaddq_u16(__a, __b) #define vhaddq_n_u16(__a, __b) __arm_vhaddq_n_u16(__a, __b) -#define veorq_u16(__a, __b) __arm_veorq_u16(__a, __b) #define vcmpneq_n_u16(__a, __b) __arm_vcmpneq_n_u16(__a, __b) #define vcmphiq_u16(__a, __b) __arm_vcmphiq_u16(__a, __b) #define vcmphiq_n_u16(__a, __b) __arm_vcmphiq_n_u16(__a, __b) @@ -823,7 +812,6 @@ #define vcaddq_rot90_u16(__a, __b) __arm_vcaddq_rot90_u16(__a, __b) #define vcaddq_rot270_u16(__a, __b) __arm_vcaddq_rot270_u16(__a, __b) #define vbicq_u16(__a, __b) __arm_vbicq_u16(__a, __b) -#define vandq_u16(__a, __b) __arm_vandq_u16(__a, __b) #define vaddvq_p_u16(__a, __p) __arm_vaddvq_p_u16(__a, __p) #define vaddvaq_u16(__a, __b) __arm_vaddvaq_u16(__a, __b) #define vabdq_u16(__a, __b) __arm_vabdq_u16(__a, __b) @@ -891,12 +879,10 @@ #define vhcaddq_rot270_s16(__a, __b) __arm_vhcaddq_rot270_s16(__a, __b) #define vhaddq_s16(__a, __b) __arm_vhaddq_s16(__a, __b) #define vhaddq_n_s16(__a, __b) __arm_vhaddq_n_s16(__a, __b) -#define veorq_s16(__a, __b) __arm_veorq_s16(__a, __b) #define vcaddq_rot90_s16(__a, __b) __arm_vcaddq_rot90_s16(__a, __b) #define vcaddq_rot270_s16(__a, __b) __arm_vcaddq_rot270_s16(__a, __b) #define vbrsrq_n_s16(__a, __b) __arm_vbrsrq_n_s16(__a, __b) #define vbicq_s16(__a, __b) __arm_vbicq_s16(__a, __b) -#define vandq_s16(__a, __b) __arm_vandq_s16(__a, __b) #define vaddvaq_s16(__a, __b) __arm_vaddvaq_s16(__a, __b) #define vabdq_s16(__a, __b) __arm_vabdq_s16(__a, __b) #define vshlq_n_s16(__a, __imm) __arm_vshlq_n_s16(__a, __imm) @@ -922,7 +908,6 @@ #define vhsubq_n_u32(__a, __b) __arm_vhsubq_n_u32(__a, __b) #define vhaddq_u32(__a, __b) __arm_vhaddq_u32(__a, __b) #define vhaddq_n_u32(__a, __b) __arm_vhaddq_n_u32(__a, __b) -#define veorq_u32(__a, __b) __arm_veorq_u32(__a, __b) #define vcmpneq_n_u32(__a, __b) __arm_vcmpneq_n_u32(__a, __b) #define vcmphiq_u32(__a, __b) __arm_vcmphiq_u32(__a, __b) #define vcmphiq_n_u32(__a, __b) __arm_vcmphiq_n_u32(__a, __b) @@ -933,7 +918,6 @@ #define vcaddq_rot90_u32(__a, __b) __arm_vcaddq_rot90_u32(__a, __b) #define vcaddq_rot270_u32(__a, __b) __arm_vcaddq_rot270_u32(__a, __b) #define vbicq_u32(__a, __b) __arm_vbicq_u32(__a, __b) -#define vandq_u32(__a, __b) __arm_vandq_u32(__a, __b) #define vaddvq_p_u32(__a, __p) __arm_vaddvq_p_u32(__a, __p) #define vaddvaq_u32(__a, __b) __arm_vaddvaq_u32(__a, __b) #define vabdq_u32(__a, __b) __arm_vabdq_u32(__a, __b) @@ -1001,12 +985,10 @@ #define vhcaddq_rot270_s32(__a, __b) __arm_vhcaddq_rot270_s32(__a, __b) #define vhaddq_s32(__a, __b) __arm_vhaddq_s32(__a, __b) #define vhaddq_n_s32(__a, __b) __arm_vhaddq_n_s32(__a, __b) -#define veorq_s32(__a, __b) __arm_veorq_s32(__a, __b) #define vcaddq_rot90_s32(__a, __b) __arm_vcaddq_rot90_s32(__a, __b) #define vcaddq_rot270_s32(__a, __b) __arm_vcaddq_rot270_s32(__a, __b) #define vbrsrq_n_s32(__a, __b) __arm_vbrsrq_n_s32(__a, __b) #define vbicq_s32(__a, __b) __arm_vbicq_s32(__a, __b) -#define vandq_s32(__a, __b) __arm_vandq_s32(__a, __b) #define vaddvaq_s32(__a, __b) __arm_vaddvaq_s32(__a, __b) #define vabdq_s32(__a, __b) __arm_vabdq_s32(__a, __b) #define vshlq_n_s32(__a, __imm) __arm_vshlq_n_s32(__a, __imm) @@ -1059,7 +1041,6 @@ #define vmaxnmq_f16(__a, __b) __arm_vmaxnmq_f16(__a, __b) #define vmaxnmavq_f16(__a, __b) __arm_vmaxnmavq_f16(__a, __b) #define vmaxnmaq_f16(__a, __b) __arm_vmaxnmaq_f16(__a, __b) -#define veorq_f16(__a, __b) __arm_veorq_f16(__a, __b) #define vcmulq_rot90_f16(__a, __b) __arm_vcmulq_rot90_f16(__a, __b) #define vcmulq_rot270_f16(__a, __b) __arm_vcmulq_rot270_f16(__a, __b) #define vcmulq_rot180_f16(__a, __b) __arm_vcmulq_rot180_f16(__a, __b) @@ -1067,7 +1048,6 @@ #define vcaddq_rot90_f16(__a, __b) __arm_vcaddq_rot90_f16(__a, __b) #define vcaddq_rot270_f16(__a, __b) __arm_vcaddq_rot270_f16(__a, __b) #define vbicq_f16(__a, __b) __arm_vbicq_f16(__a, __b) -#define vandq_f16(__a, __b) __arm_vandq_f16(__a, __b) #define vabdq_f16(__a, __b) __arm_vabdq_f16(__a, __b) #define vshlltq_n_s8(__a, __imm) __arm_vshlltq_n_s8(__a, __imm) #define vshllbq_n_s8(__a, __imm) __arm_vshllbq_n_s8(__a, __imm) @@ -1120,7 +1100,6 @@ #define vmaxnmq_f32(__a, __b) __arm_vmaxnmq_f32(__a, __b) #define vmaxnmavq_f32(__a, __b) __arm_vmaxnmavq_f32(__a, __b) #define vmaxnmaq_f32(__a, __b) __arm_vmaxnmaq_f32(__a, __b) -#define veorq_f32(__a, __b) __arm_veorq_f32(__a, __b) #define vcmulq_rot90_f32(__a, __b) __arm_vcmulq_rot90_f32(__a, __b) #define vcmulq_rot270_f32(__a, __b) __arm_vcmulq_rot270_f32(__a, __b) #define vcmulq_rot180_f32(__a, __b) __arm_vcmulq_rot180_f32(__a, __b) @@ -1128,7 +1107,6 @@ #define vcaddq_rot90_f32(__a, __b) __arm_vcaddq_rot90_f32(__a, __b) #define vcaddq_rot270_f32(__a, __b) __arm_vcaddq_rot270_f32(__a, __b) #define vbicq_f32(__a, __b) __arm_vbicq_f32(__a, __b) -#define vandq_f32(__a, __b) __arm_vandq_f32(__a, __b) #define vabdq_f32(__a, __b) __arm_vabdq_f32(__a, __b) #define vshlltq_n_s16(__a, __imm) __arm_vshlltq_n_s16(__a, __imm) #define vshllbq_n_s16(__a, __imm) __arm_vshllbq_n_s16(__a, __imm) @@ -1662,12 +1640,6 @@ #define vabdq_m_u8(__inactive, __a, __b, __p) __arm_vabdq_m_u8(__inactive, __a, __b, __p) #define vabdq_m_u32(__inactive, __a, __b, __p) __arm_vabdq_m_u32(__inactive, __a, __b, __p) #define vabdq_m_u16(__inactive, __a, __b, __p) __arm_vabdq_m_u16(__inactive, __a, __b, __p) -#define vandq_m_s8(__inactive, __a, __b, __p) __arm_vandq_m_s8(__inactive, __a, __b, __p) -#define vandq_m_s32(__inactive, __a, __b, __p) __arm_vandq_m_s32(__inactive, __a, __b, __p) -#define vandq_m_s16(__inactive, __a, __b, __p) __arm_vandq_m_s16(__inactive, __a, __b, __p) -#define vandq_m_u8(__inactive, __a, __b, __p) __arm_vandq_m_u8(__inactive, __a, __b, __p) -#define vandq_m_u32(__inactive, __a, __b, __p) __arm_vandq_m_u32(__inactive, __a, __b, __p) -#define vandq_m_u16(__inactive, __a, __b, __p) __arm_vandq_m_u16(__inactive, __a, __b, __p) #define vbicq_m_s8(__inactive, __a, __b, __p) __arm_vbicq_m_s8(__inactive, __a, __b, __p) #define vbicq_m_s32(__inactive, __a, __b, __p) __arm_vbicq_m_s32(__inactive, __a, __b, __p) #define vbicq_m_s16(__inactive, __a, __b, __p) __arm_vbicq_m_s16(__inactive, __a, __b, __p) @@ -1692,12 +1664,6 @@ #define vcaddq_rot90_m_u8(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m_u8(__inactive, __a, __b, __p) #define vcaddq_rot90_m_u32(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m_u32(__inactive, __a, __b, __p) #define vcaddq_rot90_m_u16(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m_u16(__inactive, __a, __b, __p) -#define veorq_m_s8(__inactive, __a, __b, __p) __arm_veorq_m_s8(__inactive, __a, __b, __p) -#define veorq_m_s32(__inactive, __a, __b, __p) __arm_veorq_m_s32(__inactive, __a, __b, __p) -#define veorq_m_s16(__inactive, __a, __b, __p) __arm_veorq_m_s16(__inactive, __a, __b, __p) -#define veorq_m_u8(__inactive, __a, __b, __p) __arm_veorq_m_u8(__inactive, __a, __b, __p) -#define veorq_m_u32(__inactive, __a, __b, __p) __arm_veorq_m_u32(__inactive, __a, __b, __p) -#define veorq_m_u16(__inactive, __a, __b, __p) __arm_veorq_m_u16(__inactive, __a, __b, __p) #define vhaddq_m_n_s8(__inactive, __a, __b, __p) __arm_vhaddq_m_n_s8(__inactive, __a, __b, __p) #define vhaddq_m_n_s32(__inactive, __a, __b, __p) __arm_vhaddq_m_n_s32(__inactive, __a, __b, __p) #define vhaddq_m_n_s16(__inactive, __a, __b, __p) __arm_vhaddq_m_n_s16(__inactive, __a, __b, __p) @@ -2006,8 +1972,6 @@ #define vshrntq_m_n_u16(__a, __b, __imm, __p) __arm_vshrntq_m_n_u16(__a, __b, __imm, __p) #define vabdq_m_f32(__inactive, __a, __b, __p) __arm_vabdq_m_f32(__inactive, __a, __b, __p) #define vabdq_m_f16(__inactive, __a, __b, __p) __arm_vabdq_m_f16(__inactive, __a, __b, __p) -#define vandq_m_f32(__inactive, __a, __b, __p) __arm_vandq_m_f32(__inactive, __a, __b, __p) -#define vandq_m_f16(__inactive, __a, __b, __p) __arm_vandq_m_f16(__inactive, __a, __b, __p) #define vbicq_m_f32(__inactive, __a, __b, __p) __arm_vbicq_m_f32(__inactive, __a, __b, __p) #define vbicq_m_f16(__inactive, __a, __b, __p) __arm_vbicq_m_f16(__inactive, __a, __b, __p) #define vbrsrq_m_n_f32(__inactive, __a, __b, __p) __arm_vbrsrq_m_n_f32(__inactive, __a, __b, __p) @@ -2036,8 +2000,6 @@ #define vcvtq_m_n_s16_f16(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_s16_f16(__inactive, __a, __imm6, __p) #define vcvtq_m_n_u32_f32(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_u32_f32(__inactive, __a, __imm6, __p) #define vcvtq_m_n_u16_f16(__inactive, __a, __imm6, __p) __arm_vcvtq_m_n_u16_f16(__inactive, __a, __imm6, __p) -#define veorq_m_f32(__inactive, __a, __b, __p) __arm_veorq_m_f32(__inactive, __a, __b, __p) -#define veorq_m_f16(__inactive, __a, __b, __p) __arm_veorq_m_f16(__inactive, __a, __b, __p) #define vfmaq_m_f32(__a, __b, __c, __p) __arm_vfmaq_m_f32(__a, __b, __c, __p) #define vfmaq_m_f16(__a, __b, __c, __p) __arm_vfmaq_m_f16(__a, __b, __c, __p) #define vfmaq_m_n_f32(__a, __b, __c, __p) __arm_vfmaq_m_n_f32(__a, __b, __c, __p) @@ -2467,12 +2429,6 @@ #define vrmulhq_x_u8(__a, __b, __p) __arm_vrmulhq_x_u8(__a, __b, __p) #define vrmulhq_x_u16(__a, __b, __p) __arm_vrmulhq_x_u16(__a, __b, __p) #define vrmulhq_x_u32(__a, __b, __p) __arm_vrmulhq_x_u32(__a, __b, __p) -#define vandq_x_s8(__a, __b, __p) __arm_vandq_x_s8(__a, __b, __p) -#define vandq_x_s16(__a, __b, __p) __arm_vandq_x_s16(__a, __b, __p) -#define vandq_x_s32(__a, __b, __p) __arm_vandq_x_s32(__a, __b, __p) -#define vandq_x_u8(__a, __b, __p) __arm_vandq_x_u8(__a, __b, __p) -#define vandq_x_u16(__a, __b, __p) __arm_vandq_x_u16(__a, __b, __p) -#define vandq_x_u32(__a, __b, __p) __arm_vandq_x_u32(__a, __b, __p) #define vbicq_x_s8(__a, __b, __p) __arm_vbicq_x_s8(__a, __b, __p) #define vbicq_x_s16(__a, __b, __p) __arm_vbicq_x_s16(__a, __b, __p) #define vbicq_x_s32(__a, __b, __p) __arm_vbicq_x_s32(__a, __b, __p) @@ -2485,12 +2441,6 @@ #define vbrsrq_x_n_u8(__a, __b, __p) __arm_vbrsrq_x_n_u8(__a, __b, __p) #define vbrsrq_x_n_u16(__a, __b, __p) __arm_vbrsrq_x_n_u16(__a, __b, __p) #define vbrsrq_x_n_u32(__a, __b, __p) __arm_vbrsrq_x_n_u32(__a, __b, __p) -#define veorq_x_s8(__a, __b, __p) __arm_veorq_x_s8(__a, __b, __p) -#define veorq_x_s16(__a, __b, __p) __arm_veorq_x_s16(__a, __b, __p) -#define veorq_x_s32(__a, __b, __p) __arm_veorq_x_s32(__a, __b, __p) -#define veorq_x_u8(__a, __b, __p) __arm_veorq_x_u8(__a, __b, __p) -#define veorq_x_u16(__a, __b, __p) __arm_veorq_x_u16(__a, __b, __p) -#define veorq_x_u32(__a, __b, __p) __arm_veorq_x_u32(__a, __b, __p) #define vmovlbq_x_s8(__a, __p) __arm_vmovlbq_x_s8(__a, __p) #define vmovlbq_x_s16(__a, __p) __arm_vmovlbq_x_s16(__a, __p) #define vmovlbq_x_u8(__a, __p) __arm_vmovlbq_x_u8(__a, __p) @@ -2641,14 +2591,10 @@ #define vrndaq_x_f32(__a, __p) __arm_vrndaq_x_f32(__a, __p) #define vrndxq_x_f16(__a, __p) __arm_vrndxq_x_f16(__a, __p) #define vrndxq_x_f32(__a, __p) __arm_vrndxq_x_f32(__a, __p) -#define vandq_x_f16(__a, __b, __p) __arm_vandq_x_f16(__a, __b, __p) -#define vandq_x_f32(__a, __b, __p) __arm_vandq_x_f32(__a, __b, __p) #define vbicq_x_f16(__a, __b, __p) __arm_vbicq_x_f16(__a, __b, __p) #define vbicq_x_f32(__a, __b, __p) __arm_vbicq_x_f32(__a, __b, __p) #define vbrsrq_x_n_f16(__a, __b, __p) __arm_vbrsrq_x_n_f16(__a, __b, __p) #define vbrsrq_x_n_f32(__a, __b, __p) __arm_vbrsrq_x_n_f32(__a, __b, __p) -#define veorq_x_f16(__a, __b, __p) __arm_veorq_x_f16(__a, __b, __p) -#define veorq_x_f32(__a, __b, __p) __arm_veorq_x_f32(__a, __b, __p) #define vornq_x_f16(__a, __b, __p) __arm_vornq_x_f16(__a, __b, __p) #define vornq_x_f32(__a, __b, __p) __arm_vornq_x_f32(__a, __b, __p) #define vorrq_x_f16(__a, __b, __p) __arm_vorrq_x_f16(__a, __b, __p) @@ -3647,13 +3593,6 @@ __arm_vhaddq_n_u8 (uint8x16_t __a, uint8_t __b) return __builtin_mve_vhaddq_n_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_veorq_uv16qi (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq_n_u8 (uint8x16_t __a, uint8_t __b) @@ -3726,13 +3665,6 @@ __arm_vbicq_u8 (uint8x16_t __a, uint8x16_t __b) return __builtin_mve_vbicq_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vandq_uv16qi (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvq_p_u8 (uint8x16_t __a, mve_pred16_t __p) @@ -4202,13 +4134,6 @@ __arm_vhaddq_n_s8 (int8x16_t __a, int8_t __b) return __builtin_mve_vhaddq_n_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_veorq_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_s8 (int8x16_t __a, int8x16_t __b) @@ -4237,13 +4162,6 @@ __arm_vbicq_s8 (int8x16_t __a, int8x16_t __b) return __builtin_mve_vbicq_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vandq_sv16qi (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvaq_s8 (int32_t __a, int8x16_t __b) @@ -4419,13 +4337,6 @@ __arm_vhaddq_n_u16 (uint16x8_t __a, uint16_t __b) return __builtin_mve_vhaddq_n_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_veorq_uv8hi (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq_n_u16 (uint16x8_t __a, uint16_t __b) @@ -4498,13 +4409,6 @@ __arm_vbicq_u16 (uint16x8_t __a, uint16x8_t __b) return __builtin_mve_vbicq_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vandq_uv8hi (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvq_p_u16 (uint16x8_t __a, mve_pred16_t __p) @@ -4974,13 +4878,6 @@ __arm_vhaddq_n_s16 (int16x8_t __a, int16_t __b) return __builtin_mve_vhaddq_n_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_veorq_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_s16 (int16x8_t __a, int16x8_t __b) @@ -5009,13 +4906,6 @@ __arm_vbicq_s16 (int16x8_t __a, int16x8_t __b) return __builtin_mve_vbicq_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vandq_sv8hi (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvaq_s16 (int32_t __a, int16x8_t __b) @@ -5191,13 +5081,6 @@ __arm_vhaddq_n_u32 (uint32x4_t __a, uint32_t __b) return __builtin_mve_vhaddq_n_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_veorq_uv4si (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq_n_u32 (uint32x4_t __a, uint32_t __b) @@ -5270,13 +5153,6 @@ __arm_vbicq_u32 (uint32x4_t __a, uint32x4_t __b) return __builtin_mve_vbicq_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vandq_uv4si (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvq_p_u32 (uint32x4_t __a, mve_pred16_t __p) @@ -5746,13 +5622,6 @@ __arm_vhaddq_n_s32 (int32x4_t __a, int32_t __b) return __builtin_mve_vhaddq_n_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_veorq_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_s32 (int32x4_t __a, int32x4_t __b) @@ -5781,13 +5650,6 @@ __arm_vbicq_s32 (int32x4_t __a, int32x4_t __b) return __builtin_mve_vbicq_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vandq_sv4si (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvaq_s32 (int32_t __a, int32x4_t __b) @@ -9175,48 +9037,6 @@ __arm_vabdq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pr return __builtin_mve_vabdq_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -9385,48 +9205,6 @@ __arm_vcaddq_rot90_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, return __builtin_mve_vcaddq_rot90_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhaddq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) @@ -14285,48 +14063,6 @@ __arm_vrmulhq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __builtin_mve_vrmulhq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -14411,48 +14147,6 @@ __arm_vbrsrq_x_n_u32 (uint32x4_t __a, int32_t __b, mve_pred16_t __p) return __builtin_mve_vbrsrq_m_n_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmovlbq_x_s8 (int8x16_t __a, mve_pred16_t __p) @@ -16300,13 +15994,6 @@ __arm_vmaxnmaq_f16 (float16x8_t __a, float16x8_t __b) return __builtin_mve_vmaxnmaq_fv8hf (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_f16 (float16x8_t __a, float16x8_t __b) -{ - return __builtin_mve_veorq_fv8hf (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmulq_rot90_f16 (float16x8_t __a, float16x8_t __b) @@ -16356,13 +16043,6 @@ __arm_vbicq_f16 (float16x8_t __a, float16x8_t __b) return __builtin_mve_vbicq_fv8hf (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_f16 (float16x8_t __a, float16x8_t __b) -{ - return __builtin_mve_vandq_fv8hf (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_f16 (float16x8_t __a, float16x8_t __b) @@ -16524,13 +16204,6 @@ __arm_vmaxnmaq_f32 (float32x4_t __a, float32x4_t __b) return __builtin_mve_vmaxnmaq_fv4sf (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_f32 (float32x4_t __a, float32x4_t __b) -{ - return __builtin_mve_veorq_fv4sf (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmulq_rot90_f32 (float32x4_t __a, float32x4_t __b) @@ -16580,13 +16253,6 @@ __arm_vbicq_f32 (float32x4_t __a, float32x4_t __b) return __builtin_mve_vbicq_fv4sf (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_f32 (float32x4_t __a, float32x4_t __b) -{ - return __builtin_mve_vandq_fv4sf (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq_f32 (float32x4_t __a, float32x4_t __b) @@ -17372,20 +17038,6 @@ __arm_vabdq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve return __builtin_mve_vabdq_m_fv8hf (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_fv8hf (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) @@ -17582,20 +17234,6 @@ __arm_vcvtq_m_n_u16_f16 (uint16x8_t __inactive, float16x8_t __a, const int __imm return __builtin_mve_vcvtq_m_n_from_f_uv8hi (__inactive, __a, __imm6, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_fv8hf (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vfmaq_m_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c, mve_pred16_t __p) @@ -18456,20 +18094,6 @@ __arm_vrndxq_x_f32 (float32x4_t __a, mve_pred16_t __p) return __builtin_mve_vrndxq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vandq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) @@ -18498,20 +18122,6 @@ __arm_vbrsrq_x_n_f32 (float32x4_t __a, int32_t __b, mve_pred16_t __p) return __builtin_mve_vbrsrq_m_n_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_veorq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) @@ -19428,13 +19038,6 @@ __arm_vhaddq (uint8x16_t __a, uint8_t __b) return __arm_vhaddq_n_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_veorq_u8 (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq (uint8x16_t __a, uint8_t __b) @@ -19505,13 +19108,6 @@ __arm_vbicq (uint8x16_t __a, uint8x16_t __b) return __arm_vbicq_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vandq_u8 (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvq_p (uint8x16_t __a, mve_pred16_t __p) @@ -19981,13 +19577,6 @@ __arm_vhaddq (int8x16_t __a, int8_t __b) return __arm_vhaddq_n_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (int8x16_t __a, int8x16_t __b) -{ - return __arm_veorq_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90 (int8x16_t __a, int8x16_t __b) @@ -20016,13 +19605,6 @@ __arm_vbicq (int8x16_t __a, int8x16_t __b) return __arm_vbicq_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vandq_s8 (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvaq (int32_t __a, int8x16_t __b) @@ -20198,13 +19780,6 @@ __arm_vhaddq (uint16x8_t __a, uint16_t __b) return __arm_vhaddq_n_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_veorq_u16 (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq (uint16x8_t __a, uint16_t __b) @@ -20275,13 +19850,6 @@ __arm_vbicq (uint16x8_t __a, uint16x8_t __b) return __arm_vbicq_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vandq_u16 (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvq_p (uint16x8_t __a, mve_pred16_t __p) @@ -20751,13 +20319,6 @@ __arm_vhaddq (int16x8_t __a, int16_t __b) return __arm_vhaddq_n_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (int16x8_t __a, int16x8_t __b) -{ - return __arm_veorq_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90 (int16x8_t __a, int16x8_t __b) @@ -20786,13 +20347,6 @@ __arm_vbicq (int16x8_t __a, int16x8_t __b) return __arm_vbicq_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vandq_s16 (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvaq (int32_t __a, int16x8_t __b) @@ -20968,13 +20522,6 @@ __arm_vhaddq (uint32x4_t __a, uint32_t __b) return __arm_vhaddq_n_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_veorq_u32 (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq (uint32x4_t __a, uint32_t __b) @@ -21045,13 +20592,6 @@ __arm_vbicq (uint32x4_t __a, uint32x4_t __b) return __arm_vbicq_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vandq_u32 (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvq_p (uint32x4_t __a, mve_pred16_t __p) @@ -21521,13 +21061,6 @@ __arm_vhaddq (int32x4_t __a, int32_t __b) return __arm_vhaddq_n_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (int32x4_t __a, int32x4_t __b) -{ - return __arm_veorq_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90 (int32x4_t __a, int32x4_t __b) @@ -21556,13 +21089,6 @@ __arm_vbicq (int32x4_t __a, int32x4_t __b) return __arm_vbicq_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vandq_s32 (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vaddvaq (int32_t __a, int32x4_t __b) @@ -24909,48 +24435,6 @@ __arm_vabdq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16 return __arm_vabdq_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -25119,48 +24603,6 @@ __arm_vcaddq_rot90_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve return __arm_vcaddq_rot90_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhaddq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) @@ -29550,48 +28992,6 @@ __arm_vrmulhq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __arm_vrmulhq_x_u32 (__a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_u32 (__a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -29676,48 +29076,6 @@ __arm_vbrsrq_x (uint32x4_t __a, int32_t __b, mve_pred16_t __p) return __arm_vbrsrq_x_n_u32 (__a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_u32 (__a, __b, __p); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmovlbq_x (int8x16_t __a, mve_pred16_t __p) @@ -31127,13 +30485,6 @@ __arm_vmaxnmaq (float16x8_t __a, float16x8_t __b) return __arm_vmaxnmaq_f16 (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (float16x8_t __a, float16x8_t __b) -{ - return __arm_veorq_f16 (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmulq_rot90 (float16x8_t __a, float16x8_t __b) @@ -31183,13 +30534,6 @@ __arm_vbicq (float16x8_t __a, float16x8_t __b) return __arm_vbicq_f16 (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (float16x8_t __a, float16x8_t __b) -{ - return __arm_vandq_f16 (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (float16x8_t __a, float16x8_t __b) @@ -31351,13 +30695,6 @@ __arm_vmaxnmaq (float32x4_t __a, float32x4_t __b) return __arm_vmaxnmaq_f32 (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq (float32x4_t __a, float32x4_t __b) -{ - return __arm_veorq_f32 (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmulq_rot90 (float32x4_t __a, float32x4_t __b) @@ -31407,13 +30744,6 @@ __arm_vbicq (float32x4_t __a, float32x4_t __b) return __arm_vbicq_f32 (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq (float32x4_t __a, float32x4_t __b) -{ - return __arm_vandq_f32 (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vabdq (float32x4_t __a, float32x4_t __b) @@ -32184,20 +31514,6 @@ __arm_vabdq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pre return __arm_vabdq_m_f16 (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vandq_m_f16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) @@ -32394,20 +31710,6 @@ __arm_vcvtq_m_n (uint16x8_t __inactive, float16x8_t __a, const int __imm6, mve_p return __arm_vcvtq_m_n_u16_f16 (__inactive, __a, __imm6, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_veorq_m_f16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vfmaq_m (float32x4_t __a, float32x4_t __b, float32x4_t __c, mve_pred16_t __p) @@ -33010,20 +32312,6 @@ __arm_vrndxq_x (float32x4_t __a, mve_pred16_t __p) return __arm_vrndxq_x_f32 (__a, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vandq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vandq_x_f32 (__a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) @@ -33052,20 +32340,6 @@ __arm_vbrsrq_x (float32x4_t __a, int32_t __b, mve_pred16_t __p) return __arm_vbrsrq_x_n_f32 (__a, __b, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_veorq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_veorq_x_f32 (__a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) @@ -33678,18 +32952,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vabdq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vabdq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) -#define __arm_vandq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vandq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vandq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vandq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vandq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vandq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vandq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vandq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vandq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) - #define __arm_vbicq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -33868,18 +33130,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vcmulq_rot90_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vcmulq_rot90_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) -#define __arm_veorq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_veorq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_veorq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_veorq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_veorq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_veorq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_veorq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_veorq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_veorq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) - #define __arm_vmaxnmaq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -35060,19 +34310,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vabdq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vabdq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vandq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vandq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vandq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vandq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vandq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vandq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vandq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vandq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vandq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) - #define __arm_vbicq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -35180,19 +34417,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vcmulq_rot90_m_f16(__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vcmulq_rot90_m_f32(__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_veorq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_veorq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_veorq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_veorq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_veorq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_veorq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_veorq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_veorq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_veorq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) - #define __arm_vfmaq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -35588,18 +34812,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t]: __arm_vabsq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), p2), \ int (*)[__ARM_mve_type_float32x4_t]: __arm_vabsq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), p2));}) -#define __arm_vandq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vandq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vandq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vandq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vandq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vandq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vandq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vandq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vandq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) - #define __arm_vbicq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -35679,18 +34891,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t]: __arm_vcvtq_x_n_f16_u16 (__ARM_mve_coerce(__p1, uint16x8_t), p2, p3), \ int (*)[__ARM_mve_type_uint32x4_t]: __arm_vcvtq_x_n_f32_u32 (__ARM_mve_coerce(__p1, uint32x4_t), p2, p3));}) -#define __arm_veorq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_veorq_x_s8(__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_veorq_x_s16(__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_veorq_x_s32(__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_veorq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_veorq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_veorq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_veorq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_veorq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) - #define __arm_vmaxnmq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -36251,16 +35451,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_veorq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_veorq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_veorq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_veorq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_veorq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_veorq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_veorq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vcaddq_rot90(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -36304,16 +35494,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vbicq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vbicq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vandq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vandq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vandq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vandq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vandq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vandq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vandq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vabdq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -36998,17 +36178,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vabdq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vabdq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_vandq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vandq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vandq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vandq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vandq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vandq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vandq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vbicq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -37053,17 +36222,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vcaddq_rot90_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vcaddq_rot90_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_veorq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_veorq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_veorq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_veorq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_veorq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_veorq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_veorq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vmladavaq_p(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -37360,16 +36518,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vcaddq_rot90_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vcaddq_rot90_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_veorq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_veorq_x_s8(__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_veorq_x_s16(__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_veorq_x_s32(__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_veorq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_veorq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_veorq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vmovlbq_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vmovlbq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ @@ -37478,16 +36626,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vabdq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vabdq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_vandq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vandq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vandq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vandq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vandq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vandq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vandq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vbicq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ From patchwork Tue Apr 18 13:45:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67936 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2B4FA3851C23 for ; Tue, 18 Apr 2023 13:53:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2B4FA3851C23 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681826000; bh=wpvYNlknvG9j76k+3A2t4sN3Mf7t1nPnpVN0uw53LH8=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=VLk4b5J8nfWOtdi9jHdJH8CAWYR0LSfA2fRwontRBy9OaByaqzmtc4XAnqpedU2VF AiLhgwEZKehN1s6cIYFYiVo/Dvp81quIowRQTekPBkiGVShdDaSV3VviFjEvAA/KUo JHHXD0MnDvipdB4ofyMTXYEpIMD2VX91WPvXOFrE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2075.outbound.protection.outlook.com [40.107.104.75]) by sourceware.org (Postfix) with ESMTPS id 201323857036 for ; Tue, 18 Apr 2023 13:47:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 201323857036 Received: from DB6PR0301CA0008.eurprd03.prod.outlook.com (2603:10a6:4:3e::18) by AS2PR08MB10155.eurprd08.prod.outlook.com (2603:10a6:20b:62d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:42 +0000 Received: from DBAEUR03FT028.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:3e:cafe::c8) by DB6PR0301CA0008.outlook.office365.com (2603:10a6:4:3e::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.46 via Frontend Transport; Tue, 18 Apr 2023 13:47:42 +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 DBAEUR03FT028.mail.protection.outlook.com (100.127.142.236) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:42 +0000 Received: ("Tessian outbound 3570909035da:v136"); Tue, 18 Apr 2023 13:47:42 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 169208a602e1c9d5 X-CR-MTA-TID: 64aa7808 Received: from ee5292f6a9da.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 78EEB47D-734F-48C9-9EC7-2DFB875C62D5.1; Tue, 18 Apr 2023 13:47:32 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ee5292f6a9da.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GLC9Xwieu/N6cKYZKZQrdikc6S5cuqeOqUelsHHIsVVDVSrrpRa7p6XazOEkDm1h1nzagqRDEpoPcL0B9/kiA4otKTewSttEeBi4OqCNJSOGoUyY58UjwqEtpcXq+E/gtHrtCN+XXI6fnyHgraMf0YxHu6MXTspOxGAFlzLIC3l0w0U2t5iA8YuMHKF6DBf8FlbjR54FYSE4yOB2kkoPGZXNuQ65r4pfeZZGTqVzsZssovJ3fjz5Kjhl+FGSNhneaHc1Vwc1Rm7VPO/30T0Yjc75FmXog7rpCdm4OT6OJU8/StG7xsHXIuuQcyZGMmEryXJ0rmWXen4n29XB3kIHJA== 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=wpvYNlknvG9j76k+3A2t4sN3Mf7t1nPnpVN0uw53LH8=; b=DsmxY+8haC+MvDgOMk3AAL8KC5A0EBO9GJ5tmpEMmd8EFK6cgiiXD6mZ98rTDq+QzrRQsnjCNy5XGTKE3XfqLTY9wuhTTd1s/3PRs4OrJIacjzTjL2M6DI6Ex/rgw+iv7BTtRjFs0n5FvHWW6xOryoqPHM9QkpPxAeg+4ACpuTTPYHHqoDA0+o/jKDzOYNyKw/K9sZXXLMNdd0QeDA8Nqtol3l+bZ58mw/GTfeiqyXBR5saTgYiGqkMkc1Ca+jiKxlwVrxxz6Q8mzI4btI5oj1H2Ow5zuoqXsWp39jSz/6HW80KSrKYMbyH1iZsNhTdZhxz5b+aPb4VfD8FTYD/gZQ== 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 Received: from AS9PR05CA0070.eurprd05.prod.outlook.com (2603:10a6:20b:499::6) by DBAPR08MB5783.eurprd08.prod.outlook.com (2603:10a6:10:1a3::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:22 +0000 Received: from AM7EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:499:cafe::24) by AS9PR05CA0070.outlook.office365.com (2603:10a6:20b:499::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.46 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +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 AM7EUR03FT016.mail.protection.outlook.com (100.127.140.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:18 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:18 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:18 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 12/22] arm: [MVE intrinsics] add binary_orrq shape Date: Tue, 18 Apr 2023 15:45:58 +0200 Message-ID: <20230418134608.244751-13-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT016:EE_|DBAPR08MB5783:EE_|DBAEUR03FT028:EE_|AS2PR08MB10155:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d100c96-e061-46ff-4c16-08db40137b7b 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: U8QxUDDBcDeP2tOthbuMWR+SjqgMp9l0cU/wTvdfqW07BAChfpFmqjQjamFORvaSuqa/eLuUWjMLiIGDyWHrlfi9Fi+J6S8Guk3GGKm0EmPjCf58w0e/a7kHOHqoB+ugTZy0A09IJPlm53EgsiEr1KEDw7xG2F3xwvlrm8ULaa+V2N693wBwoqTlPNcTVvJxB8QgloDgjLF7cNToTUbKBgUHOLYmDpZLbbBIgkMtk97wX/LsqlMYd458DCjvqA+fBRIiWJ7utQHAwj3gmR+qu0ZIn+t5SI8Lix3Hbt714ddgswM/erWk1SPKVfbYBPTZPrlXiAxC51mzXBKyfWxp8ocNOU2lmAq4OzM0IQ3xM1OyMnmD2Q8Q0JAwj7sUlVaOC7ZKOp1714TiXJvVeenSqWOTzq7oR9dZDhXETQAhsSROcMShDnXsBsR2swP6lwHrWaBFNRt13a06sm9eMli0FH5CtLObaCb1WDnEOsJyQUQqK9vT37UmFU6sPVLpHPFVdRr1NPiJVpXp/SQ/1zngfd0mSfYfuDCd1jLntf40gU40aAJwXdpheo30SmVTM8t2CtwDGD6cFY7cf5XAlVOzIKMj+H3BmW2icmCsTkwycQ3E6YW9rCXZIQbf+hr82s986p1YtXB2aMpTG2ADKH6vbPerc9E3702iYxSmRtJZjjZ8Iu6gfhNr0ou+OyZgVvODEZ8jg9mjoVcFQFJL9JInHw== 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:(13230028)(4636009)(376002)(136003)(346002)(396003)(39850400004)(451199021)(36840700001)(46966006)(336012)(6666004)(7696005)(478600001)(86362001)(110136005)(2616005)(47076005)(36756003)(426003)(36860700001)(40480700001)(26005)(83380400001)(1076003)(186003)(82740400003)(356005)(70586007)(70206006)(81166007)(316002)(2906002)(4326008)(8936002)(5660300002)(8676002)(44832011)(41300700001)(82310400005)(6636002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5783 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT028.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4fdc07ef-2622-46b7-c82a-08db40136f72 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KNMbdGsSavcv+P7Jhheg5WT1XBQWV4qw+Ml0PFrNe0UDYMfH1E2FfSLBG3CvCxRHZu3O4Rp0N2VClmUejc42uXiaMKuWPSzTexmi//ABuxGw2Q+PTr5ibtI369+2Y00g7BQoacBZAM0smIsIhUUvMdwu1PBoBdLMObPFD2pRbOCN/FjTKBjaC0CBukkaESmeKht97fjfFoiIX1vsJwpKCJtr4gqh7fKBMTjtt6O6t11CrMq9GkmskS+Z9Pe5Yo+FrjDQf6zOIhiN+4uG8diwLyBrlm3pcyOv3TIzeu3kUyk0Xvr25IHYqolNOc9g2swtQ5ddrY1lquc97REOcj5JzZ7Ab7/Ux1kcbt7bEGhRkZv/8Y7xYAYSZK6V3fBRR1TufDP+7iaApSUdsc1je2Yu5VGissdJGpKj/PqWtwACe8JW1YTgxkBHnKK88j5iDI5lHAMeXSzFRp87jK0vvesZwT6S8PveIpvME61RyJI6/BA0OQLaDG+KmarV+2G0jeDCW25kcN3IDuRBLsSu+m3c4hVhn5r+qNAZe69r5bkPMfG50g+HT9fhCBa3Fc6RPq1Er/sH1VlHG9qRAwrJKsLPjVXtiqMjaG2OuAsljWnFEfHq6sZYyIUz08qvKNBOTxwPUp9e9/AhLDZrmBxRZ3MwVujkpPBhfr+tJtnv6Nrf+crnvJlcOxxAw5lfY7hoz2vb+UyZYo60EEkVboEQTsehzg== 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:(13230028)(4636009)(346002)(396003)(136003)(376002)(39860400002)(451199021)(40470700004)(36840700001)(46966006)(40480700001)(40460700003)(41300700001)(316002)(70206006)(4326008)(6636002)(70586007)(44832011)(81166007)(82740400003)(2906002)(336012)(8936002)(8676002)(5660300002)(426003)(83380400001)(1076003)(26005)(2616005)(110136005)(186003)(6666004)(36860700001)(478600001)(7696005)(47076005)(86362001)(36756003)(82310400005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:42.3135 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3d100c96-e061-46ff-4c16-08db40137b7b 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: DBAEUR03FT028.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB10155 X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" patch adds the binary_orrq shape description. MODE_n intrinsics use a set of predicates (preds_m_or_none) different the MODE_none ones, so we explicitly reference preds_m_or_none from the shape, thus we need to make it a global array. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-shapes.cc (binary_orrq): New. * config/arm/arm-mve-builtins-shapes.h (binary_orrq): New. * config/arm/arm-mve-builtins.cc (preds_m_or_none): Remove static. * config/arm/arm-mve-builtins.h (preds_m_or_none): Declare. --- gcc/config/arm/arm-mve-builtins-shapes.cc | 61 +++++++++++++++++++++++ gcc/config/arm/arm-mve-builtins-shapes.h | 1 + gcc/config/arm/arm-mve-builtins.cc | 2 +- gcc/config/arm/arm-mve-builtins.h | 3 ++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index e69faae4e2c..83410bbc51a 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -397,6 +397,67 @@ struct binary_opt_n_def : public overloaded_base<0> }; SHAPE (binary_opt_n) +/* _t vfoo[t0](_t, _t) + _t vfoo[_n_t0](_t, _t) + + Where the _n form has only supports s16/s32/u16/u32 types as for vorrq. + + Example: vorrq. + int16x8_t [__arm_]vorrq[_s16](int16x8_t a, int16x8_t b) + int16x8_t [__arm_]vorrq_m[_s16](int16x8_t inactive, int16x8_t a, int16x8_t b, mve_pred16_t p) + int16x8_t [__arm_]vorrq_x[_s16](int16x8_t a, int16x8_t b, mve_pred16_t p) + int16x8_t [__arm_]vorrq[_n_s16](int16x8_t a, const int16_t imm) + int16x8_t [__arm_]vorrq_m_n[_s16](int16x8_t a, const int16_t imm, mve_pred16_t p) */ +struct binary_orrq_def : public overloaded_base<0> +{ + bool + explicit_mode_suffix_p (enum predication_index pred, enum mode_suffix_index mode) const override + { + return (mode == MODE_n + && pred == PRED_m); + } + + bool + skip_overload_p (enum predication_index pred, enum mode_suffix_index mode) const override + { + switch (mode) + { + case MODE_none: + return false; + + /* For MODE_n, share the overloaded instance with MODE_none, except for PRED_m. */ + case MODE_n: + return pred != PRED_m; + + default: + gcc_unreachable (); + } + } + + void + build (function_builder &b, const function_group_info &group, + bool preserve_user_namespace) const override + { + b.add_overloaded_functions (group, MODE_none, preserve_user_namespace); + b.add_overloaded_functions (group, MODE_n, preserve_user_namespace); + build_all (b, "v0,v0,v0", group, MODE_none, preserve_user_namespace); + build_16_32 (b, "v0,v0,s0", group, MODE_n, preserve_user_namespace, false, preds_m_or_none); + } + + tree + resolve (function_resolver &r) const override + { + unsigned int i, nargs; + type_suffix_index type; + if (!r.check_gp_argument (2, i, nargs) + || (type = r.infer_vector_type (0)) == NUM_TYPE_SUFFIXES) + return error_mark_node; + + return r.finish_opt_n_resolution (i, 0, type); + } +}; +SHAPE (binary_orrq) + /* [xN]_t vfoo_t0(). Example: vuninitializedq. diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h index b00ee5eb57a..618b3226050 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.h +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -36,6 +36,7 @@ namespace arm_mve extern const function_shape *const binary; extern const function_shape *const binary_opt_n; + extern const function_shape *const binary_orrq; extern const function_shape *const inherent; extern const function_shape *const unary_convert; diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc index e409a029346..c74e890bd3d 100644 --- a/gcc/config/arm/arm-mve-builtins.cc +++ b/gcc/config/arm/arm-mve-builtins.cc @@ -285,7 +285,7 @@ static const predication_index preds_none[] = { PRED_none, NUM_PREDS }; /* Used by functions that have the m (merging) predicated form, and in addition have an unpredicated form. */ -static const predication_index preds_m_or_none[] = { +const predication_index preds_m_or_none[] = { PRED_m, PRED_none, NUM_PREDS }; diff --git a/gcc/config/arm/arm-mve-builtins.h b/gcc/config/arm/arm-mve-builtins.h index a20d2fb5d86..c9b51a0c77b 100644 --- a/gcc/config/arm/arm-mve-builtins.h +++ b/gcc/config/arm/arm-mve-builtins.h @@ -135,6 +135,9 @@ enum predication_index NUM_PREDS }; +/* Some shapes need access to some predicate sets. */ +extern const predication_index preds_m_or_none[]; + /* Classifies element types, based on type suffixes with the bit count removed. */ enum type_class_index From patchwork Tue Apr 18 13:45:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67934 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1C2803851C2D for ; Tue, 18 Apr 2023 13:52:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1C2803851C2D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825976; bh=Mw5HDHhb3VQnq4deUpXAOyn3H/hFZi+SZxj5hsnDlcI=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=PpP9VEWfRsC64TN5YSja4aSzE+n9onRgT4P7DgH1vCNz5VaNdwG2eK6HXSxrZ1bCc HBVV3rwaEy5bcWMYFWTtkVZs90ZeBAdUn1x2FaDWNmKFPRsynPGM4W9BxG3LH9Xidh 6y/jUI22en0OQdMOhyLxC2b6lhAzO1bzAb0INueQ= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2083.outbound.protection.outlook.com [40.107.7.83]) by sourceware.org (Postfix) with ESMTPS id C393F3857013 for ; Tue, 18 Apr 2023 13:47:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C393F3857013 Received: from AS9PR04CA0048.eurprd04.prod.outlook.com (2603:10a6:20b:46a::27) by DB9PR08MB7510.eurprd08.prod.outlook.com (2603:10a6:10:301::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:44 +0000 Received: from AM7EUR03FT049.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46a:cafe::fa) by AS9PR04CA0048.outlook.office365.com (2603:10a6:20b:46a::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:44 +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 AM7EUR03FT049.mail.protection.outlook.com (100.127.140.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:44 +0000 Received: ("Tessian outbound e13c2446394c:v136"); Tue, 18 Apr 2023 13:47:44 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 00be526107d204a6 X-CR-MTA-TID: 64aa7808 Received: from 30a7427c22f0.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8A4E0C49-B80A-43A8-B392-734E57413077.1; Tue, 18 Apr 2023 13:47:37 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 30a7427c22f0.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BpIInOnYyMwChP3tkFyU30eKHcCxU9IXKr6SgRWqwpQSfROil9JQnORCvxC+cpvoPK/naUu8r9wysH+R9nCHDtMSowTx1bg3v9FVaaC87ak60bIfXP4OQd+r9Y0WWcaX6ZyVyEcXcINKdKvI98Tse+BiIUbyfEsoU3Dtus5j+TeH6FAfyjOwXEjJ3LW0rfhp4yALaoUfhljXsdI8Puycp7N9nZlSDg/siCUWuVAaZMF5vVEt3rdQUe2vYpM0qoJ3kvA+ROUjD1LPLaKXRElJfKhYhv25iYMBaLCEwjzerXd9lZCLBj7ST2x9g9is6ECKwoRTiZbkoAndZoytGVd5/Q== 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=Mw5HDHhb3VQnq4deUpXAOyn3H/hFZi+SZxj5hsnDlcI=; b=NpuqUWrX9zKIvzslJ0fssmXnn8SA6YJAG1rFVE8WEZsu130bwjFSfoW3IqQtsJ0zZ1pprvjNm6rXqqHPYbWfkPmWAJuChDpyRvxrJzgUpyKRWubr/NJIqrB2KGvlusuRxzywzE2RtGI09NGWU1ly8DMSjkSvd5pdiPLWvC+pcakPzhBRMtHahrF9Io9damiToTRMpaA1Np7I/wSKvyWyngJiAVW34GehofLlNHMOLUXFk7xhD+U/QfyEnpDFEtwSNuE5KK3VEtj+lJGQsRdwU8x91yJwX3hKJagwL2Uzmb9QgjVKGcnCtB9NOo2eBZLE054NzdfCRYCumvoz5iLdsQ== 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 Received: from AS9PR05CA0069.eurprd05.prod.outlook.com (2603:10a6:20b:499::29) by DB9PR08MB6538.eurprd08.prod.outlook.com (2603:10a6:10:23d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:23 +0000 Received: from AM7EUR03FT016.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:499:cafe::7e) by AS9PR05CA0069.outlook.office365.com (2603:10a6:20b:499::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:23 +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 AM7EUR03FT016.mail.protection.outlook.com (100.127.140.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:23 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:19 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:19 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 13/22] arm: [MVE intrinsics] rework vorrq Date: Tue, 18 Apr 2023 15:45:59 +0200 Message-ID: <20230418134608.244751-14-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT016:EE_|DB9PR08MB6538:EE_|AM7EUR03FT049:EE_|DB9PR08MB7510:EE_ X-MS-Office365-Filtering-Correlation-Id: 126ca1f4-e9af-489e-7114-08db40137ce0 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: smADtzs1S9zxpX8xSe/9O8yhRmGJrAV07qUltBfI7KbL0ALk6jjfeYicihAboKks6Mb4Tpq1rwdqNHjuISufg+q5mr2Oe5YmKRroAdVWr46091SsEahPbbmrZijLHPby0V/Fv8MyWpbGx3OTC3+S04oXVDKghDv7e+Ildv5mevzUgIUBWRGXYySCoC1En/rDufWS9v+CTT1N8oAXQaN1Mqkse8Yp7jc4nZNws+YPdMnquee36DGth2gdHjUBoQ9S7atZ/s6fx9RW/98KNx8Z3h0IQSn4aMqQ1HL8Nsx23GjR7WJaeBuoMAP5ibeQUGaVMgf+btsgcRFypYudwKTATnczFW4zQ1+04OicvNLf0fdpsR1J70ucv3JwSYdLQqbEl9BTXrTIagoBT/McXh2JygLBPWPzHNovG0fDYZM8PSp/sOxVJQ0SOQTvnYYKcuczvHNzUWk1vX/QzxC5QtiVgOUFphWSrC9ny/w4/UNF2tF64mK2yDh6wTExN23g0VTG1tp9UXM0vFGZ6rg3Blzx/WXR+daQpkp4X/vC1zS/XRlqm2KejC7acozVM43UccL3v/46wPU//8PkbzOozFhRzEaFlFTMftp23o7WNCGAGrgeDPyuwiSXh3VvdP/QdlwCb74aSNDb5TY4DvOswzeZ1hQIHBAJUCY/AmeKqm9Pd/zUjAgGV2nrLuNggGC2hSbu+dhiL6/cBpbE6Hs+pTRCpA== 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:(13230028)(4636009)(346002)(136003)(376002)(39860400002)(396003)(451199021)(36840700001)(46966006)(36756003)(8936002)(8676002)(44832011)(5660300002)(2906002)(30864003)(82310400005)(86362001)(40480700001)(478600001)(7696005)(6666004)(6636002)(110136005)(186003)(2616005)(36860700001)(1076003)(70586007)(70206006)(26005)(41300700001)(356005)(82740400003)(316002)(83380400001)(81166007)(4326008)(47076005)(426003)(336012)(36900700001)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6538 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT049.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 27b30044-43f8-4069-d272-08db40137001 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QHyvOE4Oghu7Lh44dT6Wyi+D4gdHAcNUwGqClIMLDDJfeDAhskX0NbgLqa7uIpzDER2vfl5P+hkScASHUTPqGSj9VBaz3JCRP2uETHS2htPyeYYHrhN+sApoAgs0W3BPhjPG6CgYdN9nV8L+gxUhwKuGlIpONN41IB4fffR7OP+W+JkpguQbiOy7nxmjiIInAjvfn7u6T7rD3VSVtUv5AGKfoW/EQDNQLiaCufaDTmllVvq1y91NyG22aStFxnNwUk+kNu4xmqaDSbafAIcBpNu0JnI3QbFqSVTgsTRGjikB3RTuGC32VUDnOva02MFcq4doQuvOa7Hc8PnqxPIeTJu9w8NipAsZlbgqRzYZi3nzxuoJNROKkxPS4xMHxVwLuEVcOlW1iJM02R5l+4ohMsW8v8bd8elL6txuPAFypSEXYGS2r46tV0wDcWHJQZfNXk563Kahzq3SecZLdcUGjDMfMPNJ15tBmoFGcUA80KYYd/uSpm+H1sXPhe4NkyGjbqk10zTlfgb+OPUCefgUOkHwRhvpsxoyNNkA8yvgZi8yp1rvgz9TxXtpM3macyq445vY+JHdPd0NIlwNL7gsJyc6i3snyvu3pdQLxVLcCIDGkD/gG3S6zTrW5WfidOd6tqvPDpHqiwKKJyZ7p2n609TbyNffEtezDrsxj8bIk4FX6eJIbPVp7VLQJ6MFnO/fbCqiFP6Aspfu/jDnLB8qQg== 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:(13230028)(4636009)(396003)(39860400002)(136003)(376002)(346002)(451199021)(46966006)(36840700001)(40470700004)(478600001)(6666004)(8936002)(8676002)(316002)(41300700001)(82740400003)(4326008)(6636002)(70586007)(70206006)(40480700001)(81166007)(110136005)(40460700003)(186003)(30864003)(2906002)(1076003)(336012)(426003)(26005)(86362001)(83380400001)(36756003)(47076005)(82310400005)(2616005)(36860700001)(5660300002)(7696005)(44832011)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:44.5915 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 126ca1f4-e9af-489e-7114-08db40137ce0 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: AM7EUR03FT049.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7510 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Implement vorrq using the new MVE builtins framework. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-base.cc (FUNCTION_WITH_RTX_M_N_NO_N_F): New. (vorrq): New. * config/arm/arm-mve-builtins-base.def (vorrq): New. * config/arm/arm-mve-builtins-base.h (vorrq): New. * config/arm/arm-mve-builtins.cc (function_instance::has_inactive_argument): Handle vorrq. * config/arm/arm_mve.h (vorrq): Remove. (vorrq_m_n): Remove. (vorrq_m): Remove. (vorrq_x): Remove. (vorrq_u8): Remove. (vorrq_s8): Remove. (vorrq_u16): Remove. (vorrq_s16): Remove. (vorrq_u32): Remove. (vorrq_s32): Remove. (vorrq_n_u16): Remove. (vorrq_f16): Remove. (vorrq_n_s16): Remove. (vorrq_n_u32): Remove. (vorrq_f32): Remove. (vorrq_n_s32): Remove. (vorrq_m_n_s16): Remove. (vorrq_m_n_u16): Remove. (vorrq_m_n_s32): Remove. (vorrq_m_n_u32): Remove. (vorrq_m_s8): Remove. (vorrq_m_s32): Remove. (vorrq_m_s16): Remove. (vorrq_m_u8): Remove. (vorrq_m_u32): Remove. (vorrq_m_u16): Remove. (vorrq_m_f32): Remove. (vorrq_m_f16): Remove. (vorrq_x_s8): Remove. (vorrq_x_s16): Remove. (vorrq_x_s32): Remove. (vorrq_x_u8): Remove. (vorrq_x_u16): Remove. (vorrq_x_u32): Remove. (vorrq_x_f16): Remove. (vorrq_x_f32): Remove. (__arm_vorrq_u8): Remove. (__arm_vorrq_s8): Remove. (__arm_vorrq_u16): Remove. (__arm_vorrq_s16): Remove. (__arm_vorrq_u32): Remove. (__arm_vorrq_s32): Remove. (__arm_vorrq_n_u16): Remove. (__arm_vorrq_n_s16): Remove. (__arm_vorrq_n_u32): Remove. (__arm_vorrq_n_s32): Remove. (__arm_vorrq_m_n_s16): Remove. (__arm_vorrq_m_n_u16): Remove. (__arm_vorrq_m_n_s32): Remove. (__arm_vorrq_m_n_u32): Remove. (__arm_vorrq_m_s8): Remove. (__arm_vorrq_m_s32): Remove. (__arm_vorrq_m_s16): Remove. (__arm_vorrq_m_u8): Remove. (__arm_vorrq_m_u32): Remove. (__arm_vorrq_m_u16): Remove. (__arm_vorrq_x_s8): Remove. (__arm_vorrq_x_s16): Remove. (__arm_vorrq_x_s32): Remove. (__arm_vorrq_x_u8): Remove. (__arm_vorrq_x_u16): Remove. (__arm_vorrq_x_u32): Remove. (__arm_vorrq_f16): Remove. (__arm_vorrq_f32): Remove. (__arm_vorrq_m_f32): Remove. (__arm_vorrq_m_f16): Remove. (__arm_vorrq_x_f16): Remove. (__arm_vorrq_x_f32): Remove. (__arm_vorrq): Remove. (__arm_vorrq_m_n): Remove. (__arm_vorrq_m): Remove. (__arm_vorrq_x): Remove. --- gcc/config/arm/arm-mve-builtins-base.cc | 9 + gcc/config/arm/arm-mve-builtins-base.def | 2 + gcc/config/arm/arm-mve-builtins-base.h | 1 + gcc/config/arm/arm-mve-builtins.cc | 3 + gcc/config/arm/arm_mve.h | 559 ----------------------- 5 files changed, 15 insertions(+), 559 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index 51fed8f671f..499a1ef9f0e 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -98,10 +98,19 @@ namespace arm_mve { UNSPEC##_M_S, UNSPEC##_M_U, UNSPEC##_M_F, \ -1, -1, -1)) + /* Helper for builtins with RTX codes, _m predicated and _n overrides. */ +#define FUNCTION_WITH_RTX_M_N_NO_N_F(NAME, RTX, UNSPEC) FUNCTION \ + (NAME, unspec_based_mve_function_exact_insn, \ + (RTX, RTX, RTX, \ + UNSPEC##_N_S, UNSPEC##_N_U, -1, \ + UNSPEC##_M_S, UNSPEC##_M_U, UNSPEC##_M_F, \ + UNSPEC##_M_N_S, UNSPEC##_M_N_U, -1)) + FUNCTION_WITH_RTX_M_N (vaddq, PLUS, VADDQ) FUNCTION_WITH_RTX_M (vandq, AND, VANDQ) FUNCTION_WITH_RTX_M (veorq, XOR, VEORQ) FUNCTION_WITH_RTX_M_N (vmulq, MULT, VMULQ) +FUNCTION_WITH_RTX_M_N_NO_N_F (vorrq, IOR, VORRQ) FUNCTION (vreinterpretq, vreinterpretq_impl,) FUNCTION_WITH_RTX_M_N (vsubq, MINUS, VSUBQ) FUNCTION (vuninitializedq, vuninitializedq_impl,) diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index a933c9fc91e..c3f8c0f0eeb 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -22,6 +22,7 @@ DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vandq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (veorq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vorrq, binary_orrq, all_integer, mx_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none) DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none) @@ -32,6 +33,7 @@ DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vandq, binary, all_float, mx_or_none) DEF_MVE_FUNCTION (veorq, binary, all_float, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_float, mx_or_none) +DEF_MVE_FUNCTION (vorrq, binary_orrq, all_float, mx_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_float, none) DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vuninitializedq, inherent, all_float, none) diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index 4fcf55715b6..c450b373239 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -27,6 +27,7 @@ extern const function_base *const vaddq; extern const function_base *const vandq; extern const function_base *const veorq; extern const function_base *const vmulq; +extern const function_base *const vorrq; extern const function_base *const vreinterpretq; extern const function_base *const vsubq; extern const function_base *const vuninitializedq; diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc index c74e890bd3d..0708d4fa94a 100644 --- a/gcc/config/arm/arm-mve-builtins.cc +++ b/gcc/config/arm/arm-mve-builtins.cc @@ -669,6 +669,9 @@ function_instance::has_inactive_argument () const if (pred != PRED_m) return false; + if (base == functions::vorrq && mode_suffix_id == MODE_n) + return false; + return true; } diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 0ad0122e44f..edf8e247421 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -65,7 +65,6 @@ #define vrhaddq(__a, __b) __arm_vrhaddq(__a, __b) #define vqsubq(__a, __b) __arm_vqsubq(__a, __b) #define vqaddq(__a, __b) __arm_vqaddq(__a, __b) -#define vorrq(__a, __b) __arm_vorrq(__a, __b) #define vornq(__a, __b) __arm_vornq(__a, __b) #define vmulltq_int(__a, __b) __arm_vmulltq_int(__a, __b) #define vmullbq_int(__a, __b) __arm_vmullbq_int(__a, __b) @@ -201,7 +200,6 @@ #define vrmlaldavhxq_p(__a, __b, __p) __arm_vrmlaldavhxq_p(__a, __b, __p) #define vrmlsldavhq_p(__a, __b, __p) __arm_vrmlsldavhq_p(__a, __b, __p) #define vrmlsldavhxq_p(__a, __b, __p) __arm_vrmlsldavhxq_p(__a, __b, __p) -#define vorrq_m_n(__a, __imm, __p) __arm_vorrq_m_n(__a, __imm, __p) #define vqrshrntq(__a, __b, __imm) __arm_vqrshrntq(__a, __b, __imm) #define vqshrnbq(__a, __b, __imm) __arm_vqshrnbq(__a, __b, __imm) #define vqshrntq(__a, __b, __imm) __arm_vqshrntq(__a, __b, __imm) @@ -254,7 +252,6 @@ #define vmullbq_int_m(__inactive, __a, __b, __p) __arm_vmullbq_int_m(__inactive, __a, __b, __p) #define vmulltq_int_m(__inactive, __a, __b, __p) __arm_vmulltq_int_m(__inactive, __a, __b, __p) #define vornq_m(__inactive, __a, __b, __p) __arm_vornq_m(__inactive, __a, __b, __p) -#define vorrq_m(__inactive, __a, __b, __p) __arm_vorrq_m(__inactive, __a, __b, __p) #define vqaddq_m(__inactive, __a, __b, __p) __arm_vqaddq_m(__inactive, __a, __b, __p) #define vqdmladhq_m(__inactive, __a, __b, __p) __arm_vqdmladhq_m(__inactive, __a, __b, __p) #define vqdmlashq_m(__a, __b, __c, __p) __arm_vqdmlashq_m(__a, __b, __c, __p) @@ -406,7 +403,6 @@ #define vmovltq_x(__a, __p) __arm_vmovltq_x(__a, __p) #define vmvnq_x(__a, __p) __arm_vmvnq_x(__a, __p) #define vornq_x(__a, __b, __p) __arm_vornq_x(__a, __b, __p) -#define vorrq_x(__a, __b, __p) __arm_vorrq_x(__a, __b, __p) #define vrev16q_x(__a, __p) __arm_vrev16q_x(__a, __p) #define vrev32q_x(__a, __p) __arm_vrev32q_x(__a, __p) #define vrev64q_x(__a, __p) __arm_vrev64q_x(__a, __p) @@ -682,7 +678,6 @@ #define vqsubq_n_u8(__a, __b) __arm_vqsubq_n_u8(__a, __b) #define vqaddq_u8(__a, __b) __arm_vqaddq_u8(__a, __b) #define vqaddq_n_u8(__a, __b) __arm_vqaddq_n_u8(__a, __b) -#define vorrq_u8(__a, __b) __arm_vorrq_u8(__a, __b) #define vornq_u8(__a, __b) __arm_vornq_u8(__a, __b) #define vmulltq_int_u8(__a, __b) __arm_vmulltq_int_u8(__a, __b) #define vmullbq_int_u8(__a, __b) __arm_vmullbq_int_u8(__a, __b) @@ -754,7 +749,6 @@ #define vqdmulhq_n_s8(__a, __b) __arm_vqdmulhq_n_s8(__a, __b) #define vqaddq_s8(__a, __b) __arm_vqaddq_s8(__a, __b) #define vqaddq_n_s8(__a, __b) __arm_vqaddq_n_s8(__a, __b) -#define vorrq_s8(__a, __b) __arm_vorrq_s8(__a, __b) #define vornq_s8(__a, __b) __arm_vornq_s8(__a, __b) #define vmulltq_int_s8(__a, __b) __arm_vmulltq_int_s8(__a, __b) #define vmullbq_int_s8(__a, __b) __arm_vmullbq_int_s8(__a, __b) @@ -788,7 +782,6 @@ #define vqsubq_n_u16(__a, __b) __arm_vqsubq_n_u16(__a, __b) #define vqaddq_u16(__a, __b) __arm_vqaddq_u16(__a, __b) #define vqaddq_n_u16(__a, __b) __arm_vqaddq_n_u16(__a, __b) -#define vorrq_u16(__a, __b) __arm_vorrq_u16(__a, __b) #define vornq_u16(__a, __b) __arm_vornq_u16(__a, __b) #define vmulltq_int_u16(__a, __b) __arm_vmulltq_int_u16(__a, __b) #define vmullbq_int_u16(__a, __b) __arm_vmullbq_int_u16(__a, __b) @@ -860,7 +853,6 @@ #define vqdmulhq_n_s16(__a, __b) __arm_vqdmulhq_n_s16(__a, __b) #define vqaddq_s16(__a, __b) __arm_vqaddq_s16(__a, __b) #define vqaddq_n_s16(__a, __b) __arm_vqaddq_n_s16(__a, __b) -#define vorrq_s16(__a, __b) __arm_vorrq_s16(__a, __b) #define vornq_s16(__a, __b) __arm_vornq_s16(__a, __b) #define vmulltq_int_s16(__a, __b) __arm_vmulltq_int_s16(__a, __b) #define vmullbq_int_s16(__a, __b) __arm_vmullbq_int_s16(__a, __b) @@ -894,7 +886,6 @@ #define vqsubq_n_u32(__a, __b) __arm_vqsubq_n_u32(__a, __b) #define vqaddq_u32(__a, __b) __arm_vqaddq_u32(__a, __b) #define vqaddq_n_u32(__a, __b) __arm_vqaddq_n_u32(__a, __b) -#define vorrq_u32(__a, __b) __arm_vorrq_u32(__a, __b) #define vornq_u32(__a, __b) __arm_vornq_u32(__a, __b) #define vmulltq_int_u32(__a, __b) __arm_vmulltq_int_u32(__a, __b) #define vmullbq_int_u32(__a, __b) __arm_vmullbq_int_u32(__a, __b) @@ -966,7 +957,6 @@ #define vqdmulhq_n_s32(__a, __b) __arm_vqdmulhq_n_s32(__a, __b) #define vqaddq_s32(__a, __b) __arm_vqaddq_s32(__a, __b) #define vqaddq_n_s32(__a, __b) __arm_vqaddq_n_s32(__a, __b) -#define vorrq_s32(__a, __b) __arm_vorrq_s32(__a, __b) #define vornq_s32(__a, __b) __arm_vornq_s32(__a, __b) #define vmulltq_int_s32(__a, __b) __arm_vmulltq_int_s32(__a, __b) #define vmullbq_int_s32(__a, __b) __arm_vmullbq_int_s32(__a, __b) @@ -1005,7 +995,6 @@ #define vqmovunbq_s16(__a, __b) __arm_vqmovunbq_s16(__a, __b) #define vshlltq_n_u8(__a, __imm) __arm_vshlltq_n_u8(__a, __imm) #define vshllbq_n_u8(__a, __imm) __arm_vshllbq_n_u8(__a, __imm) -#define vorrq_n_u16(__a, __imm) __arm_vorrq_n_u16(__a, __imm) #define vbicq_n_u16(__a, __imm) __arm_vbicq_n_u16(__a, __imm) #define vcmpneq_n_f16(__a, __b) __arm_vcmpneq_n_f16(__a, __b) #define vcmpneq_f16(__a, __b) __arm_vcmpneq_f16(__a, __b) @@ -1025,7 +1014,6 @@ #define vqdmulltq_n_s16(__a, __b) __arm_vqdmulltq_n_s16(__a, __b) #define vqdmullbq_s16(__a, __b) __arm_vqdmullbq_s16(__a, __b) #define vqdmullbq_n_s16(__a, __b) __arm_vqdmullbq_n_s16(__a, __b) -#define vorrq_f16(__a, __b) __arm_vorrq_f16(__a, __b) #define vornq_f16(__a, __b) __arm_vornq_f16(__a, __b) #define vmovntq_s16(__a, __b) __arm_vmovntq_s16(__a, __b) #define vmovnbq_s16(__a, __b) __arm_vmovnbq_s16(__a, __b) @@ -1051,7 +1039,6 @@ #define vabdq_f16(__a, __b) __arm_vabdq_f16(__a, __b) #define vshlltq_n_s8(__a, __imm) __arm_vshlltq_n_s8(__a, __imm) #define vshllbq_n_s8(__a, __imm) __arm_vshllbq_n_s8(__a, __imm) -#define vorrq_n_s16(__a, __imm) __arm_vorrq_n_s16(__a, __imm) #define vbicq_n_s16(__a, __imm) __arm_vbicq_n_s16(__a, __imm) #define vqmovntq_u32(__a, __b) __arm_vqmovntq_u32(__a, __b) #define vqmovnbq_u32(__a, __b) __arm_vqmovnbq_u32(__a, __b) @@ -1064,7 +1051,6 @@ #define vqmovunbq_s32(__a, __b) __arm_vqmovunbq_s32(__a, __b) #define vshlltq_n_u16(__a, __imm) __arm_vshlltq_n_u16(__a, __imm) #define vshllbq_n_u16(__a, __imm) __arm_vshllbq_n_u16(__a, __imm) -#define vorrq_n_u32(__a, __imm) __arm_vorrq_n_u32(__a, __imm) #define vbicq_n_u32(__a, __imm) __arm_vbicq_n_u32(__a, __imm) #define vcmpneq_n_f32(__a, __b) __arm_vcmpneq_n_f32(__a, __b) #define vcmpneq_f32(__a, __b) __arm_vcmpneq_f32(__a, __b) @@ -1084,7 +1070,6 @@ #define vqdmulltq_n_s32(__a, __b) __arm_vqdmulltq_n_s32(__a, __b) #define vqdmullbq_s32(__a, __b) __arm_vqdmullbq_s32(__a, __b) #define vqdmullbq_n_s32(__a, __b) __arm_vqdmullbq_n_s32(__a, __b) -#define vorrq_f32(__a, __b) __arm_vorrq_f32(__a, __b) #define vornq_f32(__a, __b) __arm_vornq_f32(__a, __b) #define vmovntq_s32(__a, __b) __arm_vmovntq_s32(__a, __b) #define vmovnbq_s32(__a, __b) __arm_vmovnbq_s32(__a, __b) @@ -1110,7 +1095,6 @@ #define vabdq_f32(__a, __b) __arm_vabdq_f32(__a, __b) #define vshlltq_n_s16(__a, __imm) __arm_vshlltq_n_s16(__a, __imm) #define vshllbq_n_s16(__a, __imm) __arm_vshllbq_n_s16(__a, __imm) -#define vorrq_n_s32(__a, __imm) __arm_vorrq_n_s32(__a, __imm) #define vbicq_n_s32(__a, __imm) __arm_vbicq_n_s32(__a, __imm) #define vrmlaldavhq_u32(__a, __b) __arm_vrmlaldavhq_u32(__a, __b) #define vctp8q_m(__a, __p) __arm_vctp8q_m(__a, __p) @@ -1428,7 +1412,6 @@ #define vrev16q_m_u8(__inactive, __a, __p) __arm_vrev16q_m_u8(__inactive, __a, __p) #define vrmlaldavhq_p_u32(__a, __b, __p) __arm_vrmlaldavhq_p_u32(__a, __b, __p) #define vmvnq_m_n_s16(__inactive, __imm, __p) __arm_vmvnq_m_n_s16(__inactive, __imm, __p) -#define vorrq_m_n_s16(__a, __imm, __p) __arm_vorrq_m_n_s16(__a, __imm, __p) #define vqrshrntq_n_s16(__a, __b, __imm) __arm_vqrshrntq_n_s16(__a, __b, __imm) #define vqshrnbq_n_s16(__a, __b, __imm) __arm_vqshrnbq_n_s16(__a, __b, __imm) #define vqshrntq_n_s16(__a, __b, __imm) __arm_vqshrntq_n_s16(__a, __b, __imm) @@ -1492,7 +1475,6 @@ #define vcmpneq_m_f16(__a, __b, __p) __arm_vcmpneq_m_f16(__a, __b, __p) #define vcmpneq_m_n_f16(__a, __b, __p) __arm_vcmpneq_m_n_f16(__a, __b, __p) #define vmvnq_m_n_u16(__inactive, __imm, __p) __arm_vmvnq_m_n_u16(__inactive, __imm, __p) -#define vorrq_m_n_u16(__a, __imm, __p) __arm_vorrq_m_n_u16(__a, __imm, __p) #define vqrshruntq_n_s16(__a, __b, __imm) __arm_vqrshruntq_n_s16(__a, __b, __imm) #define vqshrunbq_n_s16(__a, __b, __imm) __arm_vqshrunbq_n_s16(__a, __b, __imm) #define vqshruntq_n_s16(__a, __b, __imm) __arm_vqshruntq_n_s16(__a, __b, __imm) @@ -1519,7 +1501,6 @@ #define vqmovntq_m_u16(__a, __b, __p) __arm_vqmovntq_m_u16(__a, __b, __p) #define vrev32q_m_u8(__inactive, __a, __p) __arm_vrev32q_m_u8(__inactive, __a, __p) #define vmvnq_m_n_s32(__inactive, __imm, __p) __arm_vmvnq_m_n_s32(__inactive, __imm, __p) -#define vorrq_m_n_s32(__a, __imm, __p) __arm_vorrq_m_n_s32(__a, __imm, __p) #define vqrshrntq_n_s32(__a, __b, __imm) __arm_vqrshrntq_n_s32(__a, __b, __imm) #define vqshrnbq_n_s32(__a, __b, __imm) __arm_vqshrnbq_n_s32(__a, __b, __imm) #define vqshrntq_n_s32(__a, __b, __imm) __arm_vqshrntq_n_s32(__a, __b, __imm) @@ -1583,7 +1564,6 @@ #define vcmpneq_m_f32(__a, __b, __p) __arm_vcmpneq_m_f32(__a, __b, __p) #define vcmpneq_m_n_f32(__a, __b, __p) __arm_vcmpneq_m_n_f32(__a, __b, __p) #define vmvnq_m_n_u32(__inactive, __imm, __p) __arm_vmvnq_m_n_u32(__inactive, __imm, __p) -#define vorrq_m_n_u32(__a, __imm, __p) __arm_vorrq_m_n_u32(__a, __imm, __p) #define vqrshruntq_n_s32(__a, __b, __imm) __arm_vqrshruntq_n_s32(__a, __b, __imm) #define vqshrunbq_n_s32(__a, __b, __imm) __arm_vqshrunbq_n_s32(__a, __b, __imm) #define vqshruntq_n_s32(__a, __b, __imm) __arm_vqshruntq_n_s32(__a, __b, __imm) @@ -1757,12 +1737,6 @@ #define vornq_m_u8(__inactive, __a, __b, __p) __arm_vornq_m_u8(__inactive, __a, __b, __p) #define vornq_m_u32(__inactive, __a, __b, __p) __arm_vornq_m_u32(__inactive, __a, __b, __p) #define vornq_m_u16(__inactive, __a, __b, __p) __arm_vornq_m_u16(__inactive, __a, __b, __p) -#define vorrq_m_s8(__inactive, __a, __b, __p) __arm_vorrq_m_s8(__inactive, __a, __b, __p) -#define vorrq_m_s32(__inactive, __a, __b, __p) __arm_vorrq_m_s32(__inactive, __a, __b, __p) -#define vorrq_m_s16(__inactive, __a, __b, __p) __arm_vorrq_m_s16(__inactive, __a, __b, __p) -#define vorrq_m_u8(__inactive, __a, __b, __p) __arm_vorrq_m_u8(__inactive, __a, __b, __p) -#define vorrq_m_u32(__inactive, __a, __b, __p) __arm_vorrq_m_u32(__inactive, __a, __b, __p) -#define vorrq_m_u16(__inactive, __a, __b, __p) __arm_vorrq_m_u16(__inactive, __a, __b, __p) #define vqaddq_m_n_s8(__inactive, __a, __b, __p) __arm_vqaddq_m_n_s8(__inactive, __a, __b, __p) #define vqaddq_m_n_s32(__inactive, __a, __b, __p) __arm_vqaddq_m_n_s32(__inactive, __a, __b, __p) #define vqaddq_m_n_s16(__inactive, __a, __b, __p) __arm_vqaddq_m_n_s16(__inactive, __a, __b, __p) @@ -2014,8 +1988,6 @@ #define vminnmq_m_f16(__inactive, __a, __b, __p) __arm_vminnmq_m_f16(__inactive, __a, __b, __p) #define vornq_m_f32(__inactive, __a, __b, __p) __arm_vornq_m_f32(__inactive, __a, __b, __p) #define vornq_m_f16(__inactive, __a, __b, __p) __arm_vornq_m_f16(__inactive, __a, __b, __p) -#define vorrq_m_f32(__inactive, __a, __b, __p) __arm_vorrq_m_f32(__inactive, __a, __b, __p) -#define vorrq_m_f16(__inactive, __a, __b, __p) __arm_vorrq_m_f16(__inactive, __a, __b, __p) #define vstrbq_s8( __addr, __value) __arm_vstrbq_s8( __addr, __value) #define vstrbq_u8( __addr, __value) __arm_vstrbq_u8( __addr, __value) #define vstrbq_u16( __addr, __value) __arm_vstrbq_u16( __addr, __value) @@ -2465,12 +2437,6 @@ #define vornq_x_u8(__a, __b, __p) __arm_vornq_x_u8(__a, __b, __p) #define vornq_x_u16(__a, __b, __p) __arm_vornq_x_u16(__a, __b, __p) #define vornq_x_u32(__a, __b, __p) __arm_vornq_x_u32(__a, __b, __p) -#define vorrq_x_s8(__a, __b, __p) __arm_vorrq_x_s8(__a, __b, __p) -#define vorrq_x_s16(__a, __b, __p) __arm_vorrq_x_s16(__a, __b, __p) -#define vorrq_x_s32(__a, __b, __p) __arm_vorrq_x_s32(__a, __b, __p) -#define vorrq_x_u8(__a, __b, __p) __arm_vorrq_x_u8(__a, __b, __p) -#define vorrq_x_u16(__a, __b, __p) __arm_vorrq_x_u16(__a, __b, __p) -#define vorrq_x_u32(__a, __b, __p) __arm_vorrq_x_u32(__a, __b, __p) #define vrev16q_x_s8(__a, __p) __arm_vrev16q_x_s8(__a, __p) #define vrev16q_x_u8(__a, __p) __arm_vrev16q_x_u8(__a, __p) #define vrev32q_x_s8(__a, __p) __arm_vrev32q_x_s8(__a, __p) @@ -2597,8 +2563,6 @@ #define vbrsrq_x_n_f32(__a, __b, __p) __arm_vbrsrq_x_n_f32(__a, __b, __p) #define vornq_x_f16(__a, __b, __p) __arm_vornq_x_f16(__a, __b, __p) #define vornq_x_f32(__a, __b, __p) __arm_vornq_x_f32(__a, __b, __p) -#define vorrq_x_f16(__a, __b, __p) __arm_vorrq_x_f16(__a, __b, __p) -#define vorrq_x_f32(__a, __b, __p) __arm_vorrq_x_f32(__a, __b, __p) #define vrev32q_x_f16(__a, __p) __arm_vrev32q_x_f16(__a, __p) #define vrev64q_x_f16(__a, __p) __arm_vrev64q_x_f16(__a, __p) #define vrev64q_x_f32(__a, __p) __arm_vrev64q_x_f32(__a, __p) @@ -3495,13 +3459,6 @@ __arm_vqaddq_n_u8 (uint8x16_t __a, uint8_t __b) return __builtin_mve_vqaddq_n_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vorrq_uv16qi (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_u8 (uint8x16_t __a, uint8x16_t __b) @@ -4001,13 +3958,6 @@ __arm_vqaddq_n_s8 (int8x16_t __a, int8_t __b) return __builtin_mve_vqaddq_n_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vorrq_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_s8 (int8x16_t __a, int8x16_t __b) @@ -4239,13 +4189,6 @@ __arm_vqaddq_n_u16 (uint16x8_t __a, uint16_t __b) return __builtin_mve_vqaddq_n_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vorrq_uv8hi (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_u16 (uint16x8_t __a, uint16x8_t __b) @@ -4745,13 +4688,6 @@ __arm_vqaddq_n_s16 (int16x8_t __a, int16_t __b) return __builtin_mve_vqaddq_n_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vorrq_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_s16 (int16x8_t __a, int16x8_t __b) @@ -4983,13 +4919,6 @@ __arm_vqaddq_n_u32 (uint32x4_t __a, uint32_t __b) return __builtin_mve_vqaddq_n_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vorrq_uv4si (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_u32 (uint32x4_t __a, uint32x4_t __b) @@ -5489,13 +5418,6 @@ __arm_vqaddq_n_s32 (int32x4_t __a, int32_t __b) return __builtin_mve_vqaddq_n_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vorrq_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_s32 (int32x4_t __a, int32x4_t __b) @@ -5762,13 +5684,6 @@ __arm_vshllbq_n_u8 (uint8x16_t __a, const int __imm) return __builtin_mve_vshllbq_n_uv16qi (__a, __imm); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_n_u16 (uint16x8_t __a, const int __imm) -{ - return __builtin_mve_vorrq_n_uv8hi (__a, __imm); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_n_u16 (uint16x8_t __a, const int __imm) @@ -5874,13 +5789,6 @@ __arm_vshllbq_n_s8 (int8x16_t __a, const int __imm) return __builtin_mve_vshllbq_n_sv16qi (__a, __imm); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_n_s16 (int16x8_t __a, const int __imm) -{ - return __builtin_mve_vorrq_n_sv8hi (__a, __imm); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_n_s16 (int16x8_t __a, const int __imm) @@ -5965,13 +5873,6 @@ __arm_vshllbq_n_u16 (uint16x8_t __a, const int __imm) return __builtin_mve_vshllbq_n_uv8hi (__a, __imm); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_n_u32 (uint32x4_t __a, const int __imm) -{ - return __builtin_mve_vorrq_n_uv4si (__a, __imm); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_n_u32 (uint32x4_t __a, const int __imm) @@ -6077,13 +5978,6 @@ __arm_vshllbq_n_s16 (int16x8_t __a, const int __imm) return __builtin_mve_vshllbq_n_sv8hi (__a, __imm); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_n_s32 (int32x4_t __a, const int __imm) -{ - return __builtin_mve_vorrq_n_sv4si (__a, __imm); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_n_s32 (int32x4_t __a, const int __imm) @@ -8197,13 +8091,6 @@ __arm_vmvnq_m_n_s16 (int16x8_t __inactive, const int __imm, mve_pred16_t __p) return __builtin_mve_vmvnq_m_n_sv8hi (__inactive, __imm, __p); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n_s16 (int16x8_t __a, const int __imm, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_n_sv8hi (__a, __imm, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshrntq_n_s16 (int8x16_t __a, int16x8_t __b, const int __imm) @@ -8365,13 +8252,6 @@ __arm_vmvnq_m_n_u16 (uint16x8_t __inactive, const int __imm, mve_pred16_t __p) return __builtin_mve_vmvnq_m_n_uv8hi (__inactive, __imm, __p); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n_u16 (uint16x8_t __a, const int __imm, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_n_uv8hi (__a, __imm, __p); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshruntq_n_s16 (uint8x16_t __a, int16x8_t __b, const int __imm) @@ -8526,13 +8406,6 @@ __arm_vmvnq_m_n_s32 (int32x4_t __inactive, const int __imm, mve_pred16_t __p) return __builtin_mve_vmvnq_m_n_sv4si (__inactive, __imm, __p); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n_s32 (int32x4_t __a, const int __imm, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_n_sv4si (__a, __imm, __p); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshrntq_n_s32 (int16x8_t __a, int32x4_t __b, const int __imm) @@ -8694,13 +8567,6 @@ __arm_vmvnq_m_n_u32 (uint32x4_t __inactive, const int __imm, mve_pred16_t __p) return __builtin_mve_vmvnq_m_n_uv4si (__inactive, __imm, __p); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n_u32 (uint32x4_t __a, const int __imm, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_n_uv4si (__a, __imm, __p); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshruntq_n_s32 (uint16x8_t __a, int32x4_t __b, const int __imm) @@ -9856,48 +9722,6 @@ __arm_vornq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pr return __builtin_mve_vornq_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqaddq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) @@ -14315,48 +14139,6 @@ __arm_vornq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __builtin_mve_vornq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrev16q_x_s8 (int8x16_t __a, mve_pred16_t __p) @@ -15924,13 +15706,6 @@ __arm_vcmpeqq_f16 (float16x8_t __a, float16x8_t __b) return __builtin_mve_vcmpeqq_fv8hf (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_f16 (float16x8_t __a, float16x8_t __b) -{ - return __builtin_mve_vorrq_fv8hf (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_f16 (float16x8_t __a, float16x8_t __b) @@ -16134,13 +15909,6 @@ __arm_vcmpeqq_f32 (float32x4_t __a, float32x4_t __b) return __builtin_mve_vcmpeqq_fv4sf (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_f32 (float32x4_t __a, float32x4_t __b) -{ - return __builtin_mve_vorrq_fv4sf (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_f32 (float32x4_t __a, float32x4_t __b) @@ -17332,20 +17100,6 @@ __arm_vornq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve return __builtin_mve_vornq_m_fv8hf (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_f32 (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_fv4sf (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_f16 (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_fv8hf (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vld1q_f32 (float32_t const * __base) @@ -18136,20 +17890,6 @@ __arm_vornq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) return __builtin_mve_vornq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_f16 (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_fv8hf (__arm_vuninitializedq_f16 (), __a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x_f32 (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vorrq_m_fv4sf (__arm_vuninitializedq_f32 (), __a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrev32q_x_f16 (float16x8_t __a, mve_pred16_t __p) @@ -18940,13 +18680,6 @@ __arm_vqaddq (uint8x16_t __a, uint8_t __b) return __arm_vqaddq_n_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vorrq_u8 (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (uint8x16_t __a, uint8x16_t __b) @@ -19444,13 +19177,6 @@ __arm_vqaddq (int8x16_t __a, int8_t __b) return __arm_vqaddq_n_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vorrq_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (int8x16_t __a, int8x16_t __b) @@ -19682,13 +19408,6 @@ __arm_vqaddq (uint16x8_t __a, uint16_t __b) return __arm_vqaddq_n_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vorrq_u16 (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (uint16x8_t __a, uint16x8_t __b) @@ -20186,13 +19905,6 @@ __arm_vqaddq (int16x8_t __a, int16_t __b) return __arm_vqaddq_n_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vorrq_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (int16x8_t __a, int16x8_t __b) @@ -20424,13 +20136,6 @@ __arm_vqaddq (uint32x4_t __a, uint32_t __b) return __arm_vqaddq_n_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vorrq_u32 (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (uint32x4_t __a, uint32x4_t __b) @@ -20928,13 +20633,6 @@ __arm_vqaddq (int32x4_t __a, int32_t __b) return __arm_vqaddq_n_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vorrq_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (int32x4_t __a, int32x4_t __b) @@ -21201,13 +20899,6 @@ __arm_vshllbq (uint8x16_t __a, const int __imm) return __arm_vshllbq_n_u8 (__a, __imm); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (uint16x8_t __a, const int __imm) -{ - return __arm_vorrq_n_u16 (__a, __imm); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq (uint16x8_t __a, const int __imm) @@ -21313,13 +21004,6 @@ __arm_vshllbq (int8x16_t __a, const int __imm) return __arm_vshllbq_n_s8 (__a, __imm); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (int16x8_t __a, const int __imm) -{ - return __arm_vorrq_n_s16 (__a, __imm); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq (int16x8_t __a, const int __imm) @@ -21404,13 +21088,6 @@ __arm_vshllbq (uint16x8_t __a, const int __imm) return __arm_vshllbq_n_u16 (__a, __imm); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (uint32x4_t __a, const int __imm) -{ - return __arm_vorrq_n_u32 (__a, __imm); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq (uint32x4_t __a, const int __imm) @@ -21516,13 +21193,6 @@ __arm_vshllbq (int16x8_t __a, const int __imm) return __arm_vshllbq_n_s16 (__a, __imm); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (int32x4_t __a, const int __imm) -{ - return __arm_vorrq_n_s32 (__a, __imm); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq (int32x4_t __a, const int __imm) @@ -23595,13 +23265,6 @@ __arm_vmvnq_m (int16x8_t __inactive, const int __imm, mve_pred16_t __p) return __arm_vmvnq_m_n_s16 (__inactive, __imm, __p); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n (int16x8_t __a, const int __imm, mve_pred16_t __p) -{ - return __arm_vorrq_m_n_s16 (__a, __imm, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshrntq (int8x16_t __a, int16x8_t __b, const int __imm) @@ -23763,13 +23426,6 @@ __arm_vmvnq_m (uint16x8_t __inactive, const int __imm, mve_pred16_t __p) return __arm_vmvnq_m_n_u16 (__inactive, __imm, __p); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n (uint16x8_t __a, const int __imm, mve_pred16_t __p) -{ - return __arm_vorrq_m_n_u16 (__a, __imm, __p); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshruntq (uint8x16_t __a, int16x8_t __b, const int __imm) @@ -23924,13 +23580,6 @@ __arm_vmvnq_m (int32x4_t __inactive, const int __imm, mve_pred16_t __p) return __arm_vmvnq_m_n_s32 (__inactive, __imm, __p); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n (int32x4_t __a, const int __imm, mve_pred16_t __p) -{ - return __arm_vorrq_m_n_s32 (__a, __imm, __p); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshrntq (int16x8_t __a, int32x4_t __b, const int __imm) @@ -24092,13 +23741,6 @@ __arm_vmvnq_m (uint32x4_t __inactive, const int __imm, mve_pred16_t __p) return __arm_vmvnq_m_n_u32 (__inactive, __imm, __p); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m_n (uint32x4_t __a, const int __imm, mve_pred16_t __p) -{ - return __arm_vorrq_m_n_u32 (__a, __imm, __p); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrshruntq (uint16x8_t __a, int32x4_t __b, const int __imm) @@ -25254,48 +24896,6 @@ __arm_vornq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16 return __arm_vornq_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqaddq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) @@ -29216,48 +28816,6 @@ __arm_vornq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __arm_vornq_x_u32 (__a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_u32 (__a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrev16q_x (int8x16_t __a, mve_pred16_t __p) @@ -30415,13 +29973,6 @@ __arm_vcmpeqq (float16x8_t __a, float16x8_t __b) return __arm_vcmpeqq_f16 (__a, __b); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (float16x8_t __a, float16x8_t __b) -{ - return __arm_vorrq_f16 (__a, __b); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (float16x8_t __a, float16x8_t __b) @@ -30625,13 +30176,6 @@ __arm_vcmpeqq (float32x4_t __a, float32x4_t __b) return __arm_vcmpeqq_f32 (__a, __b); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq (float32x4_t __a, float32x4_t __b) -{ - return __arm_vorrq_f32 (__a, __b); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (float32x4_t __a, float32x4_t __b) @@ -31808,20 +31352,6 @@ __arm_vornq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pre return __arm_vornq_m_f16 (__inactive, __a, __b, __p); } -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (float32x4_t __inactive, float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_f32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_m (float16x8_t __inactive, float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_m_f16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline float32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vld1q (float32_t const * __base) @@ -32354,20 +31884,6 @@ __arm_vornq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) return __arm_vornq_x_f32 (__a, __b, __p); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (float16x8_t __a, float16x8_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_f16 (__a, __b, __p); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vorrq_x (float32x4_t __a, float32x4_t __b, mve_pred16_t __p) -{ - return __arm_vorrq_x_f32 (__a, __b, __p); -} - __extension__ extern __inline float16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrev32q_x (float16x8_t __a, mve_pred16_t __p) @@ -32928,18 +32444,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t]: __arm_vcvtq_n_f16_u16 (__ARM_mve_coerce(__p0, uint16x8_t), p1), \ int (*)[__ARM_mve_type_uint32x4_t]: __arm_vcvtq_n_f32_u32 (__ARM_mve_coerce(__p0, uint32x4_t), p1));}) -#define __arm_vorrq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vorrq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vorrq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vorrq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vorrq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vorrq_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t)), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vorrq_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t)));}) - #define __arm_vabdq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -34467,19 +33971,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vornq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vornq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vorrq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vorrq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vorrq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vorrq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vorrq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vorrq_m_f16 (__ARM_mve_coerce(__p0, float16x8_t), __ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vorrq_m_f32 (__ARM_mve_coerce(__p0, float32x4_t), __ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) - #define __arm_vld1q(p0) (\ _Generic( (int (*)[__ARM_mve_typeid(p0)])0, \ int (*)[__ARM_mve_type_int8_t_ptr]: __arm_vld1q_s8 (__ARM_mve_coerce1(p0, int8_t *)), \ @@ -34923,18 +34414,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vornq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vornq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) -#define __arm_vorrq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vorrq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vorrq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vorrq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vorrq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_float16x8_t][__ARM_mve_type_float16x8_t]: __arm_vorrq_x_f16 (__ARM_mve_coerce(__p1, float16x8_t), __ARM_mve_coerce(__p2, float16x8_t), p3), \ - int (*)[__ARM_mve_type_float32x4_t][__ARM_mve_type_float32x4_t]: __arm_vorrq_x_f32 (__ARM_mve_coerce(__p1, float32x4_t), __ARM_mve_coerce(__p2, float32x4_t), p3));}) - #define __arm_vrev32q_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vrev32q_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ @@ -35321,16 +34800,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vorrq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vorrq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vorrq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vorrq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vorrq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vornq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -36244,17 +35713,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vornq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vornq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_vorrq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vorrq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vorrq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vorrq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vorrq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vstrwq_scatter_base(p0,p1,p2) ({ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p2)])0, \ int (*)[__ARM_mve_type_int32x4_t]: __arm_vstrwq_scatter_base_s32(p0, p1, __ARM_mve_coerce(__p2, int32x4_t)), \ @@ -36590,16 +36048,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vornq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vornq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) -#define __arm_vorrq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vorrq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vorrq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vorrq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vorrq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vorrq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vorrq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vrev32q_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vrev32q_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ @@ -37378,13 +36826,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmvnq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce1(__p1, int) , p2), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmvnq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce1(__p1, int) , p2));}) -#define __arm_vorrq_m_n(p0,p1,p2) ({ __typeof(p0) __p0 = (p0); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ - int (*)[__ARM_mve_type_int16x8_t]: __arm_vorrq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), p1, p2), \ - int (*)[__ARM_mve_type_int32x4_t]: __arm_vorrq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), p1, p2), \ - int (*)[__ARM_mve_type_uint16x8_t]: __arm_vorrq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), p1, p2), \ - int (*)[__ARM_mve_type_uint32x4_t]: __arm_vorrq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), p1, p2));}) - #define __arm_vqshrunbq(p0,p1,p2) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ From patchwork Tue Apr 18 13:46:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67919 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F3DE13855588 for ; Tue, 18 Apr 2023 13:48:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F3DE13855588 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825709; bh=kS6MvqdlofvhJT3/J8IqvNwoPw8ZO03um6AbA6v5s/w=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=j/XykzzewA3ZeVlLdeJttkpuLYJ/W5grXUWTYG2Kaje9S3NkxLiPcjn6m7t3AtdB8 /2TOQUeNL1Yvqb+FQef58HOb8b/KtFuJ7/HB3HG+cKjNtgOBdDl/snC3viaFHwIkvA F/9WYS4OZJ7dsbPvVEGauwFriVGu6ZGtvkXUxLxg= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on2080.outbound.protection.outlook.com [40.107.15.80]) by sourceware.org (Postfix) with ESMTPS id 84DAC385734D for ; Tue, 18 Apr 2023 13:47:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 84DAC385734D Received: from DU2PR04CA0323.eurprd04.prod.outlook.com (2603:10a6:10:2b5::28) by PAVPR08MB9038.eurprd08.prod.outlook.com (2603:10a6:102:32d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:33 +0000 Received: from DBAEUR03FT018.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:2b5:cafe::26) by DU2PR04CA0323.outlook.office365.com (2603:10a6:10:2b5::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:33 +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 DBAEUR03FT018.mail.protection.outlook.com (100.127.142.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:33 +0000 Received: ("Tessian outbound 8b05220b4215:v136"); Tue, 18 Apr 2023 13:47:33 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 040e7ea423979a3a X-CR-MTA-TID: 64aa7808 Received: from 77db1c37c802.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8EF41C98-7267-432D-8513-F73ECE8FEDDD.1; Tue, 18 Apr 2023 13:47:26 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 77db1c37c802.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WZQ/iqQhCFO2dx7szTFZnqRkOcSqdHoyX7rvqFtz9aXWIJ8rSmx51buCdjNfTI0xA1RtZxobDPdT4GqX/gUDN6+yeD9iM0h6jdkwNUPJiX5IVvgSxwONGV2Np0+4e+jIcuqbNwdX8mDoAbLCBpn4vUk6BuqVC715QSYeul2Msd1I+t/MNUMpU/6Ra/mcfKyN3WCF/ox6Kin0eE6nJgUJo7wTIE0V0rxYyepsRNR0ML6UVgzloyeQuSJ0R2bCfjxoQVWfS1thdYkvBiDubjUyOxx0KPj1jpK7ahBw2ty+fyiDFpralrhj4VVqTeT4rJvZU9CGwimijNinBTFrB/Yhdw== 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=kS6MvqdlofvhJT3/J8IqvNwoPw8ZO03um6AbA6v5s/w=; b=AT8ufVdQn65JAY1QKx/bP0N3VDUoYthosIA3Rcp/t9WSlx/l3R6l4Jk13VXZSRfb8gZt0rTS/fGwsF0p8Jbchj0upuc3fWy6Z5WprvK2Q7gBAsJyP/7iWOw/sYl1jAha/fsi1BbVMk48OZQjkbKH3hZXzLh+7L9ySnC8vTo8bIbe7+Ryhb0e6cOJ8g6+sicKUBsuyEyDa38N/DIbTVSTknz/wWfDmwn1KpM3UuCWZ3Ct/J5Sn/5ZVf27g60KBXS1zMamjWpIsa4OKqPK4QZ6++wetTVQ75pILTnxRyeRDygIYHOuu7HLljKl9L+e42Ds8Qo6OAM6q/8EGxdX7qkF/Q== 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 Received: from AS8PR04CA0130.eurprd04.prod.outlook.com (2603:10a6:20b:127::15) by PAXPR08MB7550.eurprd08.prod.outlook.com (2603:10a6:102:24d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:24 +0000 Received: from AM7EUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:127:cafe::39) by AS8PR04CA0130.outlook.office365.com (2603:10a6:20b:127::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:24 +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 AM7EUR03FT060.mail.protection.outlook.com (100.127.140.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:24 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:21 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:20 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 14/22] arm: [MVE intrinsics] add unspec_mve_function_exact_insn Date: Tue, 18 Apr 2023 15:46:00 +0200 Message-ID: <20230418134608.244751-15-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT060:EE_|PAXPR08MB7550:EE_|DBAEUR03FT018:EE_|PAVPR08MB9038:EE_ X-MS-Office365-Filtering-Correlation-Id: 63c6a410-8023-4c63-72d9-08db40137605 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: Upma8UEEdP6BejnjFA3NjHRhKr3Dppf57EZpUroTukNRauL+JdDZqCjb2luq2gF4J6gnwHR3JlMXdlT7+Fu7oLYrNor3HYKKba0lBbTVpYlhvCDnUQBccN8lo4AbKI3lwsvCcYWnIo+6nJA3G95zKNlTmjUtnC4V5A/5tE85MFV7NeUgMOehWpEZtG6jymrXoXBIVm1AqllUtUsgpwCxp50ZPmJ9kRLLdCCMflLlD53v8BU+57j2IH6GDTIlBBnJRWfs4AOvZJmGFGZgaq1Qglj3SRaAJT7gmYZei6eEgU4BdhiukrExi6M9KLZkPbJNe+pgMfQioQWvrxYDqucPUBQ4YoVTGUqvzBHh2HB4ETgyNMW3JEfYXhIKW+ECt4Dq3h2NCui2HMqNRwN+JgSvZDAHEK1fGLVfnwWoz+4QJ4k/Ua2Cw7/fSUkrZE9YIXvBmd8zg/iPDUhhwP4XVeSiefFZx8z2S29IbWk8IIFXS8wW0EU8Z1R7JRzK0ztx+wlC62AUfd8u/Lr8gMVc9iJ4mfNrcMXO7IZLR4i9uI6Q+qIVIKQrZIluUzsIDbn50/gixxBR/dEWNGTmCC7m22pdEIjZ/YXSXAc+aMZ7pcD7BfDcNbTUZxSrp46QwRZTeq21bNOy43HbQwiVItlN4U12t8s4lJmdlbLmjabbgwuQgkKVSnhLCBivJ1WkJi9ic3akd/6iaeA5r00wVfIjj82Y8Q== 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:(13230028)(4636009)(396003)(39860400002)(136003)(346002)(376002)(451199021)(36840700001)(46966006)(316002)(82740400003)(110136005)(6636002)(81166007)(356005)(186003)(41300700001)(86362001)(70586007)(70206006)(40480700001)(4326008)(26005)(1076003)(36860700001)(2616005)(5660300002)(478600001)(8936002)(8676002)(47076005)(6666004)(82310400005)(36756003)(7696005)(44832011)(426003)(336012)(2906002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB7550 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT018.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: da3e4359-a989-41bd-4498-08db401370b1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mzgDJHpqRYseAEVw8HPSuWDx1pzS2ydshl0q3eOKk2Unszkzd0s8R7RzTe7gMC2l2pcN5uI+LC6CmM5QHzzctfn9Nb7AeG5Ybu9mLVA01rdQOUhW1txp+m8maTZZ4iWfBxCuznbkHCUUjcWSRKmbz9GafrPu6qNsk3dz9H+TxavWoEW73qugCei3HKJGf/3TKfSA39L5riKUl616Bzkf7C4LG1kAOfSTBM0ZpP8F6LkGTSQWXrB/8f+0D421FA9A47A4V03NEFtZcTc4VTGxYJViHh/Ssdp31bT+0HkpxNaKAbcl/0UODa0zBRsdxJDI+TWR6Z5syQBTQnRHo9aKWSYduSeB145ePtil4sdJHlfW/euOqS/EFZDybp0fO0dhmtmByh+ww+Eqc9Tl5S/J11XD070Eo7TRpEVHM8FOWlwl/A+x9aWqn6yjHbYf0Ke+W3wBkt1/dJYJ5blCLlOxujd9YtQa3ktXCWE4dEL4SKXZyE2iqcAj7qJWF4mG/AYmCgDCNzzG90MUPZi4+vGQUAl6ZxfTiEdllxKzijHxcHNUMvnxsbP7UtI8KwBIbzY1D7TcqJac3SUQopktwJjPPgMFmqeTF3k8tV8qLkU5lUXIzM0LdGZAlidz82UMeQ1p3KsLPthVfVD7T/+uwOBw7ZRkku11qk3sVMF7iFrtcK2o7gNgHgfcJetBr6gRCit0WjuOPZQJdEepQhYpAWZaQA== 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:(13230028)(4636009)(346002)(39860400002)(136003)(376002)(396003)(451199021)(36840700001)(40470700004)(46966006)(336012)(426003)(82310400005)(110136005)(40480700001)(82740400003)(47076005)(2906002)(6636002)(44832011)(5660300002)(316002)(41300700001)(8676002)(70206006)(70586007)(81166007)(8936002)(478600001)(4326008)(86362001)(7696005)(36860700001)(36756003)(40460700003)(6666004)(186003)(1076003)(26005)(2616005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:33.1682 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 63c6a410-8023-4c63-72d9-08db40137605 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: DBAEUR03FT018.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9038 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Introduce a function that will be used to build intrinsics which use UNSPECS for the versions. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-functions.h (class unspec_mve_function_exact_insn): New. --- gcc/config/arm/arm-mve-builtins-functions.h | 151 ++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/gcc/config/arm/arm-mve-builtins-functions.h b/gcc/config/arm/arm-mve-builtins-functions.h index 6d992b270b0..5abf913d182 100644 --- a/gcc/config/arm/arm-mve-builtins-functions.h +++ b/gcc/config/arm/arm-mve-builtins-functions.h @@ -225,6 +225,157 @@ public: } }; +/* Map the function directly to CODE (UNSPEC, M) where M is the vector + mode associated with type suffix 0. */ +class unspec_mve_function_exact_insn : public function_base +{ +public: + CONSTEXPR unspec_mve_function_exact_insn (int unspec_for_sint, + int unspec_for_uint, + int unspec_for_fp, + int unspec_for_n_sint, + int unspec_for_n_uint, + int unspec_for_n_fp, + int unspec_for_m_sint, + int unspec_for_m_uint, + int unspec_for_m_fp, + int unspec_for_m_n_sint, + int unspec_for_m_n_uint, + int unspec_for_m_n_fp) + : m_unspec_for_sint (unspec_for_sint), + m_unspec_for_uint (unspec_for_uint), + m_unspec_for_fp (unspec_for_fp), + m_unspec_for_n_sint (unspec_for_n_sint), + m_unspec_for_n_uint (unspec_for_n_uint), + m_unspec_for_n_fp (unspec_for_n_fp), + m_unspec_for_m_sint (unspec_for_m_sint), + m_unspec_for_m_uint (unspec_for_m_uint), + m_unspec_for_m_fp (unspec_for_m_fp), + m_unspec_for_m_n_sint (unspec_for_m_n_sint), + m_unspec_for_m_n_uint (unspec_for_m_n_uint), + m_unspec_for_m_n_fp (unspec_for_m_n_fp) + {} + + /* The unspec code associated with signed-integer, unsigned-integer + and floating-point operations respectively. It covers the cases + with the _n suffix, and/or the _m predicate. */ + int m_unspec_for_sint; + int m_unspec_for_uint; + int m_unspec_for_fp; + int m_unspec_for_n_sint; + int m_unspec_for_n_uint; + int m_unspec_for_n_fp; + int m_unspec_for_m_sint; + int m_unspec_for_m_uint; + int m_unspec_for_m_fp; + int m_unspec_for_m_n_sint; + int m_unspec_for_m_n_uint; + int m_unspec_for_m_n_fp; + + rtx + expand (function_expander &e) const override + { + insn_code code; + switch (e.pred) + { + case PRED_none: + switch (e.mode_suffix_id) + { + case MODE_none: + /* No predicate, no suffix. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q (m_unspec_for_uint, m_unspec_for_uint, e.vector_mode (0)); + else + code = code_for_mve_q (m_unspec_for_sint, m_unspec_for_sint, e.vector_mode (0)); + else + code = code_for_mve_q_f (m_unspec_for_fp, e.vector_mode (0)); + break; + + case MODE_n: + /* No predicate, _n suffix. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_n (m_unspec_for_n_uint, m_unspec_for_n_uint, e.vector_mode (0)); + else + code = code_for_mve_q_n (m_unspec_for_n_sint, m_unspec_for_n_sint, e.vector_mode (0)); + else + code = code_for_mve_q_n_f (m_unspec_for_n_fp, e.vector_mode (0)); + break; + + default: + gcc_unreachable (); + } + return e.use_exact_insn (code); + + case PRED_m: + switch (e.mode_suffix_id) + { + case MODE_none: + /* No suffix, "m" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m (m_unspec_for_m_uint, m_unspec_for_m_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m (m_unspec_for_m_sint, m_unspec_for_m_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_f (m_unspec_for_m_fp, e.vector_mode (0)); + break; + + case MODE_n: + /* _n suffix, "m" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m_n (m_unspec_for_m_n_uint, m_unspec_for_m_n_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n (m_unspec_for_m_n_sint, m_unspec_for_m_n_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n_f (m_unspec_for_m_n_fp, e.vector_mode (0)); + break; + + default: + gcc_unreachable (); + } + return e.use_cond_insn (code, 0); + + case PRED_x: + switch (e.mode_suffix_id) + { + case MODE_none: + /* No suffix, "x" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m (m_unspec_for_m_uint, m_unspec_for_m_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m (m_unspec_for_m_sint, m_unspec_for_m_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_f (m_unspec_for_m_fp, e.vector_mode (0)); + break; + + case MODE_n: + /* _n suffix, "x" predicate. */ + if (e.type_suffix (0).integer_p) + if (e.type_suffix (0).unsigned_p) + code = code_for_mve_q_m_n (m_unspec_for_m_n_uint, m_unspec_for_m_n_uint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n (m_unspec_for_m_n_sint, m_unspec_for_m_n_sint, e.vector_mode (0)); + else + code = code_for_mve_q_m_n_f (m_unspec_for_m_n_fp, e.vector_mode (0)); + break; + + default: + gcc_unreachable (); + } + return e.use_pred_x_insn (code); + + default: + gcc_unreachable (); + } + + gcc_unreachable (); + } +}; + } /* end namespace arm_mve */ /* Declare the global function base NAME, creating it from an instance From patchwork Tue Apr 18 13:46:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67924 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 159D73883014 for ; Tue, 18 Apr 2023 13:50:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 159D73883014 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825810; bh=3wZ9A7A7WbfhhNiyJaPB92YALP/if7DucmmPyP72XZI=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=Te7Z47rQnlP11r5L37VC+peR+66LXZclLy/L/P/WILTMNvU+7CSug6RUxfxoFwNOU T7Plyo2HG03s2FyssNmbf8lGGwWOMxQSuZw6rsmMew4hImWx31POI1YvWnWwL1+urR c8b2PE4qdlhJvx01Jz52cQPEVO/gIqfaFdASZ21o= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2081.outbound.protection.outlook.com [40.107.6.81]) by sourceware.org (Postfix) with ESMTPS id 99D93385802F for ; Tue, 18 Apr 2023 13:47:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 99D93385802F Received: from AM6P194CA0032.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::45) by GV1PR08MB7851.eurprd08.prod.outlook.com (2603:10a6:150:5e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:39 +0000 Received: from AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:90:cafe::fe) by AM6P194CA0032.outlook.office365.com (2603:10a6:209:90::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:39 +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 AM7EUR03FT058.mail.protection.outlook.com (100.127.140.247) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:39 +0000 Received: ("Tessian outbound 3570909035da:v136"); Tue, 18 Apr 2023 13:47:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 6dc3884fa0c47019 X-CR-MTA-TID: 64aa7808 Received: from d6f1863f5910.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8FC12A04-B859-42D0-B806-47D1A4BB459A.1; Tue, 18 Apr 2023 13:47:30 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d6f1863f5910.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MissoOCGDTfMl+yF8gVlhEB9OFEsjsHrCZYnCt1amJZST6CkVn5DXzEHj0mR1RwG1qZv6dbzoVYXtwy/JwF9QBsL6tXXzdgnOI113IMN0RxIt0uTG1yhTlnlv7yknGO7j9xiI5BtMPMPY7uTI2MveGQ5c9nJEVxEjUCe29zB4KOotZZFj3AiBlbhNnva/4qASSRGCxJ0q00vV8R6oIaWe8bkzgu0AuI291mXRjBw4290Z3rWcEzoT8A8RUCQMhlT3SqAjCYuQAsWBphk9MRcnS+BPQ4i0sUM4eje0PoBbmzLss9sl5pb3+nRQ5qAOnrmAqOLflj/alPykIU9t11Vsg== 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=3wZ9A7A7WbfhhNiyJaPB92YALP/if7DucmmPyP72XZI=; b=I5OAujUEjTSrRt3F2dtX0ztgyk21qJxxydOUSKNO4wO4DOjbL7pRNyhy4hK6LysCyduxjKXq/x6sGsBGNniRXE97MavC2Cx4J4MXQSWFlB8wA/3zvjcUZDv8InLBUThdrojPM7tutIoRD07/NlgiLuG5fAhqU+FTSeLc+5ptH/BJIn0SJ/SKmWHEcDWKVdlvoUKwBNi6tE7Zt/Woz8J05bf48BGZ75Ps8DYMCX1ytiS0DpTmyExwVmONphtviGuo2gqpy7qc3gjBimkA5O5dBHK4sZIu4YZq529urtJraEK1iy9VPS5aKIs2YQknGJqUSMbo412eBi2AjnEHQp871w== 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 Received: from AS8PR04CA0121.eurprd04.prod.outlook.com (2603:10a6:20b:127::6) by AM8PR08MB6500.eurprd08.prod.outlook.com (2603:10a6:20b:361::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20; Tue, 18 Apr 2023 13:47:25 +0000 Received: from AM7EUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:127:cafe::47) by AS8PR04CA0121.outlook.office365.com (2603:10a6:20b:127::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:25 +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 AM7EUR03FT060.mail.protection.outlook.com (100.127.140.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:25 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:22 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:22 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 15/22] arm: [MVE intrinsics] add create shape Date: Tue, 18 Apr 2023 15:46:01 +0200 Message-ID: <20230418134608.244751-16-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT060:EE_|AM8PR08MB6500:EE_|AM7EUR03FT058:EE_|GV1PR08MB7851:EE_ X-MS-Office365-Filtering-Correlation-Id: fd5c474e-1a74-4890-bbd1-08db401379aa 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: mNDWF9hZ9dZOysjFoW6azRxYpm3hRIRFDpTCvaz0xvf0mFyKaMlyC6GiJmIIbmu2NlOFpfwZtQVjsgn4s9oNb9LUbArTbmMAaR6I75JrzvQ9HxUYaFFceZKNwlStOqgTXyez5DM3j4jK1TEdKmVb7MCUur54DUoMZi6ops9ZPSRVSBpGYSaWwwRSGGoaSu9t6KO/eVLJBs0lG87G1iZ1ETLGmCfNFs8slTpf4aGkF2IO0IHa8qjnTznzKUPQJzHRyghBkVeJe/q5vXU8Vm9RXs6oliHAyfcYpSvUOVibAtcUw41DafCO4DleX72Vbq5Gc/GEOsem8SJE0iczWgopodHkaRDdZgM/Ma5Q3D6pNqI+lzDOEu7kbUSYqYlwc0Q0/cPb4QOxAIOMggFQ5p1Dfxq+L+gKbhAVF/7GXvYW4AszwedNrmakJzVfn3ff9VQjNYeTsmG1kX8vNsL/ZvxxtuLqxRlNEwlLyjOKkHlN1nZkdntboU1AS9TPhLtVSRAEh9ERICunMklYU1Oo9c8661vJ1Vg+zwJisAa3x0dKDytm3YJSRLWxfk1VQWU6RPjrtcPUJN2yy+q32xYxEA+VFE13ml9JhwSAYBcKdsR0pkwRLeO4c+Z6Uql/PhMx66hO22HrRzdui+OOQQEBeu+r//pMl/EuWFv6+pGQY4j9w93Z1lBdqQRHaD6n0nIiTSgreuugTYCSD0B8elVIeeHvhw== 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:(13230028)(4636009)(136003)(346002)(39860400002)(376002)(396003)(451199021)(46966006)(36840700001)(6636002)(110136005)(4326008)(316002)(70586007)(70206006)(478600001)(7696005)(6666004)(40480700001)(82310400005)(8936002)(8676002)(5660300002)(41300700001)(2906002)(44832011)(81166007)(356005)(82740400003)(86362001)(36756003)(426003)(336012)(2616005)(1076003)(26005)(186003)(36860700001)(47076005)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6500 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 09b64ff2-053b-485e-75f4-08db40137147 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3wC6dkCZVg6kHc2JRAABOCWtLa/ZIvNwYTdW6K3Neqj9m306XVAXDn9gegPPAFbHP3lRQS9kQOz/h3t1EMVaoC4tKy6xxYcdKp4EnyWI8eub7M0QMBC6e/EnG+V5TV4Ahu0so81fwo8Pqs+Qu2xp7SeLE9SSbo9B3meRLRJkvyrd3gVt1zh7BnUscgLhF+Tjd5+I5tuDWlq/jJqHacERuqQrsZHfL8P/lx69DaRIVwZGsYVnxOvn+7rYDShBVuaGVYnLIIhA/AWnCCnMfM7ykxGsDH/LOT/+VTAcl7Ouro2qta0B4rkypl0QwpuyLCU9TkZrA9qUXJL+edwRQKiiIuXq/StfBtlbLwCWWCDvdeDpD89JMVWRelXGgCxZM0OS0Lgt1G6SfWCnC2DqZHcxt1gJy4ck90aS9b8OsxXB4Kwh0+KgjCWib+XI19zbDBMgBaxzGWekn6iMDfufMQhVYbxxoqHUpfSiec7xKWD8CWgYS5DrhSOAMkl1y1Oj+SekNlKsKjfSeqFqVqJEHDHoiWWxV8h00XKyz3h/Jqvhie3nQWGQNzIkja53Yp8r7GQmDtmz10ZovJhKuB/3mk13sFEiBOT1vAi7NO9Br0kjVTwWo36YWzKu5mtqgDm41pp32EKnUs6oW55NhAp9hi7OKnO90BPPNBrDRkWioSBgIwMvdMtpN6Xyq3SIgQC9eeIERYKPAipSUxYgfb3jaHC0xw== 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:(13230028)(4636009)(346002)(376002)(136003)(396003)(39860400002)(451199021)(46966006)(36840700001)(40470700004)(40480700001)(40460700003)(70206006)(70586007)(4326008)(110136005)(82740400003)(478600001)(316002)(8676002)(5660300002)(44832011)(8936002)(6636002)(81166007)(41300700001)(186003)(2616005)(426003)(336012)(47076005)(36860700001)(6666004)(7696005)(26005)(1076003)(82310400005)(2906002)(86362001)(36756003); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:39.2220 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fd5c474e-1a74-4890-bbd1-08db401379aa 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: AM7EUR03FT058.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB7851 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch adds the create shape description. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-shapes.cc (create): New. * config/arm/arm-mve-builtins-shapes.h: (create): New. --- gcc/config/arm/arm-mve-builtins-shapes.cc | 22 ++++++++++++++++++++++ gcc/config/arm/arm-mve-builtins-shapes.h | 1 + 2 files changed, 23 insertions(+) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index 83410bbc51a..e4a42005852 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -458,6 +458,28 @@ struct binary_orrq_def : public overloaded_base<0> }; SHAPE (binary_orrq) +/* xN_t vfoo[_t0](uint64_t, uint64_t) + + where there are N arguments in total. + Example: vcreateq. + int16x8_t [__arm_]vcreateq_s16(uint64_t a, uint64_t b) */ +struct create_def : public nonoverloaded_base +{ + void + build (function_builder &b, const function_group_info &group, + bool preserve_user_namespace) const override + { + build_all (b, "v0,su64,su64", group, MODE_none, preserve_user_namespace); + } + + tree + resolve (function_resolver &r) const override + { + return r.resolve_uniform (0, 2); + } +}; +SHAPE (create) + /* [xN]_t vfoo_t0(). Example: vuninitializedq. diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h index 618b3226050..3305d12877a 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.h +++ b/gcc/config/arm/arm-mve-builtins-shapes.h @@ -37,6 +37,7 @@ namespace arm_mve extern const function_shape *const binary; extern const function_shape *const binary_opt_n; extern const function_shape *const binary_orrq; + extern const function_shape *const create; extern const function_shape *const inherent; extern const function_shape *const unary_convert; From patchwork Tue Apr 18 13:46:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67928 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DFBE73893675 for ; Tue, 18 Apr 2023 13:51:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DFBE73893675 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825870; bh=jbajwnLGa4+iTwEzfPIMu0CWGJ+Phn61YEn8GteBrXI=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=AUMZdyzFl9Z2jQaJRyCE4JYv3abTIx6Z+ZTgwOI8O1NaOhqq49zaSr3Qax0gJjKFw bG1gc/Qo+NpswFnQ2d3Dpsi2PxbG3jBngBo/lfV4ChnJOBJq/d5fv2eHzR8E+5f0yd Qt1zLxRS/toizpfTRXz5E+U/HZc0V5DnngLXkxYI= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2041.outbound.protection.outlook.com [40.107.241.41]) by sourceware.org (Postfix) with ESMTPS id BBEE9385694D for ; Tue, 18 Apr 2023 13:47:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BBEE9385694D Received: from DUZPR01CA0123.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bc::8) by AM9PR08MB6291.eurprd08.prod.outlook.com (2603:10a6:20b:284::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:40 +0000 Received: from DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:4bc:cafe::ae) by DUZPR01CA0123.outlook.office365.com (2603:10a6:10:4bc::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:40 +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 DBAEUR03FT004.mail.protection.outlook.com (100.127.142.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:40 +0000 Received: ("Tessian outbound e13c2446394c:v136"); Tue, 18 Apr 2023 13:47:40 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 487b5eb9ef82771c X-CR-MTA-TID: 64aa7808 Received: from c1b3ce766f8d.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3D55E071-34DA-4A51-A930-6242DF97A919.1; Tue, 18 Apr 2023 13:47:29 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c1b3ce766f8d.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WRpeqSqbtF6cznxU7tlKkxlWp+UTMvCk1Lvoac4Ap2ki8oU2eG/PDonJzSX7zVjSfkIJ00paBrCqRQoVdMnGbkyOfWCd6vfmEZOzcyV6KoEfGzqCcJXCRKTrPRp1PuEbpGr5+mDTk7sXL4p9kx3og063rZfP+D1LMU9cn8mojXuCUyn/NZV8Ix602CZYofFHJcTxQR2A4lKfg3exsuW7+JPFzCJxdf137zdLrgZ9rkjdDHP5BkGIv8Q0/WzwpoxuKe3N4Ero52i9BS+6xLWAL1avLhOUBDMTjBU1Y6B/GYvSgeUR9OBlfss6jDKtqXGhf8wD1B+h/V4AHBYwfChp6A== 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=jbajwnLGa4+iTwEzfPIMu0CWGJ+Phn61YEn8GteBrXI=; b=VZuWzpjcOKPIpdzDnRqIYJIHEC/oljUluIKwjhFI9owHvc4Nh1XPKb0MJHl2VWkJfyg40sYqDbBrRdRjf78pulp5/YZRuu2pxzm02/XIAcOmFCxzptornnb/XQWwPH0Yv0MmU/xlLdUrIi/ld0NIS2VkX5cIdOFn59yD9Zxmm/4iSSbUWSXec3VcBQa5Jz46SRvhk0vrxEXHSspboMFzBYsIGxvaqF8VZHMEFFyQWZi2YV2Y44EqzbUDOZA8VlwOuoi1c9Xb2ccJrY4nu2YmKAWCV/F9DcO+zoID4EMOpgYbLsrbrkkWTJ5qaPn1mmNe+AfC9JS/80EpbXTwZhkUbA== 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 Received: from AS8PR04CA0144.eurprd04.prod.outlook.com (2603:10a6:20b:127::29) by AS8PR08MB9042.eurprd08.prod.outlook.com (2603:10a6:20b:5b0::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:25 +0000 Received: from AM7EUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:127:cafe::e8) by AS8PR04CA0144.outlook.office365.com (2603:10a6:20b:127::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:25 +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 AM7EUR03FT060.mail.protection.outlook.com (100.127.140.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:25 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:24 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:23 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:23 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 16/22] arm: [MVE intrinsics] factorize vcreateq Date: Tue, 18 Apr 2023 15:46:02 +0200 Message-ID: <20230418134608.244751-17-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT060:EE_|AS8PR08MB9042:EE_|DBAEUR03FT004:EE_|AM9PR08MB6291:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e4913c9-58ac-4fec-5ee6-08db40137a63 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: hB5NIjDyqoCjfmGnDfOx+3MkCs8rkdkLUMSoyRWsNu4THt96xv4mlegeWiehakOYK6MSzTM2ZJt0TRK5YWt90lLMbXQRaHqa3gEJ0Di+iqqrQ/pHvIYwD3IFf9I1yzs6vr2UkGEi6LsOx+GXtxc8Jxv9Xi1kDqslzrI4i77pyebI+7XqA3ziZa6PBb6J5eiyf0cgf0YFPacA7FX+rD2T0vNsU5OQOki6ZdAxK/1m3vn/RrgDdzM6wTS9zUN3i/vddj1GtkIYPmtBeOcB5bHgveQygqUyAHr/NddxUywO98KH0P9GYAn6yJz9haNUnBXO9K/K4MSqjnvTiScSSfGibg+c9Bkuz/GIBEOcRLEcZmj15+K3I+2cBHnB/sMsm8wcbFROUKOJMzfSPEoTRr1/xvVWX02ixoEPRn2LpjsxT7xKZQ2/lcepTYENvjce8qe7xlrZ7QILT7WNxfw/gZgTz0IC3ntwFwSYerDkX4+8BXFPy9e9ho3WA3gxfYU/9dB2HzLVIP4KUGLSr5iETvwR4ItU+v77r1PmzA6ETjDHyOWsyRL2r1UJ9GyJcCZbC8j/FpWLZM8uNAdeIZ86fRHa85hYq81ZgALi4XhkCXSysTdpRAgxZydMOQK5An71O+Aq6XDk8PS4QR0hxXHE/WgpgNut5UZ7LBfM36GiHs3sUKfRNXycIpOypQvkK9n8SmOC3khpezaDGyQIZ/kDRr9qzw== 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:(13230028)(4636009)(39860400002)(376002)(136003)(346002)(396003)(451199021)(36840700001)(46966006)(44832011)(8936002)(5660300002)(2906002)(8676002)(36756003)(82310400005)(86362001)(40480700001)(7696005)(6666004)(316002)(110136005)(6636002)(36860700001)(478600001)(2616005)(83380400001)(47076005)(426003)(336012)(186003)(26005)(1076003)(82740400003)(4326008)(70586007)(70206006)(356005)(81166007)(41300700001)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9042 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9a58ffad-7763-421e-71e9-08db40137185 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mUh++GkkE12mevC2Cj/rJG26wsU7XdTQ5ohHJYe5E/HIaA6DihFWwccEuUcdFzu1FbDUyKaDxnFpQmxGUCVUMlwJUOWhgsXQcPV75u+5fl+4YxLVnr2T9qeAbEUzjlohw9v39+iPt0C2sy+xQlrC3iq4rRk0mSVabq3Sig3QNqUB7IH+Va/rG0hHOzqKtFr4IAQfrCSVVNKhMO60M+40HfdggU56TEbjK736Grm2hhnXm7gjbxt5kKU/JtVwUKfT65UP4F81/TGWTBWflMwDRmkKVNTqmJ2Zn66pWJ4tMlEex9JD8XEXJRGbtY+L8dgFWLb64om0zcP/wYZLQKu1ikx49Rsinqf92Rs37eSPMktpwSAqxUf8Dq7bFWiskEzLaDm5nh6wHtpH71MMZ3YxPlhnTQA0nAyZkmNP+Qp6wEslMzu5JGWhf1fOWk1HA03P9G5jXznSlO4xK2sahGm4iRo14D6mY+oFPP7sbBXO96hgKrJyz90JpW4CLsCjEGt8pinU7wIP4Ti28apmQbJTEE+iiAtctrcoOfjYnb4KrXuj5WIQjer1iXqmwG+CFYboja/Vvtb8nSjjRjwAxGUBh9JuAZjGAtX1HxyunY1b3jeAibZcbmqIn8aqRSkq/TaAo+lUJ9pJIsgvVA9Of46hydRIYnK5uZT1BeQo2jcKnqk4UKF05n3BYknm1EI999YLjRZHoae1bY/+2ObZ05zj6A== 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:(13230028)(4636009)(39860400002)(396003)(346002)(136003)(376002)(451199021)(36840700001)(40470700004)(46966006)(8676002)(5660300002)(8936002)(41300700001)(44832011)(70586007)(4326008)(82310400005)(316002)(81166007)(70206006)(2906002)(6636002)(110136005)(478600001)(86362001)(6666004)(7696005)(82740400003)(1076003)(186003)(40460700003)(83380400001)(36860700001)(26005)(40480700001)(336012)(36756003)(426003)(47076005)(2616005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:40.4789 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1e4913c9-58ac-4fec-5ee6-08db40137a63 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: DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6291 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" We need a 'fake' iterator to be able to use mve_insn for vcreateq_f. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_FP_CREATE): New. (mve_insn): Add VCREATEQ_S, VCREATEQ_U, VCREATEQ_F. * config/arm/mve.md (mve_vcreateq_f): Rename into ... (@mve_q_f): ... this. (mve_vcreateq_): Rename into ... (@mve_q_): ... this. --- gcc/config/arm/iterators.md | 5 +++++ gcc/config/arm/mve.md | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index b0ea1af77d2..5a531d77a33 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -393,6 +393,10 @@ (define_int_iterator MVE_FP_N_BINARY [ VSUBQ_N_F ]) +(define_int_iterator MVE_FP_CREATE [ + VCREATEQ_F + ]) + (define_code_attr mve_addsubmul [ (minus "vsub") (mult "vmul") @@ -407,6 +411,7 @@ (define_int_attr mve_insn [ (VBICQ_M_N_S "vbic") (VBICQ_M_N_U "vbic") (VBICQ_M_S "vbic") (VBICQ_M_U "vbic") (VBICQ_M_F "vbic") (VBICQ_N_S "vbic") (VBICQ_N_U "vbic") + (VCREATEQ_S "vcreate") (VCREATEQ_U "vcreate") (VCREATEQ_F "vcreate") (VEORQ_M_S "veor") (VEORQ_M_U "veor") (VEORQ_M_F "veor") (VMULQ_M_N_S "vmul") (VMULQ_M_N_U "vmul") (VMULQ_M_N_F "vmul") (VMULQ_M_S "vmul") (VMULQ_M_U "vmul") (VMULQ_M_F "vmul") diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index fbae1d3791f..f7f0ba65251 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -700,12 +700,12 @@ (define_insn "mve_vcvtq_n_to_f_" ;; [vcreateq_f]) ;; -(define_insn "mve_vcreateq_f" +(define_insn "@mve_q_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r") (match_operand:DI 2 "s_register_operand" "r")] - VCREATEQ_F)) + MVE_FP_CREATE)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2" @@ -715,7 +715,7 @@ (define_insn "mve_vcreateq_f" ;; ;; [vcreateq_u, vcreateq_s]) ;; -(define_insn "mve_vcreateq_" +(define_insn "@mve_q_" [ (set (match_operand:MVE_1 0 "s_register_operand" "=w") (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r") From patchwork Tue Apr 18 13:46:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67932 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 413573939C1C for ; Tue, 18 Apr 2023 13:52:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 413573939C1C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825939; bh=lNwlDrnEchVi/VjVuntpFnqCFjELM1/pqTvkk7pfM/I=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=ycRnISXm+VQCQHVxVm6+8PH4dQY2jTOsm7Oajsm70+lWOkKoHVXpmq5YGKHWUWjfT RxBkugqxk5DPaRj6ilrE7h34RpljP5H5yXNXFVdG810d+NGGxJMcZW9i1imWH0Rl7p IAfTLklD9gcdCkhSNQQln5BiX2Jz907096G+vjvw= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2043.outbound.protection.outlook.com [40.107.21.43]) by sourceware.org (Postfix) with ESMTPS id E08773857020 for ; Tue, 18 Apr 2023 13:47:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E08773857020 Received: from AS9PR04CA0114.eurprd04.prod.outlook.com (2603:10a6:20b:531::19) by DU0PR08MB9581.eurprd08.prod.outlook.com (2603:10a6:10:44b::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:43 +0000 Received: from AM7EUR03FT047.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:531:cafe::75) by AS9PR04CA0114.outlook.office365.com (2603:10a6:20b:531::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:43 +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 AM7EUR03FT047.mail.protection.outlook.com (100.127.140.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.21 via Frontend Transport; Tue, 18 Apr 2023 13:47:43 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Tue, 18 Apr 2023 13:47:43 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: c0f302c3d0c21a90 X-CR-MTA-TID: 64aa7808 Received: from 5d1656c7b613.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 013497EC-9146-4AF9-8E63-476887850A67.1; Tue, 18 Apr 2023 13:47:32 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5d1656c7b613.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a5xR1kbK+DN4rz+Z9Kas4JGr13tOFOVYuWKkKZhOaZ3jJFr4Uws+Lx9uhCWYxEz+VtwWIc7Y/8u1FsHSZbbPfjdB6x96JG1duLz5LxIMqYcFZzlLFaERz459l/kcZ4sNkkBNZcwaMklKqVkN9YhOiiq6MSbzYMmNGZd9PZKqaNUXDJOmla7w1LAOs3nroOgXh+AJk/+PtIcm7qVsx29u4BIz1Hy7arY+mmCKu2hfNvQ8YQWxOsdEp9SrmWIMBHG8q/aSxNFnQOUwgH6nVCaRICzNz4Am7i6h5LMeN6EE0Id8XDHmWRcKy9njETGLilJWh2aQ6W9uZV7p2PPIc6Hmmg== 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=lNwlDrnEchVi/VjVuntpFnqCFjELM1/pqTvkk7pfM/I=; b=Ik34gpttQc6YDalVef7MiNpIQF7PcT+lOh7nd+uuTWiyh5i+fQ5dHykWM/EC0QzcU8XUEUJy5kh53xrlcYn6x3o8gkOPVP2G7Oe8FM3+KS8cQ3G3m45nntvxWGQeRP8bmNWQPsb3me2nl24ol37kL6ImRtp927FI4kT/q8M1IhA+UbKkpvk6BTMoCizhUOKi0meNUAdfXwER54U7IPOyB2DTE1hmDzoCUNN/TVUKG2c122cqTmvS6apkRjqHKG34eVf4lVQKmR/7c2MMlQHVcpxybaHC1dMKaXtzJew1rb3gasnbXc5DsKBp3N6hy11Scwwd4t6wejgEmflZKDA66Q== 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 Received: from AS8PR04CA0145.eurprd04.prod.outlook.com (2603:10a6:20b:127::30) by DBAPR08MB5798.eurprd08.prod.outlook.com (2603:10a6:10:1a6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:26 +0000 Received: from AM7EUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:127:cafe::4d) by AS8PR04CA0145.outlook.office365.com (2603:10a6:20b:127::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:26 +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 AM7EUR03FT060.mail.protection.outlook.com (100.127.140.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:26 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:24 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:24 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 17/22] arm: [MVE intrinsics] rework vcreateq Date: Tue, 18 Apr 2023 15:46:03 +0200 Message-ID: <20230418134608.244751-18-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT060:EE_|DBAPR08MB5798:EE_|AM7EUR03FT047:EE_|DU0PR08MB9581:EE_ X-MS-Office365-Filtering-Correlation-Id: f961cfc8-9d1a-4ecf-a22d-08db40137c18 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: TKT5UJvqBOY6dE47q6ruU/QWPnAFy83FAXIF+FwXdUHDq0MBzdlcXqF+P9uQpTBJDqHMw2bEpka5848uyfg8hx/KpOgUNl0YTMkaMGjyQakM/BDPFBZ43iJ1uTKIpHpPhSIJksQC81dZ1e8VY1cH3tm1og8VYt1tIRsECqdcCjOWQt/jhpnhkhMZEmM01M8oiNeg0iW2UCK4Gt6UiAPaLQlaReZC2CfK37RJVlx6Q2CMhWsyCXvS3p4zdsSgtN9b8NOl0sSYTthuCg1NmoVnN4AjP8XFSAn3nkzN5Nwna8oMULmNGbM7B4cfxLWnXmfcS4NR2orureE+eDLv9Wts+bsX2UQPD45YOATLD6971L621JEuu5Os2YepJY2oNuOZC/dFN+QQ+SjXWfj0YF7BIB7M/EcqqxlZm4V6E7QA4fVjGR3x2kAMcf9zSjQXPjMECKZ1iu81AWviHnmV76ZNiAMb3fwse/e9tNyMIprM8hb5SO8QA20PAC21fYFXFx7+bBJ1027q2+7tA6QHdpkXWMvmkJhkPCYdHLi53rVcDRoyvYOY6COi6EGFqTWtSeNQq/3ABH8hG7Gofxdf2YFDfZki+Q7+KTIKusVBuFaKnw6wBCfNKIWSG6GGMZE8sQG3cA0IKbMZ0YFyFm74GNuIvFW0IiQGN7QpUx12QoIywKFtf3Pv7vZM5nH0yFZhGZkOwhgIbG976zAQvjbUc78mKQ== 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:(13230028)(4636009)(39850400004)(346002)(376002)(396003)(136003)(451199021)(46966006)(36840700001)(36756003)(44832011)(82310400005)(2906002)(5660300002)(8936002)(8676002)(41300700001)(356005)(81166007)(40480700001)(86362001)(478600001)(110136005)(2616005)(36860700001)(26005)(1076003)(6636002)(186003)(6666004)(7696005)(336012)(4326008)(426003)(70206006)(70586007)(82740400003)(83380400001)(47076005)(316002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5798 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: f598da4b-4ca3-4a56-bbbd-08db401371d1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lrGiLiCzzuLyGV0rjhyjEmvEzV6HtBKTVozVlpiopazHSlXUWQ2tL9XS/g7nYnXG4PkeV4SdsnOuE+Kemp/6eMI+GfU2nR/d0w5UHIWP8sOJ/4jT8YQKXznP7UZUax8qEe2IXb5+0Dq8OtGazHjIyNqPpRlKGpRpgMLhwgiMSzE4HmONO+joSQSPe4BSr4HsdH7nZEC0TsdOFafiRpLZsWeGU/IgbVTZVNk+i/vn8t/JZ5iMhJu3UNiH8g1uH/GHQ1VqDSN27ojquZB+PL8s6i4W9ofsoxc3s8ZDNuJmT01tCVGpPaLgXzLW9+RbE4P8tWnTQdDFD7SD0dqHQjAdlblJE8FCsEVHtRkDslc8mMHEXV1FtsLQYNt4RcxgYeGcaFXY+s3RVqjSG2rRi/CsTM7sisTVxCUksk6EF7U3UNpdqrJzko7Q/zLtGYusg2VsLNGDUQoETqBsT+4TjQtAjYHXEaCjMFLGj/72+jaDczbofw8L9izTcrDPRa1GG0JQISgSRIc1bzoC8Y7rHT0mNoM6/CVa15ZkxWi3P/8CtKSpzEKkCzEosjzlqsAMlQiwcXRMbiEs2k/5yImqBXpbRzyNPH1n+L40sk+4g/YxZI+289zgU/ACnfLXFEDBMY6Vxzogktck63iLitqVRmoOPGaJWEl+lSjwn1UKunC1KpV74ZhbUrwCHQuJyuj9PO2HsacxmrtGHqve2ark5an41g== 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:(13230028)(4636009)(346002)(39860400002)(136003)(376002)(396003)(451199021)(36840700001)(40470700004)(46966006)(83380400001)(336012)(426003)(82310400005)(110136005)(40480700001)(82740400003)(47076005)(2906002)(6636002)(44832011)(5660300002)(316002)(41300700001)(8676002)(70206006)(70586007)(81166007)(8936002)(478600001)(4326008)(86362001)(7696005)(36860700001)(36756003)(40460700003)(6666004)(186003)(1076003)(26005)(2616005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:43.2665 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f961cfc8-9d1a-4ecf-a22d-08db40137c18 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: AM7EUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9581 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Implement vcreateq using the new MVE builtins framework. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-base.cc (FUNCTION_WITHOUT_M_N): New. (vcreateq): New. * config/arm/arm-mve-builtins-base.def (vcreateq): New. * config/arm/arm-mve-builtins-base.h (vcreateq): New. * config/arm/arm_mve.h (vcreateq_f16): Remove. (vcreateq_f32): Remove. (vcreateq_u8): Remove. (vcreateq_u16): Remove. (vcreateq_u32): Remove. (vcreateq_u64): Remove. (vcreateq_s8): Remove. (vcreateq_s16): Remove. (vcreateq_s32): Remove. (vcreateq_s64): Remove. (__arm_vcreateq_u8): Remove. (__arm_vcreateq_u16): Remove. (__arm_vcreateq_u32): Remove. (__arm_vcreateq_u64): Remove. (__arm_vcreateq_s8): Remove. (__arm_vcreateq_s16): Remove. (__arm_vcreateq_s32): Remove. (__arm_vcreateq_s64): Remove. (__arm_vcreateq_f16): Remove. (__arm_vcreateq_f32): Remove. --- gcc/config/arm/arm-mve-builtins-base.cc | 10 +++ gcc/config/arm/arm-mve-builtins-base.def | 2 + gcc/config/arm/arm-mve-builtins-base.h | 1 + gcc/config/arm/arm_mve.h | 80 ------------------------ 4 files changed, 13 insertions(+), 80 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index 499a1ef9f0e..9722c861faf 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -106,8 +106,18 @@ namespace arm_mve { UNSPEC##_M_S, UNSPEC##_M_U, UNSPEC##_M_F, \ UNSPEC##_M_N_S, UNSPEC##_M_N_U, -1)) + /* Helper for builtins without RTX codes, no _m predicated and no _n + overrides. */ +#define FUNCTION_WITHOUT_M_N(NAME, UNSPEC) FUNCTION \ + (NAME, unspec_mve_function_exact_insn, \ + (UNSPEC##_S, UNSPEC##_U, UNSPEC##_F, \ + -1, -1, -1, \ + -1, -1, -1, \ + -1, -1, -1)) + FUNCTION_WITH_RTX_M_N (vaddq, PLUS, VADDQ) FUNCTION_WITH_RTX_M (vandq, AND, VANDQ) +FUNCTION_WITHOUT_M_N (vcreateq, VCREATEQ) FUNCTION_WITH_RTX_M (veorq, XOR, VEORQ) FUNCTION_WITH_RTX_M_N (vmulq, MULT, VMULQ) FUNCTION_WITH_RTX_M_N_NO_N_F (vorrq, IOR, VORRQ) diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index c3f8c0f0eeb..1bfd15f973c 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -20,6 +20,7 @@ #define REQUIRES_FLOAT false DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vandq, binary, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vcreateq, create, all_integer_with_64, none) DEF_MVE_FUNCTION (veorq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vorrq, binary_orrq, all_integer, mx_or_none) @@ -31,6 +32,7 @@ DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none) #define REQUIRES_FLOAT true DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vandq, binary, all_float, mx_or_none) +DEF_MVE_FUNCTION (vcreateq, create, all_float, none) DEF_MVE_FUNCTION (veorq, binary, all_float, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_float, mx_or_none) DEF_MVE_FUNCTION (vorrq, binary_orrq, all_float, mx_or_none) diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index c450b373239..8dd6bff01bf 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -25,6 +25,7 @@ namespace functions { extern const function_base *const vaddq; extern const function_base *const vandq; +extern const function_base *const vcreateq; extern const function_base *const veorq; extern const function_base *const vmulq; extern const function_base *const vorrq; diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index edf8e247421..4810e2977d3 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -638,20 +638,10 @@ #define vcvtq_n_f32_s32(__a, __imm6) __arm_vcvtq_n_f32_s32(__a, __imm6) #define vcvtq_n_f16_u16(__a, __imm6) __arm_vcvtq_n_f16_u16(__a, __imm6) #define vcvtq_n_f32_u32(__a, __imm6) __arm_vcvtq_n_f32_u32(__a, __imm6) -#define vcreateq_f16(__a, __b) __arm_vcreateq_f16(__a, __b) -#define vcreateq_f32(__a, __b) __arm_vcreateq_f32(__a, __b) #define vcvtq_n_s16_f16(__a, __imm6) __arm_vcvtq_n_s16_f16(__a, __imm6) #define vcvtq_n_s32_f32(__a, __imm6) __arm_vcvtq_n_s32_f32(__a, __imm6) #define vcvtq_n_u16_f16(__a, __imm6) __arm_vcvtq_n_u16_f16(__a, __imm6) #define vcvtq_n_u32_f32(__a, __imm6) __arm_vcvtq_n_u32_f32(__a, __imm6) -#define vcreateq_u8(__a, __b) __arm_vcreateq_u8(__a, __b) -#define vcreateq_u16(__a, __b) __arm_vcreateq_u16(__a, __b) -#define vcreateq_u32(__a, __b) __arm_vcreateq_u32(__a, __b) -#define vcreateq_u64(__a, __b) __arm_vcreateq_u64(__a, __b) -#define vcreateq_s8(__a, __b) __arm_vcreateq_s8(__a, __b) -#define vcreateq_s16(__a, __b) __arm_vcreateq_s16(__a, __b) -#define vcreateq_s32(__a, __b) __arm_vcreateq_s32(__a, __b) -#define vcreateq_s64(__a, __b) __arm_vcreateq_s64(__a, __b) #define vshrq_n_s8(__a, __imm) __arm_vshrq_n_s8(__a, __imm) #define vshrq_n_s16(__a, __imm) __arm_vshrq_n_s16(__a, __imm) #define vshrq_n_s32(__a, __imm) __arm_vshrq_n_s32(__a, __imm) @@ -3222,62 +3212,6 @@ __arm_vpnot (mve_pred16_t __a) return __builtin_mve_vpnotv16bi (__a); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_u8 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_u16 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_u32 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_uv4si (__a, __b); -} - -__extension__ extern __inline uint64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_u64 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_uv2di (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_s8 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_sv16qi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_s16 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_sv8hi (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_s32 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_sv4si (__a, __b); -} - -__extension__ extern __inline int64x2_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_s64 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_sv2di (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vshrq_n_s8 (int8x16_t __a, const int __imm) @@ -15580,20 +15514,6 @@ __arm_vcvtq_n_f32_u32 (uint32x4_t __a, const int __imm6) return __builtin_mve_vcvtq_n_to_f_uv4sf (__a, __imm6); } -__extension__ extern __inline float16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_f16 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_fv8hf (__a, __b); -} - -__extension__ extern __inline float32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vcreateq_f32 (uint64_t __a, uint64_t __b) -{ - return __builtin_mve_vcreateq_fv4sf (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcvtq_n_s16_f16 (float16x8_t __a, const int __imm6) From patchwork Tue Apr 18 13:46:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67939 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 756003850235 for ; Tue, 18 Apr 2023 13:54:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 756003850235 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681826077; bh=Rd2YAKU3pCcLGshQtFj2FD4AeYbgB+9ihKm0xT8jWI0=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=fSR/K6qfreg+Ne5QFdwokWhNZXDPAbkF+TXKleJHf1tHYm8F3hqqY+bMNyTNgqEkL cplvKbQfIApU7RK0Zq1jtauWyUOlMvxTmKpY2JNbXWon4flgMjyf4QH/2GNr6WSHRt 56LrM6BM9yHD7Tvg9tVhgSaScGHu6nuIzihgDmy8= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2055.outbound.protection.outlook.com [40.107.21.55]) by sourceware.org (Postfix) with ESMTPS id 1D20A3856248 for ; Tue, 18 Apr 2023 13:47:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1D20A3856248 Received: from DB6PR0301CA0054.eurprd03.prod.outlook.com (2603:10a6:4:54::22) by AM9PR08MB6034.eurprd08.prod.outlook.com (2603:10a6:20b:2db::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:46 +0000 Received: from DBAEUR03FT049.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:54:cafe::dc) by DB6PR0301CA0054.outlook.office365.com (2603:10a6:4:54::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:46 +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 DBAEUR03FT049.mail.protection.outlook.com (100.127.142.192) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:46 +0000 Received: ("Tessian outbound 99a3040377ca:v136"); Tue, 18 Apr 2023 13:47:46 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: d636ea010c9529d1 X-CR-MTA-TID: 64aa7808 Received: from f4fee172851b.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 69F103E5-A78F-48A0-B1BC-3A246CCC34D4.1; Tue, 18 Apr 2023 13:47:36 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f4fee172851b.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KRdeHy2OQjZX6d9zda116+/e5JGcqjKoBldF3x3VGwi+Fzv/mYoXJeYst/qFuH3jDt7gW8gQBj/aOQRgybsOfsXK91TTDK8AWMmgTgydw5XxSDO4QJQYU6B5s3R0NJrjrfawPbwKrnnxn9gLCBR+U7ep9wWY0avdXTKGSUaYYm77xReIaDRWwB1QJFuGRIu5PMxWkvv1y12Y2o/ss578uFH9PQX+LDA5DiaAMX8zhuX0D+EalUE9UQltuQvv61kztEm2zbB+C+ClsqklHVc3fhPCPyJZ2MCEpRmx0eTmWqe0ZuYIdDq0rgCy4tj9hHUXpRn1lgo4WgLxAiHoGIbAyQ== 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=Rd2YAKU3pCcLGshQtFj2FD4AeYbgB+9ihKm0xT8jWI0=; b=YB46ft7xaRYNLxWw/MPuS+GIBdlRp6JEmK82SIkVy8f6f6+83FYuOLqi5agWLC8RWDOyxnOP5ndKGToyAo4utzZbVlkYlpc3xbcIopwSc907dwQ+yEhhdRdUYrje/AywfuSZNiel40muDYeme9blb7JTinrsjow/2UShw6lcYVs/GFwcQKHALI/YTX/TZNz+3Bkr9r8OgQY7LsRS+0Mw+O1j1ASvI/wyLIifPrYkfrlm3+kDt2nvNPSYL629I7BxVJzWn9sQn9Rg5z4ZKnjy27zAlcVvgg90tQchJf1VZux1HqHNN6Iu4SnGNUFsGh3izj82PanFztPLO2jQHx4L4g== 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 Received: from AS8PR04CA0130.eurprd04.prod.outlook.com (2603:10a6:20b:127::15) by DB9PR08MB6410.eurprd08.prod.outlook.com (2603:10a6:10:262::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:27 +0000 Received: from AM7EUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:127:cafe::8) by AS8PR04CA0130.outlook.office365.com (2603:10a6:20b:127::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:27 +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 AM7EUR03FT060.mail.protection.outlook.com (100.127.140.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:27 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:26 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:25 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 18/22] arm: [MVE intrinsics] factorize several binary_m operations Date: Tue, 18 Apr 2023 15:46:04 +0200 Message-ID: <20230418134608.244751-19-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT060:EE_|DB9PR08MB6410:EE_|DBAEUR03FT049:EE_|AM9PR08MB6034:EE_ X-MS-Office365-Filtering-Correlation-Id: 50ba02f3-6893-43f5-96a5-08db40137dce 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: mMKGpNJug7BA5++mvFTCkSozcFypg1ZABwnVTvmKLmgY0zJPELBvH4O+xooMhHMdXWpUW4rkd1NZUEpIJp1x05Pxyqeqx1Y3zxQlPw4tpIyXCm8TBbRTwUcF3pn1pLgMzNzrEK/f/89INPKn4A/zT7aVWoFjW63nBVJ5JG0bSDlwDGKpK+jlSDPvTzDXSpkbJbhaCCfiivS/2F1NUJywP4Z20t876Eo8LqtwCCpDzieV2TeY1hvXm0r5TZopuV3Sp5o2dXToXhsaCRJICQEY10nHE3BKIcrXUYGgrWHu2qBg3HYQqrqCeWlLHhxFC4zxe6RFQunQans6fsXp3KNMLt+tSl0p3gvMWAjHOytu+UF2wSXa5VS0PnS61YIyvp1GoyCb/mvOk1KLD4pSKTJip+JbQX/6me8Fof1vqop0deoxTJOBKnfn2wX4QV30VTz8kIZTGYC/gg+kVASLAmFU65PwvH4xE7z+E8QNvFKDPyAOqtFsPMwIurSPo6ie2f9l/bknOW78tB3Uqocc1y/Fk1ZpbLXZ3MkLkMnBGUvAnYxcgOYk8jLZ1TL5hhWJRrTRoZWft/aN30O/ko49KSk98xfrJbZr9E3ALKubXzjQa/vlxK1jxJyGjhiMvwUnugaQKGw7Q4uUGznuxtbFz0UL6n/6KekmMlA5RTBv6IEqNstddEF8sGtfhb4IghWTO+rD8CTOCJSoFni3DaX/QmK2O43dUzWy0FmNDE4m3o5Z6hVIAc5//p9B+0zoDDsQuJae 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:(13230028)(4636009)(39860400002)(136003)(376002)(396003)(346002)(451199021)(36840700001)(46966006)(4326008)(6636002)(316002)(110136005)(70206006)(70586007)(6666004)(7696005)(478600001)(40480700001)(82310400005)(8676002)(8936002)(41300700001)(5660300002)(2906002)(30864003)(44832011)(81166007)(356005)(82740400003)(36756003)(86362001)(426003)(2616005)(336012)(1076003)(26005)(186003)(36860700001)(47076005)(83380400001)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6410 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT049.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 40ffc9f8-9c0c-41c3-4f58-08db4013726a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qQrpgVIwwukvHsIbqYe4fJ/ZZsjHUq4+XBuYF7rJBdeiqf9CQCZnOzbeyJc06aTMmeZD/fUGGRfF+BavgGgTOxltljnM9+1whZk2g2ImSx428xrwbjuwcwP4CIiOlLO2bxdoIKZRneX530SFMT/izG4rnzDcp8ViAGERxeG8Eb0FKRE/ljXok4vPr7g4g9UhAHfoMT39Rp/PDm4iegw4hufLqNMoZvrP5Au6sL3WEiip9pZRo72elA+dWqQqdGsPjP0Pe29mxpURV2R+WtyTgEbrozsPwt9QzVZ95bWCLoYcNLEUTv8LUS1HaQ7yBaCfUzYNX3oVvI4QjB9KsALCpL8qhwO8jOTpv5JOphHDVNnf0ZceUgnyp+FFa+72t0UzY+gTYuqiAWNSHoR4tKgFdKPsR31w1gCA2Ixuno5VRJup5J/3ixZIxc9PNtiEAkvtHp4q3drvUojMffDkPENAXwCtM56wWpw5D3+Gk4J2Sbd+i+KYZVOfFKMccbo9qa/2Eu8lkZDx49g7SO6AC8429aObmvBHThtF80oy8QNRXmS4xQUEkjjLQ/G9G+q88QN2DqF8CRTPx8xBZGic3mcpxnI9ez/lhR9d0+UCt7iogzNkDwdx1SLAB5yF+QRnaNLz5GAVDiOh/Ui7VzJIABhjTJwOa9q5+7lF8jGQL5iG72ydJ5DmA52yhuA22nAfjaajBbDX2rOHzpoCXJ33yo+l4Q== 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:(13230028)(4636009)(396003)(136003)(346002)(376002)(39860400002)(451199021)(36840700001)(46966006)(40470700004)(5660300002)(44832011)(86362001)(2616005)(426003)(336012)(82310400005)(6636002)(47076005)(83380400001)(186003)(1076003)(81166007)(82740400003)(26005)(40480700001)(36860700001)(8676002)(8936002)(478600001)(110136005)(6666004)(7696005)(316002)(41300700001)(40460700003)(36756003)(4326008)(70586007)(70206006)(2906002)(30864003); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:46.2148 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 50ba02f3-6893-43f5-96a5-08db40137dce 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: DBAEUR03FT049.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6034 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Factorize m-predicated versions of vabdq, vhaddq, vhsubq, vmaxq, vminq, vmulhq, vqaddq, vqdmladhq, vqdmladhxq, vqdmlsdhq, vqdmlsdhxq, vqdmulhq, vqrdmladhq, vqrdmladhxq, vqrdmlsdhq, vqrdmlsdhxq, vqrdmulhq, vqrshlq, vqshlq, vqsubq, vrhaddq, vrmulhq, vrshlq, vshlq so that they use the same pattern. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_INT_SU_M_BINARY): New. (mve_insn): Add vabdq, vhaddq, vhsubq, vmaxq, vminq, vmulhq, vqaddq, vqdmladhq, vqdmladhxq, vqdmlsdhq, vqdmlsdhxq, vqdmulhq, vqrdmladhq, vqrdmladhxq, vqrdmlsdhq, vqrdmlsdhxq, vqrdmulhq, vqrshlq, vqshlq, vqsubq, vrhaddq, vrmulhq, vrshlq, vshlq. (supf): Add VQDMLADHQ_M_S, VQDMLADHXQ_M_S, VQDMLSDHQ_M_S, VQDMLSDHXQ_M_S, VQDMULHQ_M_S, VQRDMLADHQ_M_S, VQRDMLADHXQ_M_S, VQRDMLSDHQ_M_S, VQRDMLSDHXQ_M_S, VQRDMULHQ_M_S. * config/arm/mve.md (@mve_q_m_): New. (mve_vshlq_m_): Merged into @mve_q_m_. (mve_vabdq_m_): Likewise. (mve_vhaddq_m_): Likewise. (mve_vhsubq_m_): Likewise. (mve_vmaxq_m_): Likewise. (mve_vminq_m_): Likewise. (mve_vmulhq_m_): Likewise. (mve_vqaddq_m_): Likewise. (mve_vqrshlq_m_): Likewise. (mve_vqshlq_m_): Likewise. (mve_vqsubq_m_): Likewise. (mve_vrhaddq_m_): Likewise. (mve_vrmulhq_m_): Likewise. (mve_vrshlq_m_): Likewise. (mve_vqdmladhq_m_s): Likewise. (mve_vqdmladhxq_m_s): Likewise. (mve_vqdmlsdhq_m_s): Likewise. (mve_vqdmlsdhxq_m_s): Likewise. (mve_vqdmulhq_m_s): Likewise. (mve_vqrdmladhq_m_s): Likewise. (mve_vqrdmladhxq_m_s): Likewise. (mve_vqrdmlsdhq_m_s): Likewise. (mve_vqrdmlsdhxq_m_s): Likewise. (mve_vqrdmulhq_m_s): Likewise. --- gcc/config/arm/iterators.md | 65 +++++- gcc/config/arm/mve.md | 420 +++--------------------------------- 2 files changed, 91 insertions(+), 394 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 5a531d77a33..18d70350bbe 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -339,6 +339,33 @@ (define_int_iterator MVE_INT_M_BINARY [ VSUBQ_M_S VSUBQ_M_U ]) +(define_int_iterator MVE_INT_SU_M_BINARY [ + VABDQ_M_S VABDQ_M_U + VHADDQ_M_S VHADDQ_M_U + VHSUBQ_M_S VHSUBQ_M_U + VMAXQ_M_S VMAXQ_M_U + VMINQ_M_S VMINQ_M_U + VMULHQ_M_S VMULHQ_M_U + VQADDQ_M_S VQADDQ_M_U + VQDMLADHQ_M_S + VQDMLADHXQ_M_S + VQDMLSDHQ_M_S + VQDMLSDHXQ_M_S + VQDMULHQ_M_S + VQRDMLADHQ_M_S + VQRDMLADHXQ_M_S + VQRDMLSDHQ_M_S + VQRDMLSDHXQ_M_S + VQRDMULHQ_M_S + VQRSHLQ_M_S VQRSHLQ_M_U + VQSHLQ_M_S VQSHLQ_M_U + VQSUBQ_M_S VQSUBQ_M_U + VRHADDQ_M_S VRHADDQ_M_U + VRMULHQ_M_S VRMULHQ_M_U + VRSHLQ_M_S VRSHLQ_M_U + VSHLQ_M_S VSHLQ_M_U + ]) + (define_int_iterator MVE_INT_M_BINARY_LOGIC [ VANDQ_M_S VANDQ_M_U VBICQ_M_S VBICQ_M_U @@ -404,6 +431,7 @@ (define_code_attr mve_addsubmul [ ]) (define_int_attr mve_insn [ + (VABDQ_M_S "vabd") (VABDQ_M_U "vabd") (VADDQ_M_N_S "vadd") (VADDQ_M_N_U "vadd") (VADDQ_M_N_F "vadd") (VADDQ_M_S "vadd") (VADDQ_M_U "vadd") (VADDQ_M_F "vadd") (VADDQ_N_S "vadd") (VADDQ_N_U "vadd") (VADDQ_N_F "vadd") @@ -413,12 +441,35 @@ (define_int_attr mve_insn [ (VBICQ_N_S "vbic") (VBICQ_N_U "vbic") (VCREATEQ_S "vcreate") (VCREATEQ_U "vcreate") (VCREATEQ_F "vcreate") (VEORQ_M_S "veor") (VEORQ_M_U "veor") (VEORQ_M_F "veor") + (VHADDQ_M_S "vhadd") (VHADDQ_M_U "vhadd") + (VHSUBQ_M_S "vhsub") (VHSUBQ_M_U "vhsub") + (VMAXQ_M_S "vmax") (VMAXQ_M_U "vmax") + (VMINQ_M_S "vmin") (VMINQ_M_U "vmin") + (VMULHQ_M_S "vmulh") (VMULHQ_M_U "vmulh") (VMULQ_M_N_S "vmul") (VMULQ_M_N_U "vmul") (VMULQ_M_N_F "vmul") (VMULQ_M_S "vmul") (VMULQ_M_U "vmul") (VMULQ_M_F "vmul") (VMULQ_N_S "vmul") (VMULQ_N_U "vmul") (VMULQ_N_F "vmul") (VORRQ_M_N_S "vorr") (VORRQ_M_N_U "vorr") (VORRQ_M_S "vorr") (VORRQ_M_U "vorr") (VORRQ_M_F "vorr") (VORRQ_N_S "vorr") (VORRQ_N_U "vorr") + (VQADDQ_M_S "vqadd") (VQADDQ_M_U "vqadd") + (VQDMLADHQ_M_S "vqdmladh") + (VQDMLADHXQ_M_S "vqdmladhx") + (VQDMLSDHQ_M_S "vqdmlsdh") + (VQDMLSDHXQ_M_S "vqdmlsdhx") + (VQDMULHQ_M_S "vqdmulh") + (VQRDMLADHQ_M_S "vqrdmladh") + (VQRDMLADHXQ_M_S "vqrdmladhx") + (VQRDMLSDHQ_M_S "vqrdmlsdh") + (VQRDMLSDHXQ_M_S "vqrdmlsdhx") + (VQRDMULHQ_M_S "vqrdmulh") + (VQRSHLQ_M_S "vqrshl") (VQRSHLQ_M_U "vqrshl") + (VQSHLQ_M_S "vqshl") (VQSHLQ_M_U "vqshl") + (VQSUBQ_M_S "vqsub") (VQSUBQ_M_U "vqsub") + (VRHADDQ_M_S "vrhadd") (VRHADDQ_M_U "vrhadd") + (VRMULHQ_M_S "vrmulh") (VRMULHQ_M_U "vrmulh") + (VRSHLQ_M_S "vrshl") (VRSHLQ_M_U "vrshl") + (VSHLQ_M_S "vshl") (VSHLQ_M_U "vshl") (VSUBQ_M_N_S "vsub") (VSUBQ_M_N_U "vsub") (VSUBQ_M_N_F "vsub") (VSUBQ_M_S "vsub") (VSUBQ_M_U "vsub") (VSUBQ_M_F "vsub") (VSUBQ_N_S "vsub") (VSUBQ_N_U "vsub") (VSUBQ_N_F "vsub") @@ -1557,7 +1608,19 @@ (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s") (VADCIQ_U "u") (VADCIQ_M_U "u") (VADCIQ_S "s") (VADCIQ_M_S "s") (SQRSHRL_64 "64") (SQRSHRL_48 "48") (UQRSHLL_64 "64") (UQRSHLL_48 "48") (VSHLCQ_M_S "s") - (VSHLCQ_M_U "u")]) + (VSHLCQ_M_U "u") + (VQDMLADHQ_M_S "s") + (VQDMLADHXQ_M_S "s") + (VQDMLSDHQ_M_S "s") + (VQDMLSDHXQ_M_S "s") + (VQDMULHQ_M_S "s") + (VQRDMLADHQ_M_S "s") + (VQRDMLADHXQ_M_S "s") + (VQRDMLSDHQ_M_S "s") + (VQRDMLSDHXQ_M_S "s") + (VQRDMULHQ_M_S "s") + ]) + ;; Both kinds of return insn. (define_code_iterator RETURNS [return simple_return]) (define_code_attr return_str [(return "") (simple_return "simple_")]) diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index f7f0ba65251..21c54197db5 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -4867,23 +4867,6 @@ (define_insn "mve_vqshluq_m_n_s" [(set_attr "type" "mve_move") (set_attr "length" "8")]) -;; -;; [vshlq_m_s, vshlq_m_u]) -;; -(define_insn "mve_vshlq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VSHLQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vshlt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length" "8")]) - ;; ;; [vsriq_m_n_s, vsriq_m_n_u]) ;; @@ -4917,20 +4900,44 @@ (define_insn "mve_vcvtq_m_n_to_f_" "vpst\;vcvtt.f%#.%#\t%q0, %q2, %3" [(set_attr "type" "mve_move") (set_attr "length""8")]) + ;; ;; [vabdq_m_s, vabdq_m_u]) +;; [vhaddq_m_s, vhaddq_m_u]) +;; [vhsubq_m_s, vhsubq_m_u]) +;; [vmaxq_m_s, vmaxq_m_u]) +;; [vminq_m_s, vminq_m_u]) +;; [vmulhq_m_s, vmulhq_m_u]) +;; [vqaddq_m_u, vqaddq_m_s]) +;; [vqdmladhq_m_s]) +;; [vqdmladhxq_m_s]) +;; [vqdmlsdhq_m_s]) +;; [vqdmlsdhxq_m_s]) +;; [vqdmulhq_m_s]) +;; [vqrdmladhq_m_s]) +;; [vqrdmladhxq_m_s]) +;; [vqrdmlsdhq_m_s]) +;; [vqrdmlsdhxq_m_s]) +;; [vqrdmulhq_m_s]) +;; [vqrshlq_m_u, vqrshlq_m_s]) +;; [vqshlq_m_u, vqshlq_m_s]) +;; [vqsubq_m_u, vqsubq_m_s]) +;; [vrhaddq_m_u, vrhaddq_m_s]) +;; [vrmulhq_m_u, vrmulhq_m_s]) +;; [vrshlq_m_s, vrshlq_m_u]) +;; [vshlq_m_s, vshlq_m_u]) ;; -(define_insn "mve_vabdq_m_" +(define_insn "@mve_q_m_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand:MVE_2 3 "s_register_operand" "w") (match_operand: 4 "vpr_register_operand" "Up")] - VABDQ_M)) + MVE_INT_SU_M_BINARY)) ] "TARGET_HAVE_MVE" - "vpst\;vabdt.%# %q0, %q2, %q3" + "vpst\;t.%#\t%q0, %q2, %q3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -5060,23 +5067,6 @@ (define_insn "mve_vhaddq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vhaddq_m_s, vhaddq_m_u]) -;; -(define_insn "mve_vhaddq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VHADDQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vhaddt.%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vhsubq_m_n_s, vhsubq_m_n_u]) ;; @@ -5095,56 +5085,6 @@ (define_insn "mve_vhsubq_m_n_" (set_attr "length""8")]) ;; -;; [vhsubq_m_s, vhsubq_m_u]) -;; -(define_insn "mve_vhsubq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VHSUBQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vhsubt.%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmaxq_m_s, vmaxq_m_u]) -;; -(define_insn "mve_vmaxq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VMAXQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmaxt.%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vminq_m_s, vminq_m_u]) -;; -(define_insn "mve_vminq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VMINQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmint.%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vmladavaq_p_u, vmladavaq_p_s]) ;; @@ -5196,23 +5136,6 @@ (define_insn "mve_vmlasq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vmulhq_m_s, vmulhq_m_u]) -;; -(define_insn "mve_vmulhq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VMULHQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmulht.%# %q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vmullbq_int_m_u, vmullbq_int_m_s]) ;; @@ -5281,23 +5204,6 @@ (define_insn "mve_vqaddq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqaddq_m_u, vqaddq_m_s]) -;; -(define_insn "mve_vqaddq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQADDQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqaddt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqdmlahq_m_n_s]) ;; @@ -5366,23 +5272,6 @@ (define_insn "mve_vqrdmlashq_m_n_s" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqrshlq_m_u, vqrshlq_m_s]) -;; -(define_insn "mve_vqrshlq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRSHLQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrshlt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqshlq_m_n_s, vqshlq_m_n_u]) ;; @@ -5400,23 +5289,6 @@ (define_insn "mve_vqshlq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqshlq_m_u, vqshlq_m_s]) -;; -(define_insn "mve_vqshlq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQSHLQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqshlt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqsubq_m_n_u, vqsubq_m_n_s]) ;; @@ -5434,74 +5306,6 @@ (define_insn "mve_vqsubq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqsubq_m_u, vqsubq_m_s]) -;; -(define_insn "mve_vqsubq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQSUBQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqsubt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrhaddq_m_u, vrhaddq_m_s]) -;; -(define_insn "mve_vrhaddq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VRHADDQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vrhaddt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrmulhq_m_u, vrmulhq_m_s]) -;; -(define_insn "mve_vrmulhq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VRMULHQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vrmulht.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrshlq_m_s, vrshlq_m_u]) -;; -(define_insn "mve_vrshlq_m_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VRSHLQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vrshlt.%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vrshrq_m_n_s, vrshrq_m_n_u]) ;; @@ -5655,74 +5459,6 @@ (define_insn "mve_vmlsdavaxq_p_s" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqdmladhq_m_s]) -;; -(define_insn "mve_vqdmladhq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMLADHQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmladht.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqdmladhxq_m_s]) -;; -(define_insn "mve_vqdmladhxq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMLADHXQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmladhxt.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqdmlsdhq_m_s]) -;; -(define_insn "mve_vqdmlsdhq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMLSDHQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmlsdht.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqdmlsdhxq_m_s]) -;; -(define_insn "mve_vqdmlsdhxq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMLSDHXQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmlsdhxt.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqdmulhq_m_n_s]) ;; @@ -5740,91 +5476,6 @@ (define_insn "mve_vqdmulhq_m_n_s" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqdmulhq_m_s]) -;; -(define_insn "mve_vqdmulhq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMULHQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmulht.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmladhq_m_s]) -;; -(define_insn "mve_vqrdmladhq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMLADHQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmladht.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmladhxq_m_s]) -;; -(define_insn "mve_vqrdmladhxq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMLADHXQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmladhxt.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmlsdhq_m_s]) -;; -(define_insn "mve_vqrdmlsdhq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMLSDHQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmlsdht.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmlsdhxq_m_s]) -;; -(define_insn "mve_vqrdmlsdhxq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMLSDHXQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmlsdhxt.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqrdmulhq_m_n_s]) ;; @@ -5842,23 +5493,6 @@ (define_insn "mve_vqrdmulhq_m_n_s" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqrdmulhq_m_s]) -;; -(define_insn "mve_vqrdmulhq_m_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMULHQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmulht.s%#\t%q0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vmlaldavaq_p_u, vmlaldavaq_p_s]) ;; From patchwork Tue Apr 18 13:46:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67929 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AE6F7389901B for ; Tue, 18 Apr 2023 13:51:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AE6F7389901B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825901; bh=E3xZKktyZI1ZVfx/o1suEYla7kE/t9IvBfZnsU96thU=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=KDioc3F/vHILGbQVzmgyDdEljTFr0ERM0nBPoIOVl2/EP94wHNgI26t0kq1zpC4Rw hWeYzD/BZIs/CfFfl8G5oCDP/3EX6GRfiHAWnB7daInX+adQxyK+wUnkq3EgYiDhwf QrPbtUa8rFqk733QyxrkRd95TIZmB8+PUx7nr6EU= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2087.outbound.protection.outlook.com [40.107.247.87]) by sourceware.org (Postfix) with ESMTPS id 0CF773857348 for ; Tue, 18 Apr 2023 13:47:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0CF773857348 Received: from DU2PR04CA0344.eurprd04.prod.outlook.com (2603:10a6:10:2b4::17) by AM9PR08MB5924.eurprd08.prod.outlook.com (2603:10a6:20b:282::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:43 +0000 Received: from DBAEUR03FT047.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:2b4:cafe::64) by DU2PR04CA0344.outlook.office365.com (2603:10a6:10:2b4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:43 +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 DBAEUR03FT047.mail.protection.outlook.com (100.127.143.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:43 +0000 Received: ("Tessian outbound 945aec65ec65:v136"); Tue, 18 Apr 2023 13:47:43 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: d25a7c6e45607039 X-CR-MTA-TID: 64aa7808 Received: from f9eeaf4f7f72.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 14D06857-B7B7-43EE-9723-B10EBCF6F9BC.1; Tue, 18 Apr 2023 13:47:30 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f9eeaf4f7f72.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KbQgcD540mc5ajjF1L/km4vmwQH+pxIbqgyKPTivRKytb05FR1zDiu1yAmxQr1ngYhvFJBLSxa/y3XrmDHNPtS4pxFKqLsHjfX7TfRiGuBoUSptU4JWhKSwL0ZXstQpbyXMxLfYFPjc+FpLjl0N68mOglYi05LCNZ8i3/xGb9ddYNkdHxpERPJnBM0A7oimzfhOZ82uaFaX1UErzxhh5Bp843d8X5QtFAUWe/tidedhjAiN09OtwmpjjKqj/O2gMiSTaV8Vk6DcXYkVLAacQGP+44H0htaAs8Rl/vJdrdzMPvH45S3qUnuG8HcK0mmCh1WJ84iZa5n4XLgnomQ5F5w== 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=E3xZKktyZI1ZVfx/o1suEYla7kE/t9IvBfZnsU96thU=; b=i/RC6g6g8sTREI6DvrAx6fP9mH0x1ch3eeVLNuk3+6bKxoR1OfGo3VN+3Z1hFmxSg9Jvo9zTkwciU6omeu5ui0J0kmz5rlGmFnYHV9pDvlvXjby53bh67qCK5q5gRyHwugRtdz62rkwHpXrBelY44aMCb1HtgI6f2phcZN2Di/9u+w4hBjdAuIKCPb+Z+/GUKzdETODy1uDeEYqQdfOi9qmA4RctuLSCnK+y/lxkeFu66vkRrIV3i9+gMhny5+NopUt6N3jni2Fym+gKRmbDpXjtNEIi7Aa9Q2Lj9ZyNERzoSmFdeCifrUKSv7pXr/iceyIEj9gn9eJtmwwTzOG4IQ== 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 Received: from AM5PR1001CA0004.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::17) by GV1PR08MB8354.eurprd08.prod.outlook.com (2603:10a6:150:a4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:28 +0000 Received: from AM7EUR03FT020.eop-EUR03.prod.protection.outlook.com (2603:10a6:206:2:cafe::5a) by AM5PR1001CA0004.outlook.office365.com (2603:10a6:206:2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:28 +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 AM7EUR03FT020.mail.protection.outlook.com (100.127.140.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:28 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) 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.23; Tue, 18 Apr 2023 13:47:27 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:27 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:26 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 19/22] arm: [MVE intrinsics] factorize several binary _n operations Date: Tue, 18 Apr 2023 15:46:05 +0200 Message-ID: <20230418134608.244751-20-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT020:EE_|GV1PR08MB8354:EE_|DBAEUR03FT047:EE_|AM9PR08MB5924:EE_ X-MS-Office365-Filtering-Correlation-Id: ffc37d89-c076-4857-840d-08db40137c0d 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: PkA3GBRuDzvHdT09ghsGkf2O/zo3iKjDBWVnp+QvU7iEEsyetGXyjZ5OP/3Uo3Mdaiqg52c+lslN8fuzJSlPzE0Gr+tulipIoKGpfm4aBEvzvFEYTYjpWuEEST2fHceMF7S/evGH63j36yV/M2vKEL1LdkWGpOC0eD1yOWeAAk+JZiwZTasxnaKbaSfkwTVWMxUo8xHWpv9eIEmlfPbeo3J8G1hWA20LCDtk+lrwp0YsrV2Db0d3dessc6G31UvFY8N3H80GHU4kFuLMz3hF7C1ENHQ3nSdwcuKPTErb55lBasGvU1i8c+yO+A9jjq15RobPKPz0rG69EqDkg6xTMRAYdY9XVWnwcofdG0YFonPc+R3eybr7+wIwr+KTrRfHglesz/aVZzLAznJ4nrUczdyKrTEGZR6xR1bmnKw7sW5lT6sOUP3F0v2pmWOh7/g1Ku5Tk2i4CDMPnDXA3DMBreF1G6OWnGcwBBaKoQnv165k6SZV1vNn41B8vKVq5BoAOGPfHB3324A8zSkTF5OuXGPgIZAjN3xQdvzAeRhCErzKk0DtWdj8cOZXtNRaGKxY09hNf1pyMUvFuZ3ThGt/f2Tdu+jo7V/oLUbxde1kc9w1cyn0J0bkbR2p6HAoYtYfCZE4EhaUMcZJh4VPfVO5DxG4XdUVAhrh74wJnei1LTX8EHCk28jZTr/V2Fswl3pqTX+byU5bFxcCOdkfpL3XGg== 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:(13230028)(4636009)(396003)(136003)(346002)(376002)(39860400002)(451199021)(36840700001)(46966006)(426003)(5660300002)(44832011)(82310400005)(2616005)(336012)(47076005)(83380400001)(356005)(86362001)(186003)(26005)(81166007)(82740400003)(1076003)(36860700001)(8936002)(8676002)(110136005)(478600001)(6636002)(40480700001)(6666004)(7696005)(41300700001)(316002)(36756003)(70206006)(4326008)(70586007)(2906002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB8354 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 3aa29b62-edf6-4a69-b912-08db40137311 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: svj5pFMQyReeB6TTM43O7wn74sfwRJvzuMySdj4KCRq/tSYuteBrcwjEicFEUpd3UI7eaNQ+1pMGhQEuDVP4teFCYIxEzmsUzKHeoMlOATUkOUSKRnr0wxHq9ewchpi2uc4mbfwdnPS1wU6roR+7hhwIunKYl7MdbWnBHGq7m+EjMEBpbBsLfrH9RM12IiSOcVig+IgBdbLPucA25us2Gdj1YjkgkaXIBWMlI/CtJpqD9un6Ag6K0gER1si7YNEi06a3Gbs43DuR6c0IKUxM6Q+6WW6dHL30Bsq4b/TqJuQqAHbA6NzFH1XuXzWapaUAHcl44kuwrEDum2cZOX4QPXhgMcXJUEUPnxdxP85i+qL4cajIi+EnxnOWbJtuOTDrFEkIgxrfS7K2/xRgj+KxEeViPpIDTE16QJOcXHd/x45ik50FA4dOG+oePAx3k0Xs5yHYeVy5MIcLsBWWcsYCWbLaptvlgwkuqE3ZQ9SW8NGNagXQVYYQTV4fo19pvHMW4cJpNd31jjGGp9OfMwnal7w3kTe4Yc6UUJLRZTaOs0Rdf2i9QPNxMPdZYeIrLAXqNbP3R0vPO3fsDdeHHxpGuj7Yo1/ogS3+umgmdUVNo4zWcZCG7j7Croz6iWQ2ANqbTX1v4JDC5hDa220U8IJjrNPBDKYdBAiJyCOuccqQYBxMlpjAQCfsqULsMG9Tfn1jyJB7hx7y2C2ZclBDtK58PA== 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:(13230028)(4636009)(39860400002)(136003)(376002)(396003)(346002)(451199021)(40470700004)(36840700001)(46966006)(4326008)(6636002)(316002)(110136005)(70206006)(70586007)(6666004)(7696005)(478600001)(40480700001)(82310400005)(8676002)(8936002)(41300700001)(5660300002)(2906002)(44832011)(81166007)(82740400003)(36756003)(86362001)(426003)(2616005)(336012)(1076003)(26005)(40460700003)(186003)(36860700001)(47076005)(83380400001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:43.2873 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ffc37d89-c076-4857-840d-08db40137c0d 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: DBAEUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB5924 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Factorize vhaddq_n, vhsubq_n, vqaddq_n, vqdmulhq_n, vqrdmulhq_n, vqsubq_n so that they use the same pattern. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_INT_SU_N_BINARY): New. (mve_insn): Add vhaddq, vhsubq, vqaddq, vqdmulhq, vqrdmulhq, vqsubq. (supf): Add VQDMULHQ_N_S, VQRDMULHQ_N_S. * config/arm/mve.md (mve_vhaddq_n_) (mve_vhsubq_n_, mve_vqaddq_n_) (mve_vqdmulhq_n_s, mve_vqrdmulhq_n_s) (mve_vqsubq_n_): Merge into ... (@mve_q_n_): ... this. --- gcc/config/arm/iterators.md | 17 ++++++++ gcc/config/arm/mve.md | 86 ++++--------------------------------- 2 files changed, 25 insertions(+), 78 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 18d70350bbe..6dbc40f842c 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -390,6 +390,15 @@ (define_int_iterator MVE_INT_N_BINARY [ VSUBQ_N_S VSUBQ_N_U ]) +(define_int_iterator MVE_INT_SU_N_BINARY [ + VHADDQ_N_S VHADDQ_N_U + VHSUBQ_N_S VHSUBQ_N_U + VQADDQ_N_S VQADDQ_N_U + VQDMULHQ_N_S + VQRDMULHQ_N_S + VQSUBQ_N_S VQSUBQ_N_U + ]) + (define_int_iterator MVE_INT_N_BINARY_LOGIC [ VBICQ_N_S VBICQ_N_U VORRQ_N_S VORRQ_N_U @@ -442,7 +451,9 @@ (define_int_attr mve_insn [ (VCREATEQ_S "vcreate") (VCREATEQ_U "vcreate") (VCREATEQ_F "vcreate") (VEORQ_M_S "veor") (VEORQ_M_U "veor") (VEORQ_M_F "veor") (VHADDQ_M_S "vhadd") (VHADDQ_M_U "vhadd") + (VHADDQ_N_S "vhadd") (VHADDQ_N_U "vhadd") (VHSUBQ_M_S "vhsub") (VHSUBQ_M_U "vhsub") + (VHSUBQ_N_S "vhsub") (VHSUBQ_N_U "vhsub") (VMAXQ_M_S "vmax") (VMAXQ_M_U "vmax") (VMINQ_M_S "vmin") (VMINQ_M_U "vmin") (VMULHQ_M_S "vmulh") (VMULHQ_M_U "vmulh") @@ -453,19 +464,23 @@ (define_int_attr mve_insn [ (VORRQ_M_S "vorr") (VORRQ_M_U "vorr") (VORRQ_M_F "vorr") (VORRQ_N_S "vorr") (VORRQ_N_U "vorr") (VQADDQ_M_S "vqadd") (VQADDQ_M_U "vqadd") + (VQADDQ_N_S "vqadd") (VQADDQ_N_U "vqadd") (VQDMLADHQ_M_S "vqdmladh") (VQDMLADHXQ_M_S "vqdmladhx") (VQDMLSDHQ_M_S "vqdmlsdh") (VQDMLSDHXQ_M_S "vqdmlsdhx") (VQDMULHQ_M_S "vqdmulh") + (VQDMULHQ_N_S "vqdmulh") (VQRDMLADHQ_M_S "vqrdmladh") (VQRDMLADHXQ_M_S "vqrdmladhx") (VQRDMLSDHQ_M_S "vqrdmlsdh") (VQRDMLSDHXQ_M_S "vqrdmlsdhx") (VQRDMULHQ_M_S "vqrdmulh") + (VQRDMULHQ_N_S "vqrdmulh") (VQRSHLQ_M_S "vqrshl") (VQRSHLQ_M_U "vqrshl") (VQSHLQ_M_S "vqshl") (VQSHLQ_M_U "vqshl") (VQSUBQ_M_S "vqsub") (VQSUBQ_M_U "vqsub") + (VQSUBQ_N_S "vqsub") (VQSUBQ_N_U "vqsub") (VRHADDQ_M_S "vrhadd") (VRHADDQ_M_U "vrhadd") (VRMULHQ_M_S "vrmulh") (VRMULHQ_M_U "vrmulh") (VRSHLQ_M_S "vrshl") (VRSHLQ_M_U "vrshl") @@ -1619,6 +1634,8 @@ (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s") (VQRDMLSDHQ_M_S "s") (VQRDMLSDHXQ_M_S "s") (VQRDMULHQ_M_S "s") + (VQDMULHQ_N_S "s") + (VQRDMULHQ_N_S "s") ]) ;; Both kinds of return insn. diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 21c54197db5..3377e03ee06 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -1015,16 +1015,21 @@ (define_expand "mve_veorq_s" ;; ;; [vhaddq_n_u, vhaddq_n_s]) +;; [vhsubq_n_u, vhsubq_n_s]) +;; [vqaddq_n_s, vqaddq_n_u]) +;; [vqdmulhq_n_s]) +;; [vqrdmulhq_n_s]) +;; [vqsubq_n_s, vqsubq_n_u]) ;; -(define_insn "mve_vhaddq_n_" +(define_insn "@mve_q_n_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") (match_operand: 2 "s_register_operand" "r")] - VHADDQ_N)) + MVE_INT_SU_N_BINARY)) ] "TARGET_HAVE_MVE" - "vhadd.%#\t%q0, %q1, %2" + ".%#\t%q0, %q1, %2" [(set_attr "type" "mve_move") ]) @@ -1073,21 +1078,6 @@ (define_insn "mve_vhcaddq_rot90_s" [(set_attr "type" "mve_move") ]) -;; -;; [vhsubq_n_u, vhsubq_n_s]) -;; -(define_insn "mve_vhsubq_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VHSUBQ_N)) - ] - "TARGET_HAVE_MVE" - "vhsub.%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vhsubq_s, vhsubq_u]) ;; @@ -1415,21 +1405,6 @@ (define_expand "mve_vorrq_u" "TARGET_HAVE_MVE" ) -;; -;; [vqaddq_n_s, vqaddq_n_u]) -;; -(define_insn "mve_vqaddq_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VQADDQ_N)) - ] - "TARGET_HAVE_MVE" - "vqadd.%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqaddq_u, vqaddq_s]) ;; @@ -1445,21 +1420,6 @@ (define_insn "mve_vqaddq_" [(set_attr "type" "mve_move") ]) -;; -;; [vqdmulhq_n_s]) -;; -(define_insn "mve_vqdmulhq_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VQDMULHQ_N_S)) - ] - "TARGET_HAVE_MVE" - "vqdmulh.s%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqdmulhq_s]) ;; @@ -1475,21 +1435,6 @@ (define_insn "mve_vqdmulhq_s" [(set_attr "type" "mve_move") ]) -;; -;; [vqrdmulhq_n_s]) -;; -(define_insn "mve_vqrdmulhq_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VQRDMULHQ_N_S)) - ] - "TARGET_HAVE_MVE" - "vqrdmulh.s%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqrdmulhq_s]) ;; @@ -1595,21 +1540,6 @@ (define_insn "mve_vqshluq_n_s" [(set_attr "type" "mve_move") ]) -;; -;; [vqsubq_n_s, vqsubq_n_u]) -;; -(define_insn "mve_vqsubq_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r")] - VQSUBQ_N)) - ] - "TARGET_HAVE_MVE" - "vqsub.%#\t%q0, %q1, %2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqsubq_u, vqsubq_s]) ;; From patchwork Tue Apr 18 13:46:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67930 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 136E13899424 for ; Tue, 18 Apr 2023 13:51:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 136E13899424 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825906; bh=2BQwehvO8mXxT1A3iqU9Dpjx56kUfijT42HcuAw78eg=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=AKnbpt+fQ+o52tAQOY6ZtqfBwDo2igRxHbJranMPKD0XrFNbwbtyWUO5ws+c3aL3Z VmC/EFjCPomkOhImBlNGDohCapBBYWqb9PQ09HsU/bAUzmRSHFoK3PCtnsady13ybR PQI3KjZR5f/UtfqhGq2Jd5sFYHRtzRpl2rFYdDJ0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2075.outbound.protection.outlook.com [40.107.6.75]) by sourceware.org (Postfix) with ESMTPS id 60BE1385701D for ; Tue, 18 Apr 2023 13:47:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 60BE1385701D Received: from DB6PR0801CA0061.eurprd08.prod.outlook.com (2603:10a6:4:2b::29) by DU2PR08MB10085.eurprd08.prod.outlook.com (2603:10a6:10:496::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:45 +0000 Received: from DBAEUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:2b:cafe::be) by DB6PR0801CA0061.outlook.office365.com (2603:10a6:4:2b::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:45 +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 DBAEUR03FT060.mail.protection.outlook.com (100.127.142.238) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:45 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Tue, 18 Apr 2023 13:47:45 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 2e2923bbe5947cd1 X-CR-MTA-TID: 64aa7808 Received: from 16777c694904.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 6EEC4086-2E9A-4F4E-8D73-A628778FC79F.1; Tue, 18 Apr 2023 13:47:34 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 16777c694904.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XLSzkst3JAU9zQAStQVxH4YSU0yYCnPe69Gd0aesD/GOvSi2yTcE4/13i/m2wBGh2HRJBZZrIyhjXaGHYLwDoRosNrP++kBFs6eTkXBOnm4ErqytgOw71biVUuYN2Ex20/D9xfyfE/PiYUU5uuMvhvYFbbshRUqUcKYB/VJVv9OZhoC1kXa8iI0ma/agDW8sHhB6QmXyr/11ZZUkUSVug+erMIO7Nr1hDCCXHeJEvbyokkl04aIE9zNAbZhkQWoIbu+LtxhZBcNqFmGI4ifbUn67MIUl91kCIP9/DmrtxC1BO4HiFGQFJVJYV5VJ+XkwBS2rsm1U9x5OahBYh6rvVQ== 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=2BQwehvO8mXxT1A3iqU9Dpjx56kUfijT42HcuAw78eg=; b=SSN7Yio11tlhC2btXFHwf74hYDjprRd+ircSFVtQ40Z64DoRRF9pi098RVoHdws3KjUn/LP5XwPCSVzArc1Y52edjrRklPxZFw/yqajVYI5XgAu4VwMiD56G6eKVnZKkFRN/60fX7Zolu+8ExwOOePIZ80g1tHTLD77crekvinLLg6brnqusFL/+TFFlghrGqMBtCeKDEBtkTGFA1GxW1C5hOJNd5qdV3q2GN3rIGnAK9iy2dn2vdWjp7arjj/PyX3ZyCaC26pQXwqFoaBySg5hXfXnd6SBg+u1dr7pao/O4Xg2eCHcbanoN34zMPmoBxacXLGG+52fwjvH7imsy5g== 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 Received: from AS9PR04CA0042.eurprd04.prod.outlook.com (2603:10a6:20b:46a::14) by AS2PR08MB8503.eurprd08.prod.outlook.com (2603:10a6:20b:55e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:29 +0000 Received: from AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46a:cafe::7d) by AS9PR04CA0042.outlook.office365.com (2603:10a6:20b:46a::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:29 +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 AM7EUR03FT056.mail.protection.outlook.com (100.127.140.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:29 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) 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.23; Tue, 18 Apr 2023 13:47:28 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:28 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:28 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 20/22] arm: [MVE intrinsics] factorize several binary _m_n operations Date: Tue, 18 Apr 2023 15:46:06 +0200 Message-ID: <20230418134608.244751-21-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT056:EE_|AS2PR08MB8503:EE_|DBAEUR03FT060:EE_|DU2PR08MB10085:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c7d5758-3e06-49df-856d-08db40137d25 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: IwXLXuibF8NpIXWlj9IBvOTI9yeF133nikLnvmo9Jg4PoH4W0dy2fmXPuLcnVDQNPGlTIAuH6AEGRcUIR8EGBQHrEALUFRIGGGcNWL4KbDo/XKq9YZd6x0mJDX/wOyOvMpP5sWMk4AlmoB14603tc9MYuQRm3Rpbz3X7FtSi6Y0R2eZMIKdtCRtU23hdX3JqNZtm3Tby+0g3kON8OeO7kvj1rA/HUz1dfL7g2y95N5ivk3dgF8rqUaR2yYQ/Mqs3uR8LwYbcNSEL2OMEMxZiNm87Rsl0Ar/4yKH+a5b8MED6cpttelbwSQvE23SXAFsjM/bFvqtrh0BP9DCew3aBghqffUhirqeV+ubY5KjzAmA8zRC3rYILaqtEb26TjJ+Yk9LaBdB6ro5BRIopKPsaGn9akZ8rPTcVtECPWmAunr8fVxouW1t8oOlTwCqMDdshvbVhb1yXyyTvsMpOssnBHJgDr3IMsZdTUNIAAnfrMXi1Xi7xwsDVPl3cqOjlGSegIrzpvqmaG3F0dKTVpQ8VA++js4wZakBKHEE83exb4lbWbhI4cVd2En1FUaT/9tlAPxQr6CyyQiKbGwFyrRvymZHkEDNanENRx6NSobxrHlutwXcgVWWVIeoFd1CKrDFQSqHxsudpTbJqjYomy0DwWAfLQBDMpq1PNPZ05AKveb0uIeVuVFfCA7T7/xddhOQJc4UYli350/siyMZYB0RgdQ== 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:(13230028)(4636009)(396003)(346002)(376002)(136003)(39860400002)(451199021)(46966006)(36840700001)(356005)(110136005)(6636002)(4326008)(316002)(70586007)(70206006)(478600001)(6666004)(7696005)(40480700001)(82310400005)(5660300002)(41300700001)(8676002)(2906002)(30864003)(44832011)(81166007)(82740400003)(8936002)(86362001)(36756003)(186003)(336012)(426003)(2616005)(26005)(1076003)(36860700001)(83380400001)(47076005)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8503 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT060.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: d14e8c5e-f12f-4834-0848-08db401373b3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bsN8z67B6Uq1F1eTzawMeWsN5NAMnQpqbb8nQufIFetIKkWHClRgU8sI0dDK1n8jnM0s4d+1Wn895azPdg1y1OKxGBPK5UsXp/4RrZzX24qPvTYxKpkVc1bXM1PxNlDdFR6kyZ8Wn2kikZ+oTwC0IyTy0ipQaD88Gk9f2BwTqFxnFb5k8kC/WLl/cGLdr26+gqyTMJPtaw9xq4gzRWw0na6DoRKV+RR3qG9GrNM68hrCxsUHCSn8hAKrUJ31iv1HEKR6UeZbpRAeh6nmKlmfyAjfnPHWC1y0R2FV2q7S4AKOv0cJ8kY1bzg4p9pRwX7/W2a44cSZni1p4Y4dCTH68coAzRW+Ev0gOIM7UrYX5zmzpb9HMl6Zv5N6J4bCxMpZoOvIqmTh3j4Q0chwSN3fSrDB6D8bpPclk980AIO24MORjRLr+U6zqbl0wAkMlvBcNSTUnlwwkq1aC7gLpgdU/oWPix1n0xQrAGX1P4wpLWuCCa4jsrd+hqqu9GLushaB4aM2v4Bk4OhvWDxfjLdLxQm5PvhatIxKz8vLc8PG13Gh7OsvNIuKhzouzbzfwu44XeflP5yS5JBmpAwW9o22tNGuRFotnspIKngaWB99ZlI+iUy1J5tHw7gr27v1n/BYjveDM+EvthgfkegSeaumU1ncoN79flwsZ8TQCS/Y8+rppO8hWujJsi7RHJDX6RIad9MZWVRUIz9HnDfiyb+ZJw== 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:(13230028)(4636009)(396003)(39860400002)(376002)(346002)(136003)(451199021)(36840700001)(46966006)(40470700004)(36756003)(6636002)(110136005)(4326008)(316002)(70586007)(70206006)(478600001)(7696005)(6666004)(40480700001)(82310400005)(8936002)(8676002)(5660300002)(41300700001)(30864003)(2906002)(44832011)(82740400003)(86362001)(81166007)(426003)(336012)(2616005)(1076003)(26005)(186003)(40460700003)(36860700001)(47076005)(83380400001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:45.1224 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c7d5758-3e06-49df-856d-08db40137d25 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: DBAEUR03FT060.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR08MB10085 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Factorize vhaddq_m_n, vhsubq_m_n, vmlaq_m_n, vmlasq_m_n, vqaddq_m_n, vqdmlahq_m_n, vqdmlashq_m_n, vqdmulhq_m_n, vqrdmlahq_m_n, vqrdmlashq_m_n, vqrdmulhq_m_n, vqsubq_m_n so that they use the same pattern. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_INT_SU_M_N_BINARY): New. (mve_insn): Add vhaddq, vhsubq, vmlaq, vmlasq, vqaddq, vqdmlahq, vqdmlashq, vqdmulhq, vqrdmlahq, vqrdmlashq, vqrdmulhq, vqsubq. (supf): Add VQDMLAHQ_M_N_S, VQDMLASHQ_M_N_S, VQRDMLAHQ_M_N_S, VQRDMLASHQ_M_N_S, VQDMULHQ_M_N_S, VQRDMULHQ_M_N_S. * config/arm/mve.md (mve_vhaddq_m_n_) (mve_vhsubq_m_n_, mve_vmlaq_m_n_) (mve_vmlasq_m_n_, mve_vqaddq_m_n_) (mve_vqdmlahq_m_n_s, mve_vqdmlashq_m_n_s) (mve_vqrdmlahq_m_n_s, mve_vqrdmlashq_m_n_s) (mve_vqsubq_m_n_, mve_vqdmulhq_m_n_s) (mve_vqrdmulhq_m_n_s): Merge into ... (@mve_q_m_n_): ... this. --- gcc/config/arm/iterators.md | 33 ++++++ gcc/config/arm/mve.md | 202 +++--------------------------------- 2 files changed, 46 insertions(+), 189 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 6dbc40f842c..60452cdefe3 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -384,6 +384,21 @@ (define_int_iterator MVE_INT_M_N_BINARY_LOGIC [ VORRQ_M_N_S VORRQ_M_N_U ]) +(define_int_iterator MVE_INT_SU_M_N_BINARY [ + VHADDQ_M_N_S VHADDQ_M_N_U + VHSUBQ_M_N_S VHSUBQ_M_N_U + VMLAQ_M_N_S VMLAQ_M_N_U + VMLASQ_M_N_S VMLASQ_M_N_U + VQDMLAHQ_M_N_S + VQDMLASHQ_M_N_S + VQRDMLAHQ_M_N_S + VQRDMLASHQ_M_N_S + VQADDQ_M_N_S VQADDQ_M_N_U + VQSUBQ_M_N_S VQSUBQ_M_N_U + VQDMULHQ_M_N_S + VQRDMULHQ_M_N_S + ]) + (define_int_iterator MVE_INT_N_BINARY [ VADDQ_N_S VADDQ_N_U VMULQ_N_S VMULQ_N_U @@ -450,12 +465,16 @@ (define_int_attr mve_insn [ (VBICQ_N_S "vbic") (VBICQ_N_U "vbic") (VCREATEQ_S "vcreate") (VCREATEQ_U "vcreate") (VCREATEQ_F "vcreate") (VEORQ_M_S "veor") (VEORQ_M_U "veor") (VEORQ_M_F "veor") + (VHADDQ_M_N_S "vhadd") (VHADDQ_M_N_U "vhadd") (VHADDQ_M_S "vhadd") (VHADDQ_M_U "vhadd") (VHADDQ_N_S "vhadd") (VHADDQ_N_U "vhadd") + (VHSUBQ_M_N_S "vhsub") (VHSUBQ_M_N_U "vhsub") (VHSUBQ_M_S "vhsub") (VHSUBQ_M_U "vhsub") (VHSUBQ_N_S "vhsub") (VHSUBQ_N_U "vhsub") (VMAXQ_M_S "vmax") (VMAXQ_M_U "vmax") (VMINQ_M_S "vmin") (VMINQ_M_U "vmin") + (VMLAQ_M_N_S "vmla") (VMLAQ_M_N_U "vmla") + (VMLASQ_M_N_S "vmlas") (VMLASQ_M_N_U "vmlas") (VMULHQ_M_S "vmulh") (VMULHQ_M_U "vmulh") (VMULQ_M_N_S "vmul") (VMULQ_M_N_U "vmul") (VMULQ_M_N_F "vmul") (VMULQ_M_S "vmul") (VMULQ_M_U "vmul") (VMULQ_M_F "vmul") @@ -463,22 +482,30 @@ (define_int_attr mve_insn [ (VORRQ_M_N_S "vorr") (VORRQ_M_N_U "vorr") (VORRQ_M_S "vorr") (VORRQ_M_U "vorr") (VORRQ_M_F "vorr") (VORRQ_N_S "vorr") (VORRQ_N_U "vorr") + (VQADDQ_M_N_S "vqadd") (VQADDQ_M_N_U "vqadd") (VQADDQ_M_S "vqadd") (VQADDQ_M_U "vqadd") (VQADDQ_N_S "vqadd") (VQADDQ_N_U "vqadd") (VQDMLADHQ_M_S "vqdmladh") (VQDMLADHXQ_M_S "vqdmladhx") + (VQDMLAHQ_M_N_S "vqdmlah") + (VQDMLASHQ_M_N_S "vqdmlash") (VQDMLSDHQ_M_S "vqdmlsdh") (VQDMLSDHXQ_M_S "vqdmlsdhx") + (VQDMULHQ_M_N_S "vqdmulh") (VQDMULHQ_M_S "vqdmulh") (VQDMULHQ_N_S "vqdmulh") (VQRDMLADHQ_M_S "vqrdmladh") (VQRDMLADHXQ_M_S "vqrdmladhx") + (VQRDMLAHQ_M_N_S "vqrdmlah") + (VQRDMLASHQ_M_N_S "vqrdmlash") (VQRDMLSDHQ_M_S "vqrdmlsdh") (VQRDMLSDHXQ_M_S "vqrdmlsdhx") + (VQRDMULHQ_M_N_S "vqrdmulh") (VQRDMULHQ_M_S "vqrdmulh") (VQRDMULHQ_N_S "vqrdmulh") (VQRSHLQ_M_S "vqrshl") (VQRSHLQ_M_U "vqrshl") (VQSHLQ_M_S "vqshl") (VQSHLQ_M_U "vqshl") + (VQSUBQ_M_N_S "vqsub") (VQSUBQ_M_N_U "vqsub") (VQSUBQ_M_S "vqsub") (VQSUBQ_M_U "vqsub") (VQSUBQ_N_S "vqsub") (VQSUBQ_N_U "vqsub") (VRHADDQ_M_S "vrhadd") (VRHADDQ_M_U "vrhadd") @@ -1636,6 +1663,12 @@ (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s") (VQRDMULHQ_M_S "s") (VQDMULHQ_N_S "s") (VQRDMULHQ_N_S "s") + (VQDMLAHQ_M_N_S "s") + (VQDMLASHQ_M_N_S "s") + (VQRDMLAHQ_M_N_S "s") + (VQRDMLASHQ_M_N_S "s") + (VQDMULHQ_M_N_S "s") + (VQRDMULHQ_M_N_S "s") ]) ;; Both kinds of return insn. diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 3377e03ee06..d14a04d5f82 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -4982,35 +4982,29 @@ (define_insn "mve_vcaddq_rot90_m_" ;; ;; [vhaddq_m_n_s, vhaddq_m_n_u]) -;; -(define_insn "mve_vhaddq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VHADDQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vhaddt.%# %q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; ;; [vhsubq_m_n_s, vhsubq_m_n_u]) +;; [vmlaq_m_n_s, vmlaq_m_n_u]) +;; [vmlasq_m_n_u, vmlasq_m_n_s]) +;; [vqaddq_m_n_u, vqaddq_m_n_s]) +;; [vqdmlahq_m_n_s]) +;; [vqdmlashq_m_n_s]) +;; [vqdmulhq_m_n_s]) +;; [vqrdmlahq_m_n_s]) +;; [vqrdmlashq_m_n_s]) +;; [vqrdmulhq_m_n_s]) +;; [vqsubq_m_n_u, vqsubq_m_n_s]) ;; -(define_insn "mve_vhsubq_m_n_" +(define_insn "@mve_q_m_n_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand: 3 "s_register_operand" "r") (match_operand: 4 "vpr_register_operand" "Up")] - VHSUBQ_M_N)) + MVE_INT_SU_M_N_BINARY)) ] "TARGET_HAVE_MVE" - "vpst\;vhsubt.%# %q0, %q2, %3" + "vpst\;t.%#\t%q0, %q2, %3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -5032,40 +5026,6 @@ (define_insn "mve_vmladavaq_p_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vmlaq_m_n_s, vmlaq_m_n_u]) -;; -(define_insn "mve_vmlaq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VMLAQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmlat.%# %q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmlasq_m_n_u, vmlasq_m_n_s]) -;; -(define_insn "mve_vmlasq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VMLASQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmlast.%# %q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vmullbq_int_m_u, vmullbq_int_m_s]) ;; @@ -5117,91 +5077,6 @@ (define_insn "mve_vornq_m_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqaddq_m_n_u, vqaddq_m_n_s]) -;; -(define_insn "mve_vqaddq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQADDQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqaddt.%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqdmlahq_m_n_s]) -;; -(define_insn "mve_vqdmlahq_m_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMLAHQ_M_N_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmlaht.s%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqdmlashq_m_n_s]) -;; -(define_insn "mve_vqdmlashq_m_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMLASHQ_M_N_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmlasht.s%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmlahq_m_n_s]) -;; -(define_insn "mve_vqrdmlahq_m_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMLAHQ_M_N_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmlaht.s%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmlashq_m_n_s]) -;; -(define_insn "mve_vqrdmlashq_m_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMLASHQ_M_N_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmlasht.s%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqshlq_m_n_s, vqshlq_m_n_u]) ;; @@ -5219,23 +5094,6 @@ (define_insn "mve_vqshlq_m_n_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqsubq_m_n_u, vqsubq_m_n_s]) -;; -(define_insn "mve_vqsubq_m_n_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQSUBQ_M_N)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqsubt.%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vrshrq_m_n_s, vrshrq_m_n_u]) ;; @@ -5389,40 +5247,6 @@ (define_insn "mve_vmlsdavaxq_p_s" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vqdmulhq_m_n_s]) -;; -(define_insn "mve_vqdmulhq_m_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQDMULHQ_M_N_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqdmulht.s%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vqrdmulhq_m_n_s]) -;; -(define_insn "mve_vqrdmulhq_m_n_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand: 3 "s_register_operand" "r") - (match_operand: 4 "vpr_register_operand" "Up")] - VQRDMULHQ_M_N_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqrdmulht.s%#\t%q0, %q2, %3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vmlaldavaq_p_u, vmlaldavaq_p_s]) ;; From patchwork Tue Apr 18 13:46:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67933 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 38AF739484A9 for ; Tue, 18 Apr 2023 13:52:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 38AF739484A9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681825963; bh=mOecWrJ0WM1HCOUIWjwVPGbVJ6IWC0/Dm3X6rnJrOi4=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=s6ymSYUiOOzhly5iP3Iisx+nQ4WV8f5ngPkOBOhZCsuk9Q5VdbHJwER4PjRFhRSf4 X1XiMet/mDcmWycJ05tElHcTJufmBHKaQx6U8mkpVQ0xUplBQUBQ+5ktwPplWfvboN 0fMcKAn3er8lgcHRBPucgjJzzsc8JzmhPfz8k3UI= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2071.outbound.protection.outlook.com [40.107.7.71]) by sourceware.org (Postfix) with ESMTPS id ECB85385700D for ; Tue, 18 Apr 2023 13:47:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ECB85385700D Received: from DU2PR04CA0058.eurprd04.prod.outlook.com (2603:10a6:10:234::33) by AS2PR08MB10324.eurprd08.prod.outlook.com (2603:10a6:20b:5e7::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:39 +0000 Received: from DBAEUR03FT032.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:234:cafe::20) by DU2PR04CA0058.outlook.office365.com (2603:10a6:10:234::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:39 +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 DBAEUR03FT032.mail.protection.outlook.com (100.127.142.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:39 +0000 Received: ("Tessian outbound 5bb4c51d5a1f:v136"); Tue, 18 Apr 2023 13:47:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: a4d1e908b5791b89 X-CR-MTA-TID: 64aa7808 Received: from acf87bf01fdf.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EB482879-A603-4387-BF27-FDABFF50A67D.1; Tue, 18 Apr 2023 13:47:32 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id acf87bf01fdf.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:47:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XXnpa9ikWnfQFIDdl9MynP2R8/W3TJiY4vXg4xMhOygW+O8W4iDQEMRJiUBgE9DiuODUjGTLanRFNWxPEkkuTTn2kQhiXwJEhlQ7ZS7PHqjPcFxdRIZ6Lbx8XM8HYI6L0/z+rFLylw2AahnAG0qf3St7OZN5f5baViT54sP9TFXhfu5w3vCnbwDssDWEuBAZUb4k1nms2DpR4YmNTSCx4dReMmPsbAffEh3XcBhAoxvsbvvvICeSCbece9DvYMdOF2KSjeX5w+mGHCSCrkWQ5Sx/1Zq1L0vQQ54yf7Z05nBJflWzlzmEuwqqPhjSxnA23qao0DFKtf10zKBnNH0LXw== 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=mOecWrJ0WM1HCOUIWjwVPGbVJ6IWC0/Dm3X6rnJrOi4=; b=g2jpJndmRdys0x9GIrq5p3heS8G7Gua20XtPmQwEZh2gGAXQFx5F4vCZkcpgJf+83O4yBKO6+VrM32wLPi53yKjQddtfL6c87pG7fdLo93yxNZoJCebRQvti/Y9y4Y1FboD6IwIiki087p9NN/lxKvjK1XIV1GwrvpihJ5jJo38seMr217tRGlI5iK4dmx9yXEpLd0UBEdPJxcMG1PxJyZxsS6WP3auZ/iPmLrRoDtAvaiZm6u3ZM6tkghpEZi9fVsve4nxlUMe/gn9J6iMrvsvCVJAQ3FmpTh4MI79EzIj5rCCz/CIveq/ZoYdmOkac5AKmVGF2TphEmXapQ9p4vg== 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 Received: from AM6PR0502CA0037.eurprd05.prod.outlook.com (2603:10a6:20b:56::14) by AM8PR08MB6481.eurprd08.prod.outlook.com (2603:10a6:20b:364::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:30 +0000 Received: from AM7EUR03FT053.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:56:cafe::9f) by AM6PR0502CA0037.outlook.office365.com (2603:10a6:20b:56::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.46 via Frontend Transport; Tue, 18 Apr 2023 13:47:30 +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 AM7EUR03FT053.mail.protection.outlook.com (100.127.140.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:47:30 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:29 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:29 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 21/22] arm: [MVE intrinsics] factorize several binary operations Date: Tue, 18 Apr 2023 15:46:07 +0200 Message-ID: <20230418134608.244751-22-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT053:EE_|AM8PR08MB6481:EE_|DBAEUR03FT032:EE_|AS2PR08MB10324:EE_ X-MS-Office365-Filtering-Correlation-Id: 2fc6fc77-727d-424a-16a2-08db401379d5 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: MHb7ifmtEDVtSXO0ogN4hkKY/Jb3UPXEF/q9Pm4M8MwVNf7oR7hdRnjDGmUo8c1QldPKZTrW4b2ZLChTS3ImxJlJScL4pG4trthIjuHsXq2b64xgjsb7XXkL0YdtcSa3Oe80rRnT3/u6z4QYBUUo2dvZnMujA/PW7JYc3BavaIvgJyHqu9KLaSpFcPeFCHFaSiS8Yu5NkL2B8JDMGGBqLOmUmNyjFYeWQQLBnVX22zvqq/duam78ajFmGwl2Ukqr/jjdSlSYFU8Y+UiL5ZnFqAr1mI0Twabwh0NdKgZFBERltLG6DQizLFtUoKubpxCyotJCj0bNmEBYKBD1KwIwmCle4zIT6RCtHKCAB7B2o4wnArK9bc9GtEJZuwjW2LqLGb4l+JtbsZp7cu1fzT8AQQmw30egf1Usw+nnedhy7FVsKf34czoB/MV9qnaVYDKgfAObKovRpHqKic/2c0jkj9WjE8NS+X3yPaTWnjYlTWbWiR1VtzsdaXNRjnFPy9M+FIZGEfT5C8Tnm9PGXTgMdWwaFFSaTPGbAPxK+IdljnBlZpdaGK1+KOQoPq/X/QrD6QrWoLm3nkZheB3MFl18qHMcUV8woO6U76uU+0LIjiR7+msPu5eAu8Rjkwh05R+/z53aZX9aH4hxFx1bU+jnhAN4A3BGIov4hPwppeJa9eXN/Sk4LuE64vb+0OcyrmwGuSGGqSd3Ep9jRg6NYxileA== 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:(13230028)(4636009)(396003)(136003)(346002)(376002)(39860400002)(451199021)(36840700001)(46966006)(5660300002)(44832011)(86362001)(2616005)(426003)(336012)(82310400005)(6636002)(47076005)(83380400001)(186003)(1076003)(81166007)(356005)(82740400003)(26005)(40480700001)(36860700001)(8676002)(8936002)(478600001)(110136005)(6666004)(7696005)(316002)(41300700001)(36756003)(4326008)(70586007)(70206006)(2906002)(30864003)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6481 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT032.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 031abd2d-681a-4295-30d5-08db40137458 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4diVQOLx+SCwQcT2yJ7eZp/+FugOQD3+i+q7eXMtS15+LMoJEtiAE1aHUoLJM0n53LeQIrUa4cJnSSG6E3fv+OjdfmlEh4V2ffRemUYSqaS5n3uOs54W1fHz6DQIQ5f3cO8s5K8+6j9owKhc2c675+eo9GS2s1joBKuSfB++u3H07gMnPUk3nqmOfB9Xc/es37uwwqJ4tDArbaIkZHLVeCWxm0UWd0ggpHhuzbEkjuMcWiQZYU0Y8/NBJV7vaYWn4Aq6qUZpo0rAvWUzkcZmSiC1+juhINxYXYKPJcuRih7YvnS3eeW98DDcYVIN/t++VkaANa0mRs52FeSGJ/LB9lRanE1kmm5kPrkVKNbIUJw3XTyw5tNtrqg1GimJ2gYa81WM2um9DGapVKV2GRnrqamixC339oCQodjnf5S2D756UJDou7jNm0EEqBrH5zadYjcwSVw0bUGkjcKsqFjqeCDxhnz6BkZb54Tna2zlWWoTOW73qyz3fRzaT5EX0hv8ci8Fhj9ryekhA3DW1voPfzsvznfdvS+uVTv/ceFPo570POUZa/H/5noFgh/MRq7TtFVHS6/vgVeQSBkQKFXirM72hxtzryh6fVyoe00O6YvsaCceJou5Tqioe7YvHZC/8vpTGxanqug9OLCtg13ha46JNln7n+LyibgFFsBypcP3wX4imUpFV7xntxBA0SQb7GrIy7Go+yaZnQ1mmrPTkg== 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:(13230028)(4636009)(136003)(396003)(346002)(39850400004)(376002)(451199021)(36840700001)(40470700004)(46966006)(40480700001)(336012)(83380400001)(426003)(2616005)(47076005)(36860700001)(186003)(40460700003)(1076003)(26005)(82740400003)(316002)(4326008)(41300700001)(70586007)(70206006)(2906002)(30864003)(44832011)(81166007)(86362001)(110136005)(6636002)(82310400005)(478600001)(36756003)(7696005)(8676002)(8936002)(5660300002)(6666004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:47:39.5465 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2fc6fc77-727d-424a-16a2-08db401379d5 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: DBAEUR03FT032.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB10324 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Factorize vabdq, vhaddq, vhsubq, vmulhq, vqaddq_u, vqdmulhq, vqrdmulhq, vqrshlq, vqshlq, vqsubq_u, vrhaddq, vrmulhq, vrshlq so that they use the same pattern. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_INT_SU_BINARY): New. (mve_insn): Add vabdq, vhaddq, vhsubq, vmulhq, vqaddq, vqdmulhq, vqrdmulhq, vqrshlq, vqshlq, vqsubq, vrhaddq, vrmulhq, vrshlq. (supf): Add VQDMULHQ_S, VQRDMULHQ_S. * config/arm/mve.md (mve_vabdq_) (@mve_vhaddq_, mve_vhsubq_) (mve_vmulhq_, mve_vqaddq_) (mve_vqdmulhq_s, mve_vqrdmulhq_s) (mve_vqrshlq_, mve_vqshlq_) (mve_vqsubq_, @mve_vrhaddq_) (mve_vrmulhq_, mve_vrshlq_): Merge into ... (@mve_q_): ... this. * config/arm/vec-common.md (avg3_floor, uavg3_floor) (avg3_ceil, uavg3_ceil): Use gen_mve_q instead of gen_mve_vhaddq / gen_mve_vrhaddq. --- gcc/config/arm/iterators.md | 31 ++++++ gcc/config/arm/mve.md | 198 +++-------------------------------- gcc/config/arm/vec-common.md | 8 +- 3 files changed, 50 insertions(+), 187 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 60452cdefe3..068ae25e578 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -414,6 +414,22 @@ (define_int_iterator MVE_INT_SU_N_BINARY [ VQSUBQ_N_S VQSUBQ_N_U ]) +(define_int_iterator MVE_INT_SU_BINARY [ + VABDQ_S VABDQ_U + VHADDQ_S VHADDQ_U + VHSUBQ_S VHSUBQ_U + VMULHQ_S VMULHQ_U + VQADDQ_S VQADDQ_U + VQDMULHQ_S + VQRDMULHQ_S + VQRSHLQ_S VQRSHLQ_U + VQSHLQ_S VQSHLQ_U + VQSUBQ_S VQSUBQ_U + VRHADDQ_S VRHADDQ_U + VRMULHQ_S VRMULHQ_U + VRSHLQ_S VRSHLQ_U + ]) + (define_int_iterator MVE_INT_N_BINARY_LOGIC [ VBICQ_N_S VBICQ_N_U VORRQ_N_S VORRQ_N_U @@ -456,6 +472,7 @@ (define_code_attr mve_addsubmul [ (define_int_attr mve_insn [ (VABDQ_M_S "vabd") (VABDQ_M_U "vabd") + (VABDQ_S "vabd") (VABDQ_U "vabd") (VADDQ_M_N_S "vadd") (VADDQ_M_N_U "vadd") (VADDQ_M_N_F "vadd") (VADDQ_M_S "vadd") (VADDQ_M_U "vadd") (VADDQ_M_F "vadd") (VADDQ_N_S "vadd") (VADDQ_N_U "vadd") (VADDQ_N_F "vadd") @@ -468,14 +485,17 @@ (define_int_attr mve_insn [ (VHADDQ_M_N_S "vhadd") (VHADDQ_M_N_U "vhadd") (VHADDQ_M_S "vhadd") (VHADDQ_M_U "vhadd") (VHADDQ_N_S "vhadd") (VHADDQ_N_U "vhadd") + (VHADDQ_S "vhadd") (VHADDQ_U "vhadd") (VHSUBQ_M_N_S "vhsub") (VHSUBQ_M_N_U "vhsub") (VHSUBQ_M_S "vhsub") (VHSUBQ_M_U "vhsub") (VHSUBQ_N_S "vhsub") (VHSUBQ_N_U "vhsub") + (VHSUBQ_S "vhsub") (VHSUBQ_U "vhsub") (VMAXQ_M_S "vmax") (VMAXQ_M_U "vmax") (VMINQ_M_S "vmin") (VMINQ_M_U "vmin") (VMLAQ_M_N_S "vmla") (VMLAQ_M_N_U "vmla") (VMLASQ_M_N_S "vmlas") (VMLASQ_M_N_U "vmlas") (VMULHQ_M_S "vmulh") (VMULHQ_M_U "vmulh") + (VMULHQ_S "vmulh") (VMULHQ_U "vmulh") (VMULQ_M_N_S "vmul") (VMULQ_M_N_U "vmul") (VMULQ_M_N_F "vmul") (VMULQ_M_S "vmul") (VMULQ_M_U "vmul") (VMULQ_M_F "vmul") (VMULQ_N_S "vmul") (VMULQ_N_U "vmul") (VMULQ_N_F "vmul") @@ -485,6 +505,7 @@ (define_int_attr mve_insn [ (VQADDQ_M_N_S "vqadd") (VQADDQ_M_N_U "vqadd") (VQADDQ_M_S "vqadd") (VQADDQ_M_U "vqadd") (VQADDQ_N_S "vqadd") (VQADDQ_N_U "vqadd") + (VQADDQ_S "vqadd") (VQADDQ_U "vqadd") (VQDMLADHQ_M_S "vqdmladh") (VQDMLADHXQ_M_S "vqdmladhx") (VQDMLAHQ_M_N_S "vqdmlah") @@ -494,6 +515,7 @@ (define_int_attr mve_insn [ (VQDMULHQ_M_N_S "vqdmulh") (VQDMULHQ_M_S "vqdmulh") (VQDMULHQ_N_S "vqdmulh") + (VQDMULHQ_S "vqdmulh") (VQRDMLADHQ_M_S "vqrdmladh") (VQRDMLADHXQ_M_S "vqrdmladhx") (VQRDMLAHQ_M_N_S "vqrdmlah") @@ -503,14 +525,21 @@ (define_int_attr mve_insn [ (VQRDMULHQ_M_N_S "vqrdmulh") (VQRDMULHQ_M_S "vqrdmulh") (VQRDMULHQ_N_S "vqrdmulh") + (VQRDMULHQ_S "vqrdmulh") (VQRSHLQ_M_S "vqrshl") (VQRSHLQ_M_U "vqrshl") + (VQRSHLQ_S "vqrshl") (VQRSHLQ_U "vqrshl") (VQSHLQ_M_S "vqshl") (VQSHLQ_M_U "vqshl") + (VQSHLQ_S "vqshl") (VQSHLQ_U "vqshl") (VQSUBQ_M_N_S "vqsub") (VQSUBQ_M_N_U "vqsub") (VQSUBQ_M_S "vqsub") (VQSUBQ_M_U "vqsub") (VQSUBQ_N_S "vqsub") (VQSUBQ_N_U "vqsub") + (VQSUBQ_S "vqsub") (VQSUBQ_U "vqsub") (VRHADDQ_M_S "vrhadd") (VRHADDQ_M_U "vrhadd") + (VRHADDQ_S "vrhadd") (VRHADDQ_U "vrhadd") (VRMULHQ_M_S "vrmulh") (VRMULHQ_M_U "vrmulh") + (VRMULHQ_S "vrmulh") (VRMULHQ_U "vrmulh") (VRSHLQ_M_S "vrshl") (VRSHLQ_M_U "vrshl") + (VRSHLQ_S "vrshl") (VRSHLQ_U "vrshl") (VSHLQ_M_S "vshl") (VSHLQ_M_U "vshl") (VSUBQ_M_N_S "vsub") (VSUBQ_M_N_U "vsub") (VSUBQ_M_N_F "vsub") (VSUBQ_M_S "vsub") (VSUBQ_M_U "vsub") (VSUBQ_M_F "vsub") @@ -1669,6 +1698,8 @@ (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s") (VQRDMLASHQ_M_N_S "s") (VQDMULHQ_M_N_S "s") (VQRDMULHQ_M_N_S "s") + (VQDMULHQ_S "s") + (VQRDMULHQ_S "s") ]) ;; Both kinds of return insn. diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index d14a04d5f82..b9126af2aa9 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -841,16 +841,28 @@ (define_insn "mve_vcmpq_n_" ;; ;; [vabdq_s, vabdq_u]) +;; [vhaddq_s, vhaddq_u]) +;; [vhsubq_s, vhsubq_u]) +;; [vmulhq_s, vmulhq_u]) +;; [vqaddq_u, vqaddq_s]) +;; [vqdmulhq_s]) +;; [vqrdmulhq_s]) +;; [vqrshlq_s, vqrshlq_u]) +;; [vqshlq_s, vqshlq_u]) +;; [vqsubq_u, vqsubq_s]) +;; [vrhaddq_s, vrhaddq_u]) +;; [vrmulhq_s, vrmulhq_u]) +;; [vrshlq_s, vrshlq_u]) ;; -(define_insn "mve_vabdq_" +(define_insn "@mve_q_" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") (match_operand:MVE_2 2 "s_register_operand" "w")] - VABDQ)) + MVE_INT_SU_BINARY)) ] "TARGET_HAVE_MVE" - "vabd.%# %q0, %q1, %q2" + ".%#\t%q0, %q1, %q2" [(set_attr "type" "mve_move") ]) @@ -1033,21 +1045,6 @@ (define_insn "@mve_q_n_" [(set_attr "type" "mve_move") ]) -;; -;; [vhaddq_s, vhaddq_u]) -;; -(define_insn "@mve_vhaddq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VHADDQ)) - ] - "TARGET_HAVE_MVE" - "vhadd.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vhcaddq_rot270_s]) ;; @@ -1078,21 +1075,6 @@ (define_insn "mve_vhcaddq_rot90_s" [(set_attr "type" "mve_move") ]) -;; -;; [vhsubq_s, vhsubq_u]) -;; -(define_insn "mve_vhsubq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VHSUBQ)) - ] - "TARGET_HAVE_MVE" - "vhsub.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vmaxaq_s]) ;; @@ -1293,21 +1275,6 @@ (define_insn "mve_vmlsdavxq_s" [(set_attr "type" "mve_move") ]) -;; -;; [vmulhq_s, vmulhq_u]) -;; -(define_insn "mve_vmulhq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VMULHQ)) - ] - "TARGET_HAVE_MVE" - "vmulh.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vmullbq_int_u, vmullbq_int_s]) ;; @@ -1405,51 +1372,6 @@ (define_expand "mve_vorrq_u" "TARGET_HAVE_MVE" ) -;; -;; [vqaddq_u, vqaddq_s]) -;; -(define_insn "mve_vqaddq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VQADDQ)) - ] - "TARGET_HAVE_MVE" - "vqadd.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vqdmulhq_s]) -;; -(define_insn "mve_vqdmulhq_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VQDMULHQ_S)) - ] - "TARGET_HAVE_MVE" - "vqdmulh.s%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vqrdmulhq_s]) -;; -(define_insn "mve_vqrdmulhq_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VQRDMULHQ_S)) - ] - "TARGET_HAVE_MVE" - "vqrdmulh.s%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqrshlq_n_s, vqrshlq_n_u]) ;; @@ -1465,21 +1387,6 @@ (define_insn "mve_vqrshlq_n_" [(set_attr "type" "mve_move") ]) -;; -;; [vqrshlq_s, vqrshlq_u]) -;; -(define_insn "mve_vqrshlq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VQRSHLQ)) - ] - "TARGET_HAVE_MVE" - "vqrshl.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqshlq_n_s, vqshlq_n_u]) ;; @@ -1510,21 +1417,6 @@ (define_insn "mve_vqshlq_r_" [(set_attr "type" "mve_move") ]) -;; -;; [vqshlq_s, vqshlq_u]) -;; -(define_insn "mve_vqshlq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VQSHLQ)) - ] - "TARGET_HAVE_MVE" - "vqshl.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vqshluq_n_s]) ;; @@ -1540,51 +1432,6 @@ (define_insn "mve_vqshluq_n_s" [(set_attr "type" "mve_move") ]) -;; -;; [vqsubq_u, vqsubq_s]) -;; -(define_insn "mve_vqsubq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VQSUBQ)) - ] - "TARGET_HAVE_MVE" - "vqsub.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrhaddq_s, vrhaddq_u]) -;; -(define_insn "@mve_vrhaddq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VRHADDQ)) - ] - "TARGET_HAVE_MVE" - "vrhadd.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrmulhq_s, vrmulhq_u]) -;; -(define_insn "mve_vrmulhq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VRMULHQ)) - ] - "TARGET_HAVE_MVE" - "vrmulh.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vrshlq_n_u, vrshlq_n_s]) ;; @@ -1600,21 +1447,6 @@ (define_insn "mve_vrshlq_n_" [(set_attr "type" "mve_move") ]) -;; -;; [vrshlq_s, vrshlq_u]) -;; -(define_insn "mve_vrshlq_" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VRSHLQ)) - ] - "TARGET_HAVE_MVE" - "vrshl.%#\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - ;; ;; [vrshrq_n_s, vrshrq_n_u]) ;; diff --git a/gcc/config/arm/vec-common.md b/gcc/config/arm/vec-common.md index f06df4db636..918338ca5c0 100644 --- a/gcc/config/arm/vec-common.md +++ b/gcc/config/arm/vec-common.md @@ -573,7 +573,7 @@ (define_expand "avg3_floor" "ARM_HAVE__ARITH" { if (TARGET_HAVE_MVE) - emit_insn (gen_mve_vhaddq (VHADDQ_S, mode, + emit_insn (gen_mve_q (VHADDQ_S, VHADDQ_S, mode, operands[0], operands[1], operands[2])); else emit_insn (gen_neon_vhadd (UNSPEC_VHADD_S, UNSPEC_VHADD_S, mode, @@ -588,7 +588,7 @@ (define_expand "uavg3_floor" "ARM_HAVE__ARITH" { if (TARGET_HAVE_MVE) - emit_insn (gen_mve_vhaddq (VHADDQ_U, mode, + emit_insn (gen_mve_q (VHADDQ_U, VHADDQ_U, mode, operands[0], operands[1], operands[2])); else emit_insn (gen_neon_vhadd (UNSPEC_VHADD_U, UNSPEC_VHADD_U, mode, @@ -603,7 +603,7 @@ (define_expand "avg3_ceil" "ARM_HAVE__ARITH" { if (TARGET_HAVE_MVE) - emit_insn (gen_mve_vrhaddq (VRHADDQ_S, mode, + emit_insn (gen_mve_q (VRHADDQ_S, VRHADDQ_S, mode, operands[0], operands[1], operands[2])); else emit_insn (gen_neon_vhadd (UNSPEC_VRHADD_S, UNSPEC_VRHADD_S, mode, @@ -618,7 +618,7 @@ (define_expand "uavg3_ceil" "ARM_HAVE__ARITH" { if (TARGET_HAVE_MVE) - emit_insn (gen_mve_vrhaddq (VRHADDQ_U, mode, + emit_insn (gen_mve_q (VRHADDQ_U, VRHADDQ_U, mode, operands[0], operands[1], operands[2])); else emit_insn (gen_neon_vhadd (UNSPEC_VRHADD_U, UNSPEC_VRHADD_U, mode, From patchwork Tue Apr 18 13:46:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 67937 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C6E7B38708D7 for ; Tue, 18 Apr 2023 13:54:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C6E7B38708D7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681826058; bh=PSVknA/X4o/8+PhLnO+27bgR7RcHgmFUeCjb59OIBNU=; h=To:CC:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=gla4DkO0TTAodWp3HGjgs2qqTb41T9VkkHiSzkuRg8uPXzFhxDTpCu9kHwznTaSly fNS2l8iQJgw1ZmbpYIMSs1ghcJ2Q41a6KmP1ks2i9EHyzUS19EcS3G6RfzX274Suqu 8bJCQwTlNxTg32dLvY0zd2NrT/TksVZ6RMNh4vYc= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2057.outbound.protection.outlook.com [40.107.21.57]) by sourceware.org (Postfix) with ESMTPS id 51981385354E for ; Tue, 18 Apr 2023 13:48:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 51981385354E Received: from AM6P192CA0107.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:8d::48) by AS4PR08MB8024.eurprd08.prod.outlook.com (2603:10a6:20b:587::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:48:14 +0000 Received: from AM7EUR03FT057.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8d:cafe::2f) by AM6P192CA0107.outlook.office365.com (2603:10a6:209:8d::48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:48:13 +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 AM7EUR03FT057.mail.protection.outlook.com (100.127.140.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 13:48:13 +0000 Received: ("Tessian outbound 8b05220b4215:v136"); Tue, 18 Apr 2023 13:48:13 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 36c643f519c3a37e X-CR-MTA-TID: 64aa7808 Received: from ef5ccc1fbc49.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id BF30F27D-6E1E-4B26-8225-D8F563E519B8.1; Tue, 18 Apr 2023 13:48:02 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ef5ccc1fbc49.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Apr 2023 13:48:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XSkE70L4MgAM+OvrHOnCrL40RZMEg7ip4kbNE37ZeomKlqCQtHqV2hCRAc9CnQ55XLuT1PNvXAE37vjHBb+ZA3/b3dTSPDC71rpnasYwyMVJNsjlgHxdXdAbnatOaRoPqTw4fmBtR72OVfDOY8oifkd0r3/hGYrYUYHMnOgBO0y4zz7rMrT2/rFGQUEEJpVN6sJGkn1tXhgc08PGtviPUJfS2hSTjcMq4/JxkpwFkzQ3NG4VQrCOOlM4jkzNeQtWCVmahw+qtPUSp6u7gn//55vI4d7RnMUSeOnsaftba2mY2Bk2RWHJf7tublr7PdzBScpgWOWvWZ3GM2l0X5jUBg== 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=PSVknA/X4o/8+PhLnO+27bgR7RcHgmFUeCjb59OIBNU=; b=ZFb3eld2thK7kSFP5MRXJdNe7JQcCs5D22eOW8eqKy6Ginw2ni7/DX28zTpblMgVwjI1BS34PaQLS1B/syi8fITwsa6yxVGFeeNvfc3QPFFxY0ZmEah0E77iz6nJpLcMELY9XLaQacWV4e/HRmaulP3dqv93LfPRevsKkqjmy/hW4Satcm73inqrfQHg08uBUMY0TwKUcZ3x4mKNARoujjhpGSj290/B+lnDoBmCc82e6zpJ2Zn/biwUUN+biG5NkhwSpDUih77NvP5uhQl2ildSlaSr2x72w17dMqkzpjS1vyZ61djkBT6EWdXENOtcb63ijmvKlaZ84EA++2nubQ== 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 Received: from AS9PR06CA0241.eurprd06.prod.outlook.com (2603:10a6:20b:45f::20) by GV1PR08MB7684.eurprd08.prod.outlook.com (2603:10a6:150:63::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 13:47:33 +0000 Received: from AM7EUR03FT003.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:45f:cafe::24) by AS9PR06CA0241.outlook.office365.com (2603:10a6:20b:45f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 13:47:33 +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 AM7EUR03FT003.mail.protection.outlook.com (100.127.140.227) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.21 via Frontend Transport; Tue, 18 Apr 2023 13:47:33 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) 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.23; Tue, 18 Apr 2023 13:47:32 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 18 Apr 2023 13:47:31 +0000 Received: from e129018.arm.com (10.57.54.117) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 18 Apr 2023 13:47:30 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 22/22] arm: [MVE intrinsics] rework vhaddq vhsubq vmulhq vqaddq vqsubq vqdmulhq vrhaddq vrmulhq Date: Tue, 18 Apr 2023 15:46:08 +0200 Message-ID: <20230418134608.244751-23-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230418134608.244751-1-christophe.lyon@arm.com> References: <20230418134608.244751-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT003:EE_|GV1PR08MB7684:EE_|AM7EUR03FT057:EE_|AS4PR08MB8024:EE_ X-MS-Office365-Filtering-Correlation-Id: e1575835-fdbf-4d33-689c-08db40138e55 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: Lh4lmXN8aY5jLJEbUkqkoRjeD9zT7Ezh4ah9923m+7+MELjIjVX14AOgsiqN7Y8fo0lTK/cADGB1ML3P6nTeaZp1vGsFg4pb2QVWMoiVnWBJVQzvRmAG+vF89W2VlRnpt9rZSxpaCQ/hcDFDiAM1k+BtAE3/eYww+8+z/vA0Zp+1p/T4G2YdOK+uiQobZisv0UEFRUFt4Ggu0zmnB3w7d7pqKQF4F0l1bz2CmO0NtGMACbwIETxqAK3J05RB11ZFMuLNvwWAS0H24aRGG3mHB7exouYUBk/8uhpKCA9/Sh4zzaVlVSTVJ8spPz3MGDeD7EvMM24E3wt6HFiX2H/tFdRUM2av1KA3/vKGikbcxYp2idgfP3j8kMmlqlWK2fRUfQj03OsDCjb2Y+IIcDGg8MnSGyx2pvd/d7paolaKCKDg6oiNrgKV8mIHCtXja8o5J9SWR3STq1mKihs00UrOpxd70TxcZ36msJfq/Nhso8ixu/KJcceKf7fH1i9bYy45lgtjt+AqywpdL5e1n2capKonlC5cCriZo8RY8oZxOumTzC2gXyzci/nJil8EF4nCakP0Zk34Ugan+/Z5U4iHDRVzAb2ULD4CUGD3M4iFMoz2kDnAy2c8ncZ3jzdEObPLfGbSqnx4JdS+hxavbsPUFHUtizFYeu9969swbGXKBOYr/whEYFHwYMe1098L9HtGy080dKHroz5HFBFgp15TrA== 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:(13230028)(4636009)(376002)(396003)(136003)(39860400002)(346002)(451199021)(46966006)(36840700001)(36756003)(6636002)(4326008)(110136005)(316002)(70586007)(70206006)(7696005)(478600001)(6666004)(41300700001)(5660300002)(82310400005)(8676002)(8936002)(40480700001)(30864003)(2906002)(44832011)(82740400003)(86362001)(81166007)(356005)(426003)(2616005)(336012)(1076003)(26005)(186003)(36860700001)(47076005)(83380400001)(36900700001)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB7684 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT057.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: dec2a6c7-56f3-46a8-4178-08db40137606 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JdGvgauHpc2X5BW6cf75u7PSy3O5q3t7Vibof/0l7SdyAmuXkybj7Y2R9fplPyGGdF8z6GdOHq0dVY3d3Si2zPwVMjhEUKTcK9gZKOTKnE6hOTjGVcu5qMf8JEvbAALgAXkLDQdzC/1DC8E+DJtcOX4QXnwQTqEJqX5VTQ3l4KLn8fqMarzvhj8Zufez0Y5MWU5t7lDurLS0zUG1JzaYPQECIZ6Wc2RmW0mz3VrQqaErIYhQ8tKxTXTgvDJMYmPS/de5DNNjhSKlVuu0Jg3AuWeqjO1IFstNlmWdiv/OXFZb/69Lbq1OBZk5MIrGbO6hhpeyArrNFistp09MzrQO+rl9INOBhjv8nenddRMSMF472OLbdEkLjAKN5W3yZYw79hURdDBsXQ6oMPTzLo6gI1onzuHw92lPXwKB/x2EOGttPOss5Vwhv+AOLdxITkF2FH/W72u/185f0uRT4eXpx07pVtn3lLtkjCsD7TcyASq3qiX0AawUhycxMCnW9WODK4smHHSWhBwuNTCKD10xs3bhOWbP4vyJ3dMBpMH+FvRiVHV0lchgbnvNja8HvAXMOUdLXSW8c1bOQVrCPgWeA15Jedvp/AFRwgH1+Xek9oVRgE52O/QoA12IeeLXSTodROVrPKJznnvIe88NmdggU4O6JIvCNcDvWrjb7Sfctrt1wvZ4CKstOfVD0Fu3XB1ZuBEqz3HG4jKiS1x1/qoSiw== 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:(13230028)(4636009)(396003)(39860400002)(346002)(136003)(376002)(451199021)(46966006)(40470700004)(36840700001)(47076005)(30864003)(36860700001)(2906002)(86362001)(83380400001)(2616005)(36756003)(186003)(5660300002)(82310400005)(426003)(336012)(1076003)(26005)(8676002)(8936002)(41300700001)(82740400003)(6666004)(40460700003)(316002)(81166007)(7696005)(40480700001)(44832011)(70206006)(70586007)(110136005)(4326008)(6636002)(478600001)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 13:48:13.8794 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e1575835-fdbf-4d33-689c-08db40138e55 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: AM7EUR03FT057.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB8024 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christophe Lyon via Gcc-patches From: Christophe Lyon Reply-To: Christophe Lyon Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Implement vhaddq, vhsubq, vmulhq, vqaddq, vqsubq, vqdmulhq, vrhaddq, vrmulhq using the new MVE builtins framework. 2022-09-08 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-base.cc (FUNCTION_WITH_M_N_NO_F) (FUNCTION_WITHOUT_N_NO_F, FUNCTION_WITH_M_N_NO_U_F): New. (vhaddq, vhsubq, vmulhq, vqaddq, vqsubq, vqdmulhq, vrhaddq) (vrmulhq): New. * config/arm/arm-mve-builtins-base.def (vhaddq, vhsubq, vmulhq) (vqaddq, vqsubq, vqdmulhq, vrhaddq, vrmulhq): New. * config/arm/arm-mve-builtins-base.h (vhaddq, vhsubq, vmulhq) (vqaddq, vqsubq, vqdmulhq, vrhaddq, vrmulhq): New. * config/arm/arm_mve.h (vhsubq): Remove. (vhaddq): Remove. (vhaddq_m): Remove. (vhsubq_m): Remove. (vhaddq_x): Remove. (vhsubq_x): Remove. (vhsubq_u8): Remove. (vhsubq_n_u8): Remove. (vhaddq_u8): Remove. (vhaddq_n_u8): Remove. (vhsubq_s8): Remove. (vhsubq_n_s8): Remove. (vhaddq_s8): Remove. (vhaddq_n_s8): Remove. (vhsubq_u16): Remove. (vhsubq_n_u16): Remove. (vhaddq_u16): Remove. (vhaddq_n_u16): Remove. (vhsubq_s16): Remove. (vhsubq_n_s16): Remove. (vhaddq_s16): Remove. (vhaddq_n_s16): Remove. (vhsubq_u32): Remove. (vhsubq_n_u32): Remove. (vhaddq_u32): Remove. (vhaddq_n_u32): Remove. (vhsubq_s32): Remove. (vhsubq_n_s32): Remove. (vhaddq_s32): Remove. (vhaddq_n_s32): Remove. (vhaddq_m_n_s8): Remove. (vhaddq_m_n_s32): Remove. (vhaddq_m_n_s16): Remove. (vhaddq_m_n_u8): Remove. (vhaddq_m_n_u32): Remove. (vhaddq_m_n_u16): Remove. (vhaddq_m_s8): Remove. (vhaddq_m_s32): Remove. (vhaddq_m_s16): Remove. (vhaddq_m_u8): Remove. (vhaddq_m_u32): Remove. (vhaddq_m_u16): Remove. (vhsubq_m_n_s8): Remove. (vhsubq_m_n_s32): Remove. (vhsubq_m_n_s16): Remove. (vhsubq_m_n_u8): Remove. (vhsubq_m_n_u32): Remove. (vhsubq_m_n_u16): Remove. (vhsubq_m_s8): Remove. (vhsubq_m_s32): Remove. (vhsubq_m_s16): Remove. (vhsubq_m_u8): Remove. (vhsubq_m_u32): Remove. (vhsubq_m_u16): Remove. (vhaddq_x_n_s8): Remove. (vhaddq_x_n_s16): Remove. (vhaddq_x_n_s32): Remove. (vhaddq_x_n_u8): Remove. (vhaddq_x_n_u16): Remove. (vhaddq_x_n_u32): Remove. (vhaddq_x_s8): Remove. (vhaddq_x_s16): Remove. (vhaddq_x_s32): Remove. (vhaddq_x_u8): Remove. (vhaddq_x_u16): Remove. (vhaddq_x_u32): Remove. (vhsubq_x_n_s8): Remove. (vhsubq_x_n_s16): Remove. (vhsubq_x_n_s32): Remove. (vhsubq_x_n_u8): Remove. (vhsubq_x_n_u16): Remove. (vhsubq_x_n_u32): Remove. (vhsubq_x_s8): Remove. (vhsubq_x_s16): Remove. (vhsubq_x_s32): Remove. (vhsubq_x_u8): Remove. (vhsubq_x_u16): Remove. (vhsubq_x_u32): Remove. (__arm_vhsubq_u8): Remove. (__arm_vhsubq_n_u8): Remove. (__arm_vhaddq_u8): Remove. (__arm_vhaddq_n_u8): Remove. (__arm_vhsubq_s8): Remove. (__arm_vhsubq_n_s8): Remove. (__arm_vhaddq_s8): Remove. (__arm_vhaddq_n_s8): Remove. (__arm_vhsubq_u16): Remove. (__arm_vhsubq_n_u16): Remove. (__arm_vhaddq_u16): Remove. (__arm_vhaddq_n_u16): Remove. (__arm_vhsubq_s16): Remove. (__arm_vhsubq_n_s16): Remove. (__arm_vhaddq_s16): Remove. (__arm_vhaddq_n_s16): Remove. (__arm_vhsubq_u32): Remove. (__arm_vhsubq_n_u32): Remove. (__arm_vhaddq_u32): Remove. (__arm_vhaddq_n_u32): Remove. (__arm_vhsubq_s32): Remove. (__arm_vhsubq_n_s32): Remove. (__arm_vhaddq_s32): Remove. (__arm_vhaddq_n_s32): Remove. (__arm_vhaddq_m_n_s8): Remove. (__arm_vhaddq_m_n_s32): Remove. (__arm_vhaddq_m_n_s16): Remove. (__arm_vhaddq_m_n_u8): Remove. (__arm_vhaddq_m_n_u32): Remove. (__arm_vhaddq_m_n_u16): Remove. (__arm_vhaddq_m_s8): Remove. (__arm_vhaddq_m_s32): Remove. (__arm_vhaddq_m_s16): Remove. (__arm_vhaddq_m_u8): Remove. (__arm_vhaddq_m_u32): Remove. (__arm_vhaddq_m_u16): Remove. (__arm_vhsubq_m_n_s8): Remove. (__arm_vhsubq_m_n_s32): Remove. (__arm_vhsubq_m_n_s16): Remove. (__arm_vhsubq_m_n_u8): Remove. (__arm_vhsubq_m_n_u32): Remove. (__arm_vhsubq_m_n_u16): Remove. (__arm_vhsubq_m_s8): Remove. (__arm_vhsubq_m_s32): Remove. (__arm_vhsubq_m_s16): Remove. (__arm_vhsubq_m_u8): Remove. (__arm_vhsubq_m_u32): Remove. (__arm_vhsubq_m_u16): Remove. (__arm_vhaddq_x_n_s8): Remove. (__arm_vhaddq_x_n_s16): Remove. (__arm_vhaddq_x_n_s32): Remove. (__arm_vhaddq_x_n_u8): Remove. (__arm_vhaddq_x_n_u16): Remove. (__arm_vhaddq_x_n_u32): Remove. (__arm_vhaddq_x_s8): Remove. (__arm_vhaddq_x_s16): Remove. (__arm_vhaddq_x_s32): Remove. (__arm_vhaddq_x_u8): Remove. (__arm_vhaddq_x_u16): Remove. (__arm_vhaddq_x_u32): Remove. (__arm_vhsubq_x_n_s8): Remove. (__arm_vhsubq_x_n_s16): Remove. (__arm_vhsubq_x_n_s32): Remove. (__arm_vhsubq_x_n_u8): Remove. (__arm_vhsubq_x_n_u16): Remove. (__arm_vhsubq_x_n_u32): Remove. (__arm_vhsubq_x_s8): Remove. (__arm_vhsubq_x_s16): Remove. (__arm_vhsubq_x_s32): Remove. (__arm_vhsubq_x_u8): Remove. (__arm_vhsubq_x_u16): Remove. (__arm_vhsubq_x_u32): Remove. (__arm_vhsubq): Remove. (__arm_vhaddq): Remove. (__arm_vhaddq_m): Remove. (__arm_vhsubq_m): Remove. (__arm_vhaddq_x): Remove. (__arm_vhsubq_x): Remove. (vmulhq): Remove. (vmulhq_m): Remove. (vmulhq_x): Remove. (vmulhq_u8): Remove. (vmulhq_s8): Remove. (vmulhq_u16): Remove. (vmulhq_s16): Remove. (vmulhq_u32): Remove. (vmulhq_s32): Remove. (vmulhq_m_s8): Remove. (vmulhq_m_s32): Remove. (vmulhq_m_s16): Remove. (vmulhq_m_u8): Remove. (vmulhq_m_u32): Remove. (vmulhq_m_u16): Remove. (vmulhq_x_s8): Remove. (vmulhq_x_s16): Remove. (vmulhq_x_s32): Remove. (vmulhq_x_u8): Remove. (vmulhq_x_u16): Remove. (vmulhq_x_u32): Remove. (__arm_vmulhq_u8): Remove. (__arm_vmulhq_s8): Remove. (__arm_vmulhq_u16): Remove. (__arm_vmulhq_s16): Remove. (__arm_vmulhq_u32): Remove. (__arm_vmulhq_s32): Remove. (__arm_vmulhq_m_s8): Remove. (__arm_vmulhq_m_s32): Remove. (__arm_vmulhq_m_s16): Remove. (__arm_vmulhq_m_u8): Remove. (__arm_vmulhq_m_u32): Remove. (__arm_vmulhq_m_u16): Remove. (__arm_vmulhq_x_s8): Remove. (__arm_vmulhq_x_s16): Remove. (__arm_vmulhq_x_s32): Remove. (__arm_vmulhq_x_u8): Remove. (__arm_vmulhq_x_u16): Remove. (__arm_vmulhq_x_u32): Remove. (__arm_vmulhq): Remove. (__arm_vmulhq_m): Remove. (__arm_vmulhq_x): Remove. (vqsubq): Remove. (vqaddq): Remove. (vqaddq_m): Remove. (vqsubq_m): Remove. (vqsubq_u8): Remove. (vqsubq_n_u8): Remove. (vqaddq_u8): Remove. (vqaddq_n_u8): Remove. (vqsubq_s8): Remove. (vqsubq_n_s8): Remove. (vqaddq_s8): Remove. (vqaddq_n_s8): Remove. (vqsubq_u16): Remove. (vqsubq_n_u16): Remove. (vqaddq_u16): Remove. (vqaddq_n_u16): Remove. (vqsubq_s16): Remove. (vqsubq_n_s16): Remove. (vqaddq_s16): Remove. (vqaddq_n_s16): Remove. (vqsubq_u32): Remove. (vqsubq_n_u32): Remove. (vqaddq_u32): Remove. (vqaddq_n_u32): Remove. (vqsubq_s32): Remove. (vqsubq_n_s32): Remove. (vqaddq_s32): Remove. (vqaddq_n_s32): Remove. (vqaddq_m_n_s8): Remove. (vqaddq_m_n_s32): Remove. (vqaddq_m_n_s16): Remove. (vqaddq_m_n_u8): Remove. (vqaddq_m_n_u32): Remove. (vqaddq_m_n_u16): Remove. (vqaddq_m_s8): Remove. (vqaddq_m_s32): Remove. (vqaddq_m_s16): Remove. (vqaddq_m_u8): Remove. (vqaddq_m_u32): Remove. (vqaddq_m_u16): Remove. (vqsubq_m_n_s8): Remove. (vqsubq_m_n_s32): Remove. (vqsubq_m_n_s16): Remove. (vqsubq_m_n_u8): Remove. (vqsubq_m_n_u32): Remove. (vqsubq_m_n_u16): Remove. (vqsubq_m_s8): Remove. (vqsubq_m_s32): Remove. (vqsubq_m_s16): Remove. (vqsubq_m_u8): Remove. (vqsubq_m_u32): Remove. (vqsubq_m_u16): Remove. (__arm_vqsubq_u8): Remove. (__arm_vqsubq_n_u8): Remove. (__arm_vqaddq_u8): Remove. (__arm_vqaddq_n_u8): Remove. (__arm_vqsubq_s8): Remove. (__arm_vqsubq_n_s8): Remove. (__arm_vqaddq_s8): Remove. (__arm_vqaddq_n_s8): Remove. (__arm_vqsubq_u16): Remove. (__arm_vqsubq_n_u16): Remove. (__arm_vqaddq_u16): Remove. (__arm_vqaddq_n_u16): Remove. (__arm_vqsubq_s16): Remove. (__arm_vqsubq_n_s16): Remove. (__arm_vqaddq_s16): Remove. (__arm_vqaddq_n_s16): Remove. (__arm_vqsubq_u32): Remove. (__arm_vqsubq_n_u32): Remove. (__arm_vqaddq_u32): Remove. (__arm_vqaddq_n_u32): Remove. (__arm_vqsubq_s32): Remove. (__arm_vqsubq_n_s32): Remove. (__arm_vqaddq_s32): Remove. (__arm_vqaddq_n_s32): Remove. (__arm_vqaddq_m_n_s8): Remove. (__arm_vqaddq_m_n_s32): Remove. (__arm_vqaddq_m_n_s16): Remove. (__arm_vqaddq_m_n_u8): Remove. (__arm_vqaddq_m_n_u32): Remove. (__arm_vqaddq_m_n_u16): Remove. (__arm_vqaddq_m_s8): Remove. (__arm_vqaddq_m_s32): Remove. (__arm_vqaddq_m_s16): Remove. (__arm_vqaddq_m_u8): Remove. (__arm_vqaddq_m_u32): Remove. (__arm_vqaddq_m_u16): Remove. (__arm_vqsubq_m_n_s8): Remove. (__arm_vqsubq_m_n_s32): Remove. (__arm_vqsubq_m_n_s16): Remove. (__arm_vqsubq_m_n_u8): Remove. (__arm_vqsubq_m_n_u32): Remove. (__arm_vqsubq_m_n_u16): Remove. (__arm_vqsubq_m_s8): Remove. (__arm_vqsubq_m_s32): Remove. (__arm_vqsubq_m_s16): Remove. (__arm_vqsubq_m_u8): Remove. (__arm_vqsubq_m_u32): Remove. (__arm_vqsubq_m_u16): Remove. (__arm_vqsubq): Remove. (__arm_vqaddq): Remove. (__arm_vqaddq_m): Remove. (__arm_vqsubq_m): Remove. (vqdmulhq): Remove. (vqdmulhq_m): Remove. (vqdmulhq_s8): Remove. (vqdmulhq_n_s8): Remove. (vqdmulhq_s16): Remove. (vqdmulhq_n_s16): Remove. (vqdmulhq_s32): Remove. (vqdmulhq_n_s32): Remove. (vqdmulhq_m_n_s8): Remove. (vqdmulhq_m_n_s32): Remove. (vqdmulhq_m_n_s16): Remove. (vqdmulhq_m_s8): Remove. (vqdmulhq_m_s32): Remove. (vqdmulhq_m_s16): Remove. (__arm_vqdmulhq_s8): Remove. (__arm_vqdmulhq_n_s8): Remove. (__arm_vqdmulhq_s16): Remove. (__arm_vqdmulhq_n_s16): Remove. (__arm_vqdmulhq_s32): Remove. (__arm_vqdmulhq_n_s32): Remove. (__arm_vqdmulhq_m_n_s8): Remove. (__arm_vqdmulhq_m_n_s32): Remove. (__arm_vqdmulhq_m_n_s16): Remove. (__arm_vqdmulhq_m_s8): Remove. (__arm_vqdmulhq_m_s32): Remove. (__arm_vqdmulhq_m_s16): Remove. (__arm_vqdmulhq): Remove. (__arm_vqdmulhq_m): Remove. (vrhaddq): Remove. (vrhaddq_m): Remove. (vrhaddq_x): Remove. (vrhaddq_u8): Remove. (vrhaddq_s8): Remove. (vrhaddq_u16): Remove. (vrhaddq_s16): Remove. (vrhaddq_u32): Remove. (vrhaddq_s32): Remove. (vrhaddq_m_s8): Remove. (vrhaddq_m_s32): Remove. (vrhaddq_m_s16): Remove. (vrhaddq_m_u8): Remove. (vrhaddq_m_u32): Remove. (vrhaddq_m_u16): Remove. (vrhaddq_x_s8): Remove. (vrhaddq_x_s16): Remove. (vrhaddq_x_s32): Remove. (vrhaddq_x_u8): Remove. (vrhaddq_x_u16): Remove. (vrhaddq_x_u32): Remove. (__arm_vrhaddq_u8): Remove. (__arm_vrhaddq_s8): Remove. (__arm_vrhaddq_u16): Remove. (__arm_vrhaddq_s16): Remove. (__arm_vrhaddq_u32): Remove. (__arm_vrhaddq_s32): Remove. (__arm_vrhaddq_m_s8): Remove. (__arm_vrhaddq_m_s32): Remove. (__arm_vrhaddq_m_s16): Remove. (__arm_vrhaddq_m_u8): Remove. (__arm_vrhaddq_m_u32): Remove. (__arm_vrhaddq_m_u16): Remove. (__arm_vrhaddq_x_s8): Remove. (__arm_vrhaddq_x_s16): Remove. (__arm_vrhaddq_x_s32): Remove. (__arm_vrhaddq_x_u8): Remove. (__arm_vrhaddq_x_u16): Remove. (__arm_vrhaddq_x_u32): Remove. (__arm_vrhaddq): Remove. (__arm_vrhaddq_m): Remove. (__arm_vrhaddq_x): Remove. (vrmulhq): Remove. (vrmulhq_m): Remove. (vrmulhq_x): Remove. (vrmulhq_u8): Remove. (vrmulhq_s8): Remove. (vrmulhq_u16): Remove. (vrmulhq_s16): Remove. (vrmulhq_u32): Remove. (vrmulhq_s32): Remove. (vrmulhq_m_s8): Remove. (vrmulhq_m_s32): Remove. (vrmulhq_m_s16): Remove. (vrmulhq_m_u8): Remove. (vrmulhq_m_u32): Remove. (vrmulhq_m_u16): Remove. (vrmulhq_x_s8): Remove. (vrmulhq_x_s16): Remove. (vrmulhq_x_s32): Remove. (vrmulhq_x_u8): Remove. (vrmulhq_x_u16): Remove. (vrmulhq_x_u32): Remove. (__arm_vrmulhq_u8): Remove. (__arm_vrmulhq_s8): Remove. (__arm_vrmulhq_u16): Remove. (__arm_vrmulhq_s16): Remove. (__arm_vrmulhq_u32): Remove. (__arm_vrmulhq_s32): Remove. (__arm_vrmulhq_m_s8): Remove. (__arm_vrmulhq_m_s32): Remove. (__arm_vrmulhq_m_s16): Remove. (__arm_vrmulhq_m_u8): Remove. (__arm_vrmulhq_m_u32): Remove. (__arm_vrmulhq_m_u16): Remove. (__arm_vrmulhq_x_s8): Remove. (__arm_vrmulhq_x_s16): Remove. (__arm_vrmulhq_x_s32): Remove. (__arm_vrmulhq_x_u8): Remove. (__arm_vrmulhq_x_u16): Remove. (__arm_vrmulhq_x_u32): Remove. (__arm_vrmulhq): Remove. (__arm_vrmulhq_m): Remove. (__arm_vrmulhq_x): Remove. --- gcc/config/arm/arm-mve-builtins-base.cc | 35 + gcc/config/arm/arm-mve-builtins-base.def | 8 + gcc/config/arm/arm-mve-builtins-base.h | 8 + gcc/config/arm/arm_mve.h | 3203 ---------------------- 4 files changed, 51 insertions(+), 3203 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-base.cc b/gcc/config/arm/arm-mve-builtins-base.cc index 9722c861faf..668f1fe9cda 100644 --- a/gcc/config/arm/arm-mve-builtins-base.cc +++ b/gcc/config/arm/arm-mve-builtins-base.cc @@ -115,13 +115,48 @@ namespace arm_mve { -1, -1, -1, \ -1, -1, -1)) + /* Helper for builtins with only unspec codes, _m predicated and _n + overrides, but no floating-point version. */ +#define FUNCTION_WITH_M_N_NO_F(NAME, UNSPEC) FUNCTION \ + (NAME, unspec_mve_function_exact_insn, \ + (UNSPEC##_S, UNSPEC##_U, -1, \ + UNSPEC##_N_S, UNSPEC##_N_U, -1, \ + UNSPEC##_M_S, UNSPEC##_M_U, -1, \ + UNSPEC##_M_N_S, UNSPEC##_M_N_U, -1)) + + /* Helper for builtins with only unspec codes, _m predicated + overrides, no _n and no floating-point version. */ +#define FUNCTION_WITHOUT_N_NO_F(NAME, UNSPEC) FUNCTION \ + (NAME, unspec_mve_function_exact_insn, \ + (UNSPEC##_S, UNSPEC##_U, -1, \ + -1, -1, -1, \ + UNSPEC##_M_S, UNSPEC##_M_U, -1, \ + -1, -1, -1)) + + /* Helper for builtins with only unspec codes, _m predicated and _n + overrides, but no unsigned and floating-point versions. */ +#define FUNCTION_WITH_M_N_NO_U_F(NAME, UNSPEC) FUNCTION \ + (NAME, unspec_mve_function_exact_insn, \ + (UNSPEC##_S, -1, -1, \ + UNSPEC##_N_S, -1, -1, \ + UNSPEC##_M_S, -1, -1, \ + UNSPEC##_M_N_S, -1, -1)) + FUNCTION_WITH_RTX_M_N (vaddq, PLUS, VADDQ) FUNCTION_WITH_RTX_M (vandq, AND, VANDQ) FUNCTION_WITHOUT_M_N (vcreateq, VCREATEQ) FUNCTION_WITH_RTX_M (veorq, XOR, VEORQ) +FUNCTION_WITH_M_N_NO_F (vhaddq, VHADDQ) +FUNCTION_WITH_M_N_NO_F (vhsubq, VHSUBQ) +FUNCTION_WITHOUT_N_NO_F (vmulhq, VMULHQ) FUNCTION_WITH_RTX_M_N (vmulq, MULT, VMULQ) FUNCTION_WITH_RTX_M_N_NO_N_F (vorrq, IOR, VORRQ) +FUNCTION_WITH_M_N_NO_F (vqaddq, VQADDQ) +FUNCTION_WITH_M_N_NO_U_F (vqdmulhq, VQDMULHQ) +FUNCTION_WITH_M_N_NO_F (vqsubq, VQSUBQ) FUNCTION (vreinterpretq, vreinterpretq_impl,) +FUNCTION_WITHOUT_N_NO_F (vrhaddq, VRHADDQ) +FUNCTION_WITHOUT_N_NO_F (vrmulhq, VRMULHQ) FUNCTION_WITH_RTX_M_N (vsubq, MINUS, VSUBQ) FUNCTION (vuninitializedq, vuninitializedq_impl,) diff --git a/gcc/config/arm/arm-mve-builtins-base.def b/gcc/config/arm/arm-mve-builtins-base.def index 1bfd15f973c..d256f3ebb2d 100644 --- a/gcc/config/arm/arm-mve-builtins-base.def +++ b/gcc/config/arm/arm-mve-builtins-base.def @@ -22,9 +22,17 @@ DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vandq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (vcreateq, create, all_integer_with_64, none) DEF_MVE_FUNCTION (veorq, binary, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vhaddq, binary_opt_n, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vhsubq, binary_opt_n, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vmulhq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vorrq, binary_orrq, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vqaddq, binary_opt_n, all_integer, m_or_none) +DEF_MVE_FUNCTION (vqdmulhq, binary_opt_n, all_signed, m_or_none) +DEF_MVE_FUNCTION (vqsubq, binary_opt_n, all_integer, m_or_none) DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none) +DEF_MVE_FUNCTION (vrhaddq, binary, all_integer, mx_or_none) +DEF_MVE_FUNCTION (vrmulhq, binary, all_integer, mx_or_none) DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_integer, mx_or_none) DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none) #undef REQUIRES_FLOAT diff --git a/gcc/config/arm/arm-mve-builtins-base.h b/gcc/config/arm/arm-mve-builtins-base.h index 8dd6bff01bf..d64cb5e1dec 100644 --- a/gcc/config/arm/arm-mve-builtins-base.h +++ b/gcc/config/arm/arm-mve-builtins-base.h @@ -27,9 +27,17 @@ extern const function_base *const vaddq; extern const function_base *const vandq; extern const function_base *const vcreateq; extern const function_base *const veorq; +extern const function_base *const vhaddq; +extern const function_base *const vhsubq; +extern const function_base *const vmulhq; extern const function_base *const vmulq; extern const function_base *const vorrq; +extern const function_base *const vqaddq; +extern const function_base *const vqdmulhq; +extern const function_base *const vqsubq; extern const function_base *const vreinterpretq; +extern const function_base *const vrhaddq; +extern const function_base *const vrmulhq; extern const function_base *const vsubq; extern const function_base *const vuninitializedq; diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 4810e2977d3..9c5d14794a1 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -61,21 +61,14 @@ #define vaddlvq_p(__a, __p) __arm_vaddlvq_p(__a, __p) #define vcmpneq(__a, __b) __arm_vcmpneq(__a, __b) #define vshlq(__a, __b) __arm_vshlq(__a, __b) -#define vrmulhq(__a, __b) __arm_vrmulhq(__a, __b) -#define vrhaddq(__a, __b) __arm_vrhaddq(__a, __b) -#define vqsubq(__a, __b) __arm_vqsubq(__a, __b) -#define vqaddq(__a, __b) __arm_vqaddq(__a, __b) #define vornq(__a, __b) __arm_vornq(__a, __b) #define vmulltq_int(__a, __b) __arm_vmulltq_int(__a, __b) #define vmullbq_int(__a, __b) __arm_vmullbq_int(__a, __b) -#define vmulhq(__a, __b) __arm_vmulhq(__a, __b) #define vmladavq(__a, __b) __arm_vmladavq(__a, __b) #define vminvq(__a, __b) __arm_vminvq(__a, __b) #define vminq(__a, __b) __arm_vminq(__a, __b) #define vmaxvq(__a, __b) __arm_vmaxvq(__a, __b) #define vmaxq(__a, __b) __arm_vmaxq(__a, __b) -#define vhsubq(__a, __b) __arm_vhsubq(__a, __b) -#define vhaddq(__a, __b) __arm_vhaddq(__a, __b) #define vcmphiq(__a, __b) __arm_vcmphiq(__a, __b) #define vcmpeqq(__a, __b) __arm_vcmpeqq(__a, __b) #define vcmpcsq(__a, __b) __arm_vcmpcsq(__a, __b) @@ -104,7 +97,6 @@ #define vcmpgeq(__a, __b) __arm_vcmpgeq(__a, __b) #define vqshluq(__a, __imm) __arm_vqshluq(__a, __imm) #define vqrdmulhq(__a, __b) __arm_vqrdmulhq(__a, __b) -#define vqdmulhq(__a, __b) __arm_vqdmulhq(__a, __b) #define vmlsdavxq(__a, __b) __arm_vmlsdavxq(__a, __b) #define vmlsdavq(__a, __b) __arm_vmlsdavq(__a, __b) #define vmladavxq(__a, __b) __arm_vmladavxq(__a, __b) @@ -236,10 +228,8 @@ #define vbrsrq_m(__inactive, __a, __b, __p) __arm_vbrsrq_m(__inactive, __a, __b, __p) #define vcaddq_rot270_m(__inactive, __a, __b, __p) __arm_vcaddq_rot270_m(__inactive, __a, __b, __p) #define vcaddq_rot90_m(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m(__inactive, __a, __b, __p) -#define vhaddq_m(__inactive, __a, __b, __p) __arm_vhaddq_m(__inactive, __a, __b, __p) #define vhcaddq_rot270_m(__inactive, __a, __b, __p) __arm_vhcaddq_rot270_m(__inactive, __a, __b, __p) #define vhcaddq_rot90_m(__inactive, __a, __b, __p) __arm_vhcaddq_rot90_m(__inactive, __a, __b, __p) -#define vhsubq_m(__inactive, __a, __b, __p) __arm_vhsubq_m(__inactive, __a, __b, __p) #define vmaxq_m(__inactive, __a, __b, __p) __arm_vmaxq_m(__inactive, __a, __b, __p) #define vminq_m(__inactive, __a, __b, __p) __arm_vminq_m(__inactive, __a, __b, __p) #define vmladavaq_p(__a, __b, __c, __p) __arm_vmladavaq_p(__a, __b, __c, __p) @@ -248,18 +238,15 @@ #define vmlasq_m(__a, __b, __c, __p) __arm_vmlasq_m(__a, __b, __c, __p) #define vmlsdavaq_p(__a, __b, __c, __p) __arm_vmlsdavaq_p(__a, __b, __c, __p) #define vmlsdavaxq_p(__a, __b, __c, __p) __arm_vmlsdavaxq_p(__a, __b, __c, __p) -#define vmulhq_m(__inactive, __a, __b, __p) __arm_vmulhq_m(__inactive, __a, __b, __p) #define vmullbq_int_m(__inactive, __a, __b, __p) __arm_vmullbq_int_m(__inactive, __a, __b, __p) #define vmulltq_int_m(__inactive, __a, __b, __p) __arm_vmulltq_int_m(__inactive, __a, __b, __p) #define vornq_m(__inactive, __a, __b, __p) __arm_vornq_m(__inactive, __a, __b, __p) -#define vqaddq_m(__inactive, __a, __b, __p) __arm_vqaddq_m(__inactive, __a, __b, __p) #define vqdmladhq_m(__inactive, __a, __b, __p) __arm_vqdmladhq_m(__inactive, __a, __b, __p) #define vqdmlashq_m(__a, __b, __c, __p) __arm_vqdmlashq_m(__a, __b, __c, __p) #define vqdmladhxq_m(__inactive, __a, __b, __p) __arm_vqdmladhxq_m(__inactive, __a, __b, __p) #define vqdmlahq_m(__a, __b, __c, __p) __arm_vqdmlahq_m(__a, __b, __c, __p) #define vqdmlsdhq_m(__inactive, __a, __b, __p) __arm_vqdmlsdhq_m(__inactive, __a, __b, __p) #define vqdmlsdhxq_m(__inactive, __a, __b, __p) __arm_vqdmlsdhxq_m(__inactive, __a, __b, __p) -#define vqdmulhq_m(__inactive, __a, __b, __p) __arm_vqdmulhq_m(__inactive, __a, __b, __p) #define vqrdmladhq_m(__inactive, __a, __b, __p) __arm_vqrdmladhq_m(__inactive, __a, __b, __p) #define vqrdmladhxq_m(__inactive, __a, __b, __p) __arm_vqrdmladhxq_m(__inactive, __a, __b, __p) #define vqrdmlahq_m(__a, __b, __c, __p) __arm_vqrdmlahq_m(__a, __b, __c, __p) @@ -270,9 +257,6 @@ #define vqrshlq_m(__inactive, __a, __b, __p) __arm_vqrshlq_m(__inactive, __a, __b, __p) #define vqshlq_m_n(__inactive, __a, __imm, __p) __arm_vqshlq_m_n(__inactive, __a, __imm, __p) #define vqshlq_m(__inactive, __a, __b, __p) __arm_vqshlq_m(__inactive, __a, __b, __p) -#define vqsubq_m(__inactive, __a, __b, __p) __arm_vqsubq_m(__inactive, __a, __b, __p) -#define vrhaddq_m(__inactive, __a, __b, __p) __arm_vrhaddq_m(__inactive, __a, __b, __p) -#define vrmulhq_m(__inactive, __a, __b, __p) __arm_vrmulhq_m(__inactive, __a, __b, __p) #define vrshlq_m(__inactive, __a, __b, __p) __arm_vrshlq_m(__inactive, __a, __b, __p) #define vrshrq_m(__inactive, __a, __imm, __p) __arm_vrshrq_m(__inactive, __a, __imm, __p) #define vshlq_m_n(__inactive, __a, __imm, __p) __arm_vshlq_m_n(__inactive, __a, __imm, __p) @@ -384,19 +368,14 @@ #define vclsq_x(__a, __p) __arm_vclsq_x(__a, __p) #define vclzq_x(__a, __p) __arm_vclzq_x(__a, __p) #define vnegq_x(__a, __p) __arm_vnegq_x(__a, __p) -#define vmulhq_x(__a, __b, __p) __arm_vmulhq_x(__a, __b, __p) #define vmullbq_poly_x(__a, __b, __p) __arm_vmullbq_poly_x(__a, __b, __p) #define vmullbq_int_x(__a, __b, __p) __arm_vmullbq_int_x(__a, __b, __p) #define vmulltq_poly_x(__a, __b, __p) __arm_vmulltq_poly_x(__a, __b, __p) #define vmulltq_int_x(__a, __b, __p) __arm_vmulltq_int_x(__a, __b, __p) #define vcaddq_rot90_x(__a, __b, __p) __arm_vcaddq_rot90_x(__a, __b, __p) #define vcaddq_rot270_x(__a, __b, __p) __arm_vcaddq_rot270_x(__a, __b, __p) -#define vhaddq_x(__a, __b, __p) __arm_vhaddq_x(__a, __b, __p) #define vhcaddq_rot90_x(__a, __b, __p) __arm_vhcaddq_rot90_x(__a, __b, __p) #define vhcaddq_rot270_x(__a, __b, __p) __arm_vhcaddq_rot270_x(__a, __b, __p) -#define vhsubq_x(__a, __b, __p) __arm_vhsubq_x(__a, __b, __p) -#define vrhaddq_x(__a, __b, __p) __arm_vrhaddq_x(__a, __b, __p) -#define vrmulhq_x(__a, __b, __p) __arm_vrmulhq_x(__a, __b, __p) #define vbicq_x(__a, __b, __p) __arm_vbicq_x(__a, __b, __p) #define vbrsrq_x(__a, __b, __p) __arm_vbrsrq_x(__a, __b, __p) #define vmovlbq_x(__a, __p) __arm_vmovlbq_x(__a, __p) @@ -662,25 +641,14 @@ #define vshlq_u8(__a, __b) __arm_vshlq_u8(__a, __b) #define vshlq_u16(__a, __b) __arm_vshlq_u16(__a, __b) #define vshlq_u32(__a, __b) __arm_vshlq_u32(__a, __b) -#define vrmulhq_u8(__a, __b) __arm_vrmulhq_u8(__a, __b) -#define vrhaddq_u8(__a, __b) __arm_vrhaddq_u8(__a, __b) -#define vqsubq_u8(__a, __b) __arm_vqsubq_u8(__a, __b) -#define vqsubq_n_u8(__a, __b) __arm_vqsubq_n_u8(__a, __b) -#define vqaddq_u8(__a, __b) __arm_vqaddq_u8(__a, __b) -#define vqaddq_n_u8(__a, __b) __arm_vqaddq_n_u8(__a, __b) #define vornq_u8(__a, __b) __arm_vornq_u8(__a, __b) #define vmulltq_int_u8(__a, __b) __arm_vmulltq_int_u8(__a, __b) #define vmullbq_int_u8(__a, __b) __arm_vmullbq_int_u8(__a, __b) -#define vmulhq_u8(__a, __b) __arm_vmulhq_u8(__a, __b) #define vmladavq_u8(__a, __b) __arm_vmladavq_u8(__a, __b) #define vminvq_u8(__a, __b) __arm_vminvq_u8(__a, __b) #define vminq_u8(__a, __b) __arm_vminq_u8(__a, __b) #define vmaxvq_u8(__a, __b) __arm_vmaxvq_u8(__a, __b) #define vmaxq_u8(__a, __b) __arm_vmaxq_u8(__a, __b) -#define vhsubq_u8(__a, __b) __arm_vhsubq_u8(__a, __b) -#define vhsubq_n_u8(__a, __b) __arm_vhsubq_n_u8(__a, __b) -#define vhaddq_u8(__a, __b) __arm_vhaddq_u8(__a, __b) -#define vhaddq_n_u8(__a, __b) __arm_vhaddq_n_u8(__a, __b) #define vcmpneq_n_u8(__a, __b) __arm_vcmpneq_n_u8(__a, __b) #define vcmphiq_u8(__a, __b) __arm_vcmphiq_u8(__a, __b) #define vcmphiq_n_u8(__a, __b) __arm_vcmphiq_n_u8(__a, __b) @@ -725,24 +693,15 @@ #define vshlq_r_s8(__a, __b) __arm_vshlq_r_s8(__a, __b) #define vrshlq_s8(__a, __b) __arm_vrshlq_s8(__a, __b) #define vrshlq_n_s8(__a, __b) __arm_vrshlq_n_s8(__a, __b) -#define vrmulhq_s8(__a, __b) __arm_vrmulhq_s8(__a, __b) -#define vrhaddq_s8(__a, __b) __arm_vrhaddq_s8(__a, __b) -#define vqsubq_s8(__a, __b) __arm_vqsubq_s8(__a, __b) -#define vqsubq_n_s8(__a, __b) __arm_vqsubq_n_s8(__a, __b) #define vqshlq_s8(__a, __b) __arm_vqshlq_s8(__a, __b) #define vqshlq_r_s8(__a, __b) __arm_vqshlq_r_s8(__a, __b) #define vqrshlq_s8(__a, __b) __arm_vqrshlq_s8(__a, __b) #define vqrshlq_n_s8(__a, __b) __arm_vqrshlq_n_s8(__a, __b) #define vqrdmulhq_s8(__a, __b) __arm_vqrdmulhq_s8(__a, __b) #define vqrdmulhq_n_s8(__a, __b) __arm_vqrdmulhq_n_s8(__a, __b) -#define vqdmulhq_s8(__a, __b) __arm_vqdmulhq_s8(__a, __b) -#define vqdmulhq_n_s8(__a, __b) __arm_vqdmulhq_n_s8(__a, __b) -#define vqaddq_s8(__a, __b) __arm_vqaddq_s8(__a, __b) -#define vqaddq_n_s8(__a, __b) __arm_vqaddq_n_s8(__a, __b) #define vornq_s8(__a, __b) __arm_vornq_s8(__a, __b) #define vmulltq_int_s8(__a, __b) __arm_vmulltq_int_s8(__a, __b) #define vmullbq_int_s8(__a, __b) __arm_vmullbq_int_s8(__a, __b) -#define vmulhq_s8(__a, __b) __arm_vmulhq_s8(__a, __b) #define vmlsdavxq_s8(__a, __b) __arm_vmlsdavxq_s8(__a, __b) #define vmlsdavq_s8(__a, __b) __arm_vmlsdavq_s8(__a, __b) #define vmladavxq_s8(__a, __b) __arm_vmladavxq_s8(__a, __b) @@ -751,12 +710,8 @@ #define vminq_s8(__a, __b) __arm_vminq_s8(__a, __b) #define vmaxvq_s8(__a, __b) __arm_vmaxvq_s8(__a, __b) #define vmaxq_s8(__a, __b) __arm_vmaxq_s8(__a, __b) -#define vhsubq_s8(__a, __b) __arm_vhsubq_s8(__a, __b) -#define vhsubq_n_s8(__a, __b) __arm_vhsubq_n_s8(__a, __b) #define vhcaddq_rot90_s8(__a, __b) __arm_vhcaddq_rot90_s8(__a, __b) #define vhcaddq_rot270_s8(__a, __b) __arm_vhcaddq_rot270_s8(__a, __b) -#define vhaddq_s8(__a, __b) __arm_vhaddq_s8(__a, __b) -#define vhaddq_n_s8(__a, __b) __arm_vhaddq_n_s8(__a, __b) #define vcaddq_rot90_s8(__a, __b) __arm_vcaddq_rot90_s8(__a, __b) #define vcaddq_rot270_s8(__a, __b) __arm_vcaddq_rot270_s8(__a, __b) #define vbrsrq_n_s8(__a, __b) __arm_vbrsrq_n_s8(__a, __b) @@ -766,25 +721,14 @@ #define vshlq_n_s8(__a, __imm) __arm_vshlq_n_s8(__a, __imm) #define vrshrq_n_s8(__a, __imm) __arm_vrshrq_n_s8(__a, __imm) #define vqshlq_n_s8(__a, __imm) __arm_vqshlq_n_s8(__a, __imm) -#define vrmulhq_u16(__a, __b) __arm_vrmulhq_u16(__a, __b) -#define vrhaddq_u16(__a, __b) __arm_vrhaddq_u16(__a, __b) -#define vqsubq_u16(__a, __b) __arm_vqsubq_u16(__a, __b) -#define vqsubq_n_u16(__a, __b) __arm_vqsubq_n_u16(__a, __b) -#define vqaddq_u16(__a, __b) __arm_vqaddq_u16(__a, __b) -#define vqaddq_n_u16(__a, __b) __arm_vqaddq_n_u16(__a, __b) #define vornq_u16(__a, __b) __arm_vornq_u16(__a, __b) #define vmulltq_int_u16(__a, __b) __arm_vmulltq_int_u16(__a, __b) #define vmullbq_int_u16(__a, __b) __arm_vmullbq_int_u16(__a, __b) -#define vmulhq_u16(__a, __b) __arm_vmulhq_u16(__a, __b) #define vmladavq_u16(__a, __b) __arm_vmladavq_u16(__a, __b) #define vminvq_u16(__a, __b) __arm_vminvq_u16(__a, __b) #define vminq_u16(__a, __b) __arm_vminq_u16(__a, __b) #define vmaxvq_u16(__a, __b) __arm_vmaxvq_u16(__a, __b) #define vmaxq_u16(__a, __b) __arm_vmaxq_u16(__a, __b) -#define vhsubq_u16(__a, __b) __arm_vhsubq_u16(__a, __b) -#define vhsubq_n_u16(__a, __b) __arm_vhsubq_n_u16(__a, __b) -#define vhaddq_u16(__a, __b) __arm_vhaddq_u16(__a, __b) -#define vhaddq_n_u16(__a, __b) __arm_vhaddq_n_u16(__a, __b) #define vcmpneq_n_u16(__a, __b) __arm_vcmpneq_n_u16(__a, __b) #define vcmphiq_u16(__a, __b) __arm_vcmphiq_u16(__a, __b) #define vcmphiq_n_u16(__a, __b) __arm_vcmphiq_n_u16(__a, __b) @@ -829,24 +773,15 @@ #define vshlq_r_s16(__a, __b) __arm_vshlq_r_s16(__a, __b) #define vrshlq_s16(__a, __b) __arm_vrshlq_s16(__a, __b) #define vrshlq_n_s16(__a, __b) __arm_vrshlq_n_s16(__a, __b) -#define vrmulhq_s16(__a, __b) __arm_vrmulhq_s16(__a, __b) -#define vrhaddq_s16(__a, __b) __arm_vrhaddq_s16(__a, __b) -#define vqsubq_s16(__a, __b) __arm_vqsubq_s16(__a, __b) -#define vqsubq_n_s16(__a, __b) __arm_vqsubq_n_s16(__a, __b) #define vqshlq_s16(__a, __b) __arm_vqshlq_s16(__a, __b) #define vqshlq_r_s16(__a, __b) __arm_vqshlq_r_s16(__a, __b) #define vqrshlq_s16(__a, __b) __arm_vqrshlq_s16(__a, __b) #define vqrshlq_n_s16(__a, __b) __arm_vqrshlq_n_s16(__a, __b) #define vqrdmulhq_s16(__a, __b) __arm_vqrdmulhq_s16(__a, __b) #define vqrdmulhq_n_s16(__a, __b) __arm_vqrdmulhq_n_s16(__a, __b) -#define vqdmulhq_s16(__a, __b) __arm_vqdmulhq_s16(__a, __b) -#define vqdmulhq_n_s16(__a, __b) __arm_vqdmulhq_n_s16(__a, __b) -#define vqaddq_s16(__a, __b) __arm_vqaddq_s16(__a, __b) -#define vqaddq_n_s16(__a, __b) __arm_vqaddq_n_s16(__a, __b) #define vornq_s16(__a, __b) __arm_vornq_s16(__a, __b) #define vmulltq_int_s16(__a, __b) __arm_vmulltq_int_s16(__a, __b) #define vmullbq_int_s16(__a, __b) __arm_vmullbq_int_s16(__a, __b) -#define vmulhq_s16(__a, __b) __arm_vmulhq_s16(__a, __b) #define vmlsdavxq_s16(__a, __b) __arm_vmlsdavxq_s16(__a, __b) #define vmlsdavq_s16(__a, __b) __arm_vmlsdavq_s16(__a, __b) #define vmladavxq_s16(__a, __b) __arm_vmladavxq_s16(__a, __b) @@ -855,12 +790,8 @@ #define vminq_s16(__a, __b) __arm_vminq_s16(__a, __b) #define vmaxvq_s16(__a, __b) __arm_vmaxvq_s16(__a, __b) #define vmaxq_s16(__a, __b) __arm_vmaxq_s16(__a, __b) -#define vhsubq_s16(__a, __b) __arm_vhsubq_s16(__a, __b) -#define vhsubq_n_s16(__a, __b) __arm_vhsubq_n_s16(__a, __b) #define vhcaddq_rot90_s16(__a, __b) __arm_vhcaddq_rot90_s16(__a, __b) #define vhcaddq_rot270_s16(__a, __b) __arm_vhcaddq_rot270_s16(__a, __b) -#define vhaddq_s16(__a, __b) __arm_vhaddq_s16(__a, __b) -#define vhaddq_n_s16(__a, __b) __arm_vhaddq_n_s16(__a, __b) #define vcaddq_rot90_s16(__a, __b) __arm_vcaddq_rot90_s16(__a, __b) #define vcaddq_rot270_s16(__a, __b) __arm_vcaddq_rot270_s16(__a, __b) #define vbrsrq_n_s16(__a, __b) __arm_vbrsrq_n_s16(__a, __b) @@ -870,25 +801,14 @@ #define vshlq_n_s16(__a, __imm) __arm_vshlq_n_s16(__a, __imm) #define vrshrq_n_s16(__a, __imm) __arm_vrshrq_n_s16(__a, __imm) #define vqshlq_n_s16(__a, __imm) __arm_vqshlq_n_s16(__a, __imm) -#define vrmulhq_u32(__a, __b) __arm_vrmulhq_u32(__a, __b) -#define vrhaddq_u32(__a, __b) __arm_vrhaddq_u32(__a, __b) -#define vqsubq_u32(__a, __b) __arm_vqsubq_u32(__a, __b) -#define vqsubq_n_u32(__a, __b) __arm_vqsubq_n_u32(__a, __b) -#define vqaddq_u32(__a, __b) __arm_vqaddq_u32(__a, __b) -#define vqaddq_n_u32(__a, __b) __arm_vqaddq_n_u32(__a, __b) #define vornq_u32(__a, __b) __arm_vornq_u32(__a, __b) #define vmulltq_int_u32(__a, __b) __arm_vmulltq_int_u32(__a, __b) #define vmullbq_int_u32(__a, __b) __arm_vmullbq_int_u32(__a, __b) -#define vmulhq_u32(__a, __b) __arm_vmulhq_u32(__a, __b) #define vmladavq_u32(__a, __b) __arm_vmladavq_u32(__a, __b) #define vminvq_u32(__a, __b) __arm_vminvq_u32(__a, __b) #define vminq_u32(__a, __b) __arm_vminq_u32(__a, __b) #define vmaxvq_u32(__a, __b) __arm_vmaxvq_u32(__a, __b) #define vmaxq_u32(__a, __b) __arm_vmaxq_u32(__a, __b) -#define vhsubq_u32(__a, __b) __arm_vhsubq_u32(__a, __b) -#define vhsubq_n_u32(__a, __b) __arm_vhsubq_n_u32(__a, __b) -#define vhaddq_u32(__a, __b) __arm_vhaddq_u32(__a, __b) -#define vhaddq_n_u32(__a, __b) __arm_vhaddq_n_u32(__a, __b) #define vcmpneq_n_u32(__a, __b) __arm_vcmpneq_n_u32(__a, __b) #define vcmphiq_u32(__a, __b) __arm_vcmphiq_u32(__a, __b) #define vcmphiq_n_u32(__a, __b) __arm_vcmphiq_n_u32(__a, __b) @@ -933,24 +853,15 @@ #define vshlq_r_s32(__a, __b) __arm_vshlq_r_s32(__a, __b) #define vrshlq_s32(__a, __b) __arm_vrshlq_s32(__a, __b) #define vrshlq_n_s32(__a, __b) __arm_vrshlq_n_s32(__a, __b) -#define vrmulhq_s32(__a, __b) __arm_vrmulhq_s32(__a, __b) -#define vrhaddq_s32(__a, __b) __arm_vrhaddq_s32(__a, __b) -#define vqsubq_s32(__a, __b) __arm_vqsubq_s32(__a, __b) -#define vqsubq_n_s32(__a, __b) __arm_vqsubq_n_s32(__a, __b) #define vqshlq_s32(__a, __b) __arm_vqshlq_s32(__a, __b) #define vqshlq_r_s32(__a, __b) __arm_vqshlq_r_s32(__a, __b) #define vqrshlq_s32(__a, __b) __arm_vqrshlq_s32(__a, __b) #define vqrshlq_n_s32(__a, __b) __arm_vqrshlq_n_s32(__a, __b) #define vqrdmulhq_s32(__a, __b) __arm_vqrdmulhq_s32(__a, __b) #define vqrdmulhq_n_s32(__a, __b) __arm_vqrdmulhq_n_s32(__a, __b) -#define vqdmulhq_s32(__a, __b) __arm_vqdmulhq_s32(__a, __b) -#define vqdmulhq_n_s32(__a, __b) __arm_vqdmulhq_n_s32(__a, __b) -#define vqaddq_s32(__a, __b) __arm_vqaddq_s32(__a, __b) -#define vqaddq_n_s32(__a, __b) __arm_vqaddq_n_s32(__a, __b) #define vornq_s32(__a, __b) __arm_vornq_s32(__a, __b) #define vmulltq_int_s32(__a, __b) __arm_vmulltq_int_s32(__a, __b) #define vmullbq_int_s32(__a, __b) __arm_vmullbq_int_s32(__a, __b) -#define vmulhq_s32(__a, __b) __arm_vmulhq_s32(__a, __b) #define vmlsdavxq_s32(__a, __b) __arm_vmlsdavxq_s32(__a, __b) #define vmlsdavq_s32(__a, __b) __arm_vmlsdavq_s32(__a, __b) #define vmladavxq_s32(__a, __b) __arm_vmladavxq_s32(__a, __b) @@ -959,12 +870,8 @@ #define vminq_s32(__a, __b) __arm_vminq_s32(__a, __b) #define vmaxvq_s32(__a, __b) __arm_vmaxvq_s32(__a, __b) #define vmaxq_s32(__a, __b) __arm_vmaxq_s32(__a, __b) -#define vhsubq_s32(__a, __b) __arm_vhsubq_s32(__a, __b) -#define vhsubq_n_s32(__a, __b) __arm_vhsubq_n_s32(__a, __b) #define vhcaddq_rot90_s32(__a, __b) __arm_vhcaddq_rot90_s32(__a, __b) #define vhcaddq_rot270_s32(__a, __b) __arm_vhcaddq_rot270_s32(__a, __b) -#define vhaddq_s32(__a, __b) __arm_vhaddq_s32(__a, __b) -#define vhaddq_n_s32(__a, __b) __arm_vhaddq_n_s32(__a, __b) #define vcaddq_rot90_s32(__a, __b) __arm_vcaddq_rot90_s32(__a, __b) #define vcaddq_rot270_s32(__a, __b) __arm_vcaddq_rot270_s32(__a, __b) #define vbrsrq_n_s32(__a, __b) __arm_vbrsrq_n_s32(__a, __b) @@ -1634,36 +1541,12 @@ #define vcaddq_rot90_m_u8(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m_u8(__inactive, __a, __b, __p) #define vcaddq_rot90_m_u32(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m_u32(__inactive, __a, __b, __p) #define vcaddq_rot90_m_u16(__inactive, __a, __b, __p) __arm_vcaddq_rot90_m_u16(__inactive, __a, __b, __p) -#define vhaddq_m_n_s8(__inactive, __a, __b, __p) __arm_vhaddq_m_n_s8(__inactive, __a, __b, __p) -#define vhaddq_m_n_s32(__inactive, __a, __b, __p) __arm_vhaddq_m_n_s32(__inactive, __a, __b, __p) -#define vhaddq_m_n_s16(__inactive, __a, __b, __p) __arm_vhaddq_m_n_s16(__inactive, __a, __b, __p) -#define vhaddq_m_n_u8(__inactive, __a, __b, __p) __arm_vhaddq_m_n_u8(__inactive, __a, __b, __p) -#define vhaddq_m_n_u32(__inactive, __a, __b, __p) __arm_vhaddq_m_n_u32(__inactive, __a, __b, __p) -#define vhaddq_m_n_u16(__inactive, __a, __b, __p) __arm_vhaddq_m_n_u16(__inactive, __a, __b, __p) -#define vhaddq_m_s8(__inactive, __a, __b, __p) __arm_vhaddq_m_s8(__inactive, __a, __b, __p) -#define vhaddq_m_s32(__inactive, __a, __b, __p) __arm_vhaddq_m_s32(__inactive, __a, __b, __p) -#define vhaddq_m_s16(__inactive, __a, __b, __p) __arm_vhaddq_m_s16(__inactive, __a, __b, __p) -#define vhaddq_m_u8(__inactive, __a, __b, __p) __arm_vhaddq_m_u8(__inactive, __a, __b, __p) -#define vhaddq_m_u32(__inactive, __a, __b, __p) __arm_vhaddq_m_u32(__inactive, __a, __b, __p) -#define vhaddq_m_u16(__inactive, __a, __b, __p) __arm_vhaddq_m_u16(__inactive, __a, __b, __p) #define vhcaddq_rot270_m_s8(__inactive, __a, __b, __p) __arm_vhcaddq_rot270_m_s8(__inactive, __a, __b, __p) #define vhcaddq_rot270_m_s32(__inactive, __a, __b, __p) __arm_vhcaddq_rot270_m_s32(__inactive, __a, __b, __p) #define vhcaddq_rot270_m_s16(__inactive, __a, __b, __p) __arm_vhcaddq_rot270_m_s16(__inactive, __a, __b, __p) #define vhcaddq_rot90_m_s8(__inactive, __a, __b, __p) __arm_vhcaddq_rot90_m_s8(__inactive, __a, __b, __p) #define vhcaddq_rot90_m_s32(__inactive, __a, __b, __p) __arm_vhcaddq_rot90_m_s32(__inactive, __a, __b, __p) #define vhcaddq_rot90_m_s16(__inactive, __a, __b, __p) __arm_vhcaddq_rot90_m_s16(__inactive, __a, __b, __p) -#define vhsubq_m_n_s8(__inactive, __a, __b, __p) __arm_vhsubq_m_n_s8(__inactive, __a, __b, __p) -#define vhsubq_m_n_s32(__inactive, __a, __b, __p) __arm_vhsubq_m_n_s32(__inactive, __a, __b, __p) -#define vhsubq_m_n_s16(__inactive, __a, __b, __p) __arm_vhsubq_m_n_s16(__inactive, __a, __b, __p) -#define vhsubq_m_n_u8(__inactive, __a, __b, __p) __arm_vhsubq_m_n_u8(__inactive, __a, __b, __p) -#define vhsubq_m_n_u32(__inactive, __a, __b, __p) __arm_vhsubq_m_n_u32(__inactive, __a, __b, __p) -#define vhsubq_m_n_u16(__inactive, __a, __b, __p) __arm_vhsubq_m_n_u16(__inactive, __a, __b, __p) -#define vhsubq_m_s8(__inactive, __a, __b, __p) __arm_vhsubq_m_s8(__inactive, __a, __b, __p) -#define vhsubq_m_s32(__inactive, __a, __b, __p) __arm_vhsubq_m_s32(__inactive, __a, __b, __p) -#define vhsubq_m_s16(__inactive, __a, __b, __p) __arm_vhsubq_m_s16(__inactive, __a, __b, __p) -#define vhsubq_m_u8(__inactive, __a, __b, __p) __arm_vhsubq_m_u8(__inactive, __a, __b, __p) -#define vhsubq_m_u32(__inactive, __a, __b, __p) __arm_vhsubq_m_u32(__inactive, __a, __b, __p) -#define vhsubq_m_u16(__inactive, __a, __b, __p) __arm_vhsubq_m_u16(__inactive, __a, __b, __p) #define vmaxq_m_s8(__inactive, __a, __b, __p) __arm_vmaxq_m_s8(__inactive, __a, __b, __p) #define vmaxq_m_s32(__inactive, __a, __b, __p) __arm_vmaxq_m_s32(__inactive, __a, __b, __p) #define vmaxq_m_s16(__inactive, __a, __b, __p) __arm_vmaxq_m_s16(__inactive, __a, __b, __p) @@ -1703,12 +1586,6 @@ #define vmlsdavaxq_p_s8(__a, __b, __c, __p) __arm_vmlsdavaxq_p_s8(__a, __b, __c, __p) #define vmlsdavaxq_p_s32(__a, __b, __c, __p) __arm_vmlsdavaxq_p_s32(__a, __b, __c, __p) #define vmlsdavaxq_p_s16(__a, __b, __c, __p) __arm_vmlsdavaxq_p_s16(__a, __b, __c, __p) -#define vmulhq_m_s8(__inactive, __a, __b, __p) __arm_vmulhq_m_s8(__inactive, __a, __b, __p) -#define vmulhq_m_s32(__inactive, __a, __b, __p) __arm_vmulhq_m_s32(__inactive, __a, __b, __p) -#define vmulhq_m_s16(__inactive, __a, __b, __p) __arm_vmulhq_m_s16(__inactive, __a, __b, __p) -#define vmulhq_m_u8(__inactive, __a, __b, __p) __arm_vmulhq_m_u8(__inactive, __a, __b, __p) -#define vmulhq_m_u32(__inactive, __a, __b, __p) __arm_vmulhq_m_u32(__inactive, __a, __b, __p) -#define vmulhq_m_u16(__inactive, __a, __b, __p) __arm_vmulhq_m_u16(__inactive, __a, __b, __p) #define vmullbq_int_m_s8(__inactive, __a, __b, __p) __arm_vmullbq_int_m_s8(__inactive, __a, __b, __p) #define vmullbq_int_m_s32(__inactive, __a, __b, __p) __arm_vmullbq_int_m_s32(__inactive, __a, __b, __p) #define vmullbq_int_m_s16(__inactive, __a, __b, __p) __arm_vmullbq_int_m_s16(__inactive, __a, __b, __p) @@ -1727,18 +1604,6 @@ #define vornq_m_u8(__inactive, __a, __b, __p) __arm_vornq_m_u8(__inactive, __a, __b, __p) #define vornq_m_u32(__inactive, __a, __b, __p) __arm_vornq_m_u32(__inactive, __a, __b, __p) #define vornq_m_u16(__inactive, __a, __b, __p) __arm_vornq_m_u16(__inactive, __a, __b, __p) -#define vqaddq_m_n_s8(__inactive, __a, __b, __p) __arm_vqaddq_m_n_s8(__inactive, __a, __b, __p) -#define vqaddq_m_n_s32(__inactive, __a, __b, __p) __arm_vqaddq_m_n_s32(__inactive, __a, __b, __p) -#define vqaddq_m_n_s16(__inactive, __a, __b, __p) __arm_vqaddq_m_n_s16(__inactive, __a, __b, __p) -#define vqaddq_m_n_u8(__inactive, __a, __b, __p) __arm_vqaddq_m_n_u8(__inactive, __a, __b, __p) -#define vqaddq_m_n_u32(__inactive, __a, __b, __p) __arm_vqaddq_m_n_u32(__inactive, __a, __b, __p) -#define vqaddq_m_n_u16(__inactive, __a, __b, __p) __arm_vqaddq_m_n_u16(__inactive, __a, __b, __p) -#define vqaddq_m_s8(__inactive, __a, __b, __p) __arm_vqaddq_m_s8(__inactive, __a, __b, __p) -#define vqaddq_m_s32(__inactive, __a, __b, __p) __arm_vqaddq_m_s32(__inactive, __a, __b, __p) -#define vqaddq_m_s16(__inactive, __a, __b, __p) __arm_vqaddq_m_s16(__inactive, __a, __b, __p) -#define vqaddq_m_u8(__inactive, __a, __b, __p) __arm_vqaddq_m_u8(__inactive, __a, __b, __p) -#define vqaddq_m_u32(__inactive, __a, __b, __p) __arm_vqaddq_m_u32(__inactive, __a, __b, __p) -#define vqaddq_m_u16(__inactive, __a, __b, __p) __arm_vqaddq_m_u16(__inactive, __a, __b, __p) #define vqdmladhq_m_s8(__inactive, __a, __b, __p) __arm_vqdmladhq_m_s8(__inactive, __a, __b, __p) #define vqdmladhq_m_s32(__inactive, __a, __b, __p) __arm_vqdmladhq_m_s32(__inactive, __a, __b, __p) #define vqdmladhq_m_s16(__inactive, __a, __b, __p) __arm_vqdmladhq_m_s16(__inactive, __a, __b, __p) @@ -1757,12 +1622,6 @@ #define vqdmlsdhxq_m_s8(__inactive, __a, __b, __p) __arm_vqdmlsdhxq_m_s8(__inactive, __a, __b, __p) #define vqdmlsdhxq_m_s32(__inactive, __a, __b, __p) __arm_vqdmlsdhxq_m_s32(__inactive, __a, __b, __p) #define vqdmlsdhxq_m_s16(__inactive, __a, __b, __p) __arm_vqdmlsdhxq_m_s16(__inactive, __a, __b, __p) -#define vqdmulhq_m_n_s8(__inactive, __a, __b, __p) __arm_vqdmulhq_m_n_s8(__inactive, __a, __b, __p) -#define vqdmulhq_m_n_s32(__inactive, __a, __b, __p) __arm_vqdmulhq_m_n_s32(__inactive, __a, __b, __p) -#define vqdmulhq_m_n_s16(__inactive, __a, __b, __p) __arm_vqdmulhq_m_n_s16(__inactive, __a, __b, __p) -#define vqdmulhq_m_s8(__inactive, __a, __b, __p) __arm_vqdmulhq_m_s8(__inactive, __a, __b, __p) -#define vqdmulhq_m_s32(__inactive, __a, __b, __p) __arm_vqdmulhq_m_s32(__inactive, __a, __b, __p) -#define vqdmulhq_m_s16(__inactive, __a, __b, __p) __arm_vqdmulhq_m_s16(__inactive, __a, __b, __p) #define vqrdmladhq_m_s8(__inactive, __a, __b, __p) __arm_vqrdmladhq_m_s8(__inactive, __a, __b, __p) #define vqrdmladhq_m_s32(__inactive, __a, __b, __p) __arm_vqrdmladhq_m_s32(__inactive, __a, __b, __p) #define vqrdmladhq_m_s16(__inactive, __a, __b, __p) __arm_vqrdmladhq_m_s16(__inactive, __a, __b, __p) @@ -1805,30 +1664,6 @@ #define vqshlq_m_u8(__inactive, __a, __b, __p) __arm_vqshlq_m_u8(__inactive, __a, __b, __p) #define vqshlq_m_u32(__inactive, __a, __b, __p) __arm_vqshlq_m_u32(__inactive, __a, __b, __p) #define vqshlq_m_u16(__inactive, __a, __b, __p) __arm_vqshlq_m_u16(__inactive, __a, __b, __p) -#define vqsubq_m_n_s8(__inactive, __a, __b, __p) __arm_vqsubq_m_n_s8(__inactive, __a, __b, __p) -#define vqsubq_m_n_s32(__inactive, __a, __b, __p) __arm_vqsubq_m_n_s32(__inactive, __a, __b, __p) -#define vqsubq_m_n_s16(__inactive, __a, __b, __p) __arm_vqsubq_m_n_s16(__inactive, __a, __b, __p) -#define vqsubq_m_n_u8(__inactive, __a, __b, __p) __arm_vqsubq_m_n_u8(__inactive, __a, __b, __p) -#define vqsubq_m_n_u32(__inactive, __a, __b, __p) __arm_vqsubq_m_n_u32(__inactive, __a, __b, __p) -#define vqsubq_m_n_u16(__inactive, __a, __b, __p) __arm_vqsubq_m_n_u16(__inactive, __a, __b, __p) -#define vqsubq_m_s8(__inactive, __a, __b, __p) __arm_vqsubq_m_s8(__inactive, __a, __b, __p) -#define vqsubq_m_s32(__inactive, __a, __b, __p) __arm_vqsubq_m_s32(__inactive, __a, __b, __p) -#define vqsubq_m_s16(__inactive, __a, __b, __p) __arm_vqsubq_m_s16(__inactive, __a, __b, __p) -#define vqsubq_m_u8(__inactive, __a, __b, __p) __arm_vqsubq_m_u8(__inactive, __a, __b, __p) -#define vqsubq_m_u32(__inactive, __a, __b, __p) __arm_vqsubq_m_u32(__inactive, __a, __b, __p) -#define vqsubq_m_u16(__inactive, __a, __b, __p) __arm_vqsubq_m_u16(__inactive, __a, __b, __p) -#define vrhaddq_m_s8(__inactive, __a, __b, __p) __arm_vrhaddq_m_s8(__inactive, __a, __b, __p) -#define vrhaddq_m_s32(__inactive, __a, __b, __p) __arm_vrhaddq_m_s32(__inactive, __a, __b, __p) -#define vrhaddq_m_s16(__inactive, __a, __b, __p) __arm_vrhaddq_m_s16(__inactive, __a, __b, __p) -#define vrhaddq_m_u8(__inactive, __a, __b, __p) __arm_vrhaddq_m_u8(__inactive, __a, __b, __p) -#define vrhaddq_m_u32(__inactive, __a, __b, __p) __arm_vrhaddq_m_u32(__inactive, __a, __b, __p) -#define vrhaddq_m_u16(__inactive, __a, __b, __p) __arm_vrhaddq_m_u16(__inactive, __a, __b, __p) -#define vrmulhq_m_s8(__inactive, __a, __b, __p) __arm_vrmulhq_m_s8(__inactive, __a, __b, __p) -#define vrmulhq_m_s32(__inactive, __a, __b, __p) __arm_vrmulhq_m_s32(__inactive, __a, __b, __p) -#define vrmulhq_m_s16(__inactive, __a, __b, __p) __arm_vrmulhq_m_s16(__inactive, __a, __b, __p) -#define vrmulhq_m_u8(__inactive, __a, __b, __p) __arm_vrmulhq_m_u8(__inactive, __a, __b, __p) -#define vrmulhq_m_u32(__inactive, __a, __b, __p) __arm_vrmulhq_m_u32(__inactive, __a, __b, __p) -#define vrmulhq_m_u16(__inactive, __a, __b, __p) __arm_vrmulhq_m_u16(__inactive, __a, __b, __p) #define vrshlq_m_s8(__inactive, __a, __b, __p) __arm_vrshlq_m_s8(__inactive, __a, __b, __p) #define vrshlq_m_s32(__inactive, __a, __b, __p) __arm_vrshlq_m_s32(__inactive, __a, __b, __p) #define vrshlq_m_s16(__inactive, __a, __b, __p) __arm_vrshlq_m_s16(__inactive, __a, __b, __p) @@ -2315,12 +2150,6 @@ #define vnegq_x_s8(__a, __p) __arm_vnegq_x_s8(__a, __p) #define vnegq_x_s16(__a, __p) __arm_vnegq_x_s16(__a, __p) #define vnegq_x_s32(__a, __p) __arm_vnegq_x_s32(__a, __p) -#define vmulhq_x_s8(__a, __b, __p) __arm_vmulhq_x_s8(__a, __b, __p) -#define vmulhq_x_s16(__a, __b, __p) __arm_vmulhq_x_s16(__a, __b, __p) -#define vmulhq_x_s32(__a, __b, __p) __arm_vmulhq_x_s32(__a, __b, __p) -#define vmulhq_x_u8(__a, __b, __p) __arm_vmulhq_x_u8(__a, __b, __p) -#define vmulhq_x_u16(__a, __b, __p) __arm_vmulhq_x_u16(__a, __b, __p) -#define vmulhq_x_u32(__a, __b, __p) __arm_vmulhq_x_u32(__a, __b, __p) #define vmullbq_poly_x_p8(__a, __b, __p) __arm_vmullbq_poly_x_p8(__a, __b, __p) #define vmullbq_poly_x_p16(__a, __b, __p) __arm_vmullbq_poly_x_p16(__a, __b, __p) #define vmullbq_int_x_s8(__a, __b, __p) __arm_vmullbq_int_x_s8(__a, __b, __p) @@ -2349,48 +2178,12 @@ #define vcaddq_rot270_x_u8(__a, __b, __p) __arm_vcaddq_rot270_x_u8(__a, __b, __p) #define vcaddq_rot270_x_u16(__a, __b, __p) __arm_vcaddq_rot270_x_u16(__a, __b, __p) #define vcaddq_rot270_x_u32(__a, __b, __p) __arm_vcaddq_rot270_x_u32(__a, __b, __p) -#define vhaddq_x_n_s8(__a, __b, __p) __arm_vhaddq_x_n_s8(__a, __b, __p) -#define vhaddq_x_n_s16(__a, __b, __p) __arm_vhaddq_x_n_s16(__a, __b, __p) -#define vhaddq_x_n_s32(__a, __b, __p) __arm_vhaddq_x_n_s32(__a, __b, __p) -#define vhaddq_x_n_u8(__a, __b, __p) __arm_vhaddq_x_n_u8(__a, __b, __p) -#define vhaddq_x_n_u16(__a, __b, __p) __arm_vhaddq_x_n_u16(__a, __b, __p) -#define vhaddq_x_n_u32(__a, __b, __p) __arm_vhaddq_x_n_u32(__a, __b, __p) -#define vhaddq_x_s8(__a, __b, __p) __arm_vhaddq_x_s8(__a, __b, __p) -#define vhaddq_x_s16(__a, __b, __p) __arm_vhaddq_x_s16(__a, __b, __p) -#define vhaddq_x_s32(__a, __b, __p) __arm_vhaddq_x_s32(__a, __b, __p) -#define vhaddq_x_u8(__a, __b, __p) __arm_vhaddq_x_u8(__a, __b, __p) -#define vhaddq_x_u16(__a, __b, __p) __arm_vhaddq_x_u16(__a, __b, __p) -#define vhaddq_x_u32(__a, __b, __p) __arm_vhaddq_x_u32(__a, __b, __p) #define vhcaddq_rot90_x_s8(__a, __b, __p) __arm_vhcaddq_rot90_x_s8(__a, __b, __p) #define vhcaddq_rot90_x_s16(__a, __b, __p) __arm_vhcaddq_rot90_x_s16(__a, __b, __p) #define vhcaddq_rot90_x_s32(__a, __b, __p) __arm_vhcaddq_rot90_x_s32(__a, __b, __p) #define vhcaddq_rot270_x_s8(__a, __b, __p) __arm_vhcaddq_rot270_x_s8(__a, __b, __p) #define vhcaddq_rot270_x_s16(__a, __b, __p) __arm_vhcaddq_rot270_x_s16(__a, __b, __p) #define vhcaddq_rot270_x_s32(__a, __b, __p) __arm_vhcaddq_rot270_x_s32(__a, __b, __p) -#define vhsubq_x_n_s8(__a, __b, __p) __arm_vhsubq_x_n_s8(__a, __b, __p) -#define vhsubq_x_n_s16(__a, __b, __p) __arm_vhsubq_x_n_s16(__a, __b, __p) -#define vhsubq_x_n_s32(__a, __b, __p) __arm_vhsubq_x_n_s32(__a, __b, __p) -#define vhsubq_x_n_u8(__a, __b, __p) __arm_vhsubq_x_n_u8(__a, __b, __p) -#define vhsubq_x_n_u16(__a, __b, __p) __arm_vhsubq_x_n_u16(__a, __b, __p) -#define vhsubq_x_n_u32(__a, __b, __p) __arm_vhsubq_x_n_u32(__a, __b, __p) -#define vhsubq_x_s8(__a, __b, __p) __arm_vhsubq_x_s8(__a, __b, __p) -#define vhsubq_x_s16(__a, __b, __p) __arm_vhsubq_x_s16(__a, __b, __p) -#define vhsubq_x_s32(__a, __b, __p) __arm_vhsubq_x_s32(__a, __b, __p) -#define vhsubq_x_u8(__a, __b, __p) __arm_vhsubq_x_u8(__a, __b, __p) -#define vhsubq_x_u16(__a, __b, __p) __arm_vhsubq_x_u16(__a, __b, __p) -#define vhsubq_x_u32(__a, __b, __p) __arm_vhsubq_x_u32(__a, __b, __p) -#define vrhaddq_x_s8(__a, __b, __p) __arm_vrhaddq_x_s8(__a, __b, __p) -#define vrhaddq_x_s16(__a, __b, __p) __arm_vrhaddq_x_s16(__a, __b, __p) -#define vrhaddq_x_s32(__a, __b, __p) __arm_vrhaddq_x_s32(__a, __b, __p) -#define vrhaddq_x_u8(__a, __b, __p) __arm_vrhaddq_x_u8(__a, __b, __p) -#define vrhaddq_x_u16(__a, __b, __p) __arm_vrhaddq_x_u16(__a, __b, __p) -#define vrhaddq_x_u32(__a, __b, __p) __arm_vrhaddq_x_u32(__a, __b, __p) -#define vrmulhq_x_s8(__a, __b, __p) __arm_vrmulhq_x_s8(__a, __b, __p) -#define vrmulhq_x_s16(__a, __b, __p) __arm_vrmulhq_x_s16(__a, __b, __p) -#define vrmulhq_x_s32(__a, __b, __p) __arm_vrmulhq_x_s32(__a, __b, __p) -#define vrmulhq_x_u8(__a, __b, __p) __arm_vrmulhq_x_u8(__a, __b, __p) -#define vrmulhq_x_u16(__a, __b, __p) __arm_vrmulhq_x_u16(__a, __b, __p) -#define vrmulhq_x_u32(__a, __b, __p) __arm_vrmulhq_x_u32(__a, __b, __p) #define vbicq_x_s8(__a, __b, __p) __arm_vbicq_x_s8(__a, __b, __p) #define vbicq_x_s16(__a, __b, __p) __arm_vbicq_x_s16(__a, __b, __p) #define vbicq_x_s32(__a, __b, __p) __arm_vbicq_x_s32(__a, __b, __p) @@ -3351,48 +3144,6 @@ __arm_vshlq_u32 (uint32x4_t __a, int32x4_t __b) return __builtin_mve_vshlq_uv4si (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vrmulhq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vrhaddq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vqsubq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vqsubq_n_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vqaddq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vqaddq_n_uv16qi (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_u8 (uint8x16_t __a, uint8x16_t __b) @@ -3414,13 +3165,6 @@ __arm_vmullbq_int_u8 (uint8x16_t __a, uint8x16_t __b) return __builtin_mve_vmullbq_int_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vmulhq_uv16qi (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmladavq_u8 (uint8x16_t __a, uint8x16_t __b) @@ -3456,34 +3200,6 @@ __arm_vmaxq_u8 (uint8x16_t __a, uint8x16_t __b) return __builtin_mve_vmaxq_uv16qi (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vhsubq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vhsubq_n_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_u8 (uint8x16_t __a, uint8x16_t __b) -{ - return __builtin_mve_vhaddq_uv16qi (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_n_u8 (uint8x16_t __a, uint8_t __b) -{ - return __builtin_mve_vhaddq_n_uv16qi (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq_n_u8 (uint8x16_t __a, uint8_t __b) @@ -3794,34 +3510,6 @@ __arm_vrshlq_n_s8 (int8x16_t __a, int32_t __b) return __builtin_mve_vrshlq_n_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vrmulhq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vrhaddq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vqsubq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vqsubq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshlq_s8 (int8x16_t __a, int8x16_t __b) @@ -3864,34 +3552,6 @@ __arm_vqrdmulhq_n_s8 (int8x16_t __a, int8_t __b) return __builtin_mve_vqrdmulhq_n_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vqdmulhq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vqdmulhq_n_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vqaddq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vqaddq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_s8 (int8x16_t __a, int8x16_t __b) @@ -3913,13 +3573,6 @@ __arm_vmullbq_int_s8 (int8x16_t __a, int8x16_t __b) return __builtin_mve_vmullbq_int_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vmulhq_sv16qi (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlsdavxq_s8 (int8x16_t __a, int8x16_t __b) @@ -3976,20 +3629,6 @@ __arm_vmaxq_s8 (int8x16_t __a, int8x16_t __b) return __builtin_mve_vmaxq_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vhsubq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vhsubq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90_s8 (int8x16_t __a, int8x16_t __b) @@ -4004,20 +3643,6 @@ __arm_vhcaddq_rot270_s8 (int8x16_t __a, int8x16_t __b) return __builtin_mve_vhcaddq_rot270_sv16qi (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_s8 (int8x16_t __a, int8x16_t __b) -{ - return __builtin_mve_vhaddq_sv16qi (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_n_s8 (int8x16_t __a, int8_t __b) -{ - return __builtin_mve_vhaddq_n_sv16qi (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_s8 (int8x16_t __a, int8x16_t __b) @@ -4081,48 +3706,6 @@ __arm_vqshlq_n_s8 (int8x16_t __a, const int __imm) return __builtin_mve_vqshlq_n_sv16qi (__a, __imm); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vrmulhq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vrhaddq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vqsubq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vqsubq_n_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vqaddq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vqaddq_n_uv8hi (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_u16 (uint16x8_t __a, uint16x8_t __b) @@ -4144,13 +3727,6 @@ __arm_vmullbq_int_u16 (uint16x8_t __a, uint16x8_t __b) return __builtin_mve_vmullbq_int_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vmulhq_uv8hi (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmladavq_u16 (uint16x8_t __a, uint16x8_t __b) @@ -4186,34 +3762,6 @@ __arm_vmaxq_u16 (uint16x8_t __a, uint16x8_t __b) return __builtin_mve_vmaxq_uv8hi (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vhsubq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vhsubq_n_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_u16 (uint16x8_t __a, uint16x8_t __b) -{ - return __builtin_mve_vhaddq_uv8hi (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_n_u16 (uint16x8_t __a, uint16_t __b) -{ - return __builtin_mve_vhaddq_n_uv8hi (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq_n_u16 (uint16x8_t __a, uint16_t __b) @@ -4524,34 +4072,6 @@ __arm_vrshlq_n_s16 (int16x8_t __a, int32_t __b) return __builtin_mve_vrshlq_n_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vrmulhq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vrhaddq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vqsubq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vqsubq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshlq_s16 (int16x8_t __a, int16x8_t __b) @@ -4594,34 +4114,6 @@ __arm_vqrdmulhq_n_s16 (int16x8_t __a, int16_t __b) return __builtin_mve_vqrdmulhq_n_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vqdmulhq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vqdmulhq_n_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vqaddq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vqaddq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_s16 (int16x8_t __a, int16x8_t __b) @@ -4643,13 +4135,6 @@ __arm_vmullbq_int_s16 (int16x8_t __a, int16x8_t __b) return __builtin_mve_vmullbq_int_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vmulhq_sv8hi (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlsdavxq_s16 (int16x8_t __a, int16x8_t __b) @@ -4706,20 +4191,6 @@ __arm_vmaxq_s16 (int16x8_t __a, int16x8_t __b) return __builtin_mve_vmaxq_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vhsubq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vhsubq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90_s16 (int16x8_t __a, int16x8_t __b) @@ -4734,20 +4205,6 @@ __arm_vhcaddq_rot270_s16 (int16x8_t __a, int16x8_t __b) return __builtin_mve_vhcaddq_rot270_sv8hi (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_s16 (int16x8_t __a, int16x8_t __b) -{ - return __builtin_mve_vhaddq_sv8hi (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_n_s16 (int16x8_t __a, int16_t __b) -{ - return __builtin_mve_vhaddq_n_sv8hi (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_s16 (int16x8_t __a, int16x8_t __b) @@ -4811,48 +4268,6 @@ __arm_vqshlq_n_s16 (int16x8_t __a, const int __imm) return __builtin_mve_vqshlq_n_sv8hi (__a, __imm); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vrmulhq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vrhaddq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vqsubq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vqsubq_n_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vqaddq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vqaddq_n_uv4si (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_u32 (uint32x4_t __a, uint32x4_t __b) @@ -4874,13 +4289,6 @@ __arm_vmullbq_int_u32 (uint32x4_t __a, uint32x4_t __b) return __builtin_mve_vmullbq_int_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vmulhq_uv4si (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmladavq_u32 (uint32x4_t __a, uint32x4_t __b) @@ -4916,34 +4324,6 @@ __arm_vmaxq_u32 (uint32x4_t __a, uint32x4_t __b) return __builtin_mve_vmaxq_uv4si (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vhsubq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vhsubq_n_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_u32 (uint32x4_t __a, uint32x4_t __b) -{ - return __builtin_mve_vhaddq_uv4si (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_n_u32 (uint32x4_t __a, uint32_t __b) -{ - return __builtin_mve_vhaddq_n_uv4si (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq_n_u32 (uint32x4_t __a, uint32_t __b) @@ -5254,34 +4634,6 @@ __arm_vrshlq_n_s32 (int32x4_t __a, int32_t __b) return __builtin_mve_vrshlq_n_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vrmulhq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vrhaddq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vqsubq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vqsubq_n_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshlq_s32 (int32x4_t __a, int32x4_t __b) @@ -5324,34 +4676,6 @@ __arm_vqrdmulhq_n_s32 (int32x4_t __a, int32_t __b) return __builtin_mve_vqrdmulhq_n_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vqdmulhq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vqdmulhq_n_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vqaddq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vqaddq_n_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq_s32 (int32x4_t __a, int32x4_t __b) @@ -5373,13 +4697,6 @@ __arm_vmullbq_int_s32 (int32x4_t __a, int32x4_t __b) return __builtin_mve_vmullbq_int_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vmulhq_sv4si (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlsdavxq_s32 (int32x4_t __a, int32x4_t __b) @@ -5436,20 +4753,6 @@ __arm_vmaxq_s32 (int32x4_t __a, int32x4_t __b) return __builtin_mve_vmaxq_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vhsubq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vhsubq_n_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90_s32 (int32x4_t __a, int32x4_t __b) @@ -5464,20 +4767,6 @@ __arm_vhcaddq_rot270_s32 (int32x4_t __a, int32x4_t __b) return __builtin_mve_vhcaddq_rot270_sv4si (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_s32 (int32x4_t __a, int32x4_t __b) -{ - return __builtin_mve_vhaddq_sv4si (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_n_s32 (int32x4_t __a, int32_t __b) -{ - return __builtin_mve_vhaddq_n_sv4si (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90_s32 (int32x4_t __a, int32x4_t __b) @@ -9005,90 +8294,6 @@ __arm_vcaddq_rot90_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, return __builtin_mve_vcaddq_rot90_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot270_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -9131,90 +8336,6 @@ __arm_vhcaddq_rot90_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, m return __builtin_mve_vhcaddq_rot90_m_sv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmaxq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -9488,48 +8609,6 @@ __arm_vmlsdavaxq_p_s16 (int32_t __a, int16x8_t __b, int16x8_t __c, mve_pred16_t return __builtin_mve_vmlsdavaxq_p_sv8hi (__a, __b, __c, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmullbq_int_m_s8 (int16x8_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -9656,90 +8735,6 @@ __arm_vornq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pr return __builtin_mve_vornq_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_n_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqaddq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqdmladhq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -9845,48 +8840,6 @@ __arm_vqdmlsdhxq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_ return __builtin_mve_vqdmlsdhxq_m_sv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqdmulhq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqdmulhq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqdmulhq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqdmulhq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqdmulhq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqdmulhq_m_sv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrdmladhq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -10202,174 +9155,6 @@ __arm_vqshlq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, int16x8_t __b, mve_pr return __builtin_mve_vqshlq_m_uv8hi (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_n_s8 (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_n_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_n_s32 (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_n_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_n_s16 (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_n_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_n_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_n_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_n_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_n_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_n_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_n_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vqsubq_m_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_uv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_sv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m_s32 (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_sv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m_s16 (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_sv8hi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m_u8 (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_uv16qi (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m_u32 (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_uv4si (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m_u16 (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_uv8hi (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrshlq_m_s8 (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -13289,48 +12074,6 @@ __arm_vnegq_x_s32 (int32x4_t __a, mve_pred16_t __p) return __builtin_mve_vnegq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vmulhq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmullbq_poly_x_p8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) @@ -13527,90 +12270,6 @@ __arm_vcaddq_rot270_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __builtin_mve_vcaddq_rot270_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_n_s8 (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_n_s16 (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_n_s32 (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_n_u8 (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_n_u16 (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_n_u32 (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_n_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhaddq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -13653,174 +12312,6 @@ __arm_vhcaddq_rot270_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) return __builtin_mve_vhcaddq_rot270_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_n_s8 (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_n_s16 (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_n_s32 (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_n_u8 (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_n_u16 (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_n_u32 (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_n_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vhsubq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrhaddq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_sv16qi (__arm_vuninitializedq_s8 (), __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x_s16 (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_sv8hi (__arm_vuninitializedq_s16 (), __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x_s32 (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_sv4si (__arm_vuninitializedq_s32 (), __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x_u8 (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_uv16qi (__arm_vuninitializedq_u8 (), __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x_u16 (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_uv8hi (__arm_vuninitializedq_u16 (), __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x_u32 (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __builtin_mve_vrmulhq_m_uv4si (__arm_vuninitializedq_u32 (), __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_x_s8 (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -18558,48 +17049,6 @@ __arm_vshlq (uint32x4_t __a, int32x4_t __b) return __arm_vshlq_u32 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vrmulhq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vrhaddq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vqsubq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vqsubq_n_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vqaddq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vqaddq_n_u8 (__a, __b); -} - __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (uint8x16_t __a, uint8x16_t __b) @@ -18621,13 +17070,6 @@ __arm_vmullbq_int (uint8x16_t __a, uint8x16_t __b) return __arm_vmullbq_int_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vmulhq_u8 (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmladavq (uint8x16_t __a, uint8x16_t __b) @@ -18663,34 +17105,6 @@ __arm_vmaxq (uint8x16_t __a, uint8x16_t __b) return __arm_vmaxq_u8 (__a, __b); } -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vhsubq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vhsubq_n_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (uint8x16_t __a, uint8x16_t __b) -{ - return __arm_vhaddq_u8 (__a, __b); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (uint8x16_t __a, uint8_t __b) -{ - return __arm_vhaddq_n_u8 (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq (uint8x16_t __a, uint8_t __b) @@ -18999,34 +17413,6 @@ __arm_vrshlq (int8x16_t __a, int32_t __b) return __arm_vrshlq_n_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vrmulhq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vrhaddq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vqsubq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (int8x16_t __a, int8_t __b) -{ - return __arm_vqsubq_n_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshlq (int8x16_t __a, int8x16_t __b) @@ -19069,34 +17455,6 @@ __arm_vqrdmulhq (int8x16_t __a, int8_t __b) return __arm_vqrdmulhq_n_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vqdmulhq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq (int8x16_t __a, int8_t __b) -{ - return __arm_vqdmulhq_n_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vqaddq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (int8x16_t __a, int8_t __b) -{ - return __arm_vqaddq_n_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (int8x16_t __a, int8x16_t __b) @@ -19118,13 +17476,6 @@ __arm_vmullbq_int (int8x16_t __a, int8x16_t __b) return __arm_vmullbq_int_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vmulhq_s8 (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlsdavxq (int8x16_t __a, int8x16_t __b) @@ -19181,20 +17532,6 @@ __arm_vmaxq (int8x16_t __a, int8x16_t __b) return __arm_vmaxq_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vhsubq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (int8x16_t __a, int8_t __b) -{ - return __arm_vhsubq_n_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90 (int8x16_t __a, int8x16_t __b) @@ -19209,20 +17546,6 @@ __arm_vhcaddq_rot270 (int8x16_t __a, int8x16_t __b) return __arm_vhcaddq_rot270_s8 (__a, __b); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (int8x16_t __a, int8x16_t __b) -{ - return __arm_vhaddq_s8 (__a, __b); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (int8x16_t __a, int8_t __b) -{ - return __arm_vhaddq_n_s8 (__a, __b); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90 (int8x16_t __a, int8x16_t __b) @@ -19286,48 +17609,6 @@ __arm_vqshlq_n (int8x16_t __a, const int __imm) return __arm_vqshlq_n_s8 (__a, __imm); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vrmulhq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vrhaddq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vqsubq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vqsubq_n_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vqaddq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vqaddq_n_u16 (__a, __b); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (uint16x8_t __a, uint16x8_t __b) @@ -19349,13 +17630,6 @@ __arm_vmullbq_int (uint16x8_t __a, uint16x8_t __b) return __arm_vmullbq_int_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vmulhq_u16 (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmladavq (uint16x8_t __a, uint16x8_t __b) @@ -19391,34 +17665,6 @@ __arm_vmaxq (uint16x8_t __a, uint16x8_t __b) return __arm_vmaxq_u16 (__a, __b); } -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vhsubq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vhsubq_n_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (uint16x8_t __a, uint16x8_t __b) -{ - return __arm_vhaddq_u16 (__a, __b); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (uint16x8_t __a, uint16_t __b) -{ - return __arm_vhaddq_n_u16 (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq (uint16x8_t __a, uint16_t __b) @@ -19727,34 +17973,6 @@ __arm_vrshlq (int16x8_t __a, int32_t __b) return __arm_vrshlq_n_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vrmulhq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vrhaddq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vqsubq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (int16x8_t __a, int16_t __b) -{ - return __arm_vqsubq_n_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshlq (int16x8_t __a, int16x8_t __b) @@ -19797,34 +18015,6 @@ __arm_vqrdmulhq (int16x8_t __a, int16_t __b) return __arm_vqrdmulhq_n_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vqdmulhq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq (int16x8_t __a, int16_t __b) -{ - return __arm_vqdmulhq_n_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vqaddq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (int16x8_t __a, int16_t __b) -{ - return __arm_vqaddq_n_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (int16x8_t __a, int16x8_t __b) @@ -19846,13 +18036,6 @@ __arm_vmullbq_int (int16x8_t __a, int16x8_t __b) return __arm_vmullbq_int_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vmulhq_s16 (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlsdavxq (int16x8_t __a, int16x8_t __b) @@ -19909,20 +18092,6 @@ __arm_vmaxq (int16x8_t __a, int16x8_t __b) return __arm_vmaxq_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vhsubq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (int16x8_t __a, int16_t __b) -{ - return __arm_vhsubq_n_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90 (int16x8_t __a, int16x8_t __b) @@ -19937,20 +18106,6 @@ __arm_vhcaddq_rot270 (int16x8_t __a, int16x8_t __b) return __arm_vhcaddq_rot270_s16 (__a, __b); } -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (int16x8_t __a, int16x8_t __b) -{ - return __arm_vhaddq_s16 (__a, __b); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (int16x8_t __a, int16_t __b) -{ - return __arm_vhaddq_n_s16 (__a, __b); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90 (int16x8_t __a, int16x8_t __b) @@ -20014,48 +18169,6 @@ __arm_vqshlq_n (int16x8_t __a, const int __imm) return __arm_vqshlq_n_s16 (__a, __imm); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vrmulhq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vrhaddq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vqsubq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vqsubq_n_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vqaddq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vqaddq_n_u32 (__a, __b); -} - __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (uint32x4_t __a, uint32x4_t __b) @@ -20077,13 +18190,6 @@ __arm_vmullbq_int (uint32x4_t __a, uint32x4_t __b) return __arm_vmullbq_int_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vmulhq_u32 (__a, __b); -} - __extension__ extern __inline uint32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmladavq (uint32x4_t __a, uint32x4_t __b) @@ -20119,34 +18225,6 @@ __arm_vmaxq (uint32x4_t __a, uint32x4_t __b) return __arm_vmaxq_u32 (__a, __b); } -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vhsubq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vhsubq_n_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (uint32x4_t __a, uint32x4_t __b) -{ - return __arm_vhaddq_u32 (__a, __b); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (uint32x4_t __a, uint32_t __b) -{ - return __arm_vhaddq_n_u32 (__a, __b); -} - __extension__ extern __inline mve_pred16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcmpneq (uint32x4_t __a, uint32_t __b) @@ -20455,34 +18533,6 @@ __arm_vrshlq (int32x4_t __a, int32_t __b) return __arm_vrshlq_n_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vrmulhq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vrhaddq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vqsubq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq (int32x4_t __a, int32_t __b) -{ - return __arm_vqsubq_n_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqshlq (int32x4_t __a, int32x4_t __b) @@ -20525,34 +18575,6 @@ __arm_vqrdmulhq (int32x4_t __a, int32_t __b) return __arm_vqrdmulhq_n_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vqdmulhq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq (int32x4_t __a, int32_t __b) -{ - return __arm_vqdmulhq_n_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vqaddq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq (int32x4_t __a, int32_t __b) -{ - return __arm_vqaddq_n_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vornq (int32x4_t __a, int32x4_t __b) @@ -20574,13 +18596,6 @@ __arm_vmullbq_int (int32x4_t __a, int32x4_t __b) return __arm_vmullbq_int_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vmulhq_s32 (__a, __b); -} - __extension__ extern __inline int32_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmlsdavxq (int32x4_t __a, int32x4_t __b) @@ -20637,20 +18652,6 @@ __arm_vmaxq (int32x4_t __a, int32x4_t __b) return __arm_vmaxq_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vhsubq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq (int32x4_t __a, int32_t __b) -{ - return __arm_vhsubq_n_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90 (int32x4_t __a, int32x4_t __b) @@ -20665,20 +18666,6 @@ __arm_vhcaddq_rot270 (int32x4_t __a, int32x4_t __b) return __arm_vhcaddq_rot270_s32 (__a, __b); } -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (int32x4_t __a, int32x4_t __b) -{ - return __arm_vhaddq_s32 (__a, __b); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq (int32x4_t __a, int32_t __b) -{ - return __arm_vhaddq_n_s32 (__a, __b); -} - __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vcaddq_rot90 (int32x4_t __a, int32x4_t __b) @@ -24165,90 +22152,6 @@ __arm_vcaddq_rot90_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve return __arm_vcaddq_rot90_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_n_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot270_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -24291,90 +22194,6 @@ __arm_vhcaddq_rot90_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_p return __arm_vhcaddq_rot90_m_s16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_n_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmaxq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -24648,48 +22467,6 @@ __arm_vmlsdavaxq_p (int32_t __a, int16x8_t __b, int16x8_t __c, mve_pred16_t __p) return __arm_vmlsdavaxq_p_s16 (__a, __b, __c, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmullbq_int_m (int16x8_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -24816,90 +22593,6 @@ __arm_vornq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16 return __arm_vornq_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_n_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vqaddq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqdmladhq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -25005,48 +22698,6 @@ __arm_vqdmlsdhxq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred return __arm_vqdmlsdhxq_m_s16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vqdmulhq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vqdmulhq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vqdmulhq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vqdmulhq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vqdmulhq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqdmulhq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vqdmulhq_m_s16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vqrdmladhq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -25362,174 +23013,6 @@ __arm_vqshlq_m (uint16x8_t __inactive, uint16x8_t __a, int16x8_t __b, mve_pred16 return __arm_vqshlq_m_u16 (__inactive, __a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (int8x16_t __inactive, int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_n_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (int32x4_t __inactive, int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_n_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (int16x8_t __inactive, int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_n_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (uint8x16_t __inactive, uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_n_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (uint32x4_t __inactive, uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_n_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (uint16x8_t __inactive, uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_n_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vqsubq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vqsubq_m_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_m_u16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_m_s8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m (int32x4_t __inactive, int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_m_s32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m (int16x8_t __inactive, int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_m_s16 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m (uint8x16_t __inactive, uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_m_u8 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m (uint32x4_t __inactive, uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_m_u32 (__inactive, __a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_m (uint16x8_t __inactive, uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_m_u16 (__inactive, __a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vrshlq_m (int8x16_t __inactive, int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -27980,48 +25463,6 @@ __arm_vnegq_x (int32x4_t __a, mve_pred16_t __p) return __arm_vnegq_x_s32 (__a, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vmulhq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vmulhq_x_u32 (__a, __b, __p); -} - __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vmullbq_poly_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) @@ -28218,90 +25659,6 @@ __arm_vcaddq_rot270_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) return __arm_vcaddq_rot270_x_u32 (__a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_n_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_n_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_n_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_n_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_n_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_n_u32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhaddq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhaddq_x_u32 (__a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vhcaddq_rot90_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -28344,174 +25701,6 @@ __arm_vhcaddq_rot270_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) return __arm_vhcaddq_rot270_x_s32 (__a, __b, __p); } -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (int8x16_t __a, int8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_n_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (int16x8_t __a, int16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_n_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (int32x4_t __a, int32_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_n_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (uint8x16_t __a, uint8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_n_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (uint16x8_t __a, uint16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_n_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (uint32x4_t __a, uint32_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_n_u32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vhsubq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vhsubq_x_u32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrhaddq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrhaddq_x_u32 (__a, __b, __p); -} - -__extension__ extern __inline int8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_x_s8 (__a, __b, __p); -} - -__extension__ extern __inline int16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x (int16x8_t __a, int16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_x_s16 (__a, __b, __p); -} - -__extension__ extern __inline int32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x (int32x4_t __a, int32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_x_s32 (__a, __b, __p); -} - -__extension__ extern __inline uint8x16_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x (uint8x16_t __a, uint8x16_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_x_u8 (__a, __b, __p); -} - -__extension__ extern __inline uint16x8_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x (uint16x8_t __a, uint16x8_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_x_u16 (__a, __b, __p); -} - -__extension__ extern __inline uint32x4_t -__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) -__arm_vrmulhq_x (uint32x4_t __a, uint32x4_t __b, mve_pred16_t __p) -{ - return __arm_vrmulhq_x_u32 (__a, __b, __p); -} - __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vbicq_x (int8x16_t __a, int8x16_t __b, mve_pred16_t __p) @@ -32685,42 +29874,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrshlq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrshlq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vrmulhq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrmulhq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrmulhq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrmulhq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrmulhq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrmulhq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrmulhq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - -#define __arm_vrhaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrhaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrhaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrhaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrhaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrhaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrhaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - -#define __arm_vqsubq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqsubq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqsubq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqsubq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vqsubq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqsubq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqsubq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vqshluq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vqshluq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), p1), \ @@ -32831,32 +29984,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqdmullbq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqdmullbq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vqdmulhq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqdmulhq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqdmulhq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqdmulhq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) - -#define __arm_vqaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vqaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vmulltq_poly(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -32879,22 +30006,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulltq_int_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulltq_int_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vhaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vhcaddq_rot270(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -32909,22 +30020,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhcaddq_rot90_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhcaddq_rot90_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vhsubq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhsubq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhsubq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhsubq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhsubq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhsubq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhsubq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vminq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -32975,16 +30070,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint16x8_t]: __arm_vmovnbq_u16 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint32x4_t]: __arm_vmovnbq_u32 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vmulhq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulhq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulhq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulhq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulhq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulhq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulhq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vmullbq_int(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -34580,42 +31665,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrshlq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrshlq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vrmulhq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrmulhq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrmulhq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrmulhq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrmulhq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrmulhq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrmulhq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - -#define __arm_vrhaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrhaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrhaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrhaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrhaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrhaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrhaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - -#define __arm_vqsubq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vqsubq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqsubq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqsubq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqsubq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vqsubq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqsubq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqsubq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vqshlq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -34694,32 +31743,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqrdmulhq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqrdmulhq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)));}) -#define __arm_vqdmulhq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqdmulhq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqdmulhq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqdmulhq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) - -#define __arm_vqaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vqaddq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vqaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vornq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -34750,16 +31773,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmullbq_int_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmullbq_int_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) -#define __arm_vmulhq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulhq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulhq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulhq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulhq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulhq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulhq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vminq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -34794,22 +31807,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmaxaq_s16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmaxaq_s32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vhsubq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhsubq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhsubq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhsubq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhsubq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhsubq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhsubq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vhcaddq_rot90(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -34824,22 +31821,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhcaddq_rot270_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhcaddq_rot270_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)));}) -#define __arm_vhaddq(p0,p1) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce3(p1, int)), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhaddq_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t)), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhaddq_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t)), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhaddq_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t)), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhaddq_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t)), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhaddq_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t)), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhaddq_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t)));}) - #define __arm_vcaddq_rot90(p0,p1) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \ @@ -35910,16 +32891,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint8x16_t]: __arm_vmovltq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), p2), \ int (*)[__ARM_mve_type_uint16x8_t]: __arm_vmovltq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), p2));}) -#define __arm_vmulhq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulhq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulhq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulhq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulhq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulhq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulhq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vmullbq_int_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -36095,16 +33066,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int8x16_t]: __arm_vrev16q_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ int (*)[__ARM_mve_type_uint8x16_t]: __arm_vrev16q_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), p2));}) -#define __arm_vrhaddq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrhaddq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrhaddq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrhaddq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrhaddq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrhaddq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrhaddq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vshlq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -36115,16 +33076,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int16x8_t]: __arm_vshlq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int32x4_t]: __arm_vshlq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3));}) -#define __arm_vrmulhq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrmulhq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrmulhq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrmulhq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrmulhq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrmulhq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrmulhq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vrshlq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -36236,22 +33187,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t]: __arm_vshrq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), p2, p3), \ int (*)[__ARM_mve_type_uint32x4_t]: __arm_vshrq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), p2, p3));}) -#define __arm_vhaddq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_x_n_u8( __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_x_n_u16( __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_x_n_u32( __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhaddq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhaddq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhaddq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhaddq_x_u8( __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhaddq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhaddq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vhcaddq_rot270_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ @@ -36266,22 +33201,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhcaddq_rot90_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhcaddq_rot90_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3));}) -#define __arm_vhsubq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_x_n_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_x_n_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_x_n_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_x_n_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_x_n_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_x_n_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhsubq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhsubq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhsubq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhsubq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhsubq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhsubq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vclsq_x(p1,p2) ({ __typeof(p1) __p1 = (p1); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)])0, \ int (*)[__ARM_mve_type_int8x16_t]: __arm_vclsq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), p2), \ @@ -36446,28 +33365,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqshlq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqshlq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3));}) -#define __arm_vrhaddq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrhaddq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrhaddq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrhaddq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrhaddq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrhaddq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrhaddq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - -#define __arm_vrmulhq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vrmulhq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vrmulhq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vrmulhq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vrmulhq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vrmulhq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vrmulhq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vrshlq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -36509,23 +33406,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsliq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), p2, p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsliq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), p2, p3));}) -#define __arm_vqsubq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqsubq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqsubq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqsubq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vqsubq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vqsubq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vqsubq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqsubq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqsubq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqsubq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vqsubq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqsubq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqsubq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vqrdmulhq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -36799,23 +33679,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vsriq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), p2, p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vsriq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), p2, p3));}) -#define __arm_vhaddq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhaddq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhaddq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhaddq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhaddq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhaddq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhaddq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhaddq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhaddq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhaddq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vhcaddq_rot270_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -36832,23 +33695,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhcaddq_rot90_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhcaddq_rot90_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3));}) -#define __arm_vhsubq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vhsubq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vhsubq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vhsubq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vhsubq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vhsubq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vhsubq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vhsubq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vhsubq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vhsubq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3));}) - #define __arm_vmaxq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -36893,17 +33739,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vmlasq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vmlasq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3));}) -#define __arm_vmulhq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulhq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulhq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulhq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulhq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulhq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulhq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vmullbq_int_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -36933,23 +33768,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulltq_poly_m_p8 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulltq_poly_m_p16 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3));}) -#define __arm_vqaddq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqaddq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqaddq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqaddq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_int_n]: __arm_vqaddq_m_n_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_int_n]: __arm_vqaddq_m_n_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_int_n]: __arm_vqaddq_m_n_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqaddq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqaddq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqaddq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vqaddq_m_u8 (__ARM_mve_coerce(__p0, uint8x16_t), __ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vqaddq_m_u16 (__ARM_mve_coerce(__p0, uint16x8_t), __ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vqaddq_m_u32 (__ARM_mve_coerce(__p0, uint32x4_t), __ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vqdmlahq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -36958,17 +33776,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqdmlahq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqdmlahq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3));}) -#define __arm_vqdmulhq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ - __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_m_n_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_m_n_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int_n]: __arm_vqdmulhq_m_n_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce3(p2, int), p3), \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vqdmulhq_m_s8 (__ARM_mve_coerce(__p0, int8x16_t), __ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vqdmulhq_m_s16 (__ARM_mve_coerce(__p0, int16x8_t), __ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vqdmulhq_m_s32 (__ARM_mve_coerce(__p0, int32x4_t), __ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3));}) - #define __arm_vqdmullbq_m(p0,p1,p2,p3) ({ __typeof(p0) __p0 = (p0); \ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ @@ -37562,16 +34369,6 @@ extern void *__ARM_undef; int (*)[__ARM_mve_type_uint8x16_t]: __arm_vmovltq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), p2), \ int (*)[__ARM_mve_type_uint16x8_t]: __arm_vmovltq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), p2));}) -#define __arm_vmulhq_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ - __typeof(p2) __p2 = (p2); \ - _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \ - int (*)[__ARM_mve_type_int8x16_t][__ARM_mve_type_int8x16_t]: __arm_vmulhq_x_s8 (__ARM_mve_coerce(__p1, int8x16_t), __ARM_mve_coerce(__p2, int8x16_t), p3), \ - int (*)[__ARM_mve_type_int16x8_t][__ARM_mve_type_int16x8_t]: __arm_vmulhq_x_s16 (__ARM_mve_coerce(__p1, int16x8_t), __ARM_mve_coerce(__p2, int16x8_t), p3), \ - int (*)[__ARM_mve_type_int32x4_t][__ARM_mve_type_int32x4_t]: __arm_vmulhq_x_s32 (__ARM_mve_coerce(__p1, int32x4_t), __ARM_mve_coerce(__p2, int32x4_t), p3), \ - int (*)[__ARM_mve_type_uint8x16_t][__ARM_mve_type_uint8x16_t]: __arm_vmulhq_x_u8 (__ARM_mve_coerce(__p1, uint8x16_t), __ARM_mve_coerce(__p2, uint8x16_t), p3), \ - int (*)[__ARM_mve_type_uint16x8_t][__ARM_mve_type_uint16x8_t]: __arm_vmulhq_x_u16 (__ARM_mve_coerce(__p1, uint16x8_t), __ARM_mve_coerce(__p2, uint16x8_t), p3), \ - int (*)[__ARM_mve_type_uint32x4_t][__ARM_mve_type_uint32x4_t]: __arm_vmulhq_x_u32 (__ARM_mve_coerce(__p1, uint32x4_t), __ARM_mve_coerce(__p2, uint32x4_t), p3));}) - #define __arm_vmullbq_int_x(p1,p2,p3) ({ __typeof(p1) __p1 = (p1); \ __typeof(p2) __p2 = (p2); \ _Generic( (int (*)[__ARM_mve_typeid(__p1)][__ARM_mve_typeid(__p2)])0, \