[PATCH v3 0/2] x86/asm: avoid register pressure from the init case in static_cpu_has()

From: H. Peter Anvin (Intel)
Date: Fri Sep 10 2021 - 15:59:50 EST


gcc will sometimes manifest the address of boot_cpu_data in a register
as part of constant propagation. When multiple static_cpu_has() are
used this may foul the mainline code with a register load which will
only be used on the fallback path, which is unused after
initialization.

Explicitly force gcc to use immediate (rip-relative) addressing for
the fallback path, thus removing any possible register use from
static_cpu_has().

However, currently there is no convenient way to make gcc generate a
%rip-relative immediate reference without splitting code into i386 and
x86-64 versions, so add a new macro to <asm/asm.h> for this purpose.

Changes in v3:
--------------
* Clarify the subject line

Changes in v2:
--------------
* Add new macro to <asm/asm.h>
* *Actually* generate the %rip-relative addressing mode.

arch/x86/include/asm/asm.h | 5 +++++
arch/x86/include/asm/cpufeature.h | 13 +++++++++----
2 files changed, 14 insertions(+), 4 deletions(-)