#[macro_export]
#[cfg(zisk_guest)]
macro_rules! ziskos_inputcpy {
($dest:expr, $size:literal) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {ptr}",
"addi x0, {ptr}, {size}",
port = const zisk_definitions::SYSCALL_DMA_INPUTCPY_ID,
size = const $size,
ptr = in(reg) $dest.as_mut_ptr(),
options(nostack, preserves_flags),
);
}
}};
($dest:expr, $size:expr) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {ptr}",
"add x0, {ptr}, {size}",
port = const zisk_definitions::SYSCALL_DMA_INPUTCPY_ID,
size = in(reg) $size,
ptr = in(reg) $dest.as_mut_ptr(),
options(nostack, preserves_flags),
);
}
}};
}
#[cfg(zisk_guest)]
#[macro_export]
macro_rules! ziskos_memcpy {
($dst:expr, $src: expr, $size:literal) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {src}",
"addi x0, {dst}, {size}",
port = const zisk_definitions::SYSCALL_DMA_MEMCPY_ID,
size = const $size,
dst = in(reg) $dst.as_mut_ptr(),
src = in(reg) $src.as_ptr(),
options(nostack, preserves_flags),
);
}
}};
($dst:expr, $src: expr, $size:expr) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {src}",
"add x0, {dst}, {size}",
port = const zisk_definitions::SYSCALL_DMA_MEMCPY_ID,
size = in(reg) $size,
dst = in(reg) $dst.as_mut_ptr(),
src = in(reg) $src.as_ptr(),
options(nostack, preserves_flags),
);
}
}};
(dst_ptr: $dst:expr, $src:expr, $size:literal) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {src}",
"addi x0, {dst}, {size}",
port = const zisk_definitions::SYSCALL_DMA_MEMCPY_ID,
size = const $size,
dst = in(reg) $dst,
src = in(reg) $src.as_ptr(),
options(nostack, preserves_flags),
);
}
}};
(ptr: $dst:expr, $src:expr, $size:expr) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {src}",
"add x0, {dst}, {size}",
port = const zisk_definitions::SYSCALL_DMA_MEMCPY_ID,
size = in(reg) $size,
dst = in(reg) $dst, src = in(reg) $src, options(nostack, preserves_flags),
);
}
}};
}
#[cfg(zisk_guest)]
#[macro_export]
macro_rules! ziskos_memcmp {
($dst:expr, $src: expr, $size:literal) => {{
let v: i64;
unsafe {
core::arch::asm!(
"csrrs {res}, {port}, {src}",
"addi x0, {dst}, {size}",
port = const zisk_definitions::SYSCALL_DMA_MEMCMP_ID,
size = const $size,
dst = in(reg) $dst.as_ptr(),
src = in(reg) $src.as_ptr(),
res = out(reg) v,
options(nostack, preserves_flags),
);
}
v
}};
($dst:expr, $src: expr, $size:expr) => {{
let v: i64;
unsafe {
core::arch::asm!(
"csrrs {res}, {port}, {src}",
"add x0, {dst}, {size}",
port = const zisk_definitions::SYSCALL_DMA_MEMCMP_ID,
size = in(reg) $size,
dst = in(reg) $dst.as_ptr(),
src = in(reg) $src.as_ptr(),
res = out(reg) v,
options(nostack, preserves_flags),
);
}
v
}};
}
#[cfg(zisk_guest)]
#[macro_export]
macro_rules! ziskos_memset {
($dst:expr, $value: literal, $size:literal) => {{
unsafe {
core::arch::asm!(
"csrsi {port}, 2",
"addi x0, {dst}, {size}",
"addi x0, {dst}, {value}",
port = const zisk_definitions::SYSCALL_DMA_MEMSET_ID,
size = const $size,
value = const $value,
dst = in(reg) $dst.as_mut_ptr(),
options(nostack, preserves_flags),
);
}
}};
($dst:expr, $value: literal, $size:expr) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {dst}",
"addi x0, {size}, {value}",
port = const zisk_definitions::SYSCALL_DMA_MEMSET_ID,
size = in(reg) $size,
value = const $value,
dst = in(reg) $dst.as_mut_ptr(),
options(nostack, preserves_flags),
);
}
}};
(ptr: $dst:expr, $value: literal, $size:expr) => {{
unsafe {
core::arch::asm!(
"csrs {port}, {dst}",
"addi x0, {size}, {value}",
port = const zisk_definitions::SYSCALL_DMA_MEMSET_ID,
size = in(reg) $size,
value = const $value,
dst = in(reg) $dst,
options(nostack, preserves_flags),
);
}
}};
($dst:expr, $value: expr, $size:expr) => {{
unsafe {
core::arch::asm!(
"call memset",
in("a0") $dst.as_mut_ptr(),
in("a1") $value,
in("a2") $size,
lateout("t0") _,
lateout("a1") _,
lateout("ra") _,
options(nostack, preserves_flags),
);
}
}};
}