#[inline(always)]
pub unsafe fn prefetch_read_data(ptr: *const u8, level: i32) {
#[cfg(target_arch = "x86_64")]
{
use std::arch::x86_64::{
_MM_HINT_NTA, _MM_HINT_T0, _MM_HINT_T1, _MM_HINT_T2, _mm_prefetch,
};
match level {
0 => {
unsafe { _mm_prefetch(ptr.cast(), _MM_HINT_T0) };
}
1 => {
unsafe { _mm_prefetch(ptr.cast(), _MM_HINT_T1) };
}
2 => {
unsafe { _mm_prefetch(ptr.cast(), _MM_HINT_T2) };
}
_ => {
unsafe { _mm_prefetch(ptr.cast(), _MM_HINT_NTA) };
}
}
}
#[cfg(not(target_arch = "x86_64"))]
{
let _ = (ptr, level);
}
}
#[inline(always)]
pub unsafe fn prefetch_write_data(ptr: *mut u8, level: i32) {
#[cfg(target_arch = "x86_64")]
{
use std::arch::x86_64::{
_MM_HINT_NTA, _MM_HINT_T0, _MM_HINT_T1, _MM_HINT_T2, _mm_prefetch,
};
match level {
0 => {
unsafe { _mm_prefetch(ptr.cast_const().cast(), _MM_HINT_T0) };
}
1 => {
unsafe { _mm_prefetch(ptr.cast_const().cast(), _MM_HINT_T1) };
}
2 => {
unsafe { _mm_prefetch(ptr.cast_const().cast(), _MM_HINT_T2) };
}
_ => {
unsafe { _mm_prefetch(ptr.cast_const().cast(), _MM_HINT_NTA) };
}
}
}
#[cfg(not(target_arch = "x86_64"))]
{
let _ = (ptr, level);
}
}