master
1const plan9 = @import("../plan9.zig");
2// TODO better inline asm
3
4pub fn syscall1(sys: plan9.SYS, arg0: usize) usize {
5 return asm volatile (
6 \\push %%r8
7 \\push $0
8 \\syscall
9 \\pop %%r11
10 \\pop %%r11
11 : [ret] "={rax}" (-> usize),
12 : [arg0] "{r8}" (arg0),
13 [syscall_number] "{rbp}" (@intFromEnum(sys)),
14 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
15}
16pub fn syscall2(sys: plan9.SYS, arg0: usize, arg1: usize) usize {
17 return asm volatile (
18 \\push %%r9
19 \\push %%r8
20 \\push $0
21 \\syscall
22 \\pop %%r11
23 \\pop %%r11
24 \\pop %%r11
25 : [ret] "={rax}" (-> usize),
26 : [arg0] "{r8}" (arg0),
27 [arg1] "{r9}" (arg1),
28 [syscall_number] "{rbp}" (@intFromEnum(sys)),
29 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
30}
31pub fn syscall3(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize) usize {
32 return asm volatile (
33 \\push %%r10
34 \\push %%r9
35 \\push %%r8
36 \\push $0
37 \\syscall
38 \\pop %%r11
39 \\pop %%r11
40 \\pop %%r11
41 \\pop %%r11
42 : [ret] "={rax}" (-> usize),
43 : [arg0] "{r8}" (arg0),
44 [arg1] "{r9}" (arg1),
45 [arg2] "{r10}" (arg2),
46 [syscall_number] "{rbp}" (@intFromEnum(sys)),
47 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
48}
49pub fn syscall4(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize, arg3: usize) usize {
50 return asm volatile (
51 \\push %%r11
52 \\push %%r10
53 \\push %%r9
54 \\push %%r8
55 \\push $0
56 \\syscall
57 \\pop %%r11
58 \\pop %%r11
59 \\pop %%r11
60 \\pop %%r11
61 \\pop %%r11
62 : [ret] "={rax}" (-> usize),
63 : [arg0] "{r8}" (arg0),
64 [arg1] "{r9}" (arg1),
65 [arg2] "{r10}" (arg2),
66 [arg3] "{r11}" (arg3),
67 [syscall_number] "{rbp}" (@intFromEnum(sys)),
68 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
69}