#![allow(unsafe_op_in_unsafe_fn)]
cfg_if::cfg_if! {
if #[cfg(aarch64_moana_std)] {
macro_rules! raw_syscall {
($nr:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, lateout("x0") ret, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, inlateout("x0") $a0 => ret, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, inlateout("x0") $a0 => ret, in("x1") $a1, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, inlateout("x0") $a0 => ret, in("x1") $a1, in("x2") $a2, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, inlateout("x0") $a0 => ret, in("x1") $a1, in("x2") $a2, in("x3") $a3, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, inlateout("x0") $a0 => ret, in("x1") $a1, in("x2") $a2, in("x3") $a3, in("x4") $a4, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) => {{
let ret: isize;
core::arch::asm!("svc #0", in("x8") $nr, inlateout("x0") $a0 => ret, in("x1") $a1, in("x2") $a2, in("x3") $a3, in("x4") $a4, in("x5") $a5, options(nostack, preserves_flags));
ret
}};
}
} else if #[cfg(riscv64_moana_std)] {
macro_rules! raw_syscall {
($nr:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, lateout("a0") ret, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, inlateout("a0") $a0 => ret, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, inlateout("a0") $a0 => ret, in("a1") $a1, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, inlateout("a0") $a0 => ret, in("a1") $a1, in("a2") $a2, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, inlateout("a0") $a0 => ret, in("a1") $a1, in("a2") $a2, in("a3") $a3, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, inlateout("a0") $a0 => ret, in("a1") $a1, in("a2") $a2, in("a3") $a3, in("a4") $a4, options(nostack, preserves_flags));
ret
}};
($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) => {{
let ret: isize;
core::arch::asm!("ecall", in("a7") $nr, inlateout("a0") $a0 => ret, in("a1") $a1, in("a2") $a2, in("a3") $a3, in("a4") $a4, in("a5") $a5, options(nostack, preserves_flags));
ret
}};
}
} else {
macro_rules! raw_syscall {
($($args:expr),*) => {{ $(let _ = $args;)* unimplemented!() }};
}
}
}
#[inline(always)]
pub(super) unsafe fn syscall0(nr: usize) -> isize {
raw_syscall!(nr)
}
#[inline(always)]
pub(super) unsafe fn syscall1(nr: usize, a0: usize) -> isize {
raw_syscall!(nr, a0)
}
#[inline(always)]
pub(super) unsafe fn syscall2(nr: usize, a0: usize, a1: usize) -> isize {
raw_syscall!(nr, a0, a1)
}
#[inline(always)]
pub(super) unsafe fn syscall3(nr: usize, a0: usize, a1: usize, a2: usize) -> isize {
raw_syscall!(nr, a0, a1, a2)
}
#[inline(always)]
pub(super) unsafe fn syscall4(nr: usize, a0: usize, a1: usize, a2: usize, a3: usize) -> isize {
raw_syscall!(nr, a0, a1, a2, a3)
}
#[inline(always)]
pub(super) unsafe fn syscall5(
nr: usize,
a0: usize,
a1: usize,
a2: usize,
a3: usize,
a4: usize,
) -> isize {
raw_syscall!(nr, a0, a1, a2, a3, a4)
}
#[inline(always)]
pub(super) unsafe fn syscall6(
nr: usize,
a0: usize,
a1: usize,
a2: usize,
a3: usize,
a4: usize,
a5: usize,
) -> isize {
raw_syscall!(nr, a0, a1, a2, a3, a4, a5)
}