Subject: Re: [PATCH 17/18] arm64: fpsimd: Move SME save/restore inline

From: Mark Rutland <[email-masked]>
Date: Tue, 26 May 2026 16:28:17 +0100

On Tue, May 26, 2026 at 03:39:56PM +0100, Vladimir Murzin wrote:
> Hi Mark,
> 
> On 5/26/26 15:08, Mark Rutland wrote:
> > On Thu, May 21, 2026 at 02:25:55PM +0100, Mark Rutland wrote:
> >> +static inline void __sme_save_za(struct sme_state *state, unsigned long svl)
> >> +{
> >> +	/* The <Wv> argument to STR (array vector) can only encode W12-W15 */
> >> +	register unsigned long v asm ("12");
> > Sorry, I had meant to put "x12" here, but evidently GCC and LLVM accept
> > "12" on its own.
> > 
> > For clarity (e.g. to match the comment) I'll change that to "w12" and
> > make the type unsigned int. Likewise in __sme_load_za().
> 
> I suspect you are intentionally not using "Ucj" constrain to limit register allocator,
> if so I'm wondering why?

Thanks for the suggestion; that was ignorance rather than intent.

I was not aware of "Ucj" as it doesn't appear on the public GCC
documentation:

  https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html

Looking at the machine description file, that's marked with '@internal',
so IIUC GCC folk don't seem to expect/want people to use it. That said,
LLVM seems to support it.

I'll go check that all relevant toolchains support this, and poke GCC
folk to see if they're happy to promote that to a public constraint.

If that's all good, I'll move over to "Ucj". If not, I'll update the
commit message and/or comments to explain why.

Mark.