inline_assembly.zig (869B) - Raw
1 pub fn main() noreturn { 2 const msg = "hello world\n"; 3 _ = syscall3(SYS_write, STDOUT_FILENO, @intFromPtr(msg), msg.len); 4 _ = syscall1(SYS_exit, 0); 5 unreachable; 6 } 7 8 pub const SYS_write = 1; 9 pub const SYS_exit = 60; 10 11 pub const STDOUT_FILENO = 1; 12 13 pub fn syscall1(number: usize, arg1: usize) usize { 14 return asm volatile ("syscall" 15 : [ret] "={rax}" (-> usize), 16 : [number] "{rax}" (number), 17 [arg1] "{rdi}" (arg1), 18 : .{ .rcx = true, .r11 = true }); 19 } 20 21 pub fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize { 22 return asm volatile ("syscall" 23 : [ret] "={rax}" (-> usize), 24 : [number] "{rax}" (number), 25 [arg1] "{rdi}" (arg1), 26 [arg2] "{rsi}" (arg2), 27 [arg3] "{rdx}" (arg3), 28 : .{ .rcx = true, .r11 = true }); 29 } 30 31 // exe=succeed 32 // target=x86_64-linux