PrOSess/kernel/include/util/msr.h

16 lines
475 B
C

#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<uint64_t>(high) << 32) | low;
}
inline void msr_write(uint32_t msr, uint64_t value) {
uint32_t low = static_cast<uint32_t>(value);
uint32_t high = static_cast<uint32_t>(value >> 32);
__asm__ volatile("wrmsr" : : "c"(msr), "a"(low), "d"(high));
}