arm64: uaccess: permit put_{user,kernel} to use zero register
authorMark Rutland <mark.rutland@arm.com>
Tue, 14 Mar 2023 15:36:59 +0000 (15:36 +0000)
committerWill Deacon <will@kernel.org>
Tue, 28 Mar 2023 20:13:25 +0000 (21:13 +0100)
commit4a3f806eca09f2ac042c42db0d6468f5a81ab666
treee24223eab043d3d62b1487010893ac389f101632
parent39c8275de81cf7fb524e2ff067aa175447412284
arm64: uaccess: permit put_{user,kernel} to use zero register

Currently the asm constraints for __put_mem_asm() require that the value
is placed in a "real" GPR (i.e. one other than [XW]ZR or SP). This means
that for cases such as:

__put_user(0, addr)

... the compiler has to move '0' into "real" GPR, e.g.

mov xN, #0
sttr xN, [<addr>]

This is unfortunate, as using the zero register would require fewer
instructions and save a "real" GPR for other usage, allowing the
compiler to generate:

sttr xzr, [<addr>]

Modify the asm constaints for __put_mem_asm() to permit the use of the
zero register for the value.

There should be no functional change as a result of this patch.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20230314153700.787701-4-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/uaccess.h