Linux PARISC architecture development
 help / color / mirror / Atom feed
From: John David Anglin <dave.anglin@bell.net>
To: Helge Deller <deller@gmx.de>,
	linux-parisc@vger.kernel.org,
	James Bottomley <James.Bottomley@hansenpartnership.com>
Subject: Re: [PATCH] parisc: Prevent using same register as soure and target in extru/shr
Date: Tue, 17 May 2022 09:41:28 -0400	[thread overview]
Message-ID: <a014d535-74de-1550-749c-9f3b268d4cfc@bell.net> (raw)
In-Reply-To: <8b5c308a-f3ea-e07f-053a-ad086ce75c43@gmx.de>

I'm not aware of any PA-RISC instructions where the source and target registers can't be the same.

In gcc asm statements, there are early clobber situations where the source and target can't be the same.
The same situation could occur in assembler macros but never when there's a single instruction.

The only thing unusual about the extru instruction is the most significant 32 bits in the target are undefined
on PA 2.0.  Thus, its use needs to be limited to 32-bit extracts.

Dave

On 2022-05-17 8:54 a.m., Helge Deller wrote:
> On 5/17/22 14:49, Helge Deller wrote:
>> In 2004 Randolph added the shr() assembly macro and noted that the
>> source and target register could not be the same.
>>
>> I did not find any confindence in the docs for this restriction. Maybe
>> it's related that on PA2.0 the upper bits may be clobbered?
> Looking at the generated kernel code from C-files, I'll find all over usages of
> 	extru source, x,y,  target
> where source and target are the same register.
> So, at least for 32-bit this restriction can't be true.
>
> Any ideas why this restriction could have been added to the comments?
>
> Helge
>
>
>> Anyway, add a compile-time check for it now.
>>
>> Signed-off-by: Helge Deller <deller@gmx.de>
>>
>> diff --git a/arch/parisc/include/asm/assembly.h b/arch/parisc/include/asm/assembly.h
>> index ea0cb318b13d..ca1a12ae5ee7 100644
>> --- a/arch/parisc/include/asm/assembly.h
>> +++ b/arch/parisc/include/asm/assembly.h
>> @@ -146,6 +146,9 @@
>>   	/* Shift Right - note the r and t can NOT be the same! */
>>   	.macro shr r, sa, t
>>   	extru \r, 31-(\sa), 32-(\sa), \t
>> +.ifc \r,\t
>> +        .error "Can not used the same register (\r) in shr/extru as source and target register."
>> +.endif
>>   	.endm
>>
>>   	/* pa20w version of shift right */


-- 
John David Anglin  dave.anglin@bell.net


  reply	other threads:[~2022-05-17 13:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-17 12:49 [PATCH] parisc: Prevent using same register as soure and target in extru/shr Helge Deller
2022-05-17 12:54 ` Helge Deller
2022-05-17 13:41   ` John David Anglin [this message]
2022-05-18  6:57   ` Sven Schnelle
2022-05-18  7:10     ` Helge Deller

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=a014d535-74de-1550-749c-9f3b268d4cfc@bell.net \
    --to=dave.anglin@bell.net \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=deller@gmx.de \
    --cc=linux-parisc@vger.kernel.org \
    /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