linux_syscalls/inline/
powerpc.rs

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