Struct Simd
#[repr(simd, packed(1))]
pub struct Simd<T, const N: usize>(pub(in ::core_simd::vector) [T; N])
where
T: SimdElement,;
A SIMD vector with the shape of [T; N] but the operations of T.
Simd<T, N> supports the operators (+, *, etc.) that T does in "elementwise" fashion.
These take the element at each index from the left-hand side and right-hand side,
perform the operation, then return the result in the same index in a vector of equal size.
However, Simd differs from normal iteration and normal arrays:
Simd<T, N>executesNoperations in a single step with nobreaksSimd<T, N>can have an alignment greater thanT, for better mechanical sympathy
By always imposing these constraints on Simd, it is easier to compile elementwise operations
into machine instructions that can themselves be executed in parallel.
#
# use ;
# use array;
let a: = ;
let b = ;
let sum = from_fn;
let prod = from_fn;
// `Simd<T, N>` implements `From<[T; N]>`
let = ;
// Which means arrays implement `Into<Simd<T, N>>`.
assert_eq!;
assert_eq!;
Simd with integer elements treats operators as wrapping, as if T was Wrapping<T>.
Thus, Simd does not implement wrapping_add, because that is the default behavior.
This means there is no warning on overflows, even in "debug" builds.
For most applications where Simd is appropriate, it is "not a bug" to wrap,
and even "debug builds" are unlikely to tolerate the loss of performance.
You may want to consider using explicitly checked arithmetic if such is required.
Division by zero on integers still causes a panic, so
you may want to consider using f32 or f64 if that is unacceptable.
Layout
Simd<T, N> has a layout similar to [T; N] (identical "shapes"), with a greater alignment.
[T; N] is aligned to T, but Simd<T, N> will have an alignment based on both T and N.
Thus it is sound to transmute Simd<T, N> to [T; N] and should optimize to "zero cost",
but the reverse transmutation may require a copy the compiler cannot simply elide.
N cannot be 0 and may be at most 64. This limit may be increased in the future.
ABI "Features"
Due to Rust's safety guarantees, Simd<T, N> is currently passed and returned via memory,
not SIMD registers, except as an optimization. Using #[inline] on functions that accept
Simd<T, N> or return it is recommended, at the cost of code generation time, as
inlining SIMD-using functions can omit a large function prolog or epilog and thus
improve both speed and code size. The need for this may be corrected in the future.
Using #[inline(always)] still requires additional care.
Safe SIMD with Unsafe Rust
Operations with Simd are typically safe, but there are many reasons to want to combine SIMD with unsafe code.
Care must be taken to respect differences between Simd and other types it may be transformed into or derived from.
In particular, the layout of Simd<T, N> may be similar to [T; N], and may allow some transmutations,
but references to [T; N] are not interchangeable with those to Simd<T, N>.
Thus, when using unsafe Rust to read and write Simd<T, N> through raw pointers, it is a good idea to first try with
read_unaligned and write_unaligned. This is because:
readandwriterequire full alignment (in this case,Simd<T, N>'s alignment)Simd<T, N>is often read from or written to[T]and other types aligned toT- combining these actions violates the
unsafecontract and explodes the program into a puff of undefined behavior - the compiler can implicitly adjust layouts to make unaligned reads or writes fully aligned if it sees the optimization
- most contemporary processors with "aligned" and "unaligned" read and write instructions exhibit no performance difference if the "unaligned" variant is aligned at runtime
Less obligations mean unaligned reads and writes are less likely to make the program unsound,
and may be just as fast as stricter alternatives.
When trying to guarantee alignment, [T]::as_simd is an option for
converting [T] to [Simd<T, N>], and allows soundly operating on an aligned SIMD body,
but it may cost more time when handling the scalar head and tail.
If these are not enough, it is most ideal to design data structures to be already aligned
to align_of::<Simd<T, N>>() before using unsafe Rust to read or write.
Other ways to compensate for these facts, like materializing Simd to or from an array first,
are handled by safe methods like Simd::from_array and Simd::from_slice.
Fields
0: [T; N]
Implementations
impl<T, const N: usize> Simd<T, N>
where
T: SimdElement,
fn reverse(self) -> SelfReverse the order of the elements in the vector.
fn rotate_elements_left<const OFFSET: usize>(self) -> SelfRotates the vector such that the first
OFFSETelements of the slice move to the end while the lastself.len() - OFFSETelements move to the front. After callingrotate_elements_left, the element previously at indexOFFSETwill become the first element in the slice.# # use Simd; # use Simd; let a = from_array; let x = a.; assert_eq!; let y = a.; assert_eq!;fn rotate_elements_right<const OFFSET: usize>(self) -> SelfRotates the vector such that the first
self.len() - OFFSETelements of the vector move to the end while the lastOFFSETelements move to the front. After callingrotate_elements_right, the element previously at indexself.len() - OFFSETwill become the first element in the slice.# # use Simd; # use Simd; let a = from_array; let x = a.; assert_eq!; let y = a.; assert_eq!;fn shift_elements_left<const OFFSET: usize>(self, padding: T) -> SelfShifts the vector elements to the left by
OFFSET, filling in withpaddingfrom the right.# # use Simd; # use Simd; let a = from_array; let x = a.; assert_eq!; let y = a.; assert_eq!;fn shift_elements_right<const OFFSET: usize>(self, padding: T) -> SelfShifts the vector elements to the right by
OFFSET, filling in withpaddingfrom the left.# # use Simd; # use Simd; let a = from_array; let x = a.; assert_eq!; let y = a.; assert_eq!;fn interleave(self, other: Self) -> (Self, Self)Interleave two vectors.
The resulting vectors contain elements taken alternatively from
selfandother, first filling the first result, and then the second.The reverse of this operation is
Simd::deinterleave.# # use Simd; let a = from_array; let b = from_array; let = a.interleave; assert_eq!; assert_eq!;fn deinterleave(self, other: Self) -> (Self, Self)Deinterleave two vectors.
The first result takes every other element of
selfand thenother, starting with the first element.The second result takes every other element of
selfand thenother, starting with the second element.The reverse of this operation is
Simd::interleave.# # use simd; # use simd; # use Simd; let a = from_array; let b = from_array; let = a.deinterleave; assert_eq!; assert_eq!;fn resize<const M: usize>(self, value: T) -> Simd<T, M>Resize a vector.
If
M>N, extends the length of a vector, setting the new elements tovalue. IfM<N, truncates the vector to the firstMelements.# # use simd; # use simd; # use u32x4; let x = from_array; assert_eq!; assert_eq!;fn extract<const START: usize, const LEN: usize>(self) -> Simd<T, LEN>Extract a vector from another vector.
# # use simd; # use simd; # use u32x4; let x = from_array; assert_eq!;
impl<T, const N: usize> Simd<T, N>
where
T: SimdElement,
const LEN: usize = N;Number of elements in this vector.
const fn len(&self) -> usizeReturns the number of elements in this SIMD vector.
Examples
# # use simd; # use simd; # use u32x4; let v = splat; assert_eq!;const fn splat(value: T) -> SelfConstructs a new SIMD vector with all elements set to the given value.
Examples
# # use simd; # use simd; # use u32x4; let v = splat; assert_eq!;const fn as_array(&self) -> &[T; N]Returns an array reference containing the entire SIMD vector.
Examples
# # use ; let v: u64x4 = from_array; assert_eq!;const fn as_mut_array(&mut self) -> &mut [T; N]Returns a mutable array reference containing the entire SIMD vector.
const unsafe fn load(ptr: *const [T; N]) -> SelfLoads a vector from an array of
T.This function is necessary since
repr(simd)has padding for non-power-of-2 vectors (at the time of writing). With padding,read_unalignedwill read past the end of an array of N elements.Safety
Reading
ptrmust be safe, as if by<*const [T; N]>::read.const unsafe fn store(self, ptr: *mut [T; N])Store a vector to an array of
T.See
loadas to why this function is necessary.Safety
Writing to
ptrmust be safe, as if by<*mut [T; N]>::write.const fn from_array(array: [T; N]) -> SelfConverts an array to a SIMD vector.
const fn to_array(self) -> [T; N]Converts a SIMD vector to an array.
const fn from_slice(slice: &[T]) -> SelfConverts a slice to a SIMD vector containing
slice[..N].Panics
Panics if the slice's length is less than the vector's
Simd::N. Useload_or_defaultfor an alternative that does not panic.Example
# # use u32x4; let source = vec!; let v = from_slice; assert_eq!;const fn copy_to_slice(self, slice: &mut [T])Writes a SIMD vector to the first
Nelements of a slice.Panics
Panics if the slice's length is less than the vector's
Simd::N.Example
# # use simd; # use simd; # use u32x4; let mut dest = vec!; let v = from_array; v.copy_to_slice; assert_eq!;fn load_or_default(slice: &[T]) -> Self where T: Default,Reads contiguous elements from
slice. Elements are read so long as they're in-bounds for theslice. Otherwise, the default value for the element type is returned.Examples
# # use simd; # use simd; # use Simd; let vec: = vec!; let result = load_or_default; assert_eq!;fn load_or(slice: &[T], or: Self) -> SelfReads contiguous elements from
slice. Elements are read so long as they're in-bounds for theslice. Otherwise, the corresponding value fromoris passed through.Examples
# # use simd; # use simd; # use Simd; let vec: = vec!; let or = from_array; let result = load_or; assert_eq!;fn load_select_or_default(slice: &[T], enable: Mask<<T as SimdElement>::Mask, N>) -> Self where T: Default,Reads contiguous elements from
slice. Each element is read from memory if its corresponding element inenableistrue.When the element is disabled or out of bounds for the slice, that memory location is not accessed and the default value for the element type is returned.
Examples
# # use simd; # use simd; # use ; let vec: = vec!; let enable = from_array; let result = load_select_or_default; assert_eq!;fn load_select(slice: &[T], enable: Mask<<T as SimdElement>::Mask, N>, or: Self) -> SelfReads contiguous elements from
slice. Each element is read from memory if its corresponding element inenableistrue.When the element is disabled or out of bounds for the slice, that memory location is not accessed and the corresponding value from
oris passed through.Examples
# # use simd; # use simd; # use ; let vec: = vec!; let enable = from_array; let or = from_array; let result = load_select; assert_eq!;unsafe fn load_select_unchecked(slice: &[T], enable: Mask<<T as SimdElement>::Mask, N>, or: Self) -> SelfReads contiguous elements from
slice. Each element is read from memory if its corresponding element inenableistrue.When the element is disabled, that memory location is not accessed and the corresponding value from
oris passed through.Safety
Enabled loads must not exceed the length of
slice.unsafe fn load_select_ptr(ptr: *const T, enable: Mask<<T as SimdElement>::Mask, N>, or: Self) -> SelfReads contiguous elements starting at
ptr. Each element is read from memory if its corresponding element inenableistrue.When the element is disabled, that memory location is not accessed and the corresponding value from
oris passed through.Safety
Enabled
ptrelements must be safe to read as if bycore::ptr::read.fn gather_or(slice: &[T], idxs: Simd<usize, N>, or: Self) -> SelfReads from potentially discontiguous indices in
sliceto construct a SIMD vector. If an index is out-of-bounds, the element is instead selected from theorvector.Examples
# # use Simd; let vec: = vec!; let idxs = from_array; // Note the index that is out-of-bounds let alt = from_array; let result = gather_or; assert_eq!;fn gather_or_default(slice: &[T], idxs: Simd<usize, N>) -> Self where T: Default,Reads from indices in
sliceto construct a SIMD vector. If an index is out-of-bounds, the element is set to the default given byT: Default.Examples
# # use Simd; let vec: = vec!; let idxs = from_array; // Note the index that is out-of-bounds let result = gather_or_default; assert_eq!;fn gather_select(slice: &[T], enable: Mask<isize, N>, idxs: Simd<usize, N>, or: Self) -> SelfReads from indices in
sliceto construct a SIMD vector. The maskenables alltrueindices and disables allfalseindices. If an index is disabled or is out-of-bounds, the element is selected from theorvector.Examples
# # use ; let vec: = vec!; let idxs = from_array; // Includes an out-of-bounds index let alt = from_array; let enable = from_array; // Includes a masked element let result = gather_select; assert_eq!;unsafe fn gather_select_unchecked(slice: &[T], enable: Mask<isize, N>, idxs: Simd<usize, N>, or: Self) -> SelfReads from indices in
sliceto construct a SIMD vector. The maskenables alltrueindices and disables allfalseindices. If an index is disabled, the element is selected from theorvector.Safety
Calling this function with an
enabled out-of-bounds index is undefined behavior even if the resulting value is not used.Examples
# # use simd; # use simd; # use ; let vec: = vec!; let idxs = from_array; // Includes an out-of-bounds index let alt = from_array; let enable = from_array; // Includes a masked element // If this mask was used to gather, it would be unsound. Let's fix that. let enable = enable & idxs.simd_lt; // The out-of-bounds index has been masked, so it's safe to gather now. let result = unsafe ; assert_eq!;unsafe fn gather_ptr(source: Simd<*const T, N>) -> Self where T: Default,Reads elementwise from pointers into a SIMD vector.
Safety
Each read must satisfy the same conditions as
core::ptr::read.Example
# # use simd; # use simd; # use *; let values = ; let offsets = from_array; let source = splat.wrapping_add; let gathered = unsafe ; assert_eq!;unsafe fn gather_select_ptr(source: Simd<*const T, N>, enable: Mask<isize, N>, or: Self) -> SelfConditionally read elementwise from pointers into a SIMD vector. The mask
enables alltruepointers and disables allfalsepointers. If a pointer is disabled, the element is selected from theorvector, and no read is performed.Safety
Enabled elements must satisfy the same conditions as
core::ptr::read.Example
# # use simd; # use simd; # use *; let values = ; let enable = from_array; let offsets = from_array; let source = splat.wrapping_add; let gathered = unsafe ; assert_eq!;fn store_select(self, slice: &mut [T], enable: Mask<<T as SimdElement>::Mask, N>)Conditionally write contiguous elements to
slice. Theenablemask controls which elements are written, as long as they're in-bounds of theslice. If the element is disabled or out of bounds, no memory access to that location is made.Examples
# # use simd; # use simd; # use ; let mut arr = ; let write = from_array; let enable = from_array; write.store_select; assert_eq!;unsafe fn store_select_unchecked(self, slice: &mut [T], enable: Mask<<T as SimdElement>::Mask, N>)Conditionally write contiguous elements to
slice. Theenablemask controls which elements are written.Safety
Every enabled element must be in bounds for the
slice.Examples
# # use simd; # use simd; # use ; let mut arr = ; let write = from_array; let enable = from_array; unsafe ; assert_eq!;unsafe fn store_select_ptr(self, ptr: *mut T, enable: Mask<<T as SimdElement>::Mask, N>)Conditionally write contiguous elements starting from
ptr. Theenablemask controls which elements are written. When disabled, the memory location corresponding to that element is not accessed.Safety
Memory addresses for element are calculated
pointer::wrapping_offsetand each enabled element must satisfy the same conditions ascore::ptr::write.fn scatter(self, slice: &mut [T], idxs: Simd<usize, N>)Writes the values in a SIMD vector to potentially discontiguous indices in
slice. If an index is out-of-bounds, the write is suppressed without panicking. If two elements in the scattered vector would write to the same index only the last element is guaranteed to actually be written.Examples
# # use Simd; let mut vec: = vec!; let idxs = from_array; // Note the duplicate index. let vals = from_array; vals.scatter; // two logical writes means the last wins. assert_eq!;fn scatter_select(self, slice: &mut [T], enable: Mask<isize, N>, idxs: Simd<usize, N>)Writes values from a SIMD vector to multiple potentially discontiguous indices in
slice. The maskenables alltrueindices and disables allfalseindices. If an enabled index is out-of-bounds, the write is suppressed without panicking. If two enabled elements in the scattered vector would write to the same index, only the last element is guaranteed to actually be written.Examples
# # use simd; # use simd; # use ; let mut vec: = vec!; let idxs = from_array; // Includes an out-of-bounds index let vals = from_array; let enable = from_array; // Includes a masked element vals.scatter_select; // The last write is masked, thus omitted. assert_eq!;unsafe fn scatter_select_unchecked(self, slice: &mut [T], enable: Mask<isize, N>, idxs: Simd<usize, N>)Writes values from a SIMD vector to multiple potentially discontiguous indices in
slice. The maskenables alltrueindices and disables allfalseindices. If two enabled elements in the scattered vector would write to the same index, only the last element is guaranteed to actually be written.Safety
Calling this function with an enabled out-of-bounds index is undefined behavior, and may lead to memory corruption.
Examples
# # use simd; # use simd; # use ; let mut vec: = vec!; let idxs = from_array; let vals = from_array; let enable = from_array; // Masks the final index // If this mask was used to scatter, it would be unsound. Let's fix that. let enable = enable & idxs.simd_lt; // We have masked the OOB index, so it's safe to scatter now. unsafe // The second write to index 0 was masked, thus omitted. assert_eq!;unsafe fn scatter_ptr(self, dest: Simd<*mut T, N>)Writes pointers elementwise into a SIMD vector.
Safety
Each write must satisfy the same conditions as
core::ptr::write.Example
# # use simd; # use simd; # use ; let mut values = ; let offset = from_array; let ptrs = splat.wrapping_add; unsafe assert_eq!;unsafe fn scatter_select_ptr(self, dest: Simd<*mut T, N>, enable: Mask<isize, N>)Conditionally write pointers elementwise into a SIMD vector. The mask
enables alltruepointers and disables allfalsepointers. If a pointer is disabled, the write to its pointee is skipped.Safety
Enabled pointers must satisfy the same conditions as
core::ptr::write.Example
# # use simd; # use simd; # use ; let mut values = ; let offset = from_array; let ptrs = splat.wrapping_add; let enable = from_array; unsafe assert_eq!;
impl<const N: usize> Simd<u8, N>
fn swizzle_dyn(self, idxs: Simd<u8, N>) -> SelfSwizzle a vector of bytes according to the index vector. Indices within range select the appropriate byte. Indices "out of bounds" instead select 0.
Note that the current implementation is selected during build-time of the standard library, so
cargo build -Zbuild-stdmay be necessary to unlock better performance, especially for larger vectors. A planned compiler improvement will enable using#[target_feature]instead.
Trait Implementations
impl ToBytes for Simd<f32, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f32, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f32, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f32, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f32, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f64, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f64, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f64, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<f64, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i16, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i16, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i16, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i16, 32>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i16, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i16, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i32, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i32, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i32, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i32, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i32, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i64, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i64, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i64, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i64, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 32>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 64>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<i8, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<isize, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<isize, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<isize, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<isize, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u16, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u16, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u16, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u16, 32>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u16, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u16, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u32, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u32, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u32, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u32, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u32, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u64, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u64, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u64, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u64, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 16>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 32>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 64>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<u8, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<usize, 1>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<usize, 2>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<usize, 4>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl ToBytes for Simd<usize, 8>
type Bytes = Simd<u8, { $size * $elems }>;fn to_ne_bytes(self) -> Self::Bytesfn to_be_bytes(self) -> Self::Bytesfn to_le_bytes(self) -> Self::Bytesfn from_ne_bytes(bytes: Self::Bytes) -> Selffn from_be_bytes(bytes: Self::Bytes) -> Selffn from_le_bytes(bytes: Self::Bytes) -> Self
impl<'a, const N: usize> Product<&'a Simd<f32, N>> for Simd<f32, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<f64, N>> for Simd<f64, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<i16, N>> for Simd<i16, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<i32, N>> for Simd<i32, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<i64, N>> for Simd<i64, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<i8, N>> for Simd<i8, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<isize, N>> for Simd<isize, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<u16, N>> for Simd<u16, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<u32, N>> for Simd<u32, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<u64, N>> for Simd<u64, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<u8, N>> for Simd<u8, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Product<&'a Simd<usize, N>> for Simd<usize, N>
fn product<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<f32, N>> for Simd<f32, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<f64, N>> for Simd<f64, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<i16, N>> for Simd<i16, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<i32, N>> for Simd<i32, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<i64, N>> for Simd<i64, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<i8, N>> for Simd<i8, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<isize, N>> for Simd<isize, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<u16, N>> for Simd<u16, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<u32, N>> for Simd<u32, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<u64, N>> for Simd<u64, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<u8, N>> for Simd<u8, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<'a, const N: usize> Sum<&'a Simd<usize, N>> for Simd<usize, N>
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
impl<I, T, const N: usize> Index<I> for Simd<T, N>
where
T: SimdElement,
I: SliceIndex<[T]>,
type Output = <I as SliceIndex<[T]>>::Output;fn index(&self, index: I) -> &Self::Output
impl<I, T, const N: usize> IndexMut<I> for Simd<T, N>
where
T: SimdElement,
I: SliceIndex<[T]>,
fn index_mut(&mut self, index: I) -> &mut Self::Output
impl<T, U, const N: usize> AddAssign<U> for Simd<T, N>
where
Self: Add<U, Output = Self>,
T: SimdElement,
fn add_assign(&mut self, rhs: U)
impl<T, U, const N: usize> BitAndAssign<U> for Simd<T, N>
where
Self: BitAnd<U, Output = Self>,
T: SimdElement,
fn bitand_assign(&mut self, rhs: U)
impl<T, U, const N: usize> BitOrAssign<U> for Simd<T, N>
where
Self: BitOr<U, Output = Self>,
T: SimdElement,
fn bitor_assign(&mut self, rhs: U)
impl<T, U, const N: usize> BitXorAssign<U> for Simd<T, N>
where
Self: BitXor<U, Output = Self>,
T: SimdElement,
fn bitxor_assign(&mut self, rhs: U)
impl<T, U, const N: usize> DivAssign<U> for Simd<T, N>
where
Self: Div<U, Output = Self>,
T: SimdElement,
fn div_assign(&mut self, rhs: U)
impl<T, U, const N: usize> MulAssign<U> for Simd<T, N>
where
Self: Mul<U, Output = Self>,
T: SimdElement,
fn mul_assign(&mut self, rhs: U)
impl<T, U, const N: usize> RemAssign<U> for Simd<T, N>
where
Self: Rem<U, Output = Self>,
T: SimdElement,
fn rem_assign(&mut self, rhs: U)
impl<T, U, const N: usize> ShlAssign<U> for Simd<T, N>
where
Self: Shl<U, Output = Self>,
T: SimdElement,
fn shl_assign(&mut self, rhs: U)
impl<T, U, const N: usize> ShrAssign<U> for Simd<T, N>
where
Self: Shr<U, Output = Self>,
T: SimdElement,
fn shr_assign(&mut self, rhs: U)
impl<T, U, const N: usize> SubAssign<U> for Simd<T, N>
where
Self: Sub<U, Output = Self>,
T: SimdElement,
fn sub_assign(&mut self, rhs: U)
impl<T, const N: usize> Add<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Add<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn add(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> AsMut<[T; N]> for Simd<T, N>
where
T: SimdElement,
fn as_mut(&mut self) -> &mut [T; N]
impl<T, const N: usize> AsMut<[T]> for Simd<T, N>
where
T: SimdElement,
fn as_mut(&mut self) -> &mut [T]
impl<T, const N: usize> AsRef<[T; N]> for Simd<T, N>
where
T: SimdElement,
fn as_ref(&self) -> &[T; N]
impl<T, const N: usize> AsRef<[T]> for Simd<T, N>
where
T: SimdElement,
fn as_ref(&self) -> &[T]
impl<T, const N: usize> BitAnd<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: BitAnd<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn bitand(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> BitOr<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: BitOr<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn bitor(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> BitXor<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: BitXor<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn bitxor(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> Clone for Simd<T, N>
where
T: SimdElement,
fn clone(&self) -> Self
impl<T, const N: usize> Copy for Simd<T, N>
where
T: SimdElement,
impl<T, const N: usize> Debug for Simd<T, N>
where
T: SimdElement + Debug,
fn fmt(&self, f: &mut Formatter<'_>) -> ResultA
Simd<T, N>has a debug format like the one for[T]:# # use Simd; # use Simd; let floats = splat; assert_eq!;
impl<T, const N: usize> Default for Simd<T, N>
where
T: SimdElement + Default,
fn default() -> Self
impl<T, const N: usize> Div<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Div<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn div(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> Eq for Simd<T, N>
where
T: SimdElement + Eq,
impl<T, const N: usize> From<[T; N]> for Simd<T, N>
where
T: SimdElement,
fn from(array: [T; N]) -> Self
impl<T, const N: usize> Hash for Simd<T, N>
where
T: SimdElement + Hash,
fn hash<H>(&self, state: &mut H) where H: Hasher,
impl<T, const N: usize> Mul<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Mul<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn mul(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> Ord for Simd<T, N>
where
T: SimdElement + Ord,
fn cmp(&self, other: &Self) -> Ordering
impl<T, const N: usize> PartialEq for Simd<T, N>
where
T: SimdElement + PartialEq,
fn eq(&self, other: &Self) -> boolfn ne(&self, other: &Self) -> bool
impl<T, const N: usize> PartialOrd for Simd<T, N>
where
T: SimdElement + PartialOrd,
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
impl<T, const N: usize> Rem<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Rem<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn rem(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> Shl<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Shl<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn shl(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> Shr<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Shr<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn shr(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> SimdConstPtr for Simd<*const T, N>
type Usize = Simd<usize, N>;type Isize = Simd<isize, N>;type CastPtr<U> = Simd<*const U, N>;type MutPtr = Simd<*mut T, N>;type Mask = Mask<isize, N>;fn is_null(self) -> Self::Maskfn cast<U>(self) -> Self::CastPtr<U>fn cast_mut(self) -> Self::MutPtrfn addr(self) -> Self::Usizefn with_addr(self, addr: Self::Usize) -> Selffn expose_provenance(self) -> Self::Usizefn wrapping_offset(self, count: Self::Isize) -> Selffn wrapping_add(self, count: Self::Usize) -> Selffn wrapping_sub(self, count: Self::Usize) -> Self
impl<T, const N: usize> SimdMutPtr for Simd<*mut T, N>
type Usize = Simd<usize, N>;type Isize = Simd<isize, N>;type CastPtr<U> = Simd<*mut U, N>;type ConstPtr = Simd<*const T, N>;type Mask = Mask<isize, N>;fn is_null(self) -> Self::Maskfn cast<U>(self) -> Self::CastPtr<U>fn cast_const(self) -> Self::ConstPtrfn addr(self) -> Self::Usizefn with_addr(self, addr: Self::Usize) -> Selffn expose_provenance(self) -> Self::Usizefn wrapping_offset(self, count: Self::Isize) -> Selffn wrapping_add(self, count: Self::Usize) -> Selffn wrapping_sub(self, count: Self::Usize) -> Self
impl<T, const N: usize> SimdOrd for Simd<*const T, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<T, const N: usize> SimdOrd for Simd<*mut T, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<T, const N: usize> SimdPartialEq for Simd<*const T, N>
type Mask = Mask<isize, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<T, const N: usize> SimdPartialEq for Simd<*mut T, N>
type Mask = Mask<isize, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<T, const N: usize> SimdPartialOrd for Simd<*const T, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<T, const N: usize> SimdPartialOrd for Simd<*mut T, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<T, const N: usize> Sub<&Simd<T, N>> for Simd<T, N>
where
T: SimdElement,
Simd<T, N>: Sub<Simd<T, N>, Output = Simd<T, N>>,
type Output = Simd<T, N>;fn sub(self, rhs: &Simd<T, N>) -> Self::Output
impl<T, const N: usize> TryFrom<&[T]> for Simd<T, N>
where
T: SimdElement,
type Error = TryFromSliceError;fn try_from(slice: &[T]) -> Result<Self, TryFromSliceError>
impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N>
where
T: SimdElement,
type Error = TryFromSliceError;fn try_from(slice: &mut [T]) -> Result<Self, TryFromSliceError>
impl<const N: usize> Add for Simd<f16, N>
where
f16: SimdElement,
type Output = Simd<f16, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<f32, N>
where
f32: SimdElement,
type Output = Simd<f32, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<f64, N>
where
f64: SimdElement,
type Output = Simd<f64, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> Add for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn add(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitAnd for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn bitand(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitOr for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn bitor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> BitXor for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn bitxor(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<f16, N>
where
f16: SimdElement,
type Output = Simd<f16, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<f32, N>
where
f32: SimdElement,
type Output = Simd<f32, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<f64, N>
where
f64: SimdElement,
type Output = Simd<f64, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Div for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn div(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<f16, N>
where
f16: SimdElement,
type Output = Simd<f16, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<f32, N>
where
f32: SimdElement,
type Output = Simd<f32, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<f64, N>
where
f64: SimdElement,
type Output = Simd<f64, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Mul for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn mul(self, rhs: Self) -> Self::Output
impl<const N: usize> Neg for Simd<f16, N>
where
f16: SimdElement,
type Output = Simd<f16, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<f32, N>
where
f32: SimdElement,
type Output = Simd<f32, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<f64, N>
where
f64: SimdElement,
type Output = Simd<f64, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn neg(self) -> Self::Output
impl<const N: usize> Neg for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn neg(self) -> Self::Output
impl<const N: usize> Not for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn not(self) -> Self::Output
impl<const N: usize> Not for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn not(self) -> Self::Output
impl<const N: usize> Product for Simd<f32, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<f64, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<i16, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<i32, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<i64, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<i8, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<isize, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<u16, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<u32, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<u64, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<u8, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Product for Simd<usize, N>
fn product<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Rem for Simd<f16, N>
where
f16: SimdElement,
type Output = Simd<f16, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<f32, N>
where
f32: SimdElement,
type Output = Simd<f32, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<f64, N>
where
f64: SimdElement,
type Output = Simd<f64, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Rem for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn rem(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn shl(self, rhs: Self) -> Self::Output
impl<const N: usize> Shl<&i16> for Simd<i16, N>
type Output = Simd<i16, N>;fn shl(self, rhs: &i16) -> Self::Output
impl<const N: usize> Shl<&i32> for Simd<i32, N>
type Output = Simd<i32, N>;fn shl(self, rhs: &i32) -> Self::Output
impl<const N: usize> Shl<&i64> for Simd<i64, N>
type Output = Simd<i64, N>;fn shl(self, rhs: &i64) -> Self::Output
impl<const N: usize> Shl<&i8> for Simd<i8, N>
type Output = Simd<i8, N>;fn shl(self, rhs: &i8) -> Self::Output
impl<const N: usize> Shl<&isize> for Simd<isize, N>
type Output = Simd<isize, N>;fn shl(self, rhs: &isize) -> Self::Output
impl<const N: usize> Shl<&u16> for Simd<u16, N>
type Output = Simd<u16, N>;fn shl(self, rhs: &u16) -> Self::Output
impl<const N: usize> Shl<&u32> for Simd<u32, N>
type Output = Simd<u32, N>;fn shl(self, rhs: &u32) -> Self::Output
impl<const N: usize> Shl<&u64> for Simd<u64, N>
type Output = Simd<u64, N>;fn shl(self, rhs: &u64) -> Self::Output
impl<const N: usize> Shl<&u8> for Simd<u8, N>
type Output = Simd<u8, N>;fn shl(self, rhs: &u8) -> Self::Output
impl<const N: usize> Shl<&usize> for Simd<usize, N>
type Output = Simd<usize, N>;fn shl(self, rhs: &usize) -> Self::Output
impl<const N: usize> Shl<i16> for Simd<i16, N>
type Output = Simd<i16, N>;fn shl(self, rhs: i16) -> Self::Output
impl<const N: usize> Shl<i32> for Simd<i32, N>
type Output = Simd<i32, N>;fn shl(self, rhs: i32) -> Self::Output
impl<const N: usize> Shl<i64> for Simd<i64, N>
type Output = Simd<i64, N>;fn shl(self, rhs: i64) -> Self::Output
impl<const N: usize> Shl<i8> for Simd<i8, N>
type Output = Simd<i8, N>;fn shl(self, rhs: i8) -> Self::Output
impl<const N: usize> Shl<isize> for Simd<isize, N>
type Output = Simd<isize, N>;fn shl(self, rhs: isize) -> Self::Output
impl<const N: usize> Shl<u16> for Simd<u16, N>
type Output = Simd<u16, N>;fn shl(self, rhs: u16) -> Self::Output
impl<const N: usize> Shl<u32> for Simd<u32, N>
type Output = Simd<u32, N>;fn shl(self, rhs: u32) -> Self::Output
impl<const N: usize> Shl<u64> for Simd<u64, N>
type Output = Simd<u64, N>;fn shl(self, rhs: u64) -> Self::Output
impl<const N: usize> Shl<u8> for Simd<u8, N>
type Output = Simd<u8, N>;fn shl(self, rhs: u8) -> Self::Output
impl<const N: usize> Shl<usize> for Simd<usize, N>
type Output = Simd<usize, N>;fn shl(self, rhs: usize) -> Self::Output
impl<const N: usize> Shr for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn shr(self, rhs: Self) -> Self::Output
impl<const N: usize> Shr<&i16> for Simd<i16, N>
type Output = Simd<i16, N>;fn shr(self, rhs: &i16) -> Self::Output
impl<const N: usize> Shr<&i32> for Simd<i32, N>
type Output = Simd<i32, N>;fn shr(self, rhs: &i32) -> Self::Output
impl<const N: usize> Shr<&i64> for Simd<i64, N>
type Output = Simd<i64, N>;fn shr(self, rhs: &i64) -> Self::Output
impl<const N: usize> Shr<&i8> for Simd<i8, N>
type Output = Simd<i8, N>;fn shr(self, rhs: &i8) -> Self::Output
impl<const N: usize> Shr<&isize> for Simd<isize, N>
type Output = Simd<isize, N>;fn shr(self, rhs: &isize) -> Self::Output
impl<const N: usize> Shr<&u16> for Simd<u16, N>
type Output = Simd<u16, N>;fn shr(self, rhs: &u16) -> Self::Output
impl<const N: usize> Shr<&u32> for Simd<u32, N>
type Output = Simd<u32, N>;fn shr(self, rhs: &u32) -> Self::Output
impl<const N: usize> Shr<&u64> for Simd<u64, N>
type Output = Simd<u64, N>;fn shr(self, rhs: &u64) -> Self::Output
impl<const N: usize> Shr<&u8> for Simd<u8, N>
type Output = Simd<u8, N>;fn shr(self, rhs: &u8) -> Self::Output
impl<const N: usize> Shr<&usize> for Simd<usize, N>
type Output = Simd<usize, N>;fn shr(self, rhs: &usize) -> Self::Output
impl<const N: usize> Shr<i16> for Simd<i16, N>
type Output = Simd<i16, N>;fn shr(self, rhs: i16) -> Self::Output
impl<const N: usize> Shr<i32> for Simd<i32, N>
type Output = Simd<i32, N>;fn shr(self, rhs: i32) -> Self::Output
impl<const N: usize> Shr<i64> for Simd<i64, N>
type Output = Simd<i64, N>;fn shr(self, rhs: i64) -> Self::Output
impl<const N: usize> Shr<i8> for Simd<i8, N>
type Output = Simd<i8, N>;fn shr(self, rhs: i8) -> Self::Output
impl<const N: usize> Shr<isize> for Simd<isize, N>
type Output = Simd<isize, N>;fn shr(self, rhs: isize) -> Self::Output
impl<const N: usize> Shr<u16> for Simd<u16, N>
type Output = Simd<u16, N>;fn shr(self, rhs: u16) -> Self::Output
impl<const N: usize> Shr<u32> for Simd<u32, N>
type Output = Simd<u32, N>;fn shr(self, rhs: u32) -> Self::Output
impl<const N: usize> Shr<u64> for Simd<u64, N>
type Output = Simd<u64, N>;fn shr(self, rhs: u64) -> Self::Output
impl<const N: usize> Shr<u8> for Simd<u8, N>
type Output = Simd<u8, N>;fn shr(self, rhs: u8) -> Self::Output
impl<const N: usize> Shr<usize> for Simd<usize, N>
type Output = Simd<usize, N>;fn shr(self, rhs: usize) -> Self::Output
impl<const N: usize> SimdFloat for Simd<f16, N>
type Mask = Mask<<i16 as SimdElement>::Mask, N>;type Scalar = f16;type Bits = Simd<u16, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>unsafe fn to_int_unchecked<I: SimdCast>(self) -> Self::Cast<I> where Self::Scalar: FloatToInt<I>,fn to_bits(self) -> Simd<u16, N>fn from_bits(bits: Simd<u16, N>) -> Selffn abs(self) -> Selffn recip(self) -> Selffn to_degrees(self) -> Selffn to_radians(self) -> Selffn is_sign_positive(self) -> Self::Maskfn is_sign_negative(self) -> Self::Maskfn is_nan(self) -> Self::Maskfn is_infinite(self) -> Self::Maskfn is_finite(self) -> Self::Maskfn is_subnormal(self) -> Self::Maskfn is_normal(self) -> Self::Maskfn signum(self) -> Selffn copysign(self, sign: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_max(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalar
impl<const N: usize> SimdFloat for Simd<f32, N>
type Mask = Mask<<i32 as SimdElement>::Mask, N>;type Scalar = f32;type Bits = Simd<u32, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>unsafe fn to_int_unchecked<I: SimdCast>(self) -> Self::Cast<I> where Self::Scalar: FloatToInt<I>,fn to_bits(self) -> Simd<u32, N>fn from_bits(bits: Simd<u32, N>) -> Selffn abs(self) -> Selffn recip(self) -> Selffn to_degrees(self) -> Selffn to_radians(self) -> Selffn is_sign_positive(self) -> Self::Maskfn is_sign_negative(self) -> Self::Maskfn is_nan(self) -> Self::Maskfn is_infinite(self) -> Self::Maskfn is_finite(self) -> Self::Maskfn is_subnormal(self) -> Self::Maskfn is_normal(self) -> Self::Maskfn signum(self) -> Selffn copysign(self, sign: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_max(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalar
impl<const N: usize> SimdFloat for Simd<f64, N>
type Mask = Mask<<i64 as SimdElement>::Mask, N>;type Scalar = f64;type Bits = Simd<u64, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>unsafe fn to_int_unchecked<I: SimdCast>(self) -> Self::Cast<I> where Self::Scalar: FloatToInt<I>,fn to_bits(self) -> Simd<u64, N>fn from_bits(bits: Simd<u64, N>) -> Selffn abs(self) -> Selffn recip(self) -> Selffn to_degrees(self) -> Selffn to_radians(self) -> Selffn is_sign_positive(self) -> Self::Maskfn is_sign_negative(self) -> Self::Maskfn is_nan(self) -> Self::Maskfn is_infinite(self) -> Self::Maskfn is_finite(self) -> Self::Maskfn is_subnormal(self) -> Self::Maskfn is_normal(self) -> Self::Maskfn signum(self) -> Selffn copysign(self, sign: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_max(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalar
impl<const N: usize> SimdInt for Simd<i16, N>
type Mask = Mask<<i16 as SimdElement>::Mask, N>;type Scalar = i16;type Unsigned = Simd<u16, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs(self) -> Selffn abs_diff(self, second: Self) -> Self::Unsignedfn saturating_abs(self) -> Selffn saturating_neg(self) -> Selffn is_positive(self) -> Self::Maskfn is_negative(self) -> Self::Maskfn signum(self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Self::Unsignedfn count_zeros(self) -> Self::Unsignedfn leading_zeros(self) -> Self::Unsignedfn trailing_zeros(self) -> Self::Unsignedfn leading_ones(self) -> Self::Unsignedfn trailing_ones(self) -> Self::Unsigned
impl<const N: usize> SimdInt for Simd<i32, N>
type Mask = Mask<<i32 as SimdElement>::Mask, N>;type Scalar = i32;type Unsigned = Simd<u32, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs(self) -> Selffn abs_diff(self, second: Self) -> Self::Unsignedfn saturating_abs(self) -> Selffn saturating_neg(self) -> Selffn is_positive(self) -> Self::Maskfn is_negative(self) -> Self::Maskfn signum(self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Self::Unsignedfn count_zeros(self) -> Self::Unsignedfn leading_zeros(self) -> Self::Unsignedfn trailing_zeros(self) -> Self::Unsignedfn leading_ones(self) -> Self::Unsignedfn trailing_ones(self) -> Self::Unsigned
impl<const N: usize> SimdInt for Simd<i64, N>
type Mask = Mask<<i64 as SimdElement>::Mask, N>;type Scalar = i64;type Unsigned = Simd<u64, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs(self) -> Selffn abs_diff(self, second: Self) -> Self::Unsignedfn saturating_abs(self) -> Selffn saturating_neg(self) -> Selffn is_positive(self) -> Self::Maskfn is_negative(self) -> Self::Maskfn signum(self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Self::Unsignedfn count_zeros(self) -> Self::Unsignedfn leading_zeros(self) -> Self::Unsignedfn trailing_zeros(self) -> Self::Unsignedfn leading_ones(self) -> Self::Unsignedfn trailing_ones(self) -> Self::Unsigned
impl<const N: usize> SimdInt for Simd<i8, N>
type Mask = Mask<<i8 as SimdElement>::Mask, N>;type Scalar = i8;type Unsigned = Simd<u8, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs(self) -> Selffn abs_diff(self, second: Self) -> Self::Unsignedfn saturating_abs(self) -> Selffn saturating_neg(self) -> Selffn is_positive(self) -> Self::Maskfn is_negative(self) -> Self::Maskfn signum(self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Self::Unsignedfn count_zeros(self) -> Self::Unsignedfn leading_zeros(self) -> Self::Unsignedfn trailing_zeros(self) -> Self::Unsignedfn leading_ones(self) -> Self::Unsignedfn trailing_ones(self) -> Self::Unsigned
impl<const N: usize> SimdInt for Simd<isize, N>
type Mask = Mask<<isize as SimdElement>::Mask, N>;type Scalar = isize;type Unsigned = Simd<usize, N>;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs(self) -> Selffn abs_diff(self, second: Self) -> Self::Unsignedfn saturating_abs(self) -> Selffn saturating_neg(self) -> Selffn is_positive(self) -> Self::Maskfn is_negative(self) -> Self::Maskfn signum(self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Self::Unsignedfn count_zeros(self) -> Self::Unsignedfn leading_zeros(self) -> Self::Unsignedfn trailing_zeros(self) -> Self::Unsignedfn leading_ones(self) -> Self::Unsignedfn trailing_ones(self) -> Self::Unsigned
impl<const N: usize> SimdOrd for Simd<i16, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<i32, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<i64, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<i8, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<isize, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<u16, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<u32, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<u64, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<u8, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdOrd for Simd<usize, N>
fn simd_max(self, other: Self) -> Selffn simd_min(self, other: Self) -> Selffn simd_clamp(self, min: Self, max: Self) -> Self
impl<const N: usize> SimdPartialEq for Simd<f16, N>
type Mask = Mask<<f16 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<f32, N>
type Mask = Mask<<f32 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<f64, N>
type Mask = Mask<<f64 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<i16, N>
type Mask = Mask<<i16 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<i32, N>
type Mask = Mask<<i32 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<i64, N>
type Mask = Mask<<i64 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<i8, N>
type Mask = Mask<<i8 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<isize, N>
type Mask = Mask<<isize as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<u16, N>
type Mask = Mask<<u16 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<u32, N>
type Mask = Mask<<u32 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<u64, N>
type Mask = Mask<<u64 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<u8, N>
type Mask = Mask<<u8 as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialEq for Simd<usize, N>
type Mask = Mask<<usize as SimdElement>::Mask, N>;fn simd_eq(self, other: Self) -> Self::Maskfn simd_ne(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<f16, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<f32, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<f64, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<i16, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<i32, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<i64, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<i8, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<isize, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<u16, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<u32, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<u64, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<u8, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdPartialOrd for Simd<usize, N>
fn simd_lt(self, other: Self) -> Self::Maskfn simd_le(self, other: Self) -> Self::Maskfn simd_gt(self, other: Self) -> Self::Maskfn simd_ge(self, other: Self) -> Self::Mask
impl<const N: usize> SimdUint for Simd<u16, N>
type Scalar = u16;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn wrapping_neg(self) -> Selffn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs_diff(self, second: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Selffn count_zeros(self) -> Selffn leading_zeros(self) -> Selffn trailing_zeros(self) -> Selffn leading_ones(self) -> Selffn trailing_ones(self) -> Self
impl<const N: usize> SimdUint for Simd<u32, N>
type Scalar = u32;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn wrapping_neg(self) -> Selffn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs_diff(self, second: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Selffn count_zeros(self) -> Selffn leading_zeros(self) -> Selffn trailing_zeros(self) -> Selffn leading_ones(self) -> Selffn trailing_ones(self) -> Self
impl<const N: usize> SimdUint for Simd<u64, N>
type Scalar = u64;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn wrapping_neg(self) -> Selffn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs_diff(self, second: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Selffn count_zeros(self) -> Selffn leading_zeros(self) -> Selffn trailing_zeros(self) -> Selffn leading_ones(self) -> Selffn trailing_ones(self) -> Self
impl<const N: usize> SimdUint for Simd<u8, N>
type Scalar = u8;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn wrapping_neg(self) -> Selffn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs_diff(self, second: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Selffn count_zeros(self) -> Selffn leading_zeros(self) -> Selffn trailing_zeros(self) -> Selffn leading_ones(self) -> Selffn trailing_ones(self) -> Self
impl<const N: usize> SimdUint for Simd<usize, N>
type Scalar = usize;type Cast<T: SimdElement> = Simd<T, N>;fn cast<T: SimdCast>(self) -> Self::Cast<T>fn wrapping_neg(self) -> Selffn saturating_add(self, second: Self) -> Selffn saturating_sub(self, second: Self) -> Selffn abs_diff(self, second: Self) -> Selffn reduce_sum(self) -> Self::Scalarfn reduce_product(self) -> Self::Scalarfn reduce_max(self) -> Self::Scalarfn reduce_min(self) -> Self::Scalarfn reduce_and(self) -> Self::Scalarfn reduce_or(self) -> Self::Scalarfn reduce_xor(self) -> Self::Scalarfn swap_bytes(self) -> Selffn reverse_bits(self) -> Selffn count_ones(self) -> Selffn count_zeros(self) -> Selffn leading_zeros(self) -> Selffn trailing_zeros(self) -> Selffn leading_ones(self) -> Selffn trailing_ones(self) -> Self
impl<const N: usize> Sub for Simd<f16, N>
where
f16: SimdElement,
type Output = Simd<f16, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<f32, N>
where
f32: SimdElement,
type Output = Simd<f32, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<f64, N>
where
f64: SimdElement,
type Output = Simd<f64, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<i16, N>
where
i16: SimdElement,
type Output = Simd<i16, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<i32, N>
where
i32: SimdElement,
type Output = Simd<i32, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<i64, N>
where
i64: SimdElement,
type Output = Simd<i64, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<i8, N>
where
i8: SimdElement,
type Output = Simd<i8, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<isize, N>
where
isize: SimdElement,
type Output = Simd<isize, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<u16, N>
where
u16: SimdElement,
type Output = Simd<u16, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<u32, N>
where
u32: SimdElement,
type Output = Simd<u32, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<u64, N>
where
u64: SimdElement,
type Output = Simd<u64, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<u8, N>
where
u8: SimdElement,
type Output = Simd<u8, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sub for Simd<usize, N>
where
usize: SimdElement,
type Output = Simd<usize, N>;fn sub(self, rhs: Self) -> Self::Output
impl<const N: usize> Sum for Simd<f32, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<f64, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<i16, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<i32, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<i64, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<i8, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<isize, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<u16, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<u32, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<u64, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<u8, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
impl<const N: usize> Sum for Simd<usize, N>
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
Auto Trait Implementations
impl<T, const N: usize> Freeze for Simd<T, N>
where
[T; N]: Freeze,
impl<T, const N: usize> RefUnwindSafe for Simd<T, N>
where
[T; N]: RefUnwindSafe,
impl<T, const N: usize> Send for Simd<T, N>
where
[T; N]: Send,
impl<T, const N: usize> Sync for Simd<T, N>
where
[T; N]: Sync,
impl<T, const N: usize> Unpin for Simd<T, N>
where
[T; N]: Unpin,
impl<T, const N: usize> UnsafeUnpin for Simd<T, N>
where
[T; N]: UnsafeUnpin,
impl<T, const N: usize> UnwindSafe for Simd<T, N>
where
[T; N]: UnwindSafe,
Blanket Implementations
impl<T> Any for Simd<T, N>
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for Simd<T, N>
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for Simd<T, N>
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Simd<T, N>
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for Simd<T, N>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> Printable for Simd<T, N>
where
T: Copy + Debug,
impl<T> SizeHint for Simd<T, N>
where
T: ?Sized,
fn lower_bound(&self) -> usizefn upper_bound(&self) -> Option<usize>
impl<T> SizedTypeProperties for Simd<T, N>
impl<T, U> Into<U> for Simd<T, N>
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for Simd<T, N>
where
U: Into<T>,
type Error = Infallible;fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for Simd<T, N>
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>