#pragma once #include "util/number.h" inline uint64_t msr_read(uint32_t msr) { uint32_t low = 0; uint32_t high = 0; __asm__ volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr)); return (static_cast(high) << 32) | low; } inline void msr_write(uint32_t msr, uint64_t value) { uint32_t low = static_cast(value); uint32_t high = static_cast(value >> 32); __asm__ volatile("wrmsr" : : "c"(msr), "a"(low), "d"(high)); }