From patchwork Thu Jun 29 06:10:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: WANG Xuerui X-Patchwork-Id: 114174 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp9427234vqr; Wed, 28 Jun 2023 23:14:02 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7D/ZTFs2xG0tJ4J/ayoGi7VWF0fvf9DiUzfkBUjPS2UN1td74qIWFpKdBCZlpxzl/wwvw+ X-Received: by 2002:a17:907:74b:b0:971:484:6391 with SMTP id xc11-20020a170907074b00b0097104846391mr25511217ejb.20.1688019242559; Wed, 28 Jun 2023 23:14:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688019242; cv=none; d=google.com; s=arc-20160816; b=vOj3Qdtw3SJHM6o0Ugy0hmG9esiSdLlkOTzbFW1JHL7JmOotnWjKVtK4LwkaI5A+F1 KqMqN5pGs7luyjDEKAKBqQx5FSSl/XLrh/6NFUZnEzk0Nih9MJbpSRtiwOLS+jdtILEp HoLSfKAPmmOSqcIJ/o3juMl26exyawefXadexfBxKNQw0GIMNHJOJikhoqVEGpSfhJeH HrTUxML61KzdUB9iMWnbhM7ptv+ULncoIFvc5L6ZFu/FN3atU1jO6ki9oS9YBbFE925D 4uUN6U8WXzyH2e4tYBBGyyBTaHBIVkpR3UGgi3h9IyUfnwm7pTnCWhtKEbdfQseO6aXK yDfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:dmarc-filter:delivered-to; bh=uhsflEV/NGmyPEuowqdyy3/iBJXtuYxY6dwSoA2AjwU=; fh=F52lMKP/ag7PTpjpGsg79bnedhkoffS1BBUct4g/1x0=; b=ZMrQfvjKZt/kwXCUzROUdSxL3IDlIGAWMBARIMMH3ZZvrBPznoE/H7/zjlF2ukXJ1X jiIg7RW10w8G9vtXC/hkbCFpr1LqGJ+p/iVvzBUVZyZXHkiAZ9iVPDVQNYXiwAZafElO fkFcPFv54lyAcOsvsPEnh+xQmZoTF12gMm6v+o/HJiE0uP/pbhgZSBgbaUpCDBa25uzX IqKqEd+jOHOUt0KnveCXjgGRvDuEpTPrcmWguspc+mtAcWzPB8qXK/zqECA0SbQU9QS+ dbRiT5fUJp3K6MpTYg7R/u8kb8DFrf65AYcSyGLM9lrOJjnINaEkZMFsKLebh+qug9s6 av3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xen0n.name header.s=mail header.b=BsXoyERN; 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" Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id gg18-20020a170906e29200b00988e62b24ecsi6476450ejb.760.2023.06.28.23.14.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jun 2023 23:14:02 -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=@xen0n.name header.s=mail header.b=BsXoyERN; 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9616038319CC for ; Thu, 29 Jun 2023 06:11:42 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mailbox.box.xen0n.name (mail.xen0n.name [115.28.160.31]) by sourceware.org (Postfix) with ESMTPS id A04F33858031 for ; Thu, 29 Jun 2023 06:10:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A04F33858031 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=xen0n.name Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=xen0n.name DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xen0n.name; s=mail; t=1688019046; bh=cZxVRniw/K2nxtmRH/2alS1IxSPd78OquMlG3Xo5qCQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BsXoyERN2F4Lz+2mOdS4dBg2mkW8A2M1IfTYpNHN5YEivfabN4JGVvJsKeCCwpszg UpSQ/gjLzgOpRNDyCWcZTu0NCjILTpu1OA2oswEsEnu3BzJg/xRu/9Ky52nR82hbdw z/0FBLR0NlOBUiIAWmq/sjQDvUm/P6+50GWfS4DE= Received: from ld50.lan (unknown [101.88.25.181]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mailbox.box.xen0n.name (Postfix) with ESMTPSA id C6E6E605CA; Thu, 29 Jun 2023 14:10:45 +0800 (CST) From: WANG Xuerui To: binutils@sourceware.org Cc: Chenghua Xu , Zhensong Liu , Qinggang Meng , Lulu Cheng , Fangrui Song , Xi Ruoyao , WANG Xuerui Subject: [PATCH v6 7/7] LoongArch: Deprecate $v[01], $fv[01] and $x names per spec Date: Thu, 29 Jun 2023 14:10:29 +0800 Message-Id: <20230629061029.29773-8-i.swmail@xen0n.name> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230629061029.29773-1-i.swmail@xen0n.name> References: <20230629061029.29773-1-i.swmail@xen0n.name> MIME-Version: 1.0 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, 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 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: , Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770016465538406928?= X-GMAIL-MSGID: =?utf-8?q?1770016465538406928?= From: WANG Xuerui As outlined in the LoongArch ELF psABI spec [1], it is actually already 2 versions after the initial LoongArch support, and the $v[01] and $fv[01] names should really get sunset by now. In addition, the "$x" name for $r21 was never included in any released version of the ABI spec, and such usages are all fixed to say just $r21 for every project I could think of that accepted a LoongArch port. Plus, the upcoming LSX/LASX support makes use of registers named "$vrNN" and "$xrNN", so having "$vN" and "$x" alongside would almost certainly create confusion for developers. Issue warnings for such usages per the deprecation procedure detailed in the spec, so we can finally remove support in the next release cycle after this. [1]: https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html gas/ChangeLog: * config/tc-loongarch.c: Init canonical register ABI name mappings and deprecated register names. (loongarch_args_parser_can_match_arg_helper): Warn in case of deprecated register name usage. * testsuite/gas/loongarch/deprecated_reg_aliases.d: New test. * testsuite/gas/loongarch/deprecated_reg_aliases.l: Likewise. * testsuite/gas/loongarch/deprecated_reg_aliases.s: Likewise. include/ChangeLog: * opcode/loongarch.h: Rename global variables. opcodes/ChangeLog: * loongarch-opc.c: Rename the alternate/deprecated register name mappings, and move $x to the deprecated name map. Signed-off-by: WANG Xuerui --- gas/config/tc-loongarch.c | 42 ++++++++++++++++--- .../gas/loongarch/deprecated_reg_aliases.d | 17 ++++++++ .../gas/loongarch/deprecated_reg_aliases.l | 7 ++++ .../gas/loongarch/deprecated_reg_aliases.s | 5 +++ include/opcode/loongarch.h | 4 +- opcodes/loongarch-opc.c | 8 ++-- 6 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 gas/testsuite/gas/loongarch/deprecated_reg_aliases.d create mode 100644 gas/testsuite/gas/loongarch/deprecated_reg_aliases.l create mode 100644 gas/testsuite/gas/loongarch/deprecated_reg_aliases.s diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c index 6e8aa35e282..d23506cd023 100644 --- a/gas/config/tc-loongarch.c +++ b/gas/config/tc-loongarch.c @@ -223,8 +223,12 @@ md_parse_option (int c, const char *arg) return ret; } +static const char *const *r_abi_names = NULL; +static const char *const *f_abi_names = NULL; static struct htab *r_htab = NULL; +static struct htab *r_deprecated_htab = NULL; static struct htab *f_htab = NULL; +static struct htab *f_deprecated_htab = NULL; static struct htab *fc_htab = NULL; static struct htab *fcn_htab = NULL; static struct htab *c_htab = NULL; @@ -272,7 +276,11 @@ loongarch_after_parse_args () /* Init ilp32/lp64 registers names. */ if (!r_htab) r_htab = str_htab_create (), str_hash_insert (r_htab, "", 0, 0); + if (!r_deprecated_htab) + r_deprecated_htab = str_htab_create (), + str_hash_insert (r_deprecated_htab, "", 0, 0); + r_abi_names = loongarch_r_normal_name; for (i = 0; i < ARRAY_SIZE (loongarch_r_normal_name); i++) str_hash_insert (r_htab, loongarch_r_normal_name[i], (void *) (i + 1), 0); @@ -287,7 +295,11 @@ loongarch_after_parse_args () { if (!f_htab) f_htab = str_htab_create (), str_hash_insert (f_htab, "", 0, 0); + if (!f_deprecated_htab) + f_deprecated_htab = str_htab_create (), + str_hash_insert (f_deprecated_htab, "", 0, 0); + f_abi_names = loongarch_f_normal_name; for (i = 0; i < ARRAY_SIZE (loongarch_f_normal_name); i++) str_hash_insert (f_htab, loongarch_f_normal_name[i], (void *) (i + 1), 0); @@ -338,22 +350,24 @@ loongarch_after_parse_args () /* Init lp64 registers alias. */ if (LARCH_opts.ase_lp64) { + r_abi_names = loongarch_r_lp64_name; for (i = 0; i < ARRAY_SIZE (loongarch_r_lp64_name); i++) str_hash_insert (r_htab, loongarch_r_lp64_name[i], (void *) (i + 1), 0); - for (i = 0; i < ARRAY_SIZE (loongarch_r_lp64_name1); i++) - str_hash_insert (r_htab, loongarch_r_lp64_name1[i], (void *) (i + 1), - 0); + for (i = 0; i < ARRAY_SIZE (loongarch_r_lp64_name_deprecated); i++) + str_hash_insert (r_deprecated_htab, loongarch_r_lp64_name_deprecated[i], + (void *) (i + 1), 0); } /* Init float-lp64 registers alias */ if ((LARCH_opts.ase_sf || LARCH_opts.ase_df) && LARCH_opts.ase_lp64) { + f_abi_names = loongarch_f_lp64_name; for (i = 0; i < ARRAY_SIZE (loongarch_f_lp64_name); i++) str_hash_insert (f_htab, loongarch_f_lp64_name[i], (void *) (i + 1), 0); - for (i = 0; i < ARRAY_SIZE (loongarch_f_lp64_name1); i++) - str_hash_insert (f_htab, loongarch_f_lp64_name1[i], + for (i = 0; i < ARRAY_SIZE (loongarch_f_lp64_name_deprecated); i++) + str_hash_insert (f_deprecated_htab, loongarch_f_lp64_name_deprecated[i], (void *) (i + 1), 0); } } @@ -684,6 +698,15 @@ loongarch_args_parser_can_match_arg_helper (char esc_ch1, char esc_ch2, imm = (intptr_t) str_hash_find (r_htab, arg); ip->match_now = 0 < imm; ret = imm - 1; + if (ip->match_now) + break; + /* Handle potential usage of deprecated register aliases. */ + imm = (intptr_t) str_hash_find (r_deprecated_htab, arg); + ip->match_now = 0 < imm; + ret = imm - 1; + if (ip->match_now && !ip->macro_id) + as_warn (_("register alias %s is deprecated, use %s instead"), + arg, r_abi_names[ret]); break; case 'f': switch (esc_ch2) @@ -700,6 +723,15 @@ loongarch_args_parser_can_match_arg_helper (char esc_ch1, char esc_ch2, } ip->match_now = 0 < imm; ret = imm - 1; + if (ip->match_now && !ip->macro_id) + break; + /* Handle potential usage of deprecated register aliases. */ + imm = (intptr_t) str_hash_find (f_deprecated_htab, arg); + ip->match_now = 0 < imm; + ret = imm - 1; + if (ip->match_now) + as_warn (_("register alias %s is deprecated, use %s instead"), + arg, f_abi_names[ret]); break; case 'c': switch (esc_ch2) diff --git a/gas/testsuite/gas/loongarch/deprecated_reg_aliases.d b/gas/testsuite/gas/loongarch/deprecated_reg_aliases.d new file mode 100644 index 00000000000..134bf05eaea --- /dev/null +++ b/gas/testsuite/gas/loongarch/deprecated_reg_aliases.d @@ -0,0 +1,17 @@ +#name: Deprecated register aliases +#as-new: +#objdump: -d +#warning_output: deprecated_reg_aliases.l + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0000000000000000 : +[ ]+0:[ ]+14acf125[ ]+lu12i\.w[ ]+\$a1, 354185 +[ ]+4:[ ]+038048a5[ ]+ori[ ]+\$a1, \$a1, 0x12 +[ ]+8:[ ]+16024685[ ]+lu32i\.d[ ]+\$a1, 4660 +[ ]+c:[ ]+08200420[ ]+fmadd\.d[ ]+\$fa0, \$fa1, \$fa1, \$fa0 +[ ]+10:[ ]+380c16a4[ ]+ldx\.d[ ]+\$a0, \$r21, \$a1 +[ ]+14:[ ]+4c000020[ ]+ret[ ]+ diff --git a/gas/testsuite/gas/loongarch/deprecated_reg_aliases.l b/gas/testsuite/gas/loongarch/deprecated_reg_aliases.l new file mode 100644 index 00000000000..b82c209e541 --- /dev/null +++ b/gas/testsuite/gas/loongarch/deprecated_reg_aliases.l @@ -0,0 +1,7 @@ +.*Assembler messages: +.*:2: Warning: register alias \$v1 is deprecated, use \$a1 instead +.*:3: Warning: register alias \$fv0 is deprecated, use \$fa0 instead +.*:3: Warning: register alias \$fv1 is deprecated, use \$fa1 instead +.*:3: Warning: register alias \$fv1 is deprecated, use \$fa1 instead +.*:4: Warning: register alias \$v0 is deprecated, use \$a0 instead +.*:4: Warning: register alias \$x is deprecated, use \$r21 instead diff --git a/gas/testsuite/gas/loongarch/deprecated_reg_aliases.s b/gas/testsuite/gas/loongarch/deprecated_reg_aliases.s new file mode 100644 index 00000000000..7848346e6ae --- /dev/null +++ b/gas/testsuite/gas/loongarch/deprecated_reg_aliases.s @@ -0,0 +1,5 @@ +foo: + li.d $v1, 0x123456789012 + fmadd.d $fv0, $fv1, $fv1, $fa0 + ldx.d $v0, $x, $a1 + ret diff --git a/include/opcode/loongarch.h b/include/opcode/loongarch.h index e9632ad3361..6d399f70a98 100644 --- a/include/opcode/loongarch.h +++ b/include/opcode/loongarch.h @@ -178,10 +178,10 @@ dec2 : [1-9][0-9]? extern const char *const loongarch_r_normal_name[32]; extern const char *const loongarch_r_lp64_name[32]; - extern const char *const loongarch_r_lp64_name1[32]; + extern const char *const loongarch_r_lp64_name_deprecated[32]; extern const char *const loongarch_f_normal_name[32]; extern const char *const loongarch_f_lp64_name[32]; - extern const char *const loongarch_f_lp64_name1[32]; + extern const char *const loongarch_f_lp64_name_deprecated[32]; extern const char *const loongarch_fc_normal_name[4]; extern const char *const loongarch_fc_numeric_name[4]; extern const char *const loongarch_c_normal_name[8]; diff --git a/opcodes/loongarch-opc.c b/opcodes/loongarch-opc.c index 8be227cd9a9..05cf4eb463c 100644 --- a/opcodes/loongarch-opc.c +++ b/opcodes/loongarch-opc.c @@ -45,14 +45,14 @@ const char *const loongarch_r_lp64_name[32] = { "$zero", "$ra", "$tp", "$sp", "$a0", "$a1", "$a2", "$a3", "$a4", "$a5", "$a6", "$a7", "$t0", "$t1", "$t2", "$t3", - "$t4", "$t5", "$t6", "$t7", "$t8", "$x", "$fp", "$s0", + "$t4", "$t5", "$t6", "$t7", "$t8", "$r21","$fp", "$s0", "$s1", "$s2", "$s3", "$s4", "$s5", "$s6", "$s7", "$s8", }; -const char *const loongarch_r_lp64_name1[32] = +const char *const loongarch_r_lp64_name_deprecated[32] = { "", "", "", "", "$v0", "$v1", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "$x", "", "", "", "", "", "", "", "", "", "", }; const char *const loongarch_f_normal_name[32] = @@ -71,7 +71,7 @@ const char *const loongarch_f_lp64_name[32] = "$fs0", "$fs1", "$fs2", "$fs3", "$fs4", "$fs5", "$fs6", "$fs7", }; -const char *const loongarch_f_lp64_name1[32] = +const char *const loongarch_f_lp64_name_deprecated[32] = { "$fv0", "$fv1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",