From patchwork Fri May 5 16:48: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: 68842 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 9AFB93855595 for ; Fri, 5 May 2023 16:50:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9AFB93855595 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1683305407; bh=9R7ne38SxvRHKguU+MYkar3o+HQWDgpoESeYi8+LdQM=; 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=eyfdTaCA9evarA0LvLYszCmH67v3lyxoNC3374cRGAeV1P3L9qaFg3rKfYVL1Z7d7 HmioapHbfeAR4iE6ExD+z3x2G5RXx7lDnDi0aXSHQ/5lKgYFYuN5NT6N6k6yC9nqpL 6FAQIvtr1f8lSHZPB1zT3++9YAbTqmTs7+iNxJxU= 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-am6eur05on2078.outbound.protection.outlook.com [40.107.22.78]) by sourceware.org (Postfix) with ESMTPS id F27063858D35 for ; Fri, 5 May 2023 16:49:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F27063858D35 Received: from AS9PR04CA0112.eurprd04.prod.outlook.com (2603:10a6:20b:531::13) by AS2PR08MB9917.eurprd08.prod.outlook.com (2603:10a6:20b:55f::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.27; Fri, 5 May 2023 16:49:30 +0000 Received: from AM7EUR03FT052.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:531:cafe::ad) by AS9PR04CA0112.outlook.office365.com (2603:10a6:20b:531::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.27 via Frontend Transport; Fri, 5 May 2023 16:49:30 +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 AM7EUR03FT052.mail.protection.outlook.com (100.127.140.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.27 via Frontend Transport; Fri, 5 May 2023 16:49:30 +0000 Received: ("Tessian outbound 3a01b65b5aad:v136"); Fri, 05 May 2023 16:49:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 3261d7050d0efc95 X-CR-MTA-TID: 64aa7808 Received: from 8f7b35d04e14.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F504CCA3-F8CF-4106-919A-3C385131D429.1; Fri, 05 May 2023 16:49:18 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8f7b35d04e14.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 05 May 2023 16:49:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BZQgyBBGw1wKmg/oGqjwAGagzKz7RW4gLI4A2xMN5+DkIx4NHpDw4mUrtqWMT823r8dP8cgjw4k3ih8zmA6KDEYh/AxvxZcWsCRKO5IB5RhRq5UnW8dKwQMiJ7pZy1zskMDmpeUOLA+ivGfmLaw+VlOEr1T0mcm+pHTolv9Tta+9v8lTsrYQet0+quDYEMzGJ6HB1FvOoqRKpE+GWAi82YPouBAWDy40d+x7rrQW23DrrwYPAa7tjpwKbo0K49vn/V6WCyCp8KsJnhNeIpN9/kVLLu0TiwrL0DJK2IVuQVbovqFLjjf11pz2yUsDDz1JbVB8WJefcCwL9qZXiFAU7w== 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=9R7ne38SxvRHKguU+MYkar3o+HQWDgpoESeYi8+LdQM=; b=oMku1ZXOcNvdZ7N3np5M+mOxZdNWEAF9Y4HdNw83HQAC17adipP1EDDBwbIpxBq5heU7xLf/FG+oearMvQhzUVz5cXPcC5jaO/rPUXFPVCADzwob8Nmbi0xzVDe5m1xGx2JikboYOu6fXibyZ5xV3adWgEi37s2cUEsirIp0dn9auMkdhnlAqn0mK8dF1esp7ZHo1V6Wy2tdYPb3ZQlJhvTlGRPMZ3XyMKLsKVPDLV39Wa/i/TQZmfNd8UXUPyTLoMFzRYuTPqefyJrooOsmjrn9Dd6y85lY6m3qlGlLHsbe5KnXfh0xauC0noC/rmWyqhsPehJDsWc0vH75F5t6Jw== 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 DB6PR0501CA0032.eurprd05.prod.outlook.com (2603:10a6:4:67::18) by DB9PR08MB9563.eurprd08.prod.outlook.com (2603:10a6:10:451::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.31; Fri, 5 May 2023 16:49:16 +0000 Received: from DBAEUR03FT044.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:67:cafe::24) by DB6PR0501CA0032.outlook.office365.com (2603:10a6:4:67::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.27 via Frontend Transport; Fri, 5 May 2023 16:49:16 +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 DBAEUR03FT044.mail.protection.outlook.com (100.127.142.189) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6363.27 via Frontend Transport; Fri, 5 May 2023 16:49:16 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 5 May 2023 16:49:15 +0000 Received: from e129018.arm.com (10.57.22.112) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Fri, 5 May 2023 16:49:14 +0000 To: , , , CC: Christophe Lyon Subject: [PATCH 02/10] arm: [MVE intrinsics] factorize several unary operations Date: Fri, 5 May 2023 18:48:58 +0200 Message-ID: <20230505164906.596219-2-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230505164906.596219-1-christophe.lyon@arm.com> References: <20230505164906.596219-1-christophe.lyon@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DBAEUR03FT044:EE_|DB9PR08MB9563:EE_|AM7EUR03FT052:EE_|AS2PR08MB9917:EE_ X-MS-Office365-Filtering-Correlation-Id: c68065a8-d6ab-4ef9-5c1f-08db4d88b264 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: QxZhO+6/sN3yQxj4c60w3d2tz8Wc2/BnGbkEvNPyh1xbEQbiGVy0Ucc/ny5RGnLf4rd9dIsZ+TgWfgIi2r6pdF4hf1eQBpSuAnn0UERp6GYVEI7QTegHtj81qSO86xF+KoDb84OMhnHe964NoHVArKB3n9jTGgxXkspKr9gvfNzTyO2QxJI2JhRHfCPwBi5uroWTcgcHlYqV0HP0wtfHiM0T6FmnxbCJzZ/GfJwg9EmnBfyQdp8v9j7LVZ06nKRewlqInMKXIt5iIcx1ldNFashycJxJOqYvu6jJxUhx85cJueA+uTV5zq/bj9VXC1FPIYngrMXvENLMmqODj/qhTnJ3siOFI0Cwk6xowz/OXqj71Yp1TjElff7mlfU8BpcEpJpG6KTlWbmTQJzHjYlw70+72R/lIdb1AyJxRT4tV3mTHMD4buo1Uz9xI5iBC9QSyH1EKATvaJ9y0Zl3zfyZLjTlT4cvHT263m7yS7VXC6L8EN18wumK2fhBX4mE2xyMTPBtZMnsshmEAQAQIjBPZNOVMdUM0Z5nNmd/kyV7usEMfOVC4TT2EFMhKf5SpYtc97v7V5qqA9qV+pntLUQ551DKVn9/aF32YCKRoZh/rkp2SGoe4+VZOwKg5FDQmvG7//xvuhgAmR+7+68hCtJPcIRbRRGCW3A9UZqLvR6a/sOKdR49hkhKeYMNVAed3ECBh2UAsgHKlwKKdpb+N3rEQ1cbGpaaTfAwv48vy0XfWeY= 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)(396003)(376002)(346002)(451199021)(40470700004)(36840700001)(46966006)(36860700001)(36756003)(1076003)(82740400003)(336012)(356005)(81166007)(186003)(83380400001)(47076005)(26005)(426003)(6666004)(82310400005)(5660300002)(41300700001)(44832011)(40480700001)(2906002)(110136005)(478600001)(8676002)(8936002)(30864003)(7696005)(2616005)(40460700003)(316002)(6636002)(86362001)(70206006)(4326008)(70586007)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB9563 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2934d146-4973-4726-22d0-08db4d88a9ab X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BOrjlFXauLgLCn0BVPvLwj+bYALzL/YFI4pqadVWGd6PNG4qyeznQRCg4/mJ9rbB0fHs7F+f9JEqcn2+9tL1MmP+P9WqQIKiE8RIH4LtIW2UtuevLcPqIB72ec0F6c7O1CpGkfKeLeRNPEubfQwL+1kpLKSn6CrRuCbOev3RzXVzhnnGZvOhUdgTOhxpaLtomoDTPBKtq3OKN723qlB4q6vLEaAZmt7HKdo6JSlYxXufmYJbG5SdCN5kBcpqTvkRegUn8ZArUFkO2+WQL28ig5kmVVB0OvV++zZbdk5FKe0oxRsSwb9FDFVQ/SDfZlg+sRjzWCTV3Xc8ztKVHzDZN7UveMqMC1B06Bn/9O8lVQ7MeVrp/y4zDKNVca/SViTmqGWLAGdLVIBjdmThbVWAVITEn0UpnEKGzNt4SPLg69nUJz2yBQbDqGDqS3V9SJ/l7el0U76TRHfeM81PvhQXp1OGoqI9UOEwvtEtXtFceF5Z4QB33IAuQjOrqobSGJa+B7msIOkShpZeoQLuiV9T64m9izwhQNxP/9nCHG06dK7/f9t/o6Y0LvUfCFl+ACHxUQcsHw2zZCFRp7CjMIb9+LyS3fcYY1CwcWyUhNj4o0fZ+zDxHdl7u2csYQwln2RaGWUfDqYNHdwTPJwOLx1BHAInsKO6J+l8IlcFoJ2Jb/2DTXEYvpFdZBcc/r0SWK6VNjIYfbJyPvaLMgTEO0PSSQ== 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)(396003)(376002)(346002)(451199021)(36840700001)(46966006)(40470700004)(7696005)(5660300002)(1076003)(6666004)(4326008)(70586007)(6636002)(478600001)(8936002)(70206006)(316002)(2616005)(336012)(426003)(83380400001)(8676002)(41300700001)(47076005)(44832011)(30864003)(36860700001)(2906002)(81166007)(82740400003)(26005)(110136005)(186003)(86362001)(82310400005)(40460700003)(36756003)(40480700001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2023 16:49:30.5932 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c68065a8-d6ab-4ef9-5c1f-08db4d88b264 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: AM7EUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9917 X-Spam-Status: No, score=-12.5 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 vabs vcls vclz vneg vqabs vqneg vrnda vrndm vrndn vrndp vrnd vrndx so that they use the same pattern. This patch introduces the mve_mnemo iterator because some of the involved intrinsics have a different name from their mnenonic: for instance vrndq vs vrintz. 2022-09-08 Christophe Lyon gcc/ * config/arm/iterators.md (MVE_INT_M_UNARY, MVE_INT_UNARY) (MVE_FP_UNARY, MVE_FP_M_UNARY): New. (mve_insn): Add vabs, vcls, vclz, vneg, vqabs, vqneg, vrnda, vrndm, vrndn, vrndp, vrnd, vrndx. (isu): Add VABSQ_M_S, VCLSQ_M_S, VCLZQ_M_S, VCLZQ_M_U, VNEGQ_M_S, VQABSQ_M_S, VQNEGQ_M_S. (mve_mnemo): New. * config/arm/mve.md (mve_vrndq_m_f, mve_vrndxq_f) (mve_vrndq_f, mve_vrndpq_f, mve_vrndnq_f) (mve_vrndmq_f, mve_vrndaq_f): Merge into ... (@mve_q_f): ... this. (mve_vnegq_f, mve_vabsq_f): Merge into ... (mve_vq_f): ... this. (mve_vnegq_s, mve_vabsq_s): Merge into ... (mve_vq_s): ... this. (mve_vclsq_s, mve_vqnegq_s, mve_vqabsq_s): Merge into ... (@mve_q_): ... this. (mve_vabsq_m_s, mve_vclsq_m_s) (mve_vclzq_m_, mve_vnegq_m_s) (mve_vqabsq_m_s, mve_vqnegq_m_s): Merge into ... (@mve_q_m_): ... this. (mve_vabsq_m_f, mve_vnegq_m_f, mve_vrndaq_m_f) (mve_vrndmq_m_f, mve_vrndnq_m_f, mve_vrndpq_m_f) (mve_vrndxq_m_f): Merge into ... (@mve_q_m_f): ... this. --- gcc/config/arm/iterators.md | 80 ++++++++ gcc/config/arm/mve.md | 383 +++++------------------------------- 2 files changed, 126 insertions(+), 337 deletions(-) diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 53873704174..0b4f69ee874 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -333,6 +333,42 @@ (define_code_iterator SSPLUSMINUS [ss_plus ss_minus]) ;; Max/Min iterator, to factorize MVE patterns (define_code_iterator MAX_MIN_SU [smax umax smin umin]) +;; MVE integer unary operations. +(define_int_iterator MVE_INT_M_UNARY [ + VABSQ_M_S + VCLSQ_M_S + VCLZQ_M_S VCLZQ_M_U + VNEGQ_M_S + VQABSQ_M_S + VQNEGQ_M_S + ]) + +(define_int_iterator MVE_INT_UNARY [ + VCLSQ_S + VQABSQ_S + VQNEGQ_S + ]) + +(define_int_iterator MVE_FP_UNARY [ + VRNDQ_F + VRNDAQ_F + VRNDMQ_F + VRNDNQ_F + VRNDPQ_F + VRNDXQ_F + ]) + +(define_int_iterator MVE_FP_M_UNARY [ + VABSQ_M_F + VNEGQ_M_F + VRNDAQ_M_F + VRNDMQ_M_F + VRNDNQ_M_F + VRNDPQ_M_F + VRNDQ_M_F + VRNDXQ_M_F + ]) + ;; MVE integer binary operations. (define_code_iterator MVE_INT_BINARY_RTX [plus minus mult]) @@ -551,6 +587,8 @@ (define_code_attr mve_addsubmul [ (define_int_attr mve_insn [ (VABDQ_M_S "vabd") (VABDQ_M_U "vabd") (VABDQ_M_F "vabd") (VABDQ_S "vabd") (VABDQ_U "vabd") (VABDQ_F "vabd") + (VABSQ_M_F "vabs") + (VABSQ_M_S "vabs") (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") @@ -558,6 +596,9 @@ (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") + (VCLSQ_M_S "vcls") + (VCLSQ_S "vcls") + (VCLZQ_M_S "vclz") (VCLZQ_M_U "vclz") (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") @@ -577,9 +618,13 @@ (define_int_attr mve_insn [ (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") + (VNEGQ_M_F "vneg") + (VNEGQ_M_S "vneg") (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") + (VQABSQ_M_S "vqabs") + (VQABSQ_S "vqabs") (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") @@ -594,6 +639,8 @@ (define_int_attr mve_insn [ (VQDMULHQ_M_S "vqdmulh") (VQDMULHQ_N_S "vqdmulh") (VQDMULHQ_S "vqdmulh") + (VQNEGQ_M_S "vqneg") + (VQNEGQ_S "vqneg") (VQRDMLADHQ_M_S "vqrdmladh") (VQRDMLADHXQ_M_S "vqrdmladhx") (VQRDMLAHQ_M_N_S "vqrdmlah") @@ -638,6 +685,12 @@ (define_int_attr mve_insn [ (VRHADDQ_S "vrhadd") (VRHADDQ_U "vrhadd") (VRMULHQ_M_S "vrmulh") (VRMULHQ_M_U "vrmulh") (VRMULHQ_S "vrmulh") (VRMULHQ_U "vrmulh") + (VRNDAQ_F "vrnda") (VRNDAQ_M_F "vrnda") + (VRNDMQ_F "vrndm") (VRNDMQ_M_F "vrndm") + (VRNDNQ_F "vrndn") (VRNDNQ_M_F "vrndn") + (VRNDPQ_F "vrndp") (VRNDPQ_M_F "vrndp") + (VRNDQ_F "vrnd") (VRNDQ_M_F "vrnd") + (VRNDXQ_F "vrndx") (VRNDXQ_M_F "vrndx") (VRSHLQ_M_N_S "vrshl") (VRSHLQ_M_N_U "vrshl") (VRSHLQ_M_S "vrshl") (VRSHLQ_M_U "vrshl") (VRSHLQ_N_S "vrshl") (VRSHLQ_N_U "vrshl") @@ -666,6 +719,13 @@ (define_int_attr mve_insn [ ]) (define_int_attr isu [ + (VABSQ_M_S "s") + (VCLSQ_M_S "s") + (VCLZQ_M_S "i") + (VCLZQ_M_U "i") + (VNEGQ_M_S "s") + (VQABSQ_M_S "s") + (VQNEGQ_M_S "s") (VQRSHRNBQ_M_N_S "s") (VQRSHRNBQ_M_N_U "u") (VQRSHRNBQ_N_S "s") (VQRSHRNBQ_N_U "u") (VQRSHRNTQ_M_N_S "s") (VQRSHRNTQ_M_N_U "u") @@ -692,6 +752,17 @@ (define_int_attr isu [ (VSHRNTQ_N_S "i") (VSHRNTQ_N_U "i") ]) +(define_int_attr mve_mnemo [ + (VABSQ_M_S "vabs") (VABSQ_M_F "vabs") + (VNEGQ_M_S "vneg") (VNEGQ_M_F "vneg") + (VRNDAQ_F "vrinta") (VRNDAQ_M_F "vrinta") + (VRNDMQ_F "vrintm") (VRNDMQ_M_F "vrintm") + (VRNDNQ_F "vrintn") (VRNDNQ_M_F "vrintn") + (VRNDPQ_F "vrintp") (VRNDPQ_M_F "vrintp") + (VRNDQ_F "vrintz") (VRNDQ_M_F "vrintz") + (VRNDXQ_F "vrintx") (VRNDXQ_M_F "vrintx") + ]) + ;; 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. @@ -1862,6 +1933,15 @@ (define_int_attr supf [(VCVTQ_TO_F_S "s") (VCVTQ_TO_F_U "u") (VREV16Q_S "s") (VQSHRUNBQ_N_S "s") (VQSHRUNTQ_M_N_S "s") (VQSHRUNTQ_N_S "s") + (VABSQ_M_S "s") + (VCLSQ_M_S "s") + (VCLZQ_M_S "s") (VCLZQ_M_U "u") + (VNEGQ_M_S "s") + (VQABSQ_M_S "s") + (VQNEGQ_M_S "s") + (VCLSQ_S "s") + (VQABSQ_S "s") + (VQNEGQ_S "s") ]) ;; Both kinds of return insn. diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index b5c89fd4105..7bf344d547a 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -130,102 +130,21 @@ (define_insn "mve_vst4q" [(set_attr "length" "16")]) ;; -;; [vrndq_m_f]) +;; [vrndaq_f] +;; [vrndmq_f] +;; [vrndnq_f] +;; [vrndpq_f] +;; [vrndq_f] +;; [vrndxq_f] ;; -(define_insn "mve_vrndq_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: 3 "vpr_register_operand" "Up")] - VRNDQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vrintzt.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrndxq_f]) -;; -(define_insn "mve_vrndxq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] - VRNDXQ_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vrintx.f%# %q0, %q1" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrndq_f]) -;; -(define_insn "mve_vrndq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] - VRNDQ_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vrintz.f%# %q0, %q1" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrndpq_f]) -;; -(define_insn "mve_vrndpq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] - VRNDPQ_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vrintp.f%# %q0, %q1" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrndnq_f]) -;; -(define_insn "mve_vrndnq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] - VRNDNQ_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vrintn.f%# %q0, %q1" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrndmq_f]) -;; -(define_insn "mve_vrndmq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] - VRNDMQ_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vrintm.f%# %q0, %q1" - [(set_attr "type" "mve_move") -]) - -;; -;; [vrndaq_f]) -;; -(define_insn "mve_vrndaq_f" +(define_insn "@mve_q_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] - VRNDAQ_F)) + MVE_FP_UNARY)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vrinta.f%# %q0, %q1" + ".f%#\t%q0, %q1" [(set_attr "type" "mve_move") ]) @@ -244,15 +163,16 @@ (define_insn "mve_vrev64q_f" ]) ;; -;; [vnegq_f]) +;; [vabsq_f] +;; [vnegq_f] ;; -(define_insn "mve_vnegq_f" +(define_insn "mve_vq_f" [ (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) + (ABSNEG:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vneg.f%#\t%q0, %q1" + "v.f%#\t%q0, %q1" [(set_attr "type" "mve_move") ]) @@ -270,19 +190,6 @@ (define_insn "mve_vdupq_n_f" [(set_attr "type" "mve_move") ]) -;; -;; [vabsq_f]) -;; -(define_insn "mve_vabsq_f" - [ - (set (match_operand:MVE_0 0 "s_register_operand" "=w") - (abs:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vabs.f%#\t%q0, %q1" - [(set_attr "type" "mve_move") -]) - ;; ;; [vrev32q_f]) ;; @@ -365,43 +272,18 @@ (define_insn "mve_vcvtq_from_f_" "vcvt.%#.f%# %q0, %q1" [(set_attr "type" "mve_move") ]) -;; [vqnegq_s]) -;; -(define_insn "mve_vqnegq_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] - VQNEGQ_S)) - ] - "TARGET_HAVE_MVE" - "vqneg.s%#\t%q0, %q1" - [(set_attr "type" "mve_move") -]) - -;; -;; [vqabsq_s]) -;; -(define_insn "mve_vqabsq_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] - VQABSQ_S)) - ] - "TARGET_HAVE_MVE" - "vqabs.s%#\t%q0, %q1" - [(set_attr "type" "mve_move") -]) ;; -;; [vnegq_s]) +;; [vabsq_s] +;; [vnegq_s] ;; -(define_insn "mve_vnegq_s" +(define_insn "mve_vq_s" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) + (ABSNEG:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) ] "TARGET_HAVE_MVE" - "vneg.s%#\t%q0, %q1" + "v.s%#\t%q0, %q1" [(set_attr "type" "mve_move") ]) @@ -460,16 +342,18 @@ (define_expand "mve_vclzq_u" ) ;; -;; [vclsq_s]) +;; [vclsq_s] +;; [vqabsq_s] +;; [vqnegq_s] ;; -(define_insn "mve_vclsq_s" +(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")] - VCLSQ_S)) + MVE_INT_UNARY)) ] "TARGET_HAVE_MVE" - "vcls.s%#\t%q0, %q1" + ".%#\t%q0, %q1" [(set_attr "type" "mve_move") ]) @@ -487,19 +371,6 @@ (define_insn "@mve_vaddvq_" [(set_attr "type" "mve_move") ]) -;; -;; [vabsq_s]) -;; -(define_insn "mve_vabsq_s" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (abs:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE" - "vabs.s%#\t%q0, %q1" - [(set_attr "type" "mve_move") -]) - ;; ;; [vrev32q_u, vrev32q_s]) ;; @@ -2254,18 +2125,23 @@ (define_insn "mve_vshlcq_" "vshlc %q0, %1, %4") ;; -;; [vabsq_m_s]) +;; [vabsq_m_s] +;; [vclsq_m_s] +;; [vclzq_m_s, vclzq_m_u] +;; [vnegq_m_s] +;; [vqabsq_m_s] +;; [vqnegq_m_s] ;; -(define_insn "mve_vabsq_m_s" +(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: 3 "vpr_register_operand" "Up")] - VABSQ_M_S)) + MVE_INT_M_UNARY)) ] "TARGET_HAVE_MVE" - "vpst\;vabst.s%# %q0, %q2" + "vpst\;t.%#\t%q0, %q2" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -2285,38 +2161,6 @@ (define_insn "mve_vaddvaq_p_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vclsq_m_s]) -;; -(define_insn "mve_vclsq_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: 3 "vpr_register_operand" "Up")] - VCLSQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vclst.s%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vclzq_m_s, vclzq_m_u]) -;; -(define_insn "mve_vclzq_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: 3 "vpr_register_operand" "Up")] - VCLZQ_M)) - ] - "TARGET_HAVE_MVE" - "vpst\;vclzt.i%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vcmpcsq_m_n_u]) ;; @@ -2813,22 +2657,6 @@ (define_insn "mve_vmvnq_m_" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vnegq_m_s]) -;; -(define_insn "mve_vnegq_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: 3 "vpr_register_operand" "Up")] - VNEGQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vnegt.s%#\t%q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vpselq_u, vpselq_s]) ;; @@ -2845,22 +2673,6 @@ (define_insn "@mve_vpselq_" [(set_attr "type" "mve_move") ]) -;; -;; [vqabsq_m_s]) -;; -(define_insn "mve_vqabsq_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: 3 "vpr_register_operand" "Up")] - VQABSQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqabst.s%#\t%q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqdmlahq_n_s]) ;; @@ -2893,22 +2705,6 @@ (define_insn "mve_vqdmlashq_n_" [(set_attr "type" "mve_move") ]) -;; -;; [vqnegq_m_s]) -;; -(define_insn "mve_vqnegq_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: 3 "vpr_register_operand" "Up")] - VQNEGQ_M_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vqnegt.s%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vqrdmladhq_s]) ;; @@ -3198,19 +2994,27 @@ (define_insn "mve_vmladavaxq_s" "vmladavax.s%#\t%0, %q2, %q3" [(set_attr "type" "mve_move") ]) + ;; -;; [vabsq_m_f]) +;; [vabsq_m_f] +;; [vnegq_m_f] +;; [vrndaq_m_f] +;; [vrndmq_m_f] +;; [vrndnq_m_f] +;; [vrndpq_m_f] +;; [vrndq_m_f] +;; [vrndxq_m_f] ;; -(define_insn "mve_vabsq_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: 3 "vpr_register_operand" "Up")] - VABSQ_M_F)) + MVE_FP_M_UNARY)) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vabst.f%# %q0, %q2" + "vpst\;t.f%#\t%q0, %q2" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -3863,21 +3667,6 @@ (define_insn "mve_vmvnq_m_n_" "vpst\;vmvnt.i%# %q0, %2" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vnegq_m_f]) -;; -(define_insn "mve_vnegq_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: 3 "vpr_register_operand" "Up")] - VNEGQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vnegt.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) ;; ;; [vbicq_m_n_s, vbicq_m_n_u] @@ -4104,86 +3893,6 @@ (define_insn "mve_vrmlsldavhxq_p_sv4si" [(set_attr "type" "mve_move") (set_attr "length""8")]) -;; -;; [vrndaq_m_f]) -;; -(define_insn "mve_vrndaq_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: 3 "vpr_register_operand" "Up")] - VRNDAQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vrintat.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrndmq_m_f]) -;; -(define_insn "mve_vrndmq_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: 3 "vpr_register_operand" "Up")] - VRNDMQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vrintmt.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrndnq_m_f]) -;; -(define_insn "mve_vrndnq_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: 3 "vpr_register_operand" "Up")] - VRNDNQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vrintnt.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrndpq_m_f]) -;; -(define_insn "mve_vrndpq_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: 3 "vpr_register_operand" "Up")] - VRNDPQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vrintpt.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vrndxq_m_f]) -;; -(define_insn "mve_vrndxq_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: 3 "vpr_register_operand" "Up")] - VRNDXQ_M_F)) - ] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" - "vpst\;vrintxt.f%# %q0, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - ;; ;; [vcvtmq_m_s, vcvtmq_m_u]) ;;