From 01fa9ddfa703833bc34c5fefd0ea0d138720e6c6 Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi@cloudius-systems.com> Date: Thu, 7 Mar 2013 13:26:13 +0200 Subject: [PATCH] x64: add cpuid accessors --- arch/x64/processor.hh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/arch/x64/processor.hh b/arch/x64/processor.hh index 0efa464b9..6c3cd6ea2 100644 --- a/arch/x64/processor.hh +++ b/arch/x64/processor.hh @@ -35,6 +35,24 @@ constexpr ulong cr4_pcide = 1u << 17; constexpr ulong cr4_osxsave = 1u << 18; constexpr ulong cr4_smep = 1u << 20; +struct cpuid_result { + u32 a, b, c, d; +}; + +inline cpuid_result cpuid(u32 function) { + cpuid_result r; + asm("cpuid" : "=a"(r.a), "=b"(r.b), "=c"(r.c), "=d"(r.d) + : "0"(function)); + return r; +} + +inline cpuid_result cpuid(u32 function, u32 subleaf) { + cpuid_result r; + asm("cpuid" : "=a"(r.a), "=b"(r.b), "=c"(r.c), "=d"(r.d) + : "0"(function), "2"(subleaf)); + return r; +} + inline ulong read_cr0() { ulong r; asm volatile ("mov %%cr0, %0" : "=r"(r)); -- GitLab