16 lines
475 B
C
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));
|
|
}
|