Skip to main content

linux_syscalls/inline/
loongarch64.rs

1use crate::Sysno;
2
3use core::arch::asm;
4
5#[allow(clippy::missing_safety_doc)]
6#[inline(always)]
7pub unsafe fn raw_syscall0(sysno: Sysno) -> usize {
8    let ret;
9    asm!(
10        "syscall 0",
11        in("$a7") sysno as usize,
12        lateout("$a0") ret,
13        lateout("$t0") _,
14        lateout("$t1") _,
15        lateout("$t2") _,
16        lateout("$t3") _,
17        lateout("$t4") _,
18        lateout("$t5") _,
19        lateout("$t6") _,
20        lateout("$t7") _,
21        lateout("$t8") _,
22        options(nostack, preserves_flags, readonly)
23    );
24    ret
25}
26
27pub use raw_syscall0 as raw_syscall0_readonly;
28
29#[allow(clippy::missing_safety_doc)]
30#[inline(always)]
31pub unsafe fn raw_syscall1(sysno: Sysno, arg0: usize) -> usize {
32    let ret;
33    asm!(
34        "syscall 0",
35        in("$a7") sysno as usize,
36        inlateout("$a0") arg0 => ret,
37        lateout("$t0") _,
38        lateout("$t1") _,
39        lateout("$t2") _,
40        lateout("$t3") _,
41        lateout("$t4") _,
42        lateout("$t5") _,
43        lateout("$t6") _,
44        lateout("$t7") _,
45        lateout("$t8") _,
46        options(nostack, preserves_flags)
47    );
48    ret
49}
50
51#[allow(clippy::missing_safety_doc)]
52#[inline(always)]
53pub unsafe fn raw_syscall1_readonly(sysno: Sysno, arg0: usize) -> usize {
54    let ret;
55    asm!(
56        "syscall 0",
57        in("$a7") sysno as usize,
58        inlateout("$a0") arg0 => ret,
59        options(nostack, preserves_flags, readonly)
60    );
61    ret
62}
63
64#[allow(clippy::missing_safety_doc)]
65#[inline(always)]
66pub unsafe fn syscall1_noreturn(sysno: Sysno, arg0: usize) -> ! {
67    asm!(
68        "syscall 0",
69        "break 1",
70        in("$a7") sysno as usize,
71        in("$a0") arg0,
72        options(noreturn)
73    )
74}
75
76#[allow(clippy::missing_safety_doc)]
77#[inline(always)]
78pub unsafe fn raw_syscall2(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
79    let ret;
80    asm!(
81        "syscall 0",
82        in("$a7") sysno as usize,
83        inlateout("$a0") arg0 => ret,
84        in("$a1") arg1,
85        lateout("$t0") _,
86        lateout("$t1") _,
87        lateout("$t2") _,
88        lateout("$t3") _,
89        lateout("$t4") _,
90        lateout("$t5") _,
91        lateout("$t6") _,
92        lateout("$t7") _,
93        lateout("$t8") _,
94        options(nostack, preserves_flags)
95    );
96    ret
97}
98
99#[allow(clippy::missing_safety_doc)]
100#[inline(always)]
101pub unsafe fn raw_syscall2_readonly(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
102    let ret;
103    asm!(
104        "syscall 0",
105        in("$a7") sysno as usize,
106        inlateout("$a0") arg0 => ret,
107        in("$a1") arg1,
108        lateout("$t0") _,
109        lateout("$t1") _,
110        lateout("$t2") _,
111        lateout("$t3") _,
112        lateout("$t4") _,
113        lateout("$t5") _,
114        lateout("$t6") _,
115        lateout("$t7") _,
116        lateout("$t8") _,
117        options(nostack, preserves_flags, readonly)
118    );
119    ret
120}
121
122#[allow(clippy::missing_safety_doc)]
123#[inline(always)]
124pub unsafe fn raw_syscall3(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
125    let ret;
126    asm!(
127        "syscall 0",
128        in("$a7") sysno as usize,
129        inlateout("$a0") arg0 => ret,
130        in("$a1") arg1,
131        in("$a2") arg2,
132        lateout("$t0") _,
133        lateout("$t1") _,
134        lateout("$t2") _,
135        lateout("$t3") _,
136        lateout("$t4") _,
137        lateout("$t5") _,
138        lateout("$t6") _,
139        lateout("$t7") _,
140        lateout("$t8") _,
141        options(nostack, preserves_flags)
142    );
143    ret
144}
145
146#[allow(clippy::missing_safety_doc)]
147#[inline(always)]
148pub unsafe fn raw_syscall3_readonly(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
149    let ret;
150    asm!(
151        "syscall 0",
152        in("$a7") sysno as usize,
153        inlateout("$a0") arg0 => ret,
154        in("$a1") arg1,
155        in("$a2") arg2,
156        lateout("$t0") _,
157        lateout("$t1") _,
158        lateout("$t2") _,
159        lateout("$t3") _,
160        lateout("$t4") _,
161        lateout("$t5") _,
162        lateout("$t6") _,
163        lateout("$t7") _,
164        lateout("$t8") _,
165        options(nostack, preserves_flags, readonly)
166    );
167    ret
168}
169
170#[allow(clippy::missing_safety_doc)]
171#[inline(always)]
172pub unsafe fn raw_syscall4(
173    sysno: Sysno,
174    arg0: usize,
175    arg1: usize,
176    arg2: usize,
177    arg3: usize,
178) -> usize {
179    let ret;
180    asm!(
181        "syscall 0",
182        in("$a7") sysno as usize,
183        inlateout("$a0") arg0 => ret,
184        in("$a1") arg1,
185        in("$a2") arg2,
186        in("$a3") arg3,
187        lateout("$t0") _,
188        lateout("$t1") _,
189        lateout("$t2") _,
190        lateout("$t3") _,
191        lateout("$t4") _,
192        lateout("$t5") _,
193        lateout("$t6") _,
194        lateout("$t7") _,
195        lateout("$t8") _,
196        options(nostack, preserves_flags)
197    );
198    ret
199}
200
201#[allow(clippy::missing_safety_doc)]
202#[inline(always)]
203pub unsafe fn raw_syscall4_readonly(
204    sysno: Sysno,
205    arg0: usize,
206    arg1: usize,
207    arg2: usize,
208    arg3: usize,
209) -> usize {
210    let ret;
211    asm!(
212        "syscall 0",
213        in("$a7") sysno as usize,
214        inlateout("$a0") arg0 => ret,
215        in("$a1") arg1,
216        in("$a2") arg2,
217        in("$a3") arg3,
218        lateout("$t0") _,
219        lateout("$t1") _,
220        lateout("$t2") _,
221        lateout("$t3") _,
222        lateout("$t4") _,
223        lateout("$t5") _,
224        lateout("$t6") _,
225        lateout("$t7") _,
226        lateout("$t8") _,
227        options(nostack, preserves_flags, readonly)
228    );
229    ret
230}
231
232#[allow(clippy::missing_safety_doc)]
233#[inline(always)]
234pub unsafe fn raw_syscall5(
235    sysno: Sysno,
236    arg0: usize,
237    arg1: usize,
238    arg2: usize,
239    arg3: usize,
240    arg4: usize,
241) -> usize {
242    let ret;
243    asm!(
244        "syscall 0",
245        in("$a7") sysno as usize,
246        inlateout("$a0") arg0 => ret,
247        in("$a1") arg1,
248        in("$a2") arg2,
249        in("$a3") arg3,
250        in("$a4") arg4,
251        lateout("$t0") _,
252        lateout("$t1") _,
253        lateout("$t2") _,
254        lateout("$t3") _,
255        lateout("$t4") _,
256        lateout("$t5") _,
257        lateout("$t6") _,
258        lateout("$t7") _,
259        lateout("$t8") _,
260        options(nostack, preserves_flags)
261    );
262    ret
263}
264
265#[allow(clippy::missing_safety_doc)]
266#[inline(always)]
267pub unsafe fn raw_syscall5_readonly(
268    sysno: Sysno,
269    arg0: usize,
270    arg1: usize,
271    arg2: usize,
272    arg3: usize,
273    arg4: usize,
274) -> usize {
275    let ret;
276    asm!(
277        "syscall 0",
278        in("$a7") sysno as usize,
279        inlateout("$a0") arg0 => ret,
280        in("$a1") arg1,
281        in("$a2") arg2,
282        in("$a3") arg3,
283        in("$a4") arg4,
284        lateout("$t0") _,
285        lateout("$t1") _,
286        lateout("$t2") _,
287        lateout("$t3") _,
288        lateout("$t4") _,
289        lateout("$t5") _,
290        lateout("$t6") _,
291        lateout("$t7") _,
292        lateout("$t8") _,
293        options(nostack, preserves_flags, readonly)
294    );
295    ret
296}
297
298#[allow(clippy::missing_safety_doc)]
299#[inline(always)]
300pub unsafe fn raw_syscall6(
301    sysno: Sysno,
302    arg0: usize,
303    arg1: usize,
304    arg2: usize,
305    arg3: usize,
306    arg4: usize,
307    arg5: usize,
308) -> usize {
309    let ret;
310    asm!(
311        "syscall 0",
312        in("$a7") sysno as usize,
313        inlateout("$a0") arg0 => ret,
314        in("$a1") arg1,
315        in("$a2") arg2,
316        in("$a3") arg3,
317        in("$a4") arg4,
318        in("$a5") arg5,
319        lateout("$t0") _,
320        lateout("$t1") _,
321        lateout("$t2") _,
322        lateout("$t3") _,
323        lateout("$t4") _,
324        lateout("$t5") _,
325        lateout("$t6") _,
326        lateout("$t7") _,
327        lateout("$t8") _,
328        options(nostack, preserves_flags)
329    );
330    ret
331}
332
333#[allow(clippy::missing_safety_doc)]
334#[inline(always)]
335pub unsafe fn raw_syscall6_readonly(
336    sysno: Sysno,
337    arg0: usize,
338    arg1: usize,
339    arg2: usize,
340    arg3: usize,
341    arg4: usize,
342    arg5: usize,
343) -> usize {
344    let ret;
345    asm!(
346        "syscall 0",
347        in("$a7") sysno as usize,
348        inlateout("$a0") arg0 => ret,
349        in("$a1") arg1,
350        in("$a2") arg2,
351        in("$a3") arg3,
352        in("$a4") arg4,
353        in("$a5") arg5,
354        lateout("$t0") _,
355        lateout("$t1") _,
356        lateout("$t2") _,
357        lateout("$t3") _,
358        lateout("$t4") _,
359        lateout("$t5") _,
360        lateout("$t6") _,
361        lateout("$t7") _,
362        lateout("$t8") _,
363        options(nostack, preserves_flags, readonly)
364    );
365    ret
366}
367
368include!("_syscalls.rs");
369
370#[inline(always)]
371pub(crate) fn init() {}