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}