1 module syscalld.arch.syscall_x86_64;
2 
3 version(Posix):
4 version(D_InlineAsm_X86_64):
5 @nogc:
6 nothrow:
7 
8 size_t syscall(size_t ident)
9 {
10     size_t ret;
11 
12     synchronized asm @nogc nothrow
13     {
14         mov RAX, ident;
15         syscall;
16         mov ret, RAX;
17     }
18     return ret;
19 }
20 
21 size_t syscall(size_t ident, size_t n)
22 {
23     size_t ret;
24 
25     synchronized asm @nogc nothrow
26     {
27         mov RAX, ident;
28         mov RDI, n[RBP];
29         syscall;
30         mov ret, RAX;
31     }
32     return ret;
33 }
34 
35 size_t syscall(size_t ident, size_t n, size_t arg1)
36 {
37     size_t ret;
38 
39     synchronized asm @nogc nothrow
40     {
41         mov RAX, ident;
42         mov RDI, n[RBP];
43         mov RSI, arg1[RBP];
44         syscall;
45         mov ret, RAX;
46     }
47     return ret;
48 }
49 
50 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2)
51 {
52     size_t ret;
53 
54     synchronized asm @nogc nothrow
55     {
56         mov RAX, ident;
57         mov RDI, n[RBP];
58         mov RSI, arg1[RBP];
59         mov RDX, arg2[RBP];
60         syscall;
61         mov ret, RAX;
62     }
63     return ret;
64 }
65 
66 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2, size_t arg3)
67 {
68     size_t ret;
69 
70     synchronized asm @nogc nothrow
71     {
72         mov RAX, ident;
73         mov RDI, n[RBP];
74         mov RSI, arg1[RBP];
75         mov RDX, arg2[RBP];
76         mov R10, arg3[RBP];
77         syscall;
78         mov ret, RAX;
79     }
80     return ret;
81 }
82 
83 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2, size_t arg3, size_t arg4)
84 {
85     size_t ret;
86 
87     synchronized asm @nogc nothrow
88     {
89         mov RAX, ident;
90         mov RDI, n[RBP];
91         mov RSI, arg1[RBP];
92         mov RDX, arg2[RBP];
93         mov R10, arg3[RBP];
94         mov R8, arg4[RBP];
95         syscall;
96         mov ret, RAX;
97     }
98     return ret;
99 }
100 
101 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2, size_t arg3, size_t arg4, size_t arg5)
102 {
103     size_t ret;
104 
105     synchronized asm @nogc nothrow
106     {
107         mov RAX, ident;
108         mov RDI, n[RBP];
109         mov RSI, arg1[RBP];
110         mov RDX, arg2[RBP];
111         mov R10, arg3[RBP];
112         mov R8, arg4[RBP];
113         mov R9, arg5[RBP];
114         syscall;
115         mov ret, RAX;
116     }
117     return ret;
118 }