Microkernel thing OS experiment (Zig ⚡)
1const config = @import("config"); 2const build_helpers = @import("build_helpers"); 3 4pub const syscall1 = switch (config.arch) { 5 .aarch64 => Aarch64.syscall1, 6 .amd64 => Amd64.syscall1, 7 .riscv64 => Riscv64.syscall1, 8}; 9 10const Aarch64 = struct { 11 pub fn syscall1(number: usize, arg1: usize) usize { 12 return asm volatile ("svc #0" 13 : [ret] "={x0}" (-> usize), 14 : [number] "{x8}" (number), 15 [arg1] "{x0}" (arg1), 16 : .{ .memory = true }); 17 } 18}; 19 20const Amd64 = struct { 21 pub fn syscall1(number: usize, arg1: usize) usize { 22 return asm volatile ("syscall" 23 : [ret] "={rax}" (-> usize), 24 : [number] "{rax}" (number), 25 [arg1] "{rdi}" (arg1), 26 : .{ .rcx = true, .r11 = true }); 27 } 28}; 29 30const Riscv64 = struct { 31 pub fn syscall1(number: usize, arg1: usize) usize { 32 return asm volatile ("ecall" 33 : [ret] "={x10}" (-> usize), 34 : [number] "{x17}" (number), 35 [arg1] "{x10}" (arg1), 36 : .{ .memory = true }); 37 } 38};