From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-sender-0.a4lg.com (mail-sender-0.a4lg.com [IPv6:2401:2500:203:30b:4000:6bfe:4757:0]) by sourceware.org (Postfix) with ESMTPS id A739D3858C1F for ; Mon, 21 Feb 2022 14:50:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A739D3858C1F Message-ID: Date: Mon, 21 Feb 2022 23:50:18 +0900 Mime-Version: 1.0 Subject: Re: [PATCH] RISC-V: Maintain a string to hold the canonical order Content-Language: en-US To: Binutils References: <20220221144740.19913-1-kito.cheng@sifive.com> From: Tsukasa OI In-Reply-To: <20220221144740.19913-1-kito.cheng@sifive.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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-List-Received-Date: Mon, 21 Feb 2022 14:50:22 -0000 +1. On 2022/02/21 23:47, Kito Cheng wrote: > Using dummy entry in riscv_supported_std_ext cause confusing and wrongly > support `b` and `k` extensions. > > bfd/ > * elfxx-riscv.c (riscv_supported_std_ext): Drop unsupported > extensions. > (riscv_ext_canonical_order): New. > (riscv_init_ext_order): Use riscv_ext_canonical_order rather > than riscv_supported_std_ext to compute canonical order. > --- > bfd/elfxx-riscv.c | 24 +++++++----------------- > 1 file changed, 7 insertions(+), 17 deletions(-) > > diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c > index 9f52bb545ac..17633e6fae2 100644 > --- a/bfd/elfxx-riscv.c > +++ b/bfd/elfxx-riscv.c > @@ -1163,17 +1163,10 @@ static struct riscv_supported_ext riscv_supported_std_ext[] = > {"q", ISA_SPEC_CLASS_20191213, 2, 2, 0 }, > {"q", ISA_SPEC_CLASS_20190608, 2, 2, 0 }, > {"q", ISA_SPEC_CLASS_2P2, 2, 0, 0 }, > - {"l", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > {"c", ISA_SPEC_CLASS_20191213, 2, 0, 0 }, > {"c", ISA_SPEC_CLASS_20190608, 2, 0, 0 }, > {"c", ISA_SPEC_CLASS_2P2, 2, 0, 0 }, > - {"b", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > - {"k", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > - {"j", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > - {"t", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > - {"p", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > {"v", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, > - {"n", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 }, > {NULL, 0, 0, 0, 0} > }; > > @@ -1341,6 +1334,9 @@ riscv_recognized_prefixed_ext (const char *ext) > return false; > } > > +/* Canonical order for single letter extensions. */ > +static const char riscv_ext_canonical_order[] = "eigmafdqlcbjktpvn"; > + > /* Array is used to compare the orders of standard extensions quickly. */ > static int riscv_ext_order[26] = {0}; > > @@ -1356,16 +1352,10 @@ riscv_init_ext_order (void) > /* The orders of all standard extensions are positive. */ > int order = 1; > > - int i = 0; > - while (riscv_supported_std_ext[i].name != NULL) > - { > - const char *ext = riscv_supported_std_ext[i].name; > - riscv_ext_order[(*ext - 'a')] = order++; > - i++; > - while (riscv_supported_std_ext[i].name > - && strcmp (ext, riscv_supported_std_ext[i].name) == 0) > - i++; > - } > + for (const char *ext = &riscv_ext_canonical_order[0]; > + *ext != NULL; > + ++ext) > + riscv_ext_order[(*ext - 'a')] = order++; > > /* Some of the prefixed keyword are not single letter, so we set > their prefixed orders in the riscv_compare_subsets directly, Reviewed-by: Tsukasa OI