1use core::arch::asm;
22pub unsafe fn syscall_x64_6(
23 num: u64,
24 arg0: u64,
25 arg1: u64,
26 arg2: u64,
27 arg3: u64,
28 arg4: u64,
29 arg5: u64,
30) -> u64 {
31 let mut ret: u64;
32 asm!(
33 "syscall",
34 in("rax") num,
35 in("rdi") arg0,
36 in("rsi") arg1,
37 in("rdx") arg2,
38 in("r10") arg3, in("r8") arg4,
40 in("r9") arg5,
41 out("rcx") _, out("r11") _, lateout("rax") ret, );
45 ret
46}
47pub unsafe fn syscall_x64_5(
48 num: u64,
49 arg0: u64,
50 arg1: u64,
51 arg2: u64,
52 arg3: u64,
53 arg4: u64,
54) -> u64 {
55 let mut ret: u64;
56 asm!(
57 "syscall",
58 in("rax") num,
59 in("rdi") arg0,
60 in("rsi") arg1,
61 in("rdx") arg2,
62 in("r10") arg3, in("r8") arg4,
64 out("rcx") _, out("r11") _, lateout("rax") ret, );
68 ret
69}
70pub unsafe fn syscall_x64_4(num: u64, arg0: u64, arg1: u64, arg2: u64, arg3: u64) -> u64 {
71 let mut ret: u64;
72 asm!(
73 "syscall",
74 in("rax") num,
75 in("rdi") arg0,
76 in("rsi") arg1,
77 in("rdx") arg2,
78 in("r10") arg3, out("rcx") _, out("r11") _, lateout("rax") ret, );
83 ret
84}
85pub unsafe fn syscall_x64_3(num: u64, arg0: u64, arg1: u64, arg2: u64) -> u64 {
86 let mut ret: u64;
87 asm!(
88 "syscall",
89 in("rax") num,
90 in("rdi") arg0,
91 in("rsi") arg1,
92 in("rdx") arg2,
93 out("rcx") _, out("r11") _, lateout("rax") ret, );
97 ret
98}
99pub unsafe fn syscall_x64_2(num: u64, arg0: u64, arg1: u64) -> u64 {
100 let mut ret: u64;
101 asm!(
102 "syscall",
103 in("rax") num,
104 in("rdi") arg0,
105 in("rsi") arg1,
106 out("rcx") _, out("r11") _, lateout("rax") ret, );
110 ret
111}
112
113pub unsafe fn syscall_x64_1(num: u64, arg1: u64) -> u64 {
114 let mut ret: u64;
115 asm!(
116 "syscall",
117 in("rax") num,
118 in("rdi") arg1,
119 out("rcx") _, out("r11") _, lateout("rax") ret, );
123 ret
124}
125
126pub unsafe fn syscall_x64_0(num: u64) -> u64 {
127 let mut ret: u64;
128 asm!(
129 "syscall",
130 in("rax") num,
131 out("rcx") _, out("r11") _, lateout("rax") ret, );
135 ret
136}
137
138#[macro_export]
139macro_rules! syscall_1 {
140 ($num:ident, $arg0:expr) => {
141 {
142 let mut ret: i64;
143 core::arch::asm!(
144 "syscall",
145 in("rax") $num,
146 in("rdi") $arg0,
147 out("rcx") _, out("r11") _, lateout("rax") ret, );
151 ret
152 }
153 };
154}
155#[macro_export]
156macro_rules! syscall_2 {
157 ($num:ident, $arg0:expr, $arg1:expr) => {
158 {
159 let mut ret: i64;
160 core::arch::asm!(
161 "syscall",
162 in("rax") $num,
163 in("rdi") $arg0,
164 in("rsi") $arg1,
165 out("rcx") _, out("r11") _, lateout("rax") ret, );
169 ret
170 }
171 };
172}