#![allow(dead_code)]
pub(crate) const PREFETCH_L2_DISTANCE: usize = 16;
pub(crate) const PREFETCH_L1_DISTANCE: usize = 4;
pub(crate) const CHUNK_SIZE: usize = 64;
#[cfg(target_arch = "x86_64")]
#[inline(always)]
pub(crate) unsafe fn prefetch_l2_stream(ptr: *const u8) {
use core::arch::x86_64::{_MM_HINT_T1, _mm_prefetch};
unsafe { _mm_prefetch(ptr as *const i8, _MM_HINT_T1) };
}
#[cfg(target_arch = "x86_64")]
#[inline(always)]
pub(crate) unsafe fn prefetch_l1_stream(ptr: *const u8) {
use core::arch::x86_64::{_MM_HINT_T0, _mm_prefetch};
unsafe { _mm_prefetch(ptr as *const i8, _MM_HINT_T0) };
}
#[cfg(target_arch = "x86_64")]
#[inline(always)]
pub(crate) unsafe fn prefetch_write(ptr: *const u8) {
use core::arch::x86_64::{_MM_HINT_NTA, _mm_prefetch};
unsafe { _mm_prefetch(ptr as *const i8, _MM_HINT_NTA) };
}
#[cfg(target_arch = "aarch64")]
#[inline(always)]
pub(crate) unsafe fn prefetch_l2_stream(ptr: *const u8) {
unsafe {
core::arch::asm!(
"prfm pldl2strm, [{ptr}]",
ptr = in(reg) ptr,
options(nostack, preserves_flags),
);
}
}
#[cfg(target_arch = "aarch64")]
#[inline(always)]
pub(crate) unsafe fn prefetch_l1_stream(ptr: *const u8) {
unsafe {
core::arch::asm!(
"prfm pldl1strm, [{ptr}]",
ptr = in(reg) ptr,
options(nostack, preserves_flags),
);
}
}
#[cfg(target_arch = "aarch64")]
#[inline(always)]
pub(crate) unsafe fn prefetch_write(ptr: *const u8) {
unsafe {
core::arch::asm!(
"prfm pstl1keep, [{ptr}]",
ptr = in(reg) ptr,
options(nostack, preserves_flags),
);
}
}
#[cfg(not(any(target_arch = "x86_64", target_arch = "aarch64")))]
#[inline(always)]
pub(crate) unsafe fn prefetch_l2_stream(_ptr: *const u8) {}
#[cfg(not(any(target_arch = "x86_64", target_arch = "aarch64")))]
#[inline(always)]
pub(crate) unsafe fn prefetch_l1_stream(_ptr: *const u8) {}
#[cfg(not(any(target_arch = "x86_64", target_arch = "aarch64")))]
#[inline(always)]
pub(crate) unsafe fn prefetch_write(_ptr: *const u8) {}