#[inline(always)] pub fn syscall0(nr: usize) -> usize { let ret: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, lateout("a0") ret, ); } ret } #[inline(always)] pub fn syscall1(nr: usize, a0: usize) -> usize { let ret: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, inlateout("a0") a0 => ret, ); } ret } #[inline(always)] pub fn syscall2(nr: usize, a0: usize, a1: usize) -> usize { let ret: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, inlateout("a0") a0 => ret, in("a1") a1, ); } ret } #[inline(always)] pub fn syscall3(nr: usize, a0: usize, a1: usize, a2: usize) -> usize { let ret: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, inlateout("a0") a0 => ret, in("a1") a1, in("a2") a2, ); } ret } #[inline(always)] pub fn syscall4(nr: usize, a0: usize, a1: usize, a2: usize, a3: usize) -> usize { let ret: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, inlateout("a0") a0 => ret, in("a1") a1, in("a2") a2, in("a3") a3, ); } ret } #[inline(always)] pub fn syscall5(nr: usize, a0: usize, a1: usize, a2: usize, a3: usize, a4: usize) -> usize { let ret: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, inlateout("a0") a0 => ret, in("a1") a1, in("a2") a2, in("a3") a3, in("a4") a4, ); } ret } #[inline(always)] pub fn syscall_receive(nr: usize, a0: usize) -> (usize, usize, usize, usize) { let r0: usize; let r1: usize; let r2: usize; let r3: usize; unsafe { core::arch::asm!( "ecall", in("a7") nr, inlateout("a0") a0 => r0, lateout("a1") r1, lateout("a2") r2, lateout("a3") r3, ); } (r0, r1, r2, r3) }