From patchwork Thu Jun 8 10:00:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 70779 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 D67183857006 for ; Thu, 8 Jun 2023 10:01:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D67183857006 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686218501; bh=8VVxeB+D9DsPc7RCTgORvGeU9X+zlWz86Nt65SiJV+g=; h=To:CC:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=T0pqwqnZfMcwmvDKWihZzcJEnbQtsycUhFNIclPg8O/cKRZViDdnsPzeCQmiZNZ24 cSbSwSYd78OcJU7nl1VkBjxaWNRiNK76cYFPS/WX7R7TpUbLQMZcQuCxwPSvik6Ipp mjOzX2C2N9GkIq/k+oGQoPvBOTOT1sxWP/a/iHy4= 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-am6eur05on2046.outbound.protection.outlook.com [40.107.22.46]) by sourceware.org (Postfix) with ESMTPS id A166E385842A for ; Thu, 8 Jun 2023 10:01:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A166E385842A Received: from AS9PR06CA0746.eurprd06.prod.outlook.com (2603:10a6:20b:487::26) by DU0PR08MB9912.eurprd08.prod.outlook.com (2603:10a6:10:400::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.31; Thu, 8 Jun 2023 10:01:09 +0000 Received: from AM7EUR03FT040.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:487:cafe::5) by AS9PR06CA0746.outlook.office365.com (2603:10a6:20b:487::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33 via Frontend Transport; Thu, 8 Jun 2023 10:01:07 +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 AM7EUR03FT040.mail.protection.outlook.com (100.127.140.128) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.25 via Frontend Transport; Thu, 8 Jun 2023 10:01:07 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Thu, 08 Jun 2023 10:01:07 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 4830d43b40309348 X-CR-MTA-TID: 64aa7808 Received: from 6c92bfec6e99.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 282249FF-1733-474A-8A6A-10921CD8E132.1; Thu, 08 Jun 2023 10:01:01 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 6c92bfec6e99.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 08 Jun 2023 10:01:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WdO00tw+vBOItKJLlmd04xkKG403VqQHLStQLxITnzNT+jA+wwzd0Gd159fQGLf9+lJIm6kndwVQp/aMFB1JnIIW/S0g8sus6pINWkOimcoEXHfGvtyUpqVZe+agpkhmtCJG+WaI76EKt3EFZCkE4rfkAhV34/yHq7NEkRGe2sFoii4ewfUU5Nnq9vCj9rKuYjxmKl0yJIWySE9DXttYM6/qjDUW/mR4CHTqqgEAMJQDYYunNxlSZeRD0opkhKVooHuKWTP130/LqpWf1a6AiaLVa5mxqZo+1MRKmSSHTVYXGHi3Nm0Le7DvJMZMd4h1t9TmnzxBafVdP/A0m8zd3Q== 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=8VVxeB+D9DsPc7RCTgORvGeU9X+zlWz86Nt65SiJV+g=; b=f5A8/IFoU0SfObguhH1yDgwQUPor2bcyAJeFO2/sMfax+68u84RyViL8iu0pz5kPbWZAL42BTqy04CSeLbFFvIu3GgssqvG053AIQEzYHnt1/YgX+iVpKhFEurA9EdXsqCBY1jrCFjMbyVD1EwkdnXx7IB+PH2dXFFR8YwBqFASRn3cpL1QRRiMRhu/LxEbCOd0q6YYKyrzXhUWoyurvkSLZLU5rYuPRlLQThZm2q5IWhj91HK3HZEy7fACz9cMBlxUwBVF53apiQonUisYsPAnRRAQGQ+OF6F9N7h2ehFr5NXPHX1OStmm9CQSX+kO6+jQRr5OHsu758z/9H/SmTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by GV2PR08MB8049.eurprd08.prod.outlook.com (2603:10a6:150:ae::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.31; Thu, 8 Jun 2023 10:00:58 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0%6]) with mapi id 15.20.6455.030; Thu, 8 Jun 2023 10:00:57 +0000 To: GCC Patches CC: Richard Sandiford , Kyrylo Tkachov Subject: [PATCH][GCC][AArch64] convert some patterns to new MD syntax Thread-Topic: [PATCH][GCC][AArch64] convert some patterns to new MD syntax Thread-Index: AdmZ8Azqx6oepj3lTo+skW1K0nBi0w== Date: Thu, 8 Jun 2023 10:00:57 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|GV2PR08MB8049:EE_|AM7EUR03FT040:EE_|DU0PR08MB9912:EE_ X-MS-Office365-Filtering-Correlation-Id: d3d5b53f-8db8-4414-43ff-08db6807479e 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: DBHDdChks3GPayrHEwtelVYCIlPfgo9h/gZU36SaKvvXvguZ8qKDCmcCrzmmdEuosRVeJW8byk9k6tHaFLYjUn8WvI8xfMhGHn6yi1rs/QkCHNY7DWyAvuVCRFqG0kz1+ijS9Gx29vaRGcHaRulMNUTjEku5FAhsCoasQscQXzQieF7eJK5uDVUdIgEBN6rIqJxwvKx04XqjBCXl3kcif1vqUg52EuVmVAJIrmes6mfTrmIn43s2H0LTzutvXGACOz+3rCP/yi2srM/09l1wUbvwkpCYg6iGKWApdgR22J1bFghjLMAWPkIdAge2y21GYJtPq56lJMJwAgrbwFIBmiEb3yK8yqYRnNy6LcjXD9ynaECN8ACOJO3gpBXnC1aVM/hy1x4pf83PACteHmhPPruGaj7ul9ClKZJRPN7/Q4A+mw8zzWw2V9VAYMLnmjMJk86/DUK2q0gYTK5zL1ajbWs/WWvlooLhz93UrFWI9SjRZUS2r8VWBUyRiEMxeOy/88Mk5OMj7VolSVXVHRK+v3M6PgkGvBNTwPGkDpFvMvWU2lFx/5WMnnYhUmbW9+KiAGSV/pnFNs1UmYFRznofhsblM/o3S276s5HxxwLl4Mji7LoLWWZH+GkaEszJGRqB X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR08MB5325.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(366004)(39860400002)(376002)(346002)(396003)(136003)(451199021)(478600001)(7696005)(38100700002)(122000001)(38070700005)(66946007)(66556008)(76116006)(64756008)(6916009)(4326008)(66446008)(66476007)(33656002)(86362001)(54906003)(55016003)(316002)(99936003)(71200400001)(2906002)(41300700001)(186003)(8936002)(8676002)(6506007)(26005)(9686003)(5660300002)(52536014); DIR:OUT; SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8049 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT040.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 5fd25f8d-ba5d-493b-d99f-08db680741b2 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1wKZuQZIkchL5M08+XkYRs3/F2oKGFG4XmI/p5/b9pLezFZlbhde9eA2/FYge2L/gRCmAEDWmot1cHJIxMstHrdaRW+esCjUKcJ4+2VLbR9S28KVY4BxgkpYjDKfDEdoc0QPYTsZxFNZcgtGhK+blTXfc7UPtDVGi5sTOM3irWkqM02nMSiPtOkziilzB91wt1XS6B9EVsidb8fD2/KsoRT6NPTok9AhcFxYxv1+JRU0kZYbzpX5GGm1lqR17w7WZ4zU+dMe2RnX1WI111vTkCZWa7v/wTVrbhvs/U2pdUUlVPk/nQevJz/eRkD2TYSX9qvQa2lKWmAlY/Qn3fQ818qy3/irWvYwxWzTADmbOvhoXUMBXrJswVkK1Vdz1ZjTNhO1/F5K7vpjal1wqU1Lqz7D0pOr2zVaFGZ5APHjBExAxFut1YwcRISEclNQoaF5w1kcZodptkbMviwYdyRKVPNQ/vDY+IWWfmqMYD2fIDsokcTLtRSOxzGaKOQVmxE9HCAeK4VAX5JfAdSkaekd907Eks60BXu8xWP8xPzkFtC/oxchjAPbDVH69dQi3nrBTuFS1f54l2Mu3+WSvUeKLkoY/njZJAZIL0NlQz5uGqFUxsHeA6SrJMQn6o8mfabWQYJs5LHHHj4fKEWGVqehN+Aq3ArynY5wWzErX3JWAOxr3oXbthK2YgKR8yng9TuciVyiqIuOZgZNKU+HyxSo2yRb+hIHZqHpZate7rQ+kW0O1u+YMs7dKYzyxTFw5ZG1 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)(346002)(396003)(136003)(376002)(451199021)(46966006)(40470700004)(36840700001)(186003)(8676002)(52536014)(235185007)(70586007)(70206006)(5660300002)(54906003)(316002)(41300700001)(6916009)(8936002)(40480700001)(55016003)(4326008)(478600001)(40460700003)(81166007)(82740400003)(6506007)(356005)(86362001)(9686003)(2906002)(99936003)(26005)(33656002)(7696005)(336012)(47076005)(36860700001)(82310400005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2023 10:01:07.7733 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d3d5b53f-8db8-4414-43ff-08db6807479e 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: AM7EUR03FT040.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9912 X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, MEDICAL_SUBJECT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SCC_5_SHORT_WORD_LINES, 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: Tamar Christina via Gcc-patches From: Tamar Christina Reply-To: Tamar Christina Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This converts some patterns in the AArch64 backend to use the new compact syntax. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? gcc/ChangeLog: * config/aarch64/aarch64.md (arches): Add nosimd. (*mov_aarch64, *movsi_aarch64, *movdi_aarch64): Rewrite to compact syntax. Thanks, Tamar --- inline copy of patch --- diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 8b8951d7b14aa1a8858fdc24bf6f9dd3d927d5ea..601173338a9068f7694867c8e6e78f9b10f32a17 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -366,7 +366,7 @@ (define_constants ;; As a convenience, "fp_q" means "fp" + the ability to move between ;; Q registers and is equivalent to "simd". -(define_enum "arches" [ any rcpc8_4 fp fp_q simd sve fp16]) +(define_enum "arches" [ any rcpc8_4 fp fp_q simd nosimd sve fp16]) (define_enum_attr "arch" "arches" (const_string "any")) @@ -397,6 +397,9 @@ (define_attr "arch_enabled" "no,yes" (and (eq_attr "arch" "fp_q, simd") (match_test "TARGET_SIMD")) + (and (eq_attr "arch" "nosimd") + (match_test "!TARGET_SIMD")) + (and (eq_attr "arch" "fp16") (match_test "TARGET_FP_F16INST")) @@ -1206,44 +1209,27 @@ (define_expand "mov" ) (define_insn "*mov_aarch64" - [(set (match_operand:SHORT 0 "nonimmediate_operand" "=r,r, w,r ,r,w, m,m,r,w,w") - (match_operand:SHORT 1 "aarch64_mov_operand" " r,M,D,Usv,m,m,rZ,w,w,rZ,w"))] + [(set (match_operand:SHORT 0 "nonimmediate_operand") + (match_operand:SHORT 1 "aarch64_mov_operand"))] "(register_operand (operands[0], mode) || aarch64_reg_or_zero (operands[1], mode))" -{ - switch (which_alternative) - { - case 0: - return "mov\t%w0, %w1"; - case 1: - return "mov\t%w0, %1"; - case 2: - return aarch64_output_scalar_simd_mov_immediate (operands[1], - mode); - case 3: - return aarch64_output_sve_cnt_immediate (\"cnt\", \"%x0\", operands[1]); - case 4: - return "ldr\t%w0, %1"; - case 5: - return "ldr\t%0, %1"; - case 6: - return "str\t%w1, %0"; - case 7: - return "str\t%1, %0"; - case 8: - return TARGET_SIMD ? "umov\t%w0, %1.[0]" : "fmov\t%w0, %s1"; - case 9: - return TARGET_SIMD ? "dup\t%0., %w1" : "fmov\t%s0, %w1"; - case 10: - return TARGET_SIMD ? "dup\t%0, %1.[0]" : "fmov\t%s0, %s1"; - default: - gcc_unreachable (); - } -} - ;; The "mov_imm" type for CNT is just a placeholder. - [(set_attr "type" "mov_reg,mov_imm,neon_move,mov_imm,load_4,load_4,store_4, - store_4,neon_to_gp,neon_from_gp,neon_dup") - (set_attr "arch" "*,*,simd,sve,*,*,*,*,*,*,*")] + {@ [cons: =0, 1; attrs: type, arch] + [r , r ; mov_reg , * ] mov\t%w0, %w1 + [r , M ; mov_imm , * ] mov\t%w0, %1 + [w , D; neon_move , simd ] << aarch64_output_scalar_simd_mov_immediate (operands[1], mode); + /* The "mov_imm" type for CNT is just a placeholder. */ + [r , Usv ; mov_imm , sve ] << aarch64_output_sve_cnt_immediate ("cnt", "%x0", operands[1]); + [r , m ; load_4 , * ] ldr\t%w0, %1 + [w , m ; load_4 , * ] ldr\t%0, %1 + [m , rZ ; store_4 , * ] str\\t%w1, %0 + [m , w ; store_4 , * ] str\t%1, %0 + [r , w ; neon_to_gp , simd ] umov\t%w0, %1.[0] + [r , w ; neon_to_gp , nosimd] fmov\t%w0, %s1 /*foo */ + [w , rZ ; neon_from_gp, simd ] dup\t%0., %w1 + [w , rZ ; neon_from_gp, nosimd] fmov\t%s0, %w1 + [w , w ; neon_dup , simd ] dup\t%0, %1.[0] + [w , w ; neon_dup , nosimd] fmov\t%s0, %s1 + } ) (define_expand "mov" @@ -1280,79 +1266,71 @@ (define_expand "mov" ) (define_insn_and_split "*movsi_aarch64" - [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r, r,w, m, m, r, r, r, w,r,w, w") - (match_operand:SI 1 "aarch64_mov_operand" " r,r,k,M,n,Usv,m,m,rZ,w,Usw,Usa,Ush,rZ,w,w,Ds"))] + [(set (match_operand:SI 0 "nonimmediate_operand") + (match_operand:SI 1 "aarch64_mov_operand"))] "(register_operand (operands[0], SImode) || aarch64_reg_or_zero (operands[1], SImode))" - "@ - mov\\t%w0, %w1 - mov\\t%w0, %w1 - mov\\t%w0, %w1 - mov\\t%w0, %1 - # - * return aarch64_output_sve_cnt_immediate (\"cnt\", \"%x0\", operands[1]); - ldr\\t%w0, %1 - ldr\\t%s0, %1 - str\\t%w1, %0 - str\\t%s1, %0 - adrp\\t%x0, %A1\;ldr\\t%w0, [%x0, %L1] - adr\\t%x0, %c1 - adrp\\t%x0, %A1 - fmov\\t%s0, %w1 - fmov\\t%w0, %s1 - fmov\\t%s0, %s1 - * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode);" + {@ [cons: =0, 1; attrs: type, arch, length] + [r , r ; mov_reg , * , 4] mov\t%w0, %w1 + [k , r ; mov_reg , * , 4] ^ + [r , k ; mov_reg , * , 4] ^ + [r , M ; mov_imm , * , 4] mov\t%w0, %1 + [r , n ; mov_imm , * ,16] # + /* The "mov_imm" type for CNT is just a placeholder. */ + [r , Usv; mov_imm , sve , 4] << aarch64_output_sve_cnt_immediate ("cnt", "%x0", operands[1]); + [r , m ; load_4 , * , 4] ldr\t%w0, %1 + [w , m ; load_4 , fp , 4] ldr\t%s0, %1 + [m , rZ ; store_4 , * , 4] str\t%w1, %0 + [m , w ; store_4 , fp , 4] str\t%s1, %0 + [r , Usw; load_4 , * , 8] adrp\t%x0, %A1;ldr\t%w0, [%x0, %L1] + [r , Usa; adr , * , 4] adr\t%x0, %c1 + [r , Ush; adr , * , 4] adrp\t%x0, %A1 + [w , rZ ; f_mcr , fp , 4] fmov\t%s0, %w1 + [r , w ; f_mrc , fp , 4] fmov\t%w0, %s1 + [w , w ; fmov , fp , 4] fmov\t%s0, %s1 + [w , Ds ; neon_move, simd, 4] << aarch64_output_scalar_simd_mov_immediate (operands[1], SImode); + } "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode) && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" - [(const_int 0)] - "{ - aarch64_expand_mov_immediate (operands[0], operands[1]); - DONE; - }" - ;; The "mov_imm" type for CNT is just a placeholder. - [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,mov_imm,load_4, - load_4,store_4,store_4,load_4,adr,adr,f_mcr,f_mrc,fmov,neon_move") - (set_attr "arch" "*,*,*,*,*,sve,*,fp,*,fp,*,*,*,fp,fp,fp,simd") - (set_attr "length" "4,4,4,4,*, 4,4, 4,4, 4,8,4,4, 4, 4, 4, 4") -] + [(const_int 0)] + { + aarch64_expand_mov_immediate (operands[0], operands[1]); + DONE; + } ) (define_insn_and_split "*movdi_aarch64" - [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r, r,w, m,m, r, r, r, w,r,w, w") - (match_operand:DI 1 "aarch64_mov_operand" " r,r,k,O,n,Usv,m,m,rZ,w,Usw,Usa,Ush,rZ,w,w,Dd"))] + [(set (match_operand:DI 0 "nonimmediate_operand") + (match_operand:DI 1 "aarch64_mov_operand"))] "(register_operand (operands[0], DImode) || aarch64_reg_or_zero (operands[1], DImode))" - "@ - mov\\t%x0, %x1 - mov\\t%0, %x1 - mov\\t%x0, %1 - * return aarch64_is_mov_xn_imm (INTVAL (operands[1])) ? \"mov\\t%x0, %1\" : \"mov\\t%w0, %1\"; - # - * return aarch64_output_sve_cnt_immediate (\"cnt\", \"%x0\", operands[1]); - ldr\\t%x0, %1 - ldr\\t%d0, %1 - str\\t%x1, %0 - str\\t%d1, %0 - * return TARGET_ILP32 ? \"adrp\\t%0, %A1\;ldr\\t%w0, [%0, %L1]\" : \"adrp\\t%0, %A1\;ldr\\t%0, [%0, %L1]\"; - adr\\t%x0, %c1 - adrp\\t%x0, %A1 - fmov\\t%d0, %x1 - fmov\\t%x0, %d1 - fmov\\t%d0, %d1 - * return aarch64_output_scalar_simd_mov_immediate (operands[1], DImode);" - "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), DImode) - && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" - [(const_int 0)] - "{ - aarch64_expand_mov_immediate (operands[0], operands[1]); - DONE; - }" - ;; The "mov_imm" type for CNTD is just a placeholder. - [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,mov_imm, - load_8,load_8,store_8,store_8,load_8,adr,adr,f_mcr,f_mrc, - fmov,neon_move") - (set_attr "arch" "*,*,*,*,*,sve,*,fp,*,fp,*,*,*,fp,fp,fp,simd") - (set_attr "length" "4,4,4,4,*, 4,4, 4,4, 4,8,4,4, 4, 4, 4, 4")] + {@ [cons: =0, 1; attrs: type, arch, length] + [r , r ; mov_reg , * , 4] mov\t%x0, %x1 + [k , r ; mov_reg , * , 4] mov\t%0, %x1 + [r , k ; mov_reg , * , 4] mov\t%x0, %1 + [r , O ; mov_imm , * , 4] << aarch64_is_mov_xn_imm (INTVAL (operands[1])) ? "mov\t%x0, %1" : "mov\t%w0, %1"; + [r , n ; mov_imm , * ,16] # + /* The "mov_imm" type for CNT is just a placeholder. */ + [r , Usv; mov_imm , sve , 4] << aarch64_output_sve_cnt_immediate ("cnt", "%x0", operands[1]); + [r , m ; load_8 , * , 4] ldr\t%x0, %1 + [w , m ; load_8 , fp , 4] ldr\t%d0, %1 + [m , rZ ; store_8 , * , 4] str\t%x1, %0 + [m , w ; store_8 , fp , 4] str\t%d1, %0 + [r , Usw; load_8 , * , 8] << TARGET_ILP32 ? "adrp\t%0, %A1;ldr\t%w0, [%0, %L1]" : "adrp\t%0, %A1;ldr\t%0, [%0, %L1]"; + [r , Usa; adr , * , 4] adr\t%x0, %c1 + [r , Ush; adr , * , 4] adrp\t%x0, %A1 + [w , rZ ; f_mcr , fp , 4] fmov\t%d0, %x1 + [r , w ; f_mrc , fp , 4] fmov\t%x0, %d1 + [w , w ; fmov , fp , 4] fmov\t%d0, %d1 + [w , Dd ; neon_move, simd, 4] << aarch64_output_scalar_simd_mov_immediate (operands[1], DImode); + } + "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), DImode) + && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" + [(const_int 0)] + { + aarch64_expand_mov_immediate (operands[0], operands[1]); + DONE; + } ) (define_insn "insv_imm"