| Zeile 7: | Zeile 7: | ||
<c>uint64_t rdmsr(uint32_t msr) | <c>uint64_t rdmsr(uint32_t msr) | ||
{ | { | ||
| − | + | uint32_t low, high; | |
| − | |||
| − | + | __asm__ __volatile__ ("rdmsr" : | |
| + | "=a" (low), "=d" (high) : | ||
| + | "c" (msr)); | ||
| − | + | return ((uint64_t)high << 32) | low; | |
| − | |||
| − | |||
| − | |||
} | } | ||
| − | void wrmsr(uint32_t msr, uint64_t value) | + | void wrmsr(uint32_t msr, |
| + | uint64_t value) | ||
{ | { | ||
| − | + | uint32_t low = value & 0xFFFFFFFF; | |
| + | uint32_t high = value >> 32; | ||
| − | + | __asm__ __volatile__ ("wrmsr" :: | |
| − | + | "a"(low), "c"(msr), "d"(high)); | |
| − | |||
}</c> | }</c> | ||