[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 2/6] plat/common: Provide cpuid macro for x86
The `cpuid` instruction is used to query and retrieve information about supported CPU features. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- plat/common/include/x86/cpu.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/plat/common/include/x86/cpu.h b/plat/common/include/x86/cpu.h index 4a3f65d4..3bec2b58 100644 --- a/plat/common/include/x86/cpu.h +++ b/plat/common/include/x86/cpu.h @@ -59,6 +59,15 @@ struct _x86_features { extern struct _x86_features x86_cpu_features; +static inline void cpuid(__u32 fn, __u32 subfn, + __u32 *eax, __u32 *ebx, + __u32 *ecx, __u32 *edx) +{ + asm volatile("cpuid" + : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) + : "a"(fn), "c" (subfn)); +} + static inline void save_extregs(struct sw_ctx *ctx) { switch (x86_cpu_features.save) { @@ -132,17 +141,14 @@ static inline void _init_cpufeatures(void) * contains "1" after this asm expression. See the "Warning" note at * https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#InputOperands */ - asm volatile("cpuid" : "=a"(eax), "=c"(ecx), "=d"(edx) : "a"(1) - : "ebx"); + cpuid(1, 0, &eax, &ebx, &ecx, &edx); if (ecx & X86_CPUID1_ECX_OSXSAVE) { - asm volatile("cpuid" : "=a"(eax), "=c"(ecx) : "a"(0xd), "c"(1) - : "ebx", "edx"); + cpuid(0xd, 1, &eax, &ebx, &ecx, &edx); if (eax & X86_CPUIDD1_EAX_XSAVEOPT) x86_cpu_features.save = X86_SAVE_XSAVEOPT; else x86_cpu_features.save = X86_SAVE_XSAVE; - asm volatile("cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx) - : "a"(0xd), "c"(0) : "edx"); + cpuid(0xd, 0, &eax, &ebx, &ecx, &edx); x86_cpu_features.extregs_size = ebx; x86_cpu_features.extregs_align = 64; } else if (edx & X86_CPUID1_EDX_FXSR) { -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |