use super::*;
mod sse2;
pub use sse2::SSE2;
mod ssse3;
pub use ssse3::SSSE3;
pub struct SSE;
impl<E, FS, const LEN: usize> Vector<[E; LEN], SSE, FS>
where E: Movable<SSE, LEN>, FS: HasFeature<SSE, E::Feature> {
#[doc(alias(
"movss", "movsd", "movups", "movupd", "movd", "movq", "movdqu"
))]
#[doc(alias(
"_mm_load_ss", "_mm_load_sd", "_mm_loadu_ps", "_mm_loadu_pd",
"_mm_loadu_si32", "_mm_loadu_si64", "_mm_loadu_si128"
))]
pub fn load(ptr: &[E; LEN], features: FeatureSet<SSE, FS>) -> Self {
Vector::from_primitive(unsafe { E::load(ptr) })
.with_features(features)
}
#[doc(alias(
"movss", "movsd", "movaps", "movapd", "movd", "movq", "movdqa"
))]
#[doc(alias(
"_mm_load_ss", "_mm_load_sd", "_mm_load_ps", "_mm_load_pd",
"_mm_loadu_si32", "_mm_loadu_si64", "_mm_load_si128"
))]
pub fn load_aligned(
ptr: &Vector<[E; LEN]>,
features: FeatureSet<SSE, FS>,
) -> Self {
Vector::from_primitive(unsafe { E::load_aligned(ptr) })
.with_features(features)
}
#[doc(alias(
"movss", "movsd", "movups", "movupd", "movd", "movq", "movdqu"
))]
#[doc(alias(
"_mm_store_ss", "_mm_store_sd", "_mm_storeu_ps", "_mm_storeu_pd",
"_mm_storeu_si32", "_mm_storeu_si64", "_mm_storeu_si128"
))]
pub fn store(self, ptr: &mut [E; LEN]) {
unsafe { E::store(self.primitive, ptr) }
}
#[doc(alias(
"movss", "movsd", "movaps", "movapd", "movd", "movq", "movdqa"
))]
#[doc(alias(
"_mm_store_ss", "_mm_store_sd", "_mm_store_ps", "_mm_store_pd",
"_mm_storeu_si32", "_mm_storeu_si64", "_mm_store_si128"
))]
pub fn store_aligned(self, ptr: &mut Vector<[E; LEN]>) {
unsafe { E::store_aligned(self.primitive, ptr) }
}
}