From 6efee3aec3381545a69d2707e0f632caa5a22296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Sun, 29 Mar 2026 21:19:47 -0400 Subject: [PATCH] feat(amd64): add read/write_cr --- src/platform/amd64/cpu.zig | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/platform/amd64/cpu.zig b/src/platform/amd64/cpu.zig index 1359f15..89b2e6f 100644 --- a/src/platform/amd64/cpu.zig +++ b/src/platform/amd64/cpu.zig @@ -137,6 +137,21 @@ pub inline fn rdtsc() u64 { return @as(u64, high) << 32 | low; } +pub inline fn read_cr(comptime n: u2) u64 { + comptime std.debug.assert(n != 1); + return asm volatile (std.fmt.comptimePrint("mov %%cr{}, %[ret]", .{n}) + : [ret] "=r" (-> u64), + ); +} + +pub inline fn write_cr(comptime n: u2, value: u64) void { + comptime std.debug.assert(n != 1); + asm volatile (std.fmt.comptimePrint("mov %[value], %%cr{}", .{n}) + : + : [value] "r" (value), + ); +} + pub const CpuidResult = struct { eax: u32, ebx: u32, ecx: u32, edx: u32 }; pub inline fn cpuid(leaf: u32, subleaf: u32) CpuidResult {