pub trait SimdValue {
type Element: SimdValue;
type SimdBool: SimdBool;
fn lanes() -> usize;
fn splat(val: Self::Element) -> Self;
fn extract(&self, i: usize) -> Self::Element;
unsafe fn extract_unchecked(&self, i: usize) -> Self::Element;
fn replace(&mut self, i: usize, val: Self::Element);
unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element);
fn select(self, cond: Self::SimdBool, other: Self) -> Self;
fn map_lanes(self, f: impl Fn(Self::Element) -> Self::Element) -> Self
where
Self: Clone,
{ ... }
fn zip_map_lanes(
self,
b: Self,
f: impl Fn(Self::Element, Self::Element) -> Self::Element
) -> Self
where
Self: Clone,
{ ... }
}
Expand description
Base trait for every SIMD types.
Associated Types
Required methods
Extracts the i-th lane of self
.
Panics if i >= Self::lanes()
.
unsafe fn extract_unchecked(&self, i: usize) -> Self::Element
unsafe fn extract_unchecked(&self, i: usize) -> Self::Element
Extracts the i-th lane of self
without bound-checking.
Replaces the i-th lane of self
by val
.
Panics if i >= Self::lanes()
.
unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)
unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)
Replaces the i-th lane of self
by val
without bound-checking.
Merges self
and other
depending on the lanes of cond
.
For each lane of cond
with bits set to 1, the result’s will contain the value of the lane of self
.
For each lane of cond
with bits set to 0, the result’s will contain the value of the lane of other
.
Provided methods
Applies a function to each lane of self
.
Note that, while convenient, this method can be extremely slow as this
requires to extract each lane of self
and then combine them again into
a new SIMD value.
Applies a function to each lane of self
paired with the corresponding lane of b
.
Note that, while convenient, this method can be extremely slow as this
requires to extract each lane of self
and then combine them again into
a new SIMD value.