From patchwork Fri Aug 11 13:18:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 134491 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp1087557vqi; Fri, 11 Aug 2023 06:18:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEY2IdfxnPaXVvoV3nhPlm114BVQr9+I/ty7UH2K7hAH2tK+UVfRq//qTJHJbXco8ysBYcR X-Received: by 2002:a19:f819:0:b0:4fe:1b7b:3cc9 with SMTP id a25-20020a19f819000000b004fe1b7b3cc9mr1294294lff.38.1691759931893; Fri, 11 Aug 2023 06:18:51 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id b3-20020aa7df83000000b005231e7c1105si3086081edy.382.2023.08.11.06.18.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Aug 2023 06:18:51 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=gH5heeIl; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 805743857012 for ; Fri, 11 Aug 2023 13:18:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 805743857012 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1691759926; bh=KgsOoK08H35W/nwa/MUMxyKTExiYi+kl3Abg2YE07zg=; h=Date:To:Cc:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=gH5heeIlkRZmcSW18qXNJ7lzC1rejL1aGQvD7kOowWQW76CqCw2YI5fZiK9vGGJrW Q0Q91/El0rHYCnDjpLLI4EwY4pvpUFLlmbOACjZoYuXEH7aqi2MUWKhOyvQ6aYWuda ljn1HwAa91WVG/S3o5/I1d8/4k4vvx10vbdYPFBI= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2047.outbound.protection.outlook.com [40.107.8.47]) by sourceware.org (Postfix) with ESMTPS id E50073858D20 for ; Fri, 11 Aug 2023 13:18:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E50073858D20 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W4M00qFJScnSpYRYKmGEdFSvT8puK/ty7d7uOn0ZbCtar67qJ+KTxb0QI8DLP+jh6CjkEofebY8i52RqpUg93GGF677gUUv9vtk8NkkXf62M4JX5IWnWFf0fdNZwA6VSt9KOdJLyiutcHzTjR+NoifKBe8PY5Ql++iiHv1edZCpnfocDC4okgWY3MrxhsUWoJxLvyYMDIUbDyjxowSjGIXz2a4wA0ISCigeQU1SWt/ZzFGCAJDWzY1QcNDjmjjfiM5YZopjA2bmRBSrY5K8IT0CB5d/sIY0gWfI4RCQT9ZleF8ZpCrNR0lhEFQOxI2X2Wj6GTgZJrvBo5xHUKJnaGQ== 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=KgsOoK08H35W/nwa/MUMxyKTExiYi+kl3Abg2YE07zg=; b=F6GUFNY+pi3CZ/XTs+SusEoWuv8aeGZs7Snsc4cXCeOn2loo9a8CrzS6j5r1LMdvuif+a0HCauXejkiHEF0AUZJJNjzYyCN/kt0zd5qiLfBSjDxR96FEp/YQlousrjUhuHnS3cs419TUya4Yq+4rcRX6oxAQbzk+kD/HReusLuKLXqmMQsQHnFX/P6I9iGj5pOSnToFX4zzqIYZKWlOgZ4SBwEMQ+eaDZOkzcQVO1om8IJZetJGF/JHzBLzGnTo984KwgELeauHehiwxo6jjF4VYwfKmyQfuP8A5YeDp4ZOgz4TX8enpuHEP0xk6sp728EB/tIyThOsoDuRIiRZz7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by GV1PR04MB9086.eurprd04.prod.outlook.com (2603:10a6:150:21::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.30; Fri, 11 Aug 2023 13:18:32 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::e5cf:5743:ab60:b14e]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::e5cf:5743:ab60:b14e%5]) with mapi id 15.20.6652.025; Fri, 11 Aug 2023 13:18:32 +0000 Message-ID: <5d511e35-5876-b5bb-7a50-420e317ebae5@suse.com> Date: Fri, 11 Aug 2023 15:18:30 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Content-Language: en-US To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu Subject: [PATCH] RISC-V: remove indirection from register tables X-ClientProxiedBy: FR0P281CA0184.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:ab::7) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|GV1PR04MB9086:EE_ X-MS-Office365-Filtering-Correlation-Id: 09562502-81b4-4bab-fa6e-08db9a6d7601 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W+WgwEINXeJHf5uGaPBRFjz7+jCYFZTj0S0j9/MYfAcAvNMQUAQhhGArNcqhG05SfkcChd8uuyaVDHivneTl9/75ibaCDRtZANLl9OPk9fzXi3lJ+bxwdImZ0wltd1jN0/IdxnQ4HR8tuwZOAsbnM90/837lBC6GTnMryXFJLIdHPNxDczCnZ47z5D1NKWXXzsdM1fcTStS1ebQ9oIXIgLGzyrm545qatesKfBlbqLBBaEIjlxEPEmw1W1EqsBPHsNV/XVg58UYj07VohS0wMRtUBzmAE648VlUt2XmDay2homTMP8ioanOGQ1DjdfuZWPpamYBp4kE6b4SaT5/d8+UdNyN5ciJv5GYxJakHvJ+wXYk2Hs0oz1uf9XMhltj8GuGhZ09AKtzz3BKcvyuA2bOHOQibXWJFBS3n1kimr9F+ibHP5mwi6xLde0KkaNhFYFYc1h+NDqyVDVWXos2mC/DTL8+cs9C9FC02TUqquhwvA72t3b7uDk+Xmc5Pzh6co8s2l4LuZ+9TgWh14916rEPa/BRYZz6yvr9udSBMlJBInvVxYISYzU38xhroAP1hwhkm2p/TCrLJva4rm3k+wAfAP5ifJNQIIQpvkiAwPSC2JrxwaY0Y+reSKI7Rt910EbfJqZarP/cJdeRDxtgS+Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(346002)(366004)(39860400002)(396003)(136003)(376002)(186006)(1800799006)(451199021)(31686004)(6916009)(66946007)(6506007)(26005)(66476007)(478600001)(54906003)(36756003)(66556008)(83380400001)(2616005)(41300700001)(316002)(4326008)(6512007)(6486002)(2906002)(31696002)(86362001)(5660300002)(8676002)(8936002)(38100700002)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?NeGwteA+KnQKTmVf/bdku2snv5r8?= =?utf-8?q?SUZkyTaRV2YNIKI83r5p/+Yrr6A0xoLvv4r9tx7Su0B4XNiMXDUPy0/7t0XcVr2hQ?= =?utf-8?q?d193utEypyQJdKIMewhkcxQinC5dhmWP2yeCpStjKTAlqEh2WAesLQLGVB6e+Vu1W?= =?utf-8?q?tu1YwCQMJrCBowHIuAuPggCFSol0Z0d58/XSM1VEoBkhvTSS77dSIbrccnZYd3nqc?= =?utf-8?q?tf07wiQ3TS1yC7Wa2rWTtJGyw9QucZydkHutwl8zI5w71eHiInHZNMIaC/EWSuPvf?= =?utf-8?q?Y1kIGIQQisMMpKXcI36wgFZsjW6AZwecM68Qydhgmpmsm1hoF/UG1CikvkqabsaO8?= =?utf-8?q?1NEd4Nc0cKSfquMozYahX7yqIhw2FZzcrP9wJSOuCMWl9YowcsdvVo+9dujYuijXl?= =?utf-8?q?Lsk/othIEWjuajwoygTqZv10R6QpRTMIkNnznjdQrD2qnPdGRqYKP8JnkjE/eD0VH?= =?utf-8?q?qTaU95jH8wXni5Pv0ITeX8OQ8RLHQVfiL6RBH4XvHBDRBE++pD4JIYXMIV4zDUcLs?= =?utf-8?q?aqaZ25mutICdeT4aAz9S19paDxvNPAzvL1OerVSEYoneSgWK8YsfhyqSHIECcZXHj?= =?utf-8?q?tq7pigcbGGKGk9cMS6NEnHNsbX23QwuH5CelHf7KWbgfTaOiAeFkG80B6av7rsfkY?= =?utf-8?q?oM7DhMfu+K8sLK+C46X3rTqY+2LLlKh9v7CcCIy2veTFfzj9HHMDSte/InZMO6ZtH?= =?utf-8?q?hnDchGO4B/2vx6GR26x5eDN1UWUwrQqMWJYEevE166YL0Dt08Sx1m8N4jUKtrIiLh?= =?utf-8?q?Vi5k3I8QTBHnlhdZ6XGiwXJ9zgSS0u8gx9C9BSgT2Ve99oWyb8ExM08vekvekjDP0?= =?utf-8?q?DYFLUKmRI2F5wZNdKkbJ3h7J+OJatoHcm3fW7J4CFml01WALq/7ZOlyuzm+jUjPkn?= =?utf-8?q?+7v3zGiRwtZzVX+bLZPbtoEfRtHPCXvUrPzV/6QMAs30qkbv4kIuNglEWodcJsnUh?= =?utf-8?q?wx5rYHYgxUKKqeqCbIm+XMEo/08gJRUObKoh22VPlwDqOXJj9L4Dzq5tPeDRaKQJN?= =?utf-8?q?Bi88am1HK423ajTdYeDE36gqMw7YV0AcwaSW4UDtTuWS8bwVk7oMdvXBSRGYhY9l/?= =?utf-8?q?DMc/f5bZFQjpC1C4rzHydOMpqZb0EoSw6MF7BCNhtrpZ5gd+FXfe0cgGWgS/Tr/0B?= =?utf-8?q?9LRTSQ//q+GFB7fND2r9Rl+3vh0krX3CNXEVzAbhCOpSyleDxwQZT/igNAssnC+6i?= =?utf-8?q?tnUuOh9r0UJNh1cLOfZ66MJsyCYXKaL45CKDj38Jn45WlN/bUoheBgajTnkRUbZef?= =?utf-8?q?5dO4kGc1ricfbbchqpwqJ13ZRH6mMKRk1gSgRqskz8cVxC/w5CbvevwwREj1o2Fx0?= =?utf-8?q?4I/0sGV3uSigOe2tn34DM3Ti8hCtm7lPXQi68uRE90W0s1stOluUdg4H/yPW+WPjH?= =?utf-8?q?eCot+flUsCp6l2nRTntFvfCFWh7d0gMVcoFJNipzWae7BKG/lAfogSmhZbOFhSFvB?= =?utf-8?q?yWeJciJMOOCs2l7CuN/0WaQAzVefKzCkJplc60jyaqvJ3gQ+CEL+Nazku8S3ULyCZ?= =?utf-8?q?3eZ5KqUG8WgA?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09562502-81b4-4bab-fa6e-08db9a6d7601 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Aug 2023 13:18:32.6267 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mp8+ohsfAMOsxfB22RiAxP9nMbrb24s5gHxsOgIsGu9vQghPmGWS5vhX8to3nQXbmT/GAPEjYzDiPEo0AnG9Vg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9086 X-Spam-Status: No, score=-3026.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SCC_5_SHORT_WORD_LINES, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773938862249472177 X-GMAIL-MSGID: 1773938862249472177 The longest register name is 4 characters (plus a nul one), so using a 4- or 8-byte pointer to get at it is neither space nor time efficient. Embed the names right into the array. For PIE this also reduces the number of base relocations in the final image. To avoid old gcc, when generating 32-bit code, bogusly warning about bounds being exceeded in the code processing Cs/Cw, Ct/Cx, and CD, an adjustment to EXTRACT_BITS() is needed: This macro shouldn't supply a 64-bit value, and it also doesn't need to - all operand fields to date are far more narrow than 32 bits. This in turn allows dropping a number of casts elsewhere. --- Of course this way the array items aren't a power of 2 in size anymore. While adding padding would still keep overall size below the original for 64-bit code, in 32-bit code the space savings would likely be lost. The alternative of setting NRC to 4 and hence omitting the nul character in some of the slots may not be liked, for requiring all use sites to then be aware of that aspect and using %.4s instead of plain %s. --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -951,7 +951,7 @@ hash_reg_name (enum reg_class class, con } static void -hash_reg_names (enum reg_class class, const char * const names[], unsigned n) +hash_reg_names (enum reg_class class, const char names[][NRC], unsigned n) { unsigned i; --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -355,7 +355,7 @@ static inline unsigned int riscv_insn_le /* Extract the operand given by FIELD from integer INSN. */ #define EXTRACT_OPERAND(FIELD, INSN) \ - EXTRACT_BITS ((INSN), OP_MASK_##FIELD, OP_SH_##FIELD) + ((unsigned int) EXTRACT_BITS ((INSN), OP_MASK_##FIELD, OP_SH_##FIELD)) /* Extract an unsigned immediate operand on position s with n bits. */ #define EXTRACT_U_IMM(n, s, l) \ @@ -575,14 +575,16 @@ enum riscv_seg_mstate MAP_INSN, /* Instructions. */ }; -extern const char * const riscv_gpr_names_numeric[NGPR]; -extern const char * const riscv_gpr_names_abi[NGPR]; -extern const char * const riscv_fpr_names_numeric[NFPR]; -extern const char * const riscv_fpr_names_abi[NFPR]; +#define NRC 5 /* Max characters in register names, incl nul. */ + +extern const char riscv_gpr_names_numeric[NGPR][NRC]; +extern const char riscv_gpr_names_abi[NGPR][NRC]; +extern const char riscv_fpr_names_numeric[NFPR][NRC]; +extern const char riscv_fpr_names_abi[NFPR][NRC]; extern const char * const riscv_rm[8]; extern const char * const riscv_pred_succ[16]; -extern const char * const riscv_vecr_names_numeric[NVECR]; -extern const char * const riscv_vecm_names_numeric[NVECM]; +extern const char riscv_vecr_names_numeric[NVECR][NRC]; +extern const char riscv_vecm_names_numeric[NVECM][NRC]; extern const char * const riscv_vsew[8]; extern const char * const riscv_vlmul[8]; extern const char * const riscv_vta[2]; --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -69,8 +69,8 @@ static enum riscv_seg_mstate last_map_st static asection *last_map_section = NULL; /* Register names as used by the disassembler. */ -static const char * const *riscv_gpr_names; -static const char * const *riscv_fpr_names; +static const char (*riscv_gpr_names)[NRC]; +static const char (*riscv_fpr_names)[NRC]; /* If set, disassemble as most general instruction. */ static bool no_aliases = false; @@ -502,7 +502,7 @@ print_insn_args (const char *oparg, insn case 'y': print (info->stream, dis_style_immediate, "0x%x", - (unsigned)EXTRACT_OPERAND (BS, l)); + EXTRACT_OPERAND (BS, l)); break; case 'z': @@ -511,12 +511,12 @@ print_insn_args (const char *oparg, insn case '>': print (info->stream, dis_style_immediate, "0x%x", - (unsigned)EXTRACT_OPERAND (SHAMT, l)); + EXTRACT_OPERAND (SHAMT, l)); break; case '<': print (info->stream, dis_style_immediate, "0x%x", - (unsigned)EXTRACT_OPERAND (SHAMTW, l)); + EXTRACT_OPERAND (SHAMTW, l)); break; case 'S': @@ -577,7 +577,7 @@ print_insn_args (const char *oparg, insn case 'Y': print (info->stream, dis_style_immediate, "0x%x", - (unsigned) EXTRACT_OPERAND (RNUM, l)); + EXTRACT_OPERAND (RNUM, l)); break; case 'Z': --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -26,7 +26,7 @@ /* Register names used by gas and objdump. */ -const char * const riscv_gpr_names_numeric[NGPR] = +const char riscv_gpr_names_numeric[NGPR][NRC] = { "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", @@ -34,7 +34,7 @@ const char * const riscv_gpr_names_numer "x24", "x25", "x26", "x27", "x28", "x29", "x30", "x31" }; -const char * const riscv_gpr_names_abi[NGPR] = +const char riscv_gpr_names_abi[NGPR][NRC] = { "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", @@ -42,7 +42,7 @@ const char * const riscv_gpr_names_abi[N "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6" }; -const char * const riscv_fpr_names_numeric[NFPR] = +const char riscv_fpr_names_numeric[NFPR][NRC] = { "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", @@ -50,7 +50,7 @@ const char * const riscv_fpr_names_numer "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31" }; -const char * const riscv_fpr_names_abi[NFPR] = +const char riscv_fpr_names_abi[NFPR][NRC] = { "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", @@ -72,7 +72,7 @@ const char * const riscv_pred_succ[16] = }; /* RVV registers. */ -const char * const riscv_vecr_names_numeric[NVECR] = +const char riscv_vecr_names_numeric[NVECR][NRC] = { "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", @@ -81,7 +81,7 @@ const char * const riscv_vecr_names_nume }; /* RVV mask registers. */ -const char * const riscv_vecm_names_numeric[NVECM] = +const char riscv_vecm_names_numeric[NVECM][NRC] = { "v0.t" };