diff --git a/src/hulk/cpu.d b/src/hulk/cpu.d index 023adda..fa4d27c 100644 --- a/src/hulk/cpu.d +++ b/src/hulk/cpu.d @@ -5,6 +5,8 @@ module hulk.cpu; import ldc.llvmasm; +enum uint MSR_EFER = 0xC000_0080u; + void cli() { __asm("cli", ""); @@ -45,6 +47,14 @@ ulong read_cr4() return __asm!ulong("mov %cr4, %rax", "={rax}"); } +ulong rdmsr(uint msr) +{ + return __asm!ulong(` + rdmsr + shl $$32, %rdx + or %rdx, %rax`, "={rax},{ecx},~{rdx}", msr); +} + ubyte in8(ushort ioaddr) { return __asm!ubyte("inb %dx, %al", "={al},{dx}", ioaddr);