From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2114.outbound.protection.outlook.com [40.107.215.114]) by sourceware.org (Postfix) with ESMTPS id 9DE6A3858C5F for ; Fri, 12 May 2023 07:17:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9DE6A3858C5F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=cipunited.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=cipunited.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g+FGXoTUf7bbVZNBGP09nilTfMK1W4EAadJp9R+c4GQjwRr2tiuE0As/pPgnegWq+OYjO/y7J2IXJKouw2hxr7yEdYL7E27odDDn+rKesUP3cNn9L4eNVg73jdXMz3dcMUeiFwi3IjdNsQocPauD0KzHD89pbG6YQyPG1uXtpM3DxwmDDnv2+jOe3PEcqweKoHw44VyNIZ4pWg+PuW68VFYtPchuSvCsO+bMcC2KnuX8vxk1aSqh1RqChG1auGfCND7JCnO20VoGC6uQ5Mo0gNmqVKIn3T/82WFUfW7cma1cAmEnQnQtrvT3v594c8MQOlxROXk5kL57GyrARhx9yA== 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=IOjN5ov/i/R30NshVlt1s2SFbj1Xe6810MUjHKyzET4=; b=dW/f4pgoOYr9rEmBFewBILfngW66CfxkQVgnw27dmg5o2I5T+gzY+g5YKI59phez4cUoyrAhzWP0+iDIug7wqeftOQWAXfVRw2gCJxPzWNjCUZMt/4Z4WmxD8Rw5X3/0jKnP1hWk82dRMVN3b1ab8qU4x8+ZIzJjvkKwM72VsJiYzKN4o5HU/JFfvt6fKjLbFbAtZKjAf1o/1jcqNcBSjwCFRIjv+McfW0OJLp5Hq0RBrSBQqNC250OEBwH4QOVl2MoUYHsY7u0RoW/Zv97Y3gaqdnMKklKoWWJxG3Wt0JhdeW+pJTqJtD/gCQZggxJdyO5Z72PxB/3b23s74C+0Gg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cipunited.com; dmarc=pass action=none header.from=cipunited.com; dkim=pass header.d=cipunited.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cipunited.onmicrosoft.com; s=selector1-cipunited-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IOjN5ov/i/R30NshVlt1s2SFbj1Xe6810MUjHKyzET4=; b=LRVzefkvnsNtlWOkOLE1tkbxnPurtmAM3H3v1sAPu0M3mXMqAnbgY4vSlQiqqjY26OvDzdYmdAVxgZ53tAH5825ApSvYzEBWdYCWfHYbK4VbWgPv5GlEFBmKnEcL8wb2Eqd0jRBbiuvAC29fnBubFNjwP+7tIUc6R+YsbfdBwp4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=cipunited.com; Received: from TYZPR04MB6117.apcprd04.prod.outlook.com (2603:1096:400:25a::9) by TYZPR04MB7131.apcprd04.prod.outlook.com (2603:1096:400:462::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.21; Fri, 12 May 2023 07:17:40 +0000 Received: from TYZPR04MB6117.apcprd04.prod.outlook.com ([fe80::4016:87b:f0d1:b150]) by TYZPR04MB6117.apcprd04.prod.outlook.com ([fe80::4016:87b:f0d1:b150%6]) with mapi id 15.20.6387.021; Fri, 12 May 2023 07:17:40 +0000 From: YunQiang Su To: binutils@sourceware.org Cc: syq@debian.org, macro@orcam.me.uk, xry111@xry111.site, richard.sandiford@arm.com, jiaxun.yang@flygoat.com, amodra@gmail.com, YunQiang Su Subject: [PATCH 1/4] MIPS: gas: alter 64 or 32 for mipsisa triples if march is implicit Date: Fri, 12 May 2023 15:17:17 +0800 Message-Id: <20230512071720.1880195-2-yunqiang.su@cipunited.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230512071720.1880195-1-yunqiang.su@cipunited.com> References: <20230512071720.1880195-1-yunqiang.su@cipunited.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: TYCP301CA0006.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::15) To TYZPR04MB6117.apcprd04.prod.outlook.com (2603:1096:400:25a::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYZPR04MB6117:EE_|TYZPR04MB7131:EE_ X-MS-Office365-Filtering-Correlation-Id: db539ddc-dd3e-4b92-89ea-08db52b8f8bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WPAznIVNjmKvRHsvQ4ryAoxaQU6BDTcEvIF2uR3x9k/vN9i3s/YDkkev9Hc8t9wPa7VDlakhfa7EwtiJFTR5c6MttcjSOzu7XJxtWgLx4bQWCD7ZS7atruiu44KMHCZ24PUtWy+GENRB675TzW52T4K+NPMya6XGflPEESF0Uwt2L5N88NBtsb5hgde/vHbiAlZDpz4D9auL/gZ4XVs88VIzqWNv/t6PsWJ1UG9LODkMFAbmu2H5b4hT9pMXeIyVEKsZJLOK34bztVQWkUAb/IQUhIJYtwO3vywYqbtQHYf7f0t5429Vr4usFZ07WPRtdejsHPhGl19zQqfZJmexQtMuZ/W+79vNNtPyGgrc4J3wrJgDtTa62vUTg/mEW8puP7e6MBe22MMpGHmHbtUpHm4ehrvyTLtopMAfwt6IRwIXHKdRP5e4m5DtY4mfLQR/44+fAkg5umBsju7Rm83TLSG+0gQzghWwcQlopvXz1K/6wtf49RzxVDx6l853T059b14pCSRVc+Dq2oGkvpNqT2qNPVRVxkdwgo8LjMc5mf+m26ciZQnzO7WL6o4hCIZbnvODG9KMC49EHhKmb41Ai/1Zk/FsPvEdykNvBUeX77Hz+/Zf04GRz3xiYqt+ZiL6 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYZPR04MB6117.apcprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(366004)(376002)(346002)(396003)(39830400003)(451199021)(52116002)(6916009)(66946007)(4326008)(6486002)(66476007)(66556008)(478600001)(316002)(36756003)(86362001)(6666004)(83380400001)(6512007)(1076003)(26005)(2616005)(107886003)(6506007)(186003)(5660300002)(8676002)(2906002)(30864003)(8936002)(41300700001)(38350700002)(38100700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cueeO926a4zyxu6874Q85RsV80aVfTLLNbAah5ErvzAkBrvqJmSz2+KWVvOU?= =?us-ascii?Q?0hwRGOdgOFAiQQK3ass/apU3fp7+pYsm1WielRM3ZHvNxysxBPfsoTJTKObJ?= =?us-ascii?Q?CJDR1ZVwOduOgwaRsnUPeEs2vp6/0gkyoFRrnJGJn8SOBnqOAvqBIp5PpfAb?= =?us-ascii?Q?cNRMT9vFsG84M2DMLgbUHrMpBho0CpbFXdfeTM0E8C4VgzxdBOBkpb82zciC?= =?us-ascii?Q?Qaq49telHBDK7YHgureFKefgUfkiwuLV3pZD9FPfIb7WY1GJti4F9QbAm+UO?= =?us-ascii?Q?hV7fbWCJ72QzjBhNucuLfWKmAT9Oab9P+aZ55WHPCO+xTMbj4PVcgRO14RCp?= =?us-ascii?Q?z2CgxXiPtrAJF5ZiZfvmO7FnyMipDivVSFvrhNRYY9DK4rttm62uX8XWxlcJ?= =?us-ascii?Q?ECMnU2k8v80q/PVgB9V7XxfSEwEMTTVqbH1hr7IxCQPBDMHstEMCQEw7XBAP?= =?us-ascii?Q?mfWGpwUlXmBv2hPu/xhPG19aEUnLXtKvUzO0zBlSEflw1X5kK3ilC4SuE1Ji?= =?us-ascii?Q?iov8Qe+S0s8sFY5ja2Qn66rboYavzZq5bcbQOau6L8Dbgdb7/4C2keNCrGlp?= =?us-ascii?Q?Hgq6GNvl7lm3AG2UBge/S6Nwz7dxBBGycPWI7QfVtH9gjtwdFjZJT4lpweOv?= =?us-ascii?Q?6fRWbBu9gNMt20cuFTblDfVmLJX/WWhFu++rg3qSeAN45+vujU5oHfGn+DvN?= =?us-ascii?Q?ZyBwd0hrdQgG3f2IkHKY0uPrRlvN5f18kLcpDVLyTp0E4qPDqGn+MumhUwkG?= =?us-ascii?Q?NdwYPARULF1CG761NuiTqVohS98O6ysbz55ADmBeLggd92D+TEhtK4jlZtyk?= =?us-ascii?Q?EBY9U9lSvDMnxfptGS98EwZv/0QoheBtlKjVY7oqPYWZNryfYzSOVEaCFL5B?= =?us-ascii?Q?6tvyL+aNPKikk7CbiDtTy0XPx5D9Yy7E4skJ8utNAy2Gn6ovgl9i10wHJBev?= =?us-ascii?Q?/Cg/yOOVSLAeH+/vlx07Ss3LUV5IiocGMQu7Onx8bHvHu0k6JAkq2cBW/Wa9?= =?us-ascii?Q?ikwLAzODeArTMZNHFbTIDN3kKjrX0SBDVg7X8kF8ZK/Hby8nkdispRuaKPeX?= =?us-ascii?Q?qslsIfZqMc1MgEIXSRY5rpt9h8QgxSTmHVXee+NT7dpnndxngFPfWP7MYdkx?= =?us-ascii?Q?Xfk+WGzVDL0skSdGJpSRYVICFjtBZqPCJAy2kJWvZRxqxtRZ2C7Fl3DvXA/V?= =?us-ascii?Q?hfpMtshEb0Imubr89I4s8AOhVmBW82BbEhBWAc5ma65raiEPlpCnyUzZTAz6?= =?us-ascii?Q?Jwqb7Zxv6/qlErbuIHvV/2Fm9HalcVJ723UJg7XXQQaEnue+dhlbBcgE/irR?= =?us-ascii?Q?NqxfdinOXHMnWSSLjKg+7rvFYudnf3oi5wzmtIK2cD39hNSyml9rZKFDXOXO?= =?us-ascii?Q?gMOlI7414ET9/yYaKTzSsv6F/96q5/W9+zX4oaWRaugAIl7ZX5Qqez+N6cYK?= =?us-ascii?Q?XfpJW9DIpiQ0cVY/HOx1FsavKtDV5Hs0ys/z4ZI7EFUwVA316q6fqzo6kv/b?= =?us-ascii?Q?iS5fi0ZRHDkw2yES9H/GKM5IblPxnV1T0dF4lDB5YtRAdECePRhaWB48V55R?= =?us-ascii?Q?c+7NSyXfnFFuVWa5Y2cYT5Ssl7bn6QIfFSISFLdcJ6Q4kr8Usz12EH9U0Rjt?= =?us-ascii?Q?rQ=3D=3D?= X-OriginatorOrg: cipunited.com X-MS-Exchange-CrossTenant-Network-Message-Id: db539ddc-dd3e-4b92-89ea-08db52b8f8bc X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB6117.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2023 07:17:40.6563 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e31cf5b5-ee69-4d5f-9c69-edeeda2458c0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RKNH4419sSIDUTdMNPzyI0phBNwy6n6VU/kkiRiEJtVgXcsqcKlKL7905NqquiEAo3CbBOfR0mPtOE0l+4ojTsFQ7FgHj4Mr1yYLCAxGm+Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR04MB7131 X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: When configure with triples mipsisa[32,64]rN[el,], the march value is pinned to a fix value if not given explicitly. for example 1) mipsisa32r6-linux-gnu -n32 xx.s will complains that: -march=mips32r6 is not compatible with the selected ABI 2) mipsisa64r2el-linux-gnu -o32 generates objects with 64bit CPU: ELF 32-bit LSB relocatable, MIPS, MIPS64 rel2 version 1 (SYSV) They are not good default behaviors: Let's alter the CPU info Since we are using these triples as a regular linux distributions, let's alter march according to ABI. --- gas/config/tc-mips.c | 280 ++++++++++++++++++-------------- gas/testsuite/gas/mips/mips.exp | 4 +- 2 files changed, 162 insertions(+), 122 deletions(-) diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 8a970ceada2..5110a310241 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -1431,6 +1431,8 @@ struct mips_cpu_info int flags; /* MIPS_CPU_* flags. */ int ase; /* Set of ASEs implemented by the CPU. */ int isa; /* ISA level. */ + int isa_32; /* Best matched 32bit ISA level. */ + int isa_64; /* Best matched 64bit ISA level. */ int cpu; /* CPU number (default CPU if ISA). */ }; @@ -1439,6 +1441,7 @@ struct mips_cpu_info static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *); static const struct mips_cpu_info *mips_cpu_info_from_isa (int); static const struct mips_cpu_info *mips_cpu_info_from_arch (int); +static const struct mips_cpu_info *mips_cpu_info_from_name (const char *); /* Command-line options. */ const char *md_shortopts = "O::g::G:"; @@ -19983,179 +19986,180 @@ s_mips_mask (int reg_type) static const struct mips_cpu_info mips_cpu_info_table[] = { /* Entries for generic ISAs. */ - { "mips1", MIPS_CPU_IS_ISA, 0, ISA_MIPS1, CPU_R3000 }, - { "mips2", MIPS_CPU_IS_ISA, 0, ISA_MIPS2, CPU_R6000 }, - { "mips3", MIPS_CPU_IS_ISA, 0, ISA_MIPS3, CPU_R4000 }, - { "mips4", MIPS_CPU_IS_ISA, 0, ISA_MIPS4, CPU_R8000 }, - { "mips5", MIPS_CPU_IS_ISA, 0, ISA_MIPS5, CPU_MIPS5 }, - { "mips32", MIPS_CPU_IS_ISA, 0, ISA_MIPS32, CPU_MIPS32 }, - { "mips32r2", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "mips32r3", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R3, CPU_MIPS32R3 }, - { "mips32r5", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R5, CPU_MIPS32R5 }, - { "mips32r6", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R6, CPU_MIPS32R6 }, - { "mips64", MIPS_CPU_IS_ISA, 0, ISA_MIPS64, CPU_MIPS64 }, - { "mips64r2", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R2, CPU_MIPS64R2 }, - { "mips64r3", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R3, CPU_MIPS64R3 }, - { "mips64r5", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R5, CPU_MIPS64R5 }, - { "mips64r6", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R6, CPU_MIPS64R6 }, + { "mips1", MIPS_CPU_IS_ISA, 0, ISA_MIPS1, ISA_MIPS1, ISA_MIPS3, CPU_R3000 }, + { "mips2", MIPS_CPU_IS_ISA, 0, ISA_MIPS2, ISA_MIPS2, ISA_MIPS3, CPU_R6000 }, + { "mips3", MIPS_CPU_IS_ISA, 0, ISA_MIPS3, ISA_MIPS2, ISA_MIPS3, CPU_R4000 }, + { "mips4", MIPS_CPU_IS_ISA, 0, ISA_MIPS4, ISA_MIPS2, ISA_MIPS4, CPU_R8000 }, + { "mips5", MIPS_CPU_IS_ISA, 0, ISA_MIPS5, ISA_MIPS2, ISA_MIPS5, CPU_MIPS5 }, + { "mips32", MIPS_CPU_IS_ISA, 0, ISA_MIPS32, ISA_MIPS32, ISA_MIPS64, CPU_MIPS32 }, + { "mips32r2", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R2, ISA_MIPS32R2, ISA_MIPS64R2, CPU_MIPS32R2 }, + { "mips32r3", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R3, ISA_MIPS32R3, ISA_MIPS64R3, CPU_MIPS32R3 }, + { "mips32r5", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R5, ISA_MIPS32R5, ISA_MIPS64R5, CPU_MIPS32R5 }, + { "mips32r6", MIPS_CPU_IS_ISA, 0, ISA_MIPS32R6, ISA_MIPS32R6, ISA_MIPS64R6, CPU_MIPS32R6 }, + { "mips64", MIPS_CPU_IS_ISA, 0, ISA_MIPS64, ISA_MIPS32, ISA_MIPS64, CPU_MIPS64 }, + { "mips64r2", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R2, ISA_MIPS32R2, ISA_MIPS64R2, CPU_MIPS64R2 }, + { "mips64r3", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R3, ISA_MIPS32R3, ISA_MIPS64R3, CPU_MIPS64R3 }, + { "mips64r5", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R5, ISA_MIPS32R5, ISA_MIPS64R5, CPU_MIPS64R5 }, + { "mips64r6", MIPS_CPU_IS_ISA, 0, ISA_MIPS64R6, ISA_MIPS32R6, ISA_MIPS64R6, CPU_MIPS64R6 }, /* MIPS I */ - { "r3000", 0, 0, ISA_MIPS1, CPU_R3000 }, - { "r2000", 0, 0, ISA_MIPS1, CPU_R3000 }, - { "r3900", 0, 0, ISA_MIPS1, CPU_R3900 }, + { "r3000", 0, 0, ISA_MIPS1, 0, 0, CPU_R3000 }, + { "r2000", 0, 0, ISA_MIPS1, 0, 0, CPU_R3000 }, + { "r3900", 0, 0, ISA_MIPS1, 0, 0, CPU_R3900 }, /* MIPS II */ - { "r6000", 0, 0, ISA_MIPS2, CPU_R6000 }, + { "r6000", 0, 0, ISA_MIPS2, 0, 0, CPU_R6000 }, /* MIPS III */ - { "r4000", 0, 0, ISA_MIPS3, CPU_R4000 }, - { "r4010", 0, 0, ISA_MIPS2, CPU_R4010 }, - { "vr4100", 0, 0, ISA_MIPS3, CPU_VR4100 }, - { "vr4111", 0, 0, ISA_MIPS3, CPU_R4111 }, - { "vr4120", 0, 0, ISA_MIPS3, CPU_VR4120 }, - { "vr4130", 0, 0, ISA_MIPS3, CPU_VR4120 }, - { "vr4181", 0, 0, ISA_MIPS3, CPU_R4111 }, - { "vr4300", 0, 0, ISA_MIPS3, CPU_R4300 }, - { "r4400", 0, 0, ISA_MIPS3, CPU_R4400 }, - { "r4600", 0, 0, ISA_MIPS3, CPU_R4600 }, - { "orion", 0, 0, ISA_MIPS3, CPU_R4600 }, - { "r4650", 0, 0, ISA_MIPS3, CPU_R4650 }, - { "r5900", 0, 0, ISA_MIPS3, CPU_R5900 }, + { "r4000", 0, 0, ISA_MIPS3, 0, 0, CPU_R4000 }, + { "r4010", 0, 0, ISA_MIPS2, 0, 0, CPU_R4010 }, + { "vr4100", 0, 0, ISA_MIPS3, 0, 0, CPU_VR4100 }, + { "vr4111", 0, 0, ISA_MIPS3, 0, 0, CPU_R4111 }, + { "vr4120", 0, 0, ISA_MIPS3, 0, 0, CPU_VR4120 }, + { "vr4130", 0, 0, ISA_MIPS3, 0, 0, CPU_VR4120 }, + { "vr4181", 0, 0, ISA_MIPS3, 0, 0, CPU_R4111 }, + { "vr4300", 0, 0, ISA_MIPS3, 0, 0, CPU_R4300 }, + { "r4400", 0, 0, ISA_MIPS3, 0, 0, CPU_R4400 }, + { "r4600", 0, 0, ISA_MIPS3, 0, 0, CPU_R4600 }, + { "orion", 0, 0, ISA_MIPS3, 0, 0, CPU_R4600 }, + { "r4650", 0, 0, ISA_MIPS3, 0, 0, CPU_R4650 }, + { "r5900", 0, 0, ISA_MIPS3, 0, 0, CPU_R5900 }, /* ST Microelectronics Loongson 2E and 2F cores. */ - { "loongson2e", 0, 0, ISA_MIPS3, CPU_LOONGSON_2E }, - { "loongson2f", 0, ASE_LOONGSON_MMI, ISA_MIPS3, CPU_LOONGSON_2F }, + { "loongson2e", 0, 0, ISA_MIPS3, 0, 0, CPU_LOONGSON_2E }, + { "loongson2f", 0, ASE_LOONGSON_MMI, ISA_MIPS3, 0, 0, CPU_LOONGSON_2F }, /* MIPS IV */ - { "r8000", 0, 0, ISA_MIPS4, CPU_R8000 }, - { "r10000", 0, 0, ISA_MIPS4, CPU_R10000 }, - { "r12000", 0, 0, ISA_MIPS4, CPU_R12000 }, - { "r14000", 0, 0, ISA_MIPS4, CPU_R14000 }, - { "r16000", 0, 0, ISA_MIPS4, CPU_R16000 }, - { "vr5000", 0, 0, ISA_MIPS4, CPU_R5000 }, - { "vr5400", 0, 0, ISA_MIPS4, CPU_VR5400 }, - { "vr5500", 0, 0, ISA_MIPS4, CPU_VR5500 }, - { "rm5200", 0, 0, ISA_MIPS4, CPU_R5000 }, - { "rm5230", 0, 0, ISA_MIPS4, CPU_R5000 }, - { "rm5231", 0, 0, ISA_MIPS4, CPU_R5000 }, - { "rm5261", 0, 0, ISA_MIPS4, CPU_R5000 }, - { "rm5721", 0, 0, ISA_MIPS4, CPU_R5000 }, - { "rm7000", 0, 0, ISA_MIPS4, CPU_RM7000 }, - { "rm9000", 0, 0, ISA_MIPS4, CPU_RM9000 }, + { "r8000", 0, 0, ISA_MIPS4, 0, 0, CPU_R8000 }, + { "r10000", 0, 0, ISA_MIPS4, 0, 0, CPU_R10000 }, + { "r12000", 0, 0, ISA_MIPS4, 0, 0, CPU_R12000 }, + { "r14000", 0, 0, ISA_MIPS4, 0, 0, CPU_R14000 }, + { "r16000", 0, 0, ISA_MIPS4, 0, 0, CPU_R16000 }, + { "vr5000", 0, 0, ISA_MIPS4, 0, 0, CPU_R5000 }, + { "vr5400", 0, 0, ISA_MIPS4, 0, 0, CPU_VR5400 }, + { "vr5500", 0, 0, ISA_MIPS4, 0, 0, CPU_VR5500 }, + { "rm5200", 0, 0, ISA_MIPS4, 0, 0, CPU_R5000 }, + { "rm5230", 0, 0, ISA_MIPS4, 0, 0, CPU_R5000 }, + { "rm5231", 0, 0, ISA_MIPS4, 0, 0, CPU_R5000 }, + { "rm5261", 0, 0, ISA_MIPS4, 0, 0, CPU_R5000 }, + { "rm5721", 0, 0, ISA_MIPS4, 0, 0, CPU_R5000 }, + { "rm7000", 0, 0, ISA_MIPS4, 0, 0, CPU_RM7000 }, + { "rm9000", 0, 0, ISA_MIPS4, 0, 0, CPU_RM9000 }, /* MIPS 32 */ - { "4kc", 0, 0, ISA_MIPS32, CPU_MIPS32 }, - { "4km", 0, 0, ISA_MIPS32, CPU_MIPS32 }, - { "4kp", 0, 0, ISA_MIPS32, CPU_MIPS32 }, - { "4ksc", 0, ASE_SMARTMIPS, ISA_MIPS32, CPU_MIPS32 }, + { "4kc", 0, 0, ISA_MIPS32, 0, 0, CPU_MIPS32 }, + { "4km", 0, 0, ISA_MIPS32, 0, 0, CPU_MIPS32 }, + { "4kp", 0, 0, ISA_MIPS32, 0, 0, CPU_MIPS32 }, + { "4ksc", 0, ASE_SMARTMIPS, ISA_MIPS32, 0, 0, CPU_MIPS32 }, /* MIPS 32 Release 2 */ - { "4kec", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "4kem", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "4kep", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "4ksd", 0, ASE_SMARTMIPS, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "m4k", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "m4kp", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "m14k", 0, ASE_MCU, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "m14kc", 0, ASE_MCU, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "4kec", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "4kem", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "4kep", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "4ksd", 0, ASE_SMARTMIPS, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "m4k", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "m4kp", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "m14k", 0, ASE_MCU, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "m14kc", 0, ASE_MCU, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, { "m14ke", 0, ASE_DSP | ASE_DSPR2 | ASE_MCU, - ISA_MIPS32R2, CPU_MIPS32R2 }, + ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, { "m14kec", 0, ASE_DSP | ASE_DSPR2 | ASE_MCU, - ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kc", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kf2_1", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kf", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kf1_1", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, + ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kc", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kf2_1", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kf", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kf1_1", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* Deprecated forms of the above. */ - { "24kfx", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kx", 0, 0, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "24kfx", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kx", 0, 0, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* 24KE is a 24K with DSP ASE, other ASEs are optional. */ - { "24kec", 0, ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kef2_1", 0, ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kef", 0, ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kef1_1", 0, ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "24kec", 0, ASE_DSP, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kef2_1", 0, ASE_DSP, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kef", 0, ASE_DSP, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kef1_1", 0, ASE_DSP, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* Deprecated forms of the above. */ - { "24kefx", 0, ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "24kex", 0, ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "24kefx", 0, ASE_DSP, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "24kex", 0, ASE_DSP, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* 34K is a 24K with DSP and MT ASE, other ASEs are optional. */ - { "34kc", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "34kf2_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "34kf", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "34kf1_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "34kc", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "34kf2_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "34kf", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "34kf1_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* Deprecated forms of the above. */ - { "34kfx", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "34kx", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "34kfx", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "34kx", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* 34Kn is a 34kc without DSP. */ - { "34kn", 0, ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "34kn", 0, ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* 74K with DSP and DSPR2 ASE, other ASEs are optional. */ - { "74kc", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "74kf2_1", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "74kf", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "74kf1_1", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "74kf3_2", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "74kc", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "74kf2_1", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "74kf", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "74kf1_1", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "74kf3_2", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* Deprecated forms of the above. */ - { "74kfx", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "74kx", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "74kfx", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "74kx", 0, ASE_DSP | ASE_DSPR2, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* 1004K cores are multiprocessor versions of the 34K. */ - { "1004kc", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "1004kf2_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "1004kf", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, - { "1004kf1_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "1004kc", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "1004kf2_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "1004kf", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, + { "1004kf1_1", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, /* interaptiv is the new name for 1004kf. */ - { "interaptiv", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, CPU_MIPS32R2 }, + { "interaptiv", 0, ASE_DSP | ASE_MT, ISA_MIPS32R2, 0, 0, CPU_MIPS32R2 }, { "interaptiv-mr2", 0, ASE_DSP | ASE_EVA | ASE_MT | ASE_MIPS16E2 | ASE_MIPS16E2_MT, - ISA_MIPS32R3, CPU_INTERAPTIV_MR2 }, + ISA_MIPS32R3, 0, 0, CPU_INTERAPTIV_MR2 }, /* M5100 family. */ - { "m5100", 0, ASE_MCU, ISA_MIPS32R5, CPU_MIPS32R5 }, - { "m5101", 0, ASE_MCU, ISA_MIPS32R5, CPU_MIPS32R5 }, + { "m5100", 0, ASE_MCU, ISA_MIPS32R5, 0, 0, CPU_MIPS32R5 }, + { "m5101", 0, ASE_MCU, ISA_MIPS32R5, 0, 0, CPU_MIPS32R5 }, /* P5600 with EVA and Virtualization ASEs, other ASEs are optional. */ - { "p5600", 0, ASE_VIRT | ASE_EVA | ASE_XPA, ISA_MIPS32R5, CPU_MIPS32R5 }, + { "p5600", 0, ASE_VIRT | ASE_EVA | ASE_XPA, + ISA_MIPS32R5, 0, 0, CPU_MIPS32R5 }, /* MIPS 64 */ - { "5kc", 0, 0, ISA_MIPS64, CPU_MIPS64 }, - { "5kf", 0, 0, ISA_MIPS64, CPU_MIPS64 }, - { "20kc", 0, ASE_MIPS3D, ISA_MIPS64, CPU_MIPS64 }, - { "25kf", 0, ASE_MIPS3D, ISA_MIPS64, CPU_MIPS64 }, + { "5kc", 0, 0, ISA_MIPS64, 0, 0, CPU_MIPS64 }, + { "5kf", 0, 0, ISA_MIPS64, 0, 0, CPU_MIPS64 }, + { "20kc", 0, ASE_MIPS3D, ISA_MIPS64, 0, 0, CPU_MIPS64 }, + { "25kf", 0, ASE_MIPS3D, ISA_MIPS64, 0, 0, CPU_MIPS64 }, /* Broadcom SB-1 CPU core. */ - { "sb1", 0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64, CPU_SB1 }, + { "sb1", 0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64, 0, 0, CPU_SB1 }, /* Broadcom SB-1A CPU core. */ - { "sb1a", 0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64, CPU_SB1 }, + { "sb1a", 0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64, 0, 0, CPU_SB1 }, /* MIPS 64 Release 2. */ /* Loongson CPU core. */ /* -march=loongson3a is an alias of -march=gs464 for compatibility. */ { "loongson3a", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT, - ISA_MIPS64R2, CPU_GS464 }, + ISA_MIPS64R2, 0, 0, CPU_GS464 }, { "gs464", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT, - ISA_MIPS64R2, CPU_GS464 }, - { "gs464e", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT - | ASE_LOONGSON_EXT2, ISA_MIPS64R2, CPU_GS464E }, - { "gs264e", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT - | ASE_LOONGSON_EXT2 | ASE_MSA | ASE_MSA64, ISA_MIPS64R2, CPU_GS264E }, + ISA_MIPS64R2, 0, 0, CPU_GS464 }, + { "gs464e", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT | ASE_LOONGSON_EXT2, + ISA_MIPS64R2, 0, 0, CPU_GS464E }, + { "gs264e", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT | ASE_LOONGSON_EXT2 | ASE_MSA | ASE_MSA64, + ISA_MIPS64R2, 0, 0, CPU_GS264E }, /* Cavium Networks Octeon CPU core. */ - { "octeon", 0, 0, ISA_MIPS64R2, CPU_OCTEON }, - { "octeon+", 0, 0, ISA_MIPS64R2, CPU_OCTEONP }, - { "octeon2", 0, 0, ISA_MIPS64R2, CPU_OCTEON2 }, - { "octeon3", 0, ASE_VIRT | ASE_VIRT64, ISA_MIPS64R5, CPU_OCTEON3 }, + { "octeon", 0, 0, ISA_MIPS64R2, 0, 0, CPU_OCTEON }, + { "octeon+", 0, 0, ISA_MIPS64R2, 0, 0, CPU_OCTEONP }, + { "octeon2", 0, 0, ISA_MIPS64R2, 0, 0, CPU_OCTEON2 }, + { "octeon3", 0, ASE_VIRT | ASE_VIRT64, ISA_MIPS64R5, 0, 0, CPU_OCTEON3 }, /* RMI Xlr */ - { "xlr", 0, 0, ISA_MIPS64, CPU_XLR }, + { "xlr", 0, 0, ISA_MIPS64, 0, 0, CPU_XLR }, /* Broadcom XLP. XLP is mostly like XLR, with the prominent exception that it is MIPS64R2 rather than MIPS64. */ - { "xlp", 0, 0, ISA_MIPS64R2, CPU_XLR }, + { "xlp", 0, 0, ISA_MIPS64R2, 0, 0, CPU_XLR }, /* MIPS 64 Release 6. */ - { "i6400", 0, ASE_VIRT | ASE_MSA, ISA_MIPS64R6, CPU_MIPS64R6}, + { "i6400", 0, ASE_VIRT | ASE_MSA, ISA_MIPS64R6, 0, 0, CPU_MIPS64R6}, { "i6500", 0, ASE_VIRT | ASE_MSA | ASE_CRC | ASE_GINV, - ISA_MIPS64R6, CPU_MIPS64R6}, - { "p6600", 0, ASE_VIRT | ASE_MSA, ISA_MIPS64R6, CPU_MIPS64R6}, + ISA_MIPS64R6, 0, 0, CPU_MIPS64R6}, + { "p6600", 0, ASE_VIRT | ASE_MSA, ISA_MIPS64R6, 0, 0, CPU_MIPS64R6}, /* End marker. */ - { NULL, 0, 0, 0, 0 } + { NULL, 0, 0, 0, 0, 0, 0 } }; @@ -20247,6 +20251,29 @@ mips_parse_cpu (const char *option, const char *cpu_string) : ISA_MIPS1); } + /* mipsisa32rN-linux-gnu refuses -n32/-64 swtiches: + -march=mips32r6 is not compatible with the selected ABI + mipsisa64rN-linux-gnu -o32 generates objects with 64bit CPU: + ELF 32-bit LSB relocatable, MIPS, MIPS64 rel2 version 1 (SYSV), not stripped + They are not good default behaviors: Let's alter the CPU info + We treat it some like -march=from-abi */ + if (strcasecmp (option, "default CPU") == 0) + { + p = mips_cpu_info_from_name (cpu_string); + if (p != NULL && (p->flags & MIPS_CPU_IS_ISA)) + { + if (ABI_NEEDS_32BIT_REGS (mips_abi)) + return mips_cpu_info_from_isa (p->isa_32); + + if (ABI_NEEDS_64BIT_REGS (mips_abi)) + return mips_cpu_info_from_isa (p->isa_64); + + if (file_mips_opts.gp >= 0) + return mips_cpu_info_from_isa (file_mips_opts.gp == 32 + ? p->isa_32 : p->isa_64); + } + } + /* 'default' has traditionally been a no-op. Probably not very useful. */ if (strcasecmp (cpu_string, "default") == 0) return 0; @@ -20286,6 +20313,19 @@ mips_cpu_info_from_arch (int arch) return NULL; } + +static const struct mips_cpu_info * +mips_cpu_info_from_name (const char* name) +{ + int i; + + for (i = 0; mips_cpu_info_table[i].name != NULL; i++) + if (strcasecmp (mips_cpu_info_table[i].name, name) == 0) + return (&mips_cpu_info_table[i]); + + return NULL; +} + static void show (FILE *stream, const char *string, int *col_p, int *first_p) diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index e358c9716a6..17eb95f4aa4 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -556,7 +556,7 @@ if { [istarget mips*-*-vxworks*] } { "MIPS invalid switch to SVR4 PIC from VxWorks PIC" } elseif { [istarget mips*-*-*] } { set addr32 [expr [istarget mipstx39*-*-*] || [istarget mips-*-linux*] || [istarget mipsel-*-linux*] \ - || [istarget mipsisa32-*-linux*] || [istarget mipsisa32el-*-linux*]] + || [istarget mipsisa32*-*-linux*] || [istarget mipsisa32*el-*-linux*]] set has_newabi [expr [istarget *-*-irix6*] || [istarget mips*-*-linux*] \ || [istarget mips*-sde-elf*] || [istarget mips*-mti-elf*] \ || [istarget mips*-img-elf*]] @@ -2045,7 +2045,7 @@ if { [istarget mips*-*-vxworks*] } { run_dump_test "module-override" run_dump_test "module-defer-warn1" - run_list_test "module-defer-warn2" "-32" + run_list_test "module-defer-warn2" "-32 -mips1" foreach testopt [list -mfp32 -mfpxx -mfp64 "-mfp64-noodd" \ -msingle-float -msoft-float] { -- 2.30.2