1#![allow(clippy::missing_errors_doc)]
6#![allow(clippy::missing_safety_doc)]
7#![allow(clippy::module_name_repetitions)]
8
9use core::arch::asm;
10
11use super::types::{check_errno, Errno, Sysno};
12
13#[inline]
14pub unsafe fn syscall0(n: Sysno) -> Result<usize, Errno> {
15 let ret: usize;
16 unsafe {
17 asm!("syscall",
18 in("rax") n,
19 out("rcx") _, out("r11") _, lateout("rax") ret,
22 );
23 }
24 check_errno(ret)
25}
26
27#[inline]
28pub unsafe fn syscall1(n: Sysno, a1: usize) -> Result<usize, Errno> {
29 let ret: usize;
30 unsafe {
31 asm!("syscall",
32 in("rax") n,
33 in("rdi") a1,
34 out("rcx") _,
35 out("r11") _,
36 lateout("rax") ret,
37 );
38 }
39 check_errno(ret)
40}
41
42#[inline]
43pub unsafe fn syscall2(n: Sysno, a1: usize, a2: usize) -> Result<usize, Errno> {
44 let ret: usize;
45 unsafe {
46 asm!("syscall",
47 in("rax") n,
48 in("rdi") a1,
49 in("rsi") a2,
50 out("rcx") _,
51 out("r11") _,
52 lateout("rax") ret,
53 );
54 }
55 check_errno(ret)
56}
57
58#[inline]
59pub unsafe fn syscall3(n: Sysno, a1: usize, a2: usize, a3: usize) -> Result<usize, Errno> {
60 let ret: usize;
61 unsafe {
62 asm!("syscall",
63 in("rax") n,
64 in("rdi") a1,
65 in("rsi") a2,
66 in("rdx") a3,
67 out("rcx") _,
68 out("r11") _,
69 lateout("rax") ret,
70 );
71 }
72 check_errno(ret)
73}
74
75#[inline]
76pub unsafe fn syscall4(
77 n: Sysno,
78 a1: usize,
79 a2: usize,
80 a3: usize,
81 a4: usize,
82) -> Result<usize, Errno> {
83 let ret: usize;
84 unsafe {
85 asm!("syscall",
86 in("rax") n,
87 in("rdi") a1,
88 in("rsi") a2,
89 in("rdx") a3,
90 in("r10") a4,
91 out("rcx") _,
92 out("r11") _,
93 lateout("rax") ret,
94 );
95 }
96 check_errno(ret)
97}
98
99#[inline]
100pub unsafe fn syscall5(
101 n: Sysno,
102 a1: usize,
103 a2: usize,
104 a3: usize,
105 a4: usize,
106 a5: usize,
107) -> Result<usize, Errno> {
108 let ret: usize;
109 unsafe {
110 asm!("syscall",
111 in("rax") n,
112 in("rdi") a1,
113 in("rsi") a2,
114 in("rdx") a3,
115 in("r10") a4,
116 in("r8") a5,
117 out("rcx") _,
118 out("r11") _,
119 lateout("rax") ret,
120 );
121 }
122 check_errno(ret)
123}
124
125#[inline]
126pub unsafe fn syscall6(
127 n: Sysno,
128 a1: usize,
129 a2: usize,
130 a3: usize,
131 a4: usize,
132 a5: usize,
133 a6: usize,
134) -> Result<usize, Errno> {
135 let ret: usize;
136 unsafe {
137 asm!("syscall",
138 in("rax") n,
139 in("rdi") a1,
140 in("rsi") a2,
141 in("rdx") a3,
142 in("r10") a4,
143 in("r8") a5,
144 in("r9") a6,
145 out("rcx") _,
146 out("r11") _,
147 lateout("rax") ret,
148 );
149 }
150 check_errno(ret)
151}