pub unsafe trait NativeSimd: Sized + Default + Copy {
type Native: NativeType;
type Chunk: BitChunk;
type Mask: FromMaskChunk<Self::Chunk>;
const LANES: usize;
fn select(self, mask: Self::Mask, default: Self) -> Self;
fn from_chunk(v: &[Self::Native]) -> Self;
fn from_incomplete_chunk(
v: &[Self::Native],
remaining: Self::Native
) -> Self;
fn align(
values: &[Self::Native]
) -> (&[Self::Native], &[Self], &[Self::Native]);
}
Expand description
A struct that lends itself well to be compiled leveraging SIMD
Safety
The NativeType
and the NativeSimd
must have possible a matching alignment.
e.g. slicing &[NativeType]
by align_of<NativeSimd>()
must be properly aligned/safe.
Associated Types
type Native: NativeType
type Native: NativeType
The NativeType
of this struct. E.g. f32
for a NativeSimd = f32x16
.
type Mask: FromMaskChunk<Self::Chunk>
type Mask: FromMaskChunk<Self::Chunk>
Type used for masking.
Associated Constants
Required methods
fn from_chunk(v: &[Self::Native]) -> Self
fn from_chunk(v: &[Self::Native]) -> Self
creates a new Self from v
by populating items from v
up to its length.
Items from v
at positions larger than the number of lanes are ignored;
remaining items are populated with remaining
.