const config = @import("config"); const build_helpers = @import("build_helpers"); pub const syscall1 = switch (config.arch) { .aarch64 => Aarch64.syscall1, .amd64 => Amd64.syscall1, .riscv64 => Riscv64.syscall1, }; const Aarch64 = struct { pub fn syscall1(number: usize, arg1: usize) usize { return asm volatile ("svc #0" : [ret] "={x0}" (-> usize), : [number] "{x8}" (number), [arg1] "{x0}" (arg1), : .{ .memory = true }); } }; const Amd64 = struct { pub fn syscall1(number: usize, arg1: usize) usize { return asm volatile ("syscall" : [ret] "={rax}" (-> usize), : [number] "{rdi}" (number), [arg1] "{rsi}" (arg1), : .{ .rcx = true, .r11 = true }); } }; const Riscv64 = struct { pub fn syscall1(number: usize, arg1: usize) usize { return asm volatile ("ecall" : [ret] "={x10}" (-> usize), : [number] "{x17}" (number), [arg1] "{x10}" (arg1), : .{ .memory = true }); } };