public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: mengqinggang <mengqinggang@loongson.cn>
To: Xi Ruoyao <xry111@xry111.site>, WANG Xuerui <i.swmail@xen0n.name>,
	binutils@sourceware.org
Cc: xuchenghua@loongson.cn, chenglulu@loongson.cn,
	liuzhensong@loongson.cn, maskray@google.com,
	chenhuacai@kernel.org, yangtiezhu@loongson.cn
Subject: Re: [PATCH v1 1/2] LoongArch: Fix pcaddi format string
Date: Tue, 15 Aug 2023 19:35:17 +0800	[thread overview]
Message-ID: <8721701b-926b-cb86-6959-e1a7bfd9a22c@loongson.cn> (raw)
In-Reply-To: <54c5188b1acaf5c31da54e920d4b7c155b4bb3ad.camel@xry111.site>

The main reason for adding "<<2"  is that without "<<2" one same immediate
for pcaddi and other 4-byts aligned instructions has a different meaning.
The offset of "pcaddi $t0, 4" and "bl 4" are 16 and 4, this difference may
cause confusion for users.


在 2023/8/15 下午6:44, Xi Ruoyao 写道:
> On Tue, 2023-08-15 at 18:00 +0800, mengqinggang wrote:
>> Maybe we can just add support for "pcaddi rd, label" this time.
>> And the hard coded immediate in pcaddi can be changed to label.
>> Add "<<2" to format string can be done after several versions.
> It does not fix the issue.  The kernel still needs nasty binutils
> version checks unless it removes the support for building with binutils
> < (the first version supports using the label in pcaddi).
>
> I think we should just *never* change the semantics of an assemble
> grammar construct.  I don't think "pcaddi rd, 16" is really better than
> "pcaddi rd, 4" (unless we'll add some 2-byte or 1-byte instructions like
> RVC, but then we'll need a new instruction and we should not reuse the
> pcaddi mnemonic anyway).
>
> If you really need "16" instead of "4" you can add it as a pseudo
> instruction with a new name.  The pseudo instruction can even support
> misaligned values like 14 (expanding it to pcaddi rd, 3 and addi rd, rd,
> 2).  It can be named "la.pcaddi" or something (following "la.pcrel"
> etc).
>
>> 在 2023/8/11 上午11:08, WANG Xuerui 写道:
>>> On 2023/8/9 19:37, Xi Ruoyao wrote:
>>>> On Wed, 2023-08-09 at 09:39 +0800, mengqinggang wrote:
>>>>> Add "<<2" for pcaddi format string
>>>>> ---
>>>>>    opcodes/loongarch-opc.c | 2 +-
>>>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/opcodes/loongarch-opc.c b/opcodes/loongarch-opc.c
>>>>> index 2f02e33dbec..7d110683e93 100644
>>>>> --- a/opcodes/loongarch-opc.c
>>>>> +++ b/opcodes/loongarch-opc.c
>>>>> @@ -564,7 +564,7 @@ static struct loongarch_opcode
>>>>> loongarch_imm_opcodes[] =
>>>>>      { 0x10000000,
>>>>> 0xfc000000,    "addu16i.d",    "r0:5,r5:5,s10:16",             0,                      0,      0,      0
>>>>> },
>>>>>      { 0x14000000,
>>>>> 0xfe000000,    "lu12i.w",      "r0:5,s5:20",                   0,                      0,      0,      0
>>>>> },
>>>>>      { 0x16000000,
>>>>> 0xfe000000,    "lu32i.d",      "r0:5,s5:20",                   0,                      0,      0,      0
>>>>> },
>>>>> -  { 0x18000000,
>>>>> 0xfe000000,    "pcaddi",       "r0:5,s5:20",                   0,                      0,      0,      0
>>>>> },
>>>>> +  { 0x18000000,
>>>>> 0xfe000000,    "pcaddi",       "r0:5,s5:20<<2",                0,                      0,      0,      0
>>>>> },
>>>> The Linux kernel already uses things like "pcaddi t0, 4".  To me this
>>>> change will break them completely, and fixing it on the kernel side will
>>>> be difficult (we'll need to create some nasty gas version check).
>>> Thanks for the heads-up, I initially was inclined to accept this patch
>>> but was hindered by real life, then saw this. The asymmetry is
>>> unfortunately real and here to stay, because in this case code would
>>> be broken without any build-time errors or warnings, and such breakage
>>> would go unnoticed until the moment the wrong instruction gets executed.
>>>
>>>> So I don't think we should make such a backward incompatible change
>>>> without a very compelling reason.  You may argue that "<<2" has a better
>>>> readability, but if we really need the readability we can write
>>>>
>>>> pcaddi t0, 4 # << 2
>>>>
>>>> in the code anyway.
>>> The immediate operand means "delta in # of instructions":
>>>
>>>> pcaddi t0, 4  # insns
>>> Which is *arguably more* intuitive than the new semantics implied by
>>> "<<2", since IMO it's more natural to think in terms of instruction
>>> words when we talk about PC-relative tricks with instruction fetch in
>>> mind.
>>>
>>> IMO a better way forward could be to document this wart in an upcoming
>>> revision of the LoongArch ISA manual. (It already contains assembler
>>> syntax tips for insns like alsl.* so another similar addition should
>>> be appropriate.) It's not sure at this moment whether an overhaul of
>>> LoongArch assembler is going to happen, so we have little choice if we
>>> want to keep downstream fuss to a minimum.


  reply	other threads:[~2023-08-15 11:35 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-09  1:39 [PATCH v1 0/2] Add support for "pcaddi rd, label" mengqinggang
2023-08-09  1:39 ` [PATCH v1 1/2] LoongArch: Fix pcaddi format string mengqinggang
2023-08-09 11:37   ` Xi Ruoyao
2023-08-09 11:48     ` Xi Ruoyao
2023-08-11  3:08     ` WANG Xuerui
2023-08-15 10:00       ` mengqinggang
2023-08-15 10:44         ` Xi Ruoyao
2023-08-15 11:35           ` mengqinggang [this message]
2023-08-15 15:03             ` Xi Ruoyao
2023-08-09  1:39 ` [PATCH v1 2/2] LoongArch: Add support for "pcaddi rd, label" mengqinggang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8721701b-926b-cb86-6959-e1a7bfd9a22c@loongson.cn \
    --to=mengqinggang@loongson.cn \
    --cc=binutils@sourceware.org \
    --cc=chenglulu@loongson.cn \
    --cc=chenhuacai@kernel.org \
    --cc=i.swmail@xen0n.name \
    --cc=liuzhensong@loongson.cn \
    --cc=maskray@google.com \
    --cc=xry111@xry111.site \
    --cc=xuchenghua@loongson.cn \
    --cc=yangtiezhu@loongson.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).