15 lines
403 B
C
15 lines
403 B
C
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
uint64_t hal_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 hal_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;
|
|
}
|