From c6901792f009cfd824707724b687e99edd4c8ecd Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 5 Feb 2023 23:55:14 +0000 Subject: [build] Allow for per-architecture unprefixed constant operand modifier Over the years, the undocumented operand modifier used to produce the unprefixed constant values in __einfo_error() has varied from "%c0" to "%a0" in commit 1a77466 ("[build] Fix use of inline assembly on GCC 4.8 ARM64 builds") and back to "%c0" in commit 3fb3ffc ("[build] Fix use of inline assembly on GCC 8 ARM64 builds"), according to the evolving demands of the toolchain. LoongArch64 suffers from a similar issue: GCC 13 will allow either, but the currently released GCC 12 allows only the "%a0" form. Introduce a macro ASM_NO_PREFIX, defined in bits/compiler.h, to abstract away this difference and allow different architectures to use different operand modifiers. Signed-off-by: Michael Brown --- src/arch/i386/include/bits/compiler.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/arch/i386/include/bits') diff --git a/src/arch/i386/include/bits/compiler.h b/src/arch/i386/include/bits/compiler.h index 87201135f..78c600428 100644 --- a/src/arch/i386/include/bits/compiler.h +++ b/src/arch/i386/include/bits/compiler.h @@ -8,6 +8,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #ifndef ASSEMBLY +/** Unprefixed constant operand modifier */ +#define ASM_NO_PREFIX "c" + /** Declare a function with standard calling conventions */ #define __asmcall __attribute__ (( cdecl, regparm(0) )) -- cgit v1.2.3-55-g7522