]>
git.proxmox.com Git - rustc.git/blob - vendor/rustix/src/backend/linux_raw/arch/inline/powerpc64.rs
1 //! powerpc64le Linux system calls.
3 //! On powerpc64le, Linux indicates success or failure using `cr0.SO` rather
4 //! than by returning a negative error code as most other architectures do. In
5 //! theory we could immediately translate this into a `Result`, and it'd save a
6 //! few branches. And in theory we could have specialized sequences for use
7 //! with syscalls that are known to never fail. However, those would require
8 //! more extensive changes in rustix's platform-independent code. For now, we
9 //! check the flag and negate the error value to make PowerPC64 look like other
12 use crate::backend
::reg
::{
13 ArgReg
, FromAsm
, RetReg
, SyscallNumber
, ToAsm
, A0
, A1
, A2
, A3
, A4
, A5
, R0
,
18 pub(in crate::backend
) unsafe fn syscall0_readonly(nr
: SyscallNumber
) -> RetReg
<R0
> {
25 inlateout("r0") nr
.to_asm() => _
,
37 options(nostack
, preserves_flags
, readonly
)
43 pub(in crate::backend
) unsafe fn syscall1(nr
: SyscallNumber
<'_
>, a0
: ArgReg
<'_
, A0
>) -> RetReg
<R0
> {
50 inlateout("r0") nr
.to_asm() => _
,
51 inlateout("r3") a0
.to_asm() => r0
,
62 options(nostack
, preserves_flags
)
68 pub(in crate::backend
) unsafe fn syscall1_readonly(
69 nr
: SyscallNumber
<'_
>,
78 inlateout("r0") nr
.to_asm() => _
,
79 inlateout("r3") a0
.to_asm() => r0
,
90 options(nostack
, preserves_flags
, readonly
)
96 pub(in crate::backend
) unsafe fn syscall1_noreturn(nr
: SyscallNumber
<'_
>, a0
: ArgReg
<'_
, A0
>) -> ! {
100 in("r3") a0
.to_asm(),
106 pub(in crate::backend
) unsafe fn syscall2(
107 nr
: SyscallNumber
<'_
>,
117 inlateout("r0") nr
.to_asm() => _
,
118 inlateout("r3") a0
.to_asm() => r0
,
119 inlateout("r4") a1
.to_asm() => _
,
129 options(nostack
, preserves_flags
)
131 FromAsm
::from_asm(r0
)
135 pub(in crate::backend
) unsafe fn syscall2_readonly(
136 nr
: SyscallNumber
<'_
>,
146 inlateout("r0") nr
.to_asm() => _
,
147 inlateout("r3") a0
.to_asm() => r0
,
148 inlateout("r4") a1
.to_asm() => _
,
158 options(nostack
, preserves_flags
, readonly
)
160 FromAsm
::from_asm(r0
)
164 pub(in crate::backend
) unsafe fn syscall3(
165 nr
: SyscallNumber
<'_
>,
176 inlateout("r0") nr
.to_asm() => _
,
177 inlateout("r3") a0
.to_asm() => r0
,
178 inlateout("r4") a1
.to_asm() => _
,
179 inlateout("r5") a2
.to_asm() => _
,
188 options(nostack
, preserves_flags
)
190 FromAsm
::from_asm(r0
)
194 pub(in crate::backend
) unsafe fn syscall3_readonly(
195 nr
: SyscallNumber
<'_
>,
206 inlateout("r0") nr
.to_asm() => _
,
207 inlateout("r3") a0
.to_asm() => r0
,
208 inlateout("r4") a1
.to_asm() => _
,
209 inlateout("r5") a2
.to_asm() => _
,
218 options(nostack
, preserves_flags
, readonly
)
220 FromAsm
::from_asm(r0
)
224 pub(in crate::backend
) unsafe fn syscall4(
225 nr
: SyscallNumber
<'_
>,
237 inlateout("r0") nr
.to_asm() => _
,
238 inlateout("r3") a0
.to_asm() => r0
,
239 inlateout("r4") a1
.to_asm() => _
,
240 inlateout("r5") a2
.to_asm() => _
,
241 inlateout("r6") a3
.to_asm() => _
,
249 options(nostack
, preserves_flags
)
251 FromAsm
::from_asm(r0
)
255 pub(in crate::backend
) unsafe fn syscall4_readonly(
256 nr
: SyscallNumber
<'_
>,
268 inlateout("r0") nr
.to_asm() => _
,
269 inlateout("r3") a0
.to_asm() => r0
,
270 inlateout("r4") a1
.to_asm() => _
,
271 inlateout("r5") a2
.to_asm() => _
,
272 inlateout("r6") a3
.to_asm() => _
,
280 options(nostack
, preserves_flags
, readonly
)
282 FromAsm
::from_asm(r0
)
286 pub(in crate::backend
) unsafe fn syscall5(
287 nr
: SyscallNumber
<'_
>,
300 inlateout("r0") nr
.to_asm() => _
,
301 inlateout("r3") a0
.to_asm() => r0
,
302 inlateout("r4") a1
.to_asm() => _
,
303 inlateout("r5") a2
.to_asm() => _
,
304 inlateout("r6") a3
.to_asm() => _
,
305 inlateout("r7") a4
.to_asm() => _
,
312 options(nostack
, preserves_flags
)
314 FromAsm
::from_asm(r0
)
318 pub(in crate::backend
) unsafe fn syscall5_readonly(
319 nr
: SyscallNumber
<'_
>,
332 inlateout("r0") nr
.to_asm() => _
,
333 inlateout("r3") a0
.to_asm() => r0
,
334 inlateout("r4") a1
.to_asm() => _
,
335 inlateout("r5") a2
.to_asm() => _
,
336 inlateout("r6") a3
.to_asm() => _
,
337 inlateout("r7") a4
.to_asm() => _
,
344 options(nostack
, preserves_flags
, readonly
)
346 FromAsm
::from_asm(r0
)
350 pub(in crate::backend
) unsafe fn syscall6(
351 nr
: SyscallNumber
<'_
>,
365 inlateout("r0") nr
.to_asm() => _
,
366 inlateout("r3") a0
.to_asm() => r0
,
367 inlateout("r4") a1
.to_asm() => _
,
368 inlateout("r5") a2
.to_asm() => _
,
369 inlateout("r6") a3
.to_asm() => _
,
370 inlateout("r7") a4
.to_asm() => _
,
371 inlateout("r8") a5
.to_asm() => _
,
377 options(nostack
, preserves_flags
)
379 FromAsm
::from_asm(r0
)
383 pub(in crate::backend
) unsafe fn syscall6_readonly(
384 nr
: SyscallNumber
<'_
>,
398 inlateout("r0") nr
.to_asm() => _
,
399 inlateout("r3") a0
.to_asm() => r0
,
400 inlateout("r4") a1
.to_asm() => _
,
401 inlateout("r5") a2
.to_asm() => _
,
402 inlateout("r6") a3
.to_asm() => _
,
403 inlateout("r7") a4
.to_asm() => _
,
404 inlateout("r8") a5
.to_asm() => _
,
410 options(nostack
, preserves_flags
, readonly
)
412 FromAsm
::from_asm(r0
)