x86/cpu-policy: Drop workaround for pre-GCC-5 PIC issue

GCC 5.1 is the minimum supported toolchain version now.  Drop the workaround
for the PIC hard register in earlier versions.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2025-08-25 14:04:41 +01:00
1 parent abd6ec8874
commit a41fdcaf1e
1 file changed
+4 -31
+4 -31
View File
@@ -29,45 +29,18 @@ struct cpuid_leaf
uint32_t a, b, c, d;
};
/*
* Versions of GCC before 5 unconditionally reserve %rBX as the PIC hard
* register, and are unable to cope with spilling it. This results in a
* rather cryptic error:
* error: inconsistent operand constraints in an ‘asm’
*
* In affected situations, work around the issue by using a separate register
* to hold the the %rBX output, and xchg twice to leave %rBX preserved around
* the asm() statement.
*/
#if defined(__PIC__) && __GNUC__ < 5 && !defined(__clang__) && defined(__i386__)
# define XCHG_BX "xchg %%ebx, %[bx];"
# define BX_CON [bx] "=&r"
#elif defined(__PIC__) && __GNUC__ < 5 && !defined(__clang__) && \
defined(__x86_64__) && (defined(__code_model_medium__) || \
defined(__code_model_large__))
# define XCHG_BX "xchg %%rbx, %q[bx];"
# define BX_CON [bx] "=&r"
#else
# define XCHG_BX ""
# define BX_CON "=&b"
#endif
static inline void cpuid_leaf(uint32_t leaf, struct cpuid_leaf *l)
{
asm ( XCHG_BX
"cpuid;"
XCHG_BX
: "=a" (l->a), BX_CON (l->b), "=&c" (l->c), "=&d" (l->d)
asm ( "cpuid"
: "=a" (l->a), "=b" (l->b), "=c" (l->c), "=d" (l->d)
: "a" (leaf) );
}
static inline void cpuid_count_leaf(
uint32_t leaf, uint32_t subleaf, struct cpuid_leaf *l)
{
asm ( XCHG_BX
"cpuid;"
XCHG_BX
: "=a" (l->a), BX_CON (l->b), "=c" (l->c), "=&d" (l->d)
asm ( "cpuid"
: "=a" (l->a), "=b" (l->b), "=c" (l->c), "=d" (l->d)
: "a" (leaf), "c" (subleaf) );
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.