use core::arch::asm;
#[inline(always)]
pub unsafe fn syscall0(n: usize) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall1(n: usize, arg1: usize) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall2(n: usize, arg1: usize, arg2: usize) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall3(n: usize, arg1: usize, arg2: usize, arg3: usize) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
in("rdx") arg3,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall4(n: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
in("rdx") arg3,
in("r10") arg4,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall5(
n: usize,
arg1: usize,
arg2: usize,
arg3: usize,
arg4: usize,
arg5: usize,
) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
in("rdx") arg3,
in("r10") arg4,
in("r8") arg5,
out("rcx") _,
out("r11") _, options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall6(
n: usize,
arg1: usize,
arg2: usize,
arg3: usize,
arg4: usize,
arg5: usize,
arg6: usize,
) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
in("rdx") arg3,
in("r10") arg4,
in("r8") arg5,
in("r9") arg6,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall7(
n: usize,
arg1: usize,
arg2: usize,
arg3: usize,
arg4: usize,
arg5: usize,
arg6: usize,
arg7: usize,
) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
in("rdx") arg3,
in("r10") arg4,
in("r8") arg5,
in("r9") arg6,
in("r12") arg7,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}
#[inline(always)]
pub unsafe fn syscall8(
n: usize,
arg1: usize,
arg2: usize,
arg3: usize,
arg4: usize,
arg5: usize,
arg6: usize,
arg7: usize,
arg8: usize,
) -> usize {
let mut ret: usize;
unsafe {
asm!(
"syscall",
inlateout("rax") n => ret,
in("rdi") arg1,
in("rsi") arg2,
in("rdx") arg3,
in("r10") arg4,
in("r8") arg5,
in("r9") arg6,
in("r12") arg7,
in("r13") arg8,
out("rcx") _,
out("r11") _,
options(nostack, preserves_flags)
)
}
ret
}