blob: c8ac37f940f769d809a6782d0a7568d56bf582d5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//! Model Specific Register Operations
//! Wrappers for reading and writing CPU-specific registers
/// Read model specific register
pub inline fn read(register: u32) u64 {
var low: u32 = undefined;
var high: u32 = undefined;
asm volatile ("rdmsr"
: [low] "={eax}" (low),
[high] "={edx}" (high),
: [msr] "{ecx}" (register),
);
return (@as(u64, high) << 32) | @as(u64, low);
}
/// Write model specific register
pub inline fn write(register: u32, value: u64) void {
const low: u32 = @truncate(value);
const high: u32 = @truncate(value >> 32);
asm volatile ("wrmsr"
:
: [msr] "{ecx}" (register),
[low] "{eax}" (low),
[high] "{edx}" (high),
);
}
|