From patchwork Fri Jan 10 17:24:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alice Carlotti X-Patchwork-Id: 104511 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 B31DF3858C35 for ; Fri, 10 Jan 2025 17:26:08 +0000 (GMT) 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-vi1eur05on20610.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::610]) by sourceware.org (Postfix) with ESMTPS id E467A3857039 for ; Fri, 10 Jan 2025 17:24:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E467A3857039 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E467A3857039 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2613::610 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1736529876; cv=pass; b=cc7uwKmT1UVK+orugnS8ypcMi9+ieYY2RPxmF1oHel1rBEBdOYn+jkg4aUDA2SpC+5qcXPQtmZPp0jhG8lNNyyTdNSX1dOgTj27xFkykAukRqQl85JM2Od+nj5g8crDSNAV8v/YsOifVLwty2C2eCywE6RBEKOAjVWj4BeyPzIo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1736529876; c=relaxed/simple; bh=37aMn+CAc3GDXZrcInCgSEArzwB8Awo/6jhNa1GzB3k=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=B0h/zQUzsGzvFi2FR1z5pnHyotpHjMXji0LTVKH38bhCpkSk0AH9MshMu8bKyC1oyNVOZJpE1FENBTNZhRCB0RV/2zytWhmFrd2s+IhF4Ig2d9PuoGDshgzVb1HX5Pr8AUesdPriy4tka5DKj2A5Dd7ntgikIQHo3pmlvoZz0ew= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cQ11C26GWzF1aT2eWqOt+n72Qsu/nCEnOoQdkw9mVzlIG7/XXYI3H/rsrlstLhTv5xfLm9+j+p9l5kHRb7Im2Gf2VfhcGi2Kvc8ZcAOkjsuoXBbG5BK3RLdvaryqRtwYCEPGzBH7AxHlZ6/E2XntJrnICbmCFakhqFopJA5g5S5d080XxWuGnvqWvXNJgC00j4Vv+/s2rse3vMigo7wnvhlfUPRfb3dWClXq8sJEXpyFfrrQs/mkr0/zNUgkG7qvfT9SKvGhb2MkSLnEf83cKgDR+W/a6KEDxngJ2RgqN6JgW6trtWr2pOIRjrwa5KJanEd5JdqTtCquT7U6fTiIPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=mxzvdsQAv/FkZeZTcw3DDU7xlgFBoztU7giYn/MYCZY=; b=KPgmp7Np0N5L8oxUNVpo6CZsXNlbz5EH0sE9v6hALlEKQKP1UBSFf1wY6HsOPSKH1li6nt8fipMQ2oLa8zWzMJ9pzGQqbiRzTuV0AKvtlrXk6BW5JW6bXAvkBcvUOoIPNAxciC4Aqt+ZSMhD2KOm/QWAYfsGC2c7F8wCa5jz2P1Z7UuDzZATo1OlOfbLkDfH195Ij25tLwLXVn4y01EAu61y/WaeCnarSPd8Qhl7ykdQnjYV3iQ+bqiVFGq3FW28FN1Hl91NpVNse0zcou2HKnqiGyrDjcZZ0/AfOXfxGG6w+dYziBSjlZ1EKCTlk5iYU+LuWJbRKQ/smhA/E529lA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mxzvdsQAv/FkZeZTcw3DDU7xlgFBoztU7giYn/MYCZY=; b=QbEv4a8EiZJdGvhq05Dhck0vojrKwcSoxzJnh2sAk5VlXgr+sjoZanE7oB1q9kOFM8PgbSRvHkXJ2DOxkFk+wS1gOa2TBue7E4V8e0GXlMaewubSLjt1A8BTgmxJd8eM6mwW06aTaJNxvs0/saaPwQ9bpE2ITz4coBkNJ101fIg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DU0PR08MB8255.eurprd08.prod.outlook.com (2603:10a6:10:411::9) by PA4PR08MB7457.eurprd08.prod.outlook.com (2603:10a6:102:2a4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8335.14; Fri, 10 Jan 2025 17:24:28 +0000 Received: from DU0PR08MB8255.eurprd08.prod.outlook.com ([fe80::cbc8:c020:6a1b:d27a]) by DU0PR08MB8255.eurprd08.prod.outlook.com ([fe80::cbc8:c020:6a1b:d27a%3]) with mapi id 15.20.8335.011; Fri, 10 Jan 2025 17:24:28 +0000 Date: Fri, 10 Jan 2025 17:24:26 +0000 From: Andrew Carlotti To: gcc-patches@gcc.gnu.org Cc: Richard Sandiford , Kyrylo Tkachov Subject: [PATCH 09/11] aarch64: Rewrite architecture strings for assembler Message-ID: <5377019a-ee01-2dc4-ebf1-f1f9f5833d15@e124511.cambridge.arm.com> References: Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: LO2P265CA0493.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:13a::18) To DU0PR08MB8255.eurprd08.prod.outlook.com (2603:10a6:10:411::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR08MB8255:EE_|PA4PR08MB7457:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d0afcfd-0a77-4b9c-7fac-08dd319ba308 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: ExHqOGy6nyjCTwNjkdensmYYzlS6RMBuQwDwOIFaY5+Pkox4/3jigs3zA6XyKhi+spTyjr5B7UtL4oSvAiuoldOI39vZCWsm3Jm4hdIIJOKjVq9LeDz+x0HShuCI6W8oQY5o+ZjYmVjXfs3Og5zeWcVgmY7jiSrZthPgNnwsKIlteSX8Zuxlj57479rWdXNyGWZyEzNvzOzhjuKpxkxjmZsAq52qkV9OdJVr62+fE86Jn24DhOf21pri0OO6l0BsVqVHXBruXN+sM00JHXKmmpQwDz+Ptw3K1frCW9FEmUkCE4J/mmW9VU+6vR6GeKgUa4lceP0Lqq74kVDL0ciuKxGnHCsu3iXdKhJqd1YbX/GL8FA372DcAvkbJoabhnMKSxtNHg6I1XCdhZAlbzI+SeZ2wMWflBU9BuDCqJ/v4jlyto7/d/u2CUAuLXq+CBzUW8Tb0TO//dNZM/WTFfI8uyEaVAgRxgJ3/njt8TLkTxF2FS34XBRMkN5mfDCx9YyP1eLc9513OWRPER5uM5NCgsFx6v6MzZLAVz7tAltHbOcT0mEM5icA0pra5SVfKuXD9AJXPRs5aXPCPiyV4bg3hcnlXnI4T+DyPfVN6hG5CvrsVkePJcNmHvCzUJELBdfFWCZfA/0a8XG2fFXeLqesg2CFRj8eca0V0/vse2k9LTkplGZ3gyrTAqH/hx87A1d12bitH9pgCPsXl8/HKkgJBzRPPRO6kFYye+9WHDRP6/6M0oA4GG/dcmI2XpJdYEPB1c4wVpoQSK534eMuuxrH46jk26rawGs53PZxYCEfK4IuqS4Wc2kbGC3ZcfPFDiuLqCk3MrTZd1QXJ8aGuCCeo5vDNNbdn04S/HhVnm1wiNQlV3D0nmWIIDB/0XaM+5dP5mJ8bnNSiGT04WHnXB7BqfFmlcakZmciYhqbhcd8GGRShxZYwdwiu7H+Y52Z0NCEDetCi6sz9aGBE/LGXhVU3jOgeYsRDYv0Ynjd0xNLc3oycy7T0zlHJk+ZV7Zy4PEZ54D12EE8M/Vt2cjE78/XjmLEBRLiKh31FStGT5eWhQ4jKHyodt1w5Z6SsvorlnblbzbLrze5b35I/cNmxgxO6wUeWTtHqEDTrKDkOGjKXVjASzwOmXi/Cdn7d/D3pcQKGPYCptV8262mV9DsxUWGbXSIwK2WesSpyS9Jo4etY1ae7gZD+78pDmCZd+EDREu1Fho3sfBMLMhPQJLaHz1cdWhJfwe3WXJ6Y4TiFJZjXEbz/eNEJ5r3hwJHX6BCj+6DE9g2KukBUpRpHoXZet/vh1nCiLgRsdGfImFCbe/2ELTWc7QvrB8buK7giDQ0NswAog3atQt7GxJV5nzZDjrFCFjiWYApdi00LmlTJmFAmDQPFONLxwIR0oaiQBnkLmQS X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR08MB8255.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TiUE9kWN51TgP0JLulqwjb6KuS3Y8gw5uF+/Vi44MyM2h35YHJsRZK7AFa/pPrfrA327AqmACgsfaRk3jNeZVyx76/2I+RNZs14MlR9rYJceMxq0n9MO9YA8GHiV/e6fG8S4yLkgMexXI5LUaiSmYG6agn+KQahVlVs5+GbdSMtO4lO4sssSzX+CtxzsMTBQfFI+UGFsdfN36l7eG8lx2HmOwqTZppsyGk/s4VZX/qK6NJsvNqPzO+UvgYHxFrzbCT1mjWC8UxN6Ckjqilgeewrs9E1E9tal/Ph8byarCYpk73KXAj31G1UUiEBikVCr12ToBGLJUHBqzyeYjp1rsMJu7YGr+lj2VEN9S+eFgUvCYs3Cq47b0YTF7c3kCW+yMT1bQhaNg0FkrpgXlyB9fLeK5vY/oxCazUcNBC6lgrUtG4OLsq6utLSDOOQ5v15juR3S6Nomeu9p9Efao5JQ24Gs0RBwlU49tHWEKZG/rQoqrn1YqXfmkR/+dCt0IaFpVYwd9GXWqI8IMkShr8vg2cJuEuM/+R/Bc7zPrfUPnfva8wgcglu9r9tZjoFCUGX4wLP1WJvdPb8uiese+5vw0IoNJLGrVhZuI/OvXk/bCuGKIxiPfBREPxx66BLc5vituV2/OqqI8K5+i87EDLYAWny4aP1DYTaSCbOK6W7JsuEK3KvPZsDMZd27s69z1QvHAVCQt9o1Gh3eOdzaMXHpJPZs+Pz7Z9/3To1vJtStNiFAWxLps/5ZPiHVO175QJcGP3J2Ri713U4KtMFmFLgFWuY1jaki28v41ByiHI5nqV+i3/Gn5k6Oj4TxmoXaPMLKRRX98rNRUdr0Ua/gUvogKdXojSaT3b2OtH6C6J7rKZtniPD/fRvv4wJFDoGRzMktq4zgqf8Xel8bE+uWBuy5Rc58wgC3bim45oBZE0Rs9yqel9cuTqitqt6vPeujD4VK/xIffSogNWhL6dtrcwwhL20GoRLFpdvuaJXHX9OyWWFpJGMfHPSKi6HPDzIyGj2yE2vz1hO1Cz5TVFE3DB7B4++wnptQLlA7TG3w6XqpKWVtE04MOK7LTddtVZ+DJ/09ndlmJ9znHgelixJztuHjedonC78iOy3gXSa5/AprSqnSbDYglwQNs/5CUa5eTemr4FBP/7UUmoDfKBH/NZvqgB5ft0yT+nqszf4CptInkGcLbZL+RWaq9oWWTZqv8A75cHS7djOv+B2L+XA1/bDi+3KGbsCDcbfYVK2QLqo0m6rnAcBfCACo+ZM68B4VmUY5kB6Kq1eCZZNbSh0/9ufrP5s9u4ILI8aWzKOSozGHFwcyHgh0hia4OOjS7GLXNdyCM+fpneXbnENOMSJy4KUWpmkhIWold9h0oESiyfnwTWzPEipZU9ZupQNevhxpR74VcYCl0NSokMO11s6TxzhT5Xhi3mbxpv9MFoZLjSGFOMCIaN1NrecRrMMk2AFqrUUqm0wHlYMhyCa1ULZHxRjPlQGbEgJpmhvv5AO3v5/05ViGKze60i0oKa5hgR33BAMGIBUyOGUbAVOhdrqv45irB7tLa+pU4Y6MwIqe5SGZ1XqzrrSKY4+vsADC8FZi/klDTnIF1gUsHiRmfADaPr6FOw== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d0afcfd-0a77-4b9c-7fac-08dd319ba308 X-MS-Exchange-CrossTenant-AuthSource: DU0PR08MB8255.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2025 17:24:28.2255 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XKGubpn3QFR7aaayzLRAgetoVl1LejLAT4eLmeUvv6wtSUccKerc3CXBmHxB4JE5i2rlElMlEaYFaJk4v71e6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB7457 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_NONE, TXREP 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org Add infrastructure to allow rewriting the architecture strings passed to the assembler (either as -march options or .arch directives). There was already canonicalisation everywhere except for an -march driver option passed directly to the compiler; this patch applies the same canonicalisation there as well. gcc/ChangeLog: * common/config/aarch64/aarch64-common.cc (aarch64_get_arch_string_for_assembler): New. (aarch64_rewrite_march): New. (aarch64_rewrite_selected_cpu): Call new function. * config/aarch64/aarch64-elf.h (ASM_SPEC): Remove identity mapping. * config/aarch64/aarch64-protos.h (aarch64_get_arch_string_for_assembler): New. * config/aarch64/aarch64.cc (aarch64_declare_function_name): Call new function. (aarch64_start_file): Ditto. * config/aarch64/aarch64.h * config/aarch64/aarch64.h (EXTRA_SPEC_FUNCTIONS): Use new macro name. (MCPU_TO_MARCH_SPEC): Rename to... (MARCH_REWRITE_SPEC): ...this, and add new spec rule. (aarch64_rewrite_march): New declaration. (MCPU_TO_MARCH_SPEC_FUNCTIONS): Rename to... (MARCH_REWRITE_SPEC_FUNCTIONS): ...this, and add new function. (ASM_CPU_SPEC): Use new macro name. diff --git a/gcc/common/config/aarch64/aarch64-common.cc b/gcc/common/config/aarch64/aarch64-common.cc index 0d0502a72687cb50e1dd66d9e4312386ee6096fe..297210e3809255d51b1aff4c827501534fae9546 100644 --- a/gcc/common/config/aarch64/aarch64-common.cc +++ b/gcc/common/config/aarch64/aarch64-common.cc @@ -697,6 +697,50 @@ aarch64_get_extension_string_for_isa_flags return outstr; } +/* Generate an arch string to be passed to the assembler. */ + +std::string +aarch64_get_arch_string_for_assembler (aarch64_arch arch, + aarch64_feature_flags flags) +{ + const struct arch_info *entry; + for (entry = all_architectures; entry->arch != aarch64_no_arch; entry++) + { + if (entry->arch == arch) + break; + } + + std::string outstr = entry->name + + aarch64_get_extension_string_for_isa_flags (flags, entry->flags); + + return outstr; +} + +/* Called by the driver to rewrite a name passed to the -march + argument in preparation to be passed to the assembler. The + names passed from the commend line will be in ARGV, we want + to use the right-most argument, which should be in + ARGV[ARGC - 1]. ARGC should always be greater than 0. */ + +const char * +aarch64_rewrite_march (int argc, const char **argv) +{ + gcc_assert (argc); + const char *name = argv[argc - 1]; + aarch64_arch arch; + aarch64_feature_flags flags; + + aarch64_validate_march (name, &arch, &flags); + + std::string outstr = aarch64_get_arch_string_for_assembler (arch, flags); + + /* We are going to memory leak here, nobody elsewhere + in the callchain is going to clean up after us. The alternative is + to allocate a static buffer, and assert that it is big enough for our + modified string, which seems much worse! */ + return xstrdup (outstr.c_str ()); +} + /* Attempt to rewrite NAME, which has been passed on the command line as a -mcpu option to an equivalent -march value. If we can do so, return the new string, otherwise return an error. */ @@ -740,7 +784,7 @@ aarch64_rewrite_selected_cpu (const char *name) break; } - /* We couldn't find that proceesor name, or the processor name we + /* We couldn't find that processor name, or the processor name we found does not map to an architecture we understand. */ if (p_to_a->arch == aarch64_no_arch || a_to_an->arch == aarch64_no_arch) @@ -749,9 +793,8 @@ aarch64_rewrite_selected_cpu (const char *name) aarch64_feature_flags extensions = p_to_a->flags; aarch64_parse_extension (extension_str.c_str (), &extensions, NULL); - std::string outstr = a_to_an->name - + aarch64_get_extension_string_for_isa_flags (extensions, - a_to_an->flags); + std::string outstr = aarch64_get_arch_string_for_assembler (a_to_an->arch, + extensions); /* We are going to memory leak here, nobody elsewhere in the callchain is going to clean up after us. The alternative is diff --git a/gcc/config/aarch64/aarch64-elf.h b/gcc/config/aarch64/aarch64-elf.h index b2f13be2dab5931f19d62fc29febceb98baf6fee..f6ebb723715ad0f092f14f06e733eff2b4fe3a1e 100644 --- a/gcc/config/aarch64/aarch64-elf.h +++ b/gcc/config/aarch64/aarch64-elf.h @@ -136,7 +136,6 @@ #define ASM_SPEC "\ %{mbig-endian:-EB} \ %{mlittle-endian:-EL} \ -%{march=*:-march=%*} \ %(asm_cpu_spec)" \ ASM_MABI_SPEC #endif diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index 4114fc9b3b7645b8781257f6f775ddfe7e8c339e..b27da1e25720da06712da0eff1d527e23408a59f 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -1213,6 +1213,8 @@ bool aarch64_validate_mtune (const char *, aarch64_cpu *); const char *aarch64_rewrite_selected_cpu (const char *name); std::string aarch64_get_extension_string_for_isa_flags (aarch64_feature_flags, aarch64_feature_flags); +std::string aarch64_get_arch_string_for_assembler (aarch64_arch, + aarch64_feature_flags); rtl_opt_pass *make_pass_aarch64_early_ra (gcc::context *); rtl_opt_pass *make_pass_fma_steering (gcc::context *); diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index cee1c7f04cefc4789ca4b9f4e5b946ea642c5e47..f138e56bcf8a90193ab83e30d7489f88d6ec9ab6 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -1470,7 +1470,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define HAVE_LOCAL_CPU_DETECT # define EXTRA_SPEC_FUNCTIONS \ { "local_cpu_detect", host_detect_local_cpu }, \ - MCPU_TO_MARCH_SPEC_FUNCTIONS + MARCH_REWRITE_SPEC_FUNCTIONS /* Rewrite -m{arch,cpu,tune}=native based on the host system information. When rewriting -march=native convert it into an -mcpu option if no other @@ -1487,7 +1487,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); { "tune", "%{!mcpu=*:%{!mtune=*:%{!march=native:-mtune=%(VALUE)}}}" }, #else # define MCPU_MTUNE_NATIVE_SPECS "" -# define EXTRA_SPEC_FUNCTIONS MCPU_TO_MARCH_SPEC_FUNCTIONS +# define EXTRA_SPEC_FUNCTIONS MARCH_REWRITE_SPEC_FUNCTIONS # define CONFIG_TUNE_SPEC \ {"tune", "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}"}, #endif @@ -1502,18 +1502,21 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); {"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ CONFIG_TUNE_SPEC -#define MCPU_TO_MARCH_SPEC \ - " %{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}" +#define MARCH_REWRITE_SPEC \ + " %{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}" \ + " %{march=*:-march=%:rewrite_march(%{march=*:%*})}" +extern const char *aarch64_rewrite_march (int argc, const char **argv); extern const char *aarch64_rewrite_mcpu (int argc, const char **argv); extern const char *is_host_cpu_not_armv8_base (int argc, const char **argv); -#define MCPU_TO_MARCH_SPEC_FUNCTIONS \ +#define MARCH_REWRITE_SPEC_FUNCTIONS \ + { "rewrite_march", aarch64_rewrite_march }, \ { "rewrite_mcpu", aarch64_rewrite_mcpu }, \ { "is_local_not_armv8_base", is_host_cpu_not_armv8_base }, #define ASM_CPU_SPEC \ - MCPU_TO_MARCH_SPEC + MARCH_REWRITE_SPEC #define EXTRA_SPECS \ { "asm_cpu_spec", ASM_CPU_SPEC } diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 75ba66a979c979fd01948b0a2066a15371df9bfa..95861c1088052cc60d1e02c654ee970cb8bc3bef 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -24831,16 +24831,12 @@ aarch64_declare_function_name (FILE *stream, const char* name, targ_options = TREE_TARGET_OPTION (target_option_current_node); gcc_assert (targ_options); - const struct processor *this_arch - = aarch64_get_arch (targ_options->x_selected_arch); - auto isa_flags = aarch64_get_asm_isa_flags (targ_options); - std::string extension - = aarch64_get_extension_string_for_isa_flags (isa_flags, - this_arch->flags); + aarch64_arch arch = targ_options->x_selected_arch; + std::string to_print + = aarch64_get_arch_string_for_assembler (arch, isa_flags); /* Only update the assembler .arch string if it is distinct from the last such string we printed. */ - std::string to_print = this_arch->name + extension; if (to_print != aarch64_last_printed_arch_string) { asm_fprintf (asm_out_file, "\t.arch %s\n", to_print.c_str ()); @@ -24962,19 +24958,16 @@ aarch64_start_file (void) struct cl_target_option *default_options = TREE_TARGET_OPTION (target_option_default_node); - const struct processor *default_arch - = aarch64_get_arch (default_options->x_selected_arch); + aarch64_arch default_arch = default_options->x_selected_arch; auto default_isa_flags = aarch64_get_asm_isa_flags (default_options); - std::string extension - = aarch64_get_extension_string_for_isa_flags (default_isa_flags, - default_arch->flags); - - aarch64_last_printed_arch_string = default_arch->name + extension; - aarch64_last_printed_tune_string = ""; - asm_fprintf (asm_out_file, "\t.arch %s\n", - aarch64_last_printed_arch_string.c_str ()); - - default_file_start (); + std::string arch_string + = aarch64_get_arch_string_for_assembler (default_arch, default_isa_flags); + aarch64_last_printed_arch_string = arch_string; + aarch64_last_printed_tune_string = ""; + asm_fprintf (asm_out_file, "\t.arch %s\n", + arch_string.c_str ()); + + default_file_start (); } /* Emit load exclusive. */