use core::arch::asm;
pub type SyscallWord = u64;
#[inline]
pub unsafe fn syscall0(n: SyscallWord) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
lateout("r3") ret,
lateout("r4") _,
lateout("r5") _,
lateout("r6") _,
lateout("r7") _,
lateout("r8") _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}
#[inline]
pub unsafe fn syscall1(n: SyscallWord, arg1: SyscallWord) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
inlateout("r3") arg1 => ret,
lateout("r4") _,
lateout("r5") _,
lateout("r6") _,
lateout("r7") _,
lateout("r8") _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}
#[inline]
pub unsafe fn syscall2(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
inlateout("r3") arg1 => ret,
inlateout("r4") arg2 => _,
lateout("r5") _,
lateout("r6") _,
lateout("r7") _,
lateout("r8") _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}
#[inline]
pub unsafe fn syscall3(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
arg3: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
inlateout("r3") arg1 => ret,
inlateout("r4") arg2 => _,
inlateout("r5") arg3 => _,
lateout("r6") _,
lateout("r7") _,
lateout("r8") _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}
#[inline]
pub unsafe fn syscall4(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
arg3: SyscallWord,
arg4: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
inlateout("r3") arg1 => ret,
inlateout("r4") arg2 => _,
inlateout("r5") arg3 => _,
inlateout("r6") arg4 => _,
lateout("r7") _,
lateout("r8") _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}
#[inline]
pub unsafe fn syscall5(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
arg3: SyscallWord,
arg4: SyscallWord,
arg5: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
inlateout("r3") arg1 => ret,
inlateout("r4") arg2 => _,
inlateout("r5") arg3 => _,
inlateout("r6") arg4 => _,
inlateout("r7") arg5 => _,
lateout("r8") _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}
#[inline]
pub unsafe fn syscall6(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
arg3: SyscallWord,
arg4: SyscallWord,
arg5: SyscallWord,
arg6: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"sc",
"bns 1f",
"neg 3, 3",
"1:",
inlateout("r0") n => _,
inlateout("r3") arg1 => ret,
inlateout("r4") arg2 => _,
inlateout("r5") arg3 => _,
inlateout("r6") arg4 => _,
inlateout("r7") arg5 => _,
inlateout("r8") arg6 => _,
lateout("r9") _,
lateout("r10") _,
lateout("r11") _,
lateout("r12") _,
lateout("cr0") _,
options(nostack, preserves_flags)
);
}
ret
}