pub fn readCr2() u64 { return asm volatile ( \\ mov %cr2, %rax : [ret] "={rax}" (-> u64), : : .{}); } pub fn readCr3() u64 { return asm volatile ( \\ mov %cr3, %rax : [ret] "={rax}" (-> u64), : : .{}); } pub const PrivilegeLevel = enum(u4) { Kernel = 0, User = 3, }; pub const PtRegs = struct { r15: usize, r14: usize, r13: usize, r12: usize, bp: usize, bx: usize, r11: usize, r10: usize, r9: usize, r8: usize, ax: usize, cx: usize, dx: usize, si: usize, di: usize, code: usize, ip: usize, cs: usize, flags: usize, sp: usize, ss: usize, };