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