use core::arch::x86_64::*;
#[inline(always)]
pub(crate) unsafe fn load_partial_ymm(src: &[f32], len: usize) -> __m256 {
if len <= 4 {
_mm256_insertf128_ps(_mm256_setzero_ps(), _mm_loadu_ps(src.as_ptr()), 0)
} else {
let mut tmp = [0.0f32; 8];
for (i, item) in tmp.iter_mut().enumerate().take(len) {
*item = *src.get_unchecked(i);
}
_mm256_loadu_ps(tmp.as_ptr())
}
}
#[inline(always)]
pub(crate) unsafe fn store_partial_ymm(ymm: __m256, dst: &mut [f32], len: usize) {
if len <= 4 {
_mm_storeu_ps(dst.as_mut_ptr(), _mm256_castps256_ps128(ymm));
} else {
let mut tmp = [0.0f32; 8];
_mm256_storeu_ps(tmp.as_mut_ptr(), ymm);
for (i, &val) in tmp.iter().enumerate().take(len) {
*dst.get_unchecked_mut(i) = val;
}
}
}