use core::arch::asm;
pub type SyscallWord = u32;
#[inline]
pub unsafe fn syscall0(n: SyscallWord) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
lateout("r0") ret,
options(nostack)
);
}
ret
}
#[inline]
pub unsafe fn syscall1(n: SyscallWord, arg1: SyscallWord) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
inlateout("r0") arg1 => ret,
options(nostack)
);
}
ret
}
#[inline]
pub unsafe fn syscall2(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
inlateout("r0") arg1 => ret,
in("r1") arg2,
options(nostack)
);
}
ret
}
#[inline]
pub unsafe fn syscall3(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
arg3: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
inlateout("r0") arg1 => ret,
in("r1") arg2,
in("r2") arg3,
options(nostack)
);
}
ret
}
#[inline]
pub unsafe fn syscall4(
n: SyscallWord,
arg1: SyscallWord,
arg2: SyscallWord,
arg3: SyscallWord,
arg4: SyscallWord,
) -> SyscallWord {
let mut ret: SyscallWord;
unsafe {
asm!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
inlateout("r0") arg1 => ret,
in("r1") arg2,
in("r2") arg3,
in("r3") arg4,
options(nostack)
);
}
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!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
inlateout("r0") arg1 => ret,
in("r1") arg2,
in("r2") arg3,
in("r3") arg4,
in("r4") arg5,
options(nostack)
);
}
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!(
"movs {temp}, r7",
"movs r7, {n}",
"svc 0",
"movs r7, {temp}",
n = in(reg) n,
temp = out(reg) _,
inlateout("r0") arg1 => ret,
in("r1") arg2,
in("r2") arg3,
in("r3") arg4,
in("r4") arg5,
in("r5") arg6,
options(nostack)
);
}
ret
}