#include #include uint64_t cpu_rdmsr(uint32_t id) { uint32_t lo, hi; asm volatile("rdmsr" : "=m"(lo), "=d"(hi) : "c"(id)); return ((uint64_t)lo) | ((uint64_t)hi << 32); } uint64_t cpu_wrmsr(uint32_t id, uint64_t val) { uint32_t lo = val & 0xffffffff, hi = (val >> 32) & 0xffffffff; asm volatile("wrmsr" :: "a"(lo), "d"(hi), "c"(id) : "memory"); return val; }