Skip to main content

i32x8

Struct i32x8 

Source
#[repr(C, align(32))]
pub struct i32x8<S: Simd> { pub(crate) val: S::i32x8, pub simd: S, }
Expand description

A SIMD vector of 8 i32 elements.

You may construct this vector type using the Self::splat, Self::from_slice, Self::simd_from, Self::from_fn, and Self::block_splat methods.

fn construct_simd<S: Simd>(simd: S) {
    // From a single scalar value:
    let a = i32x8::splat(simd, 1);
    let b = i32x8::simd_from(simd, 1);

    // From a slice:
    let c = i32x8::from_slice(simd, &[1, 2, 3, 4, 5, 6, 7, 8]);

    // From an array:
    let d = i32x8::simd_from(simd, [1, 2, 3, 4, 5, 6, 7, 8]);

    // From an element-wise function:
    let e = i32x8::from_fn(simd, |i| i as i32);
    // From `Self::Block`:
    let f = i32x8::block_splat(i32x4::simd_from(simd, [1, 2, 3, 4]));
}

Fields§

§val: S::i32x8§simd: S

Trait Implementations§

Source§

impl<S: Simd> Add<i32> for i32x8<S>

Source§

type Output = i32x8<S>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: i32) -> Self::Output

Performs the + operation. Read more
Source§

impl<S: Simd> Add<i32x8<S>> for i32

Source§

type Output = i32x8<S>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: i32x8<S>) -> Self::Output

Performs the + operation. Read more
Source§

impl<S: Simd> Add for i32x8<S>

Source§

fn add(self, rhs: Self) -> Self::Output

Add two vectors element-wise, wrapping on overflow.

Source§

type Output = i32x8<S>

The resulting type after applying the + operator.
Source§

impl<S: Simd> AddAssign<i32> for i32x8<S>

Source§

fn add_assign(&mut self, rhs: i32)

Performs the += operation. Read more
Source§

impl<S: Simd> AddAssign for i32x8<S>

Source§

fn add_assign(&mut self, rhs: Self)

Add two vectors element-wise, wrapping on overflow.

Source§

impl<S: Simd> BitAnd<i32> for i32x8<S>

Source§

type Output = i32x8<S>

The resulting type after applying the & operator.
Source§

fn bitand(self, rhs: i32) -> Self::Output

Performs the & operation. Read more
Source§

impl<S: Simd> BitAnd<i32x8<S>> for i32

Source§

type Output = i32x8<S>

The resulting type after applying the & operator.
Source§

fn bitand(self, rhs: i32x8<S>) -> Self::Output

Performs the & operation. Read more
Source§

impl<S: Simd> BitAnd for i32x8<S>

Source§

fn bitand(self, rhs: Self) -> Self::Output

Compute the bitwise AND of two vectors.

Source§

type Output = i32x8<S>

The resulting type after applying the & operator.
Source§

impl<S: Simd> BitAndAssign<i32> for i32x8<S>

Source§

fn bitand_assign(&mut self, rhs: i32)

Performs the &= operation. Read more
Source§

impl<S: Simd> BitAndAssign for i32x8<S>

Source§

fn bitand_assign(&mut self, rhs: Self)

Compute the bitwise AND of two vectors.

Source§

impl<S: Simd> BitOr<i32> for i32x8<S>

Source§

type Output = i32x8<S>

The resulting type after applying the | operator.
Source§

fn bitor(self, rhs: i32) -> Self::Output

Performs the | operation. Read more
Source§

impl<S: Simd> BitOr<i32x8<S>> for i32

Source§

type Output = i32x8<S>

The resulting type after applying the | operator.
Source§

fn bitor(self, rhs: i32x8<S>) -> Self::Output

Performs the | operation. Read more
Source§

impl<S: Simd> BitOr for i32x8<S>

Source§

fn bitor(self, rhs: Self) -> Self::Output

Compute the bitwise OR of two vectors.

Source§

type Output = i32x8<S>

The resulting type after applying the | operator.
Source§

impl<S: Simd> BitOrAssign<i32> for i32x8<S>

Source§

fn bitor_assign(&mut self, rhs: i32)

Performs the |= operation. Read more
Source§

impl<S: Simd> BitOrAssign for i32x8<S>

Source§

fn bitor_assign(&mut self, rhs: Self)

Compute the bitwise OR of two vectors.

Source§

impl<S: Simd> BitXor<i32> for i32x8<S>

Source§

type Output = i32x8<S>

The resulting type after applying the ^ operator.
Source§

fn bitxor(self, rhs: i32) -> Self::Output

Performs the ^ operation. Read more
Source§

impl<S: Simd> BitXor<i32x8<S>> for i32

Source§

type Output = i32x8<S>

The resulting type after applying the ^ operator.
Source§

fn bitxor(self, rhs: i32x8<S>) -> Self::Output

Performs the ^ operation. Read more
Source§

impl<S: Simd> BitXor for i32x8<S>

Source§

fn bitxor(self, rhs: Self) -> Self::Output

Compute the bitwise XOR of two vectors.

Source§

type Output = i32x8<S>

The resulting type after applying the ^ operator.
Source§

impl<S: Simd> BitXorAssign<i32> for i32x8<S>

Source§

fn bitxor_assign(&mut self, rhs: i32)

Performs the ^= operation. Read more
Source§

impl<S: Simd> BitXorAssign for i32x8<S>

Source§

fn bitxor_assign(&mut self, rhs: Self)

Compute the bitwise XOR of two vectors.

Source§

impl<S: Simd> Bytes for i32x8<S>

Source§

type Bytes = u8x32<S>

Source§

fn to_bytes(self) -> Self::Bytes

Convert this type to an array of bytes.
Source§

fn from_bytes(value: Self::Bytes) -> Self

Create an instance of this type from an array of bytes.
Source§

fn bitcast<U: Bytes<Bytes = Self::Bytes>>(self) -> U

Bitcast directly from this type to another one of the same size.
Source§

impl<S: Clone + Simd> Clone for i32x8<S>
where S::i32x8: Clone,

Source§

fn clone(&self) -> i32x8<S>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<S: Simd + Debug> Debug for i32x8<S>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<S: Simd> Deref for i32x8<S>

Source§

type Target = [i32; 8]

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<S: Simd> DerefMut for i32x8<S>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl<S: Simd> From<i32x8<S>> for [i32; 8]

Source§

fn from(value: i32x8<S>) -> Self

Converts to this type from the input type.
Source§

impl<S: Simd> From<i32x8<S>> for __m256i

Source§

fn from(value: i32x8<S>) -> Self

Converts to this type from the input type.
Source§

impl<S: Simd> Index<usize> for i32x8<S>

Source§

type Output = i32

The returned type after indexing.
Source§

fn index(&self, i: usize) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<S: Simd> IndexMut<usize> for i32x8<S>

Source§

fn index_mut(&mut self, i: usize) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<S: Simd> Mul<i32> for i32x8<S>

Source§

type Output = i32x8<S>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: i32) -> Self::Output

Performs the * operation. Read more
Source§

impl<S: Simd> Mul<i32x8<S>> for i32

Source§

type Output = i32x8<S>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: i32x8<S>) -> Self::Output

Performs the * operation. Read more
Source§

impl<S: Simd> Mul for i32x8<S>

Source§

fn mul(self, rhs: Self) -> Self::Output

Multiply two vectors element-wise, wrapping on overflow.

Source§

type Output = i32x8<S>

The resulting type after applying the * operator.
Source§

impl<S: Simd> MulAssign<i32> for i32x8<S>

Source§

fn mul_assign(&mut self, rhs: i32)

Performs the *= operation. Read more
Source§

impl<S: Simd> MulAssign for i32x8<S>

Source§

fn mul_assign(&mut self, rhs: Self)

Multiply two vectors element-wise, wrapping on overflow.

Source§

impl<S: Simd> Neg for i32x8<S>

Source§

fn neg(self) -> Self::Output

Negate each element of the vector, wrapping on overflow.

Source§

type Output = i32x8<S>

The resulting type after applying the - operator.
Source§

impl<S: Simd> Not for i32x8<S>

Source§

fn not(self) -> Self::Output

Compute the bitwise NOT of the vector.

Source§

type Output = i32x8<S>

The resulting type after applying the ! operator.
Source§

impl<S: Simd> Select<i32x8<S>> for mask32x8<S>

Source§

fn select(self, if_true: i32x8<S>, if_false: i32x8<S>) -> i32x8<S>

For each element of this mask, select the first operand if the element is all ones, and select the second operand if the element is all zeroes. Read more
Source§

impl<S: Simd> Shl<u32> for i32x8<S>

Source§

fn shl(self, rhs: u32) -> Self::Output

Shift each element left by the given number of bits.

Bits shifted out of the left side are discarded, and zeros are shifted in on the right.

Source§

type Output = i32x8<S>

The resulting type after applying the << operator.
Source§

impl<S: Simd> Shl for i32x8<S>

Source§

fn shl(self, rhs: Self) -> Self::Output

Shift each element left by the given number of bits.

Bits shifted out of the left side are discarded, and zeros are shifted in on the right.

This operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation.

Source§

type Output = i32x8<S>

The resulting type after applying the << operator.
Source§

impl<S: Simd> ShlAssign<u32> for i32x8<S>

Source§

fn shl_assign(&mut self, rhs: u32)

Performs the <<= operation. Read more
Source§

impl<S: Simd> ShlAssign for i32x8<S>

Source§

fn shl_assign(&mut self, rhs: Self)

Shift each element left by the given number of bits.

Bits shifted out of the left side are discarded, and zeros are shifted in on the right.

This operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation.

Source§

impl<S: Simd> Shr<u32> for i32x8<S>

Source§

fn shr(self, rhs: u32) -> Self::Output

Shift each element right by the given number of bits.

For unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.

Source§

type Output = i32x8<S>

The resulting type after applying the >> operator.
Source§

impl<S: Simd> Shr for i32x8<S>

Source§

fn shr(self, rhs: Self) -> Self::Output

Shift each element right by the corresponding element in another vector.

For unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.

This operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation.

Source§

type Output = i32x8<S>

The resulting type after applying the >> operator.
Source§

impl<S: Simd> ShrAssign<u32> for i32x8<S>

Source§

fn shr_assign(&mut self, rhs: u32)

Performs the >>= operation. Read more
Source§

impl<S: Simd> ShrAssign for i32x8<S>

Source§

fn shr_assign(&mut self, rhs: Self)

Shift each element right by the corresponding element in another vector.

For unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.

This operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation.

Source§

impl<S: Simd> SimdBase<S> for i32x8<S>

Source§

const N: usize = 8

This vector type’s lane count. This is useful when you’re working with a native-width vector (e.g. Simd::f32s) and want to process data in native-width chunks.
Source§

type Element = i32

The type of this vector’s elements.
Source§

type Mask = mask32x8<S>

A SIMD vector mask with the same number of elements. Read more
Source§

type Block = i32x4<S>

A 128-bit SIMD vector of the same scalar type.
Source§

type Array = [i32; 8]

The array type that this vector type corresponds to, which will always be [Self::Element; Self::N]. It has the same layout as this vector type, but likely has a lower alignment.
Source§

fn witness(&self) -> S

Get the Simd implementation associated with this type.
Source§

fn as_slice(&self) -> &[i32]

Source§

fn as_mut_slice(&mut self) -> &mut [i32]

Source§

fn from_slice(simd: S, slice: &[i32]) -> Self

Create a SIMD vector from a slice. Read more
Source§

fn store_slice(&self, slice: &mut [i32])

Store a SIMD vector into a slice. Read more
Source§

fn splat(simd: S, val: i32) -> Self

Create a SIMD vector with all elements set to the given value.
Source§

fn block_splat(block: Self::Block) -> Self

Create a SIMD vector from a 128-bit vector of the same scalar type, repeated.
Source§

fn from_fn(simd: S, f: impl FnMut(usize) -> i32) -> Self

Create a SIMD vector where each element is produced by calling f with that element’s lane index (from 0 to SimdBase::N - 1).
Source§

fn slide<const SHIFT: usize>(self, rhs: impl SimdInto<Self, S>) -> Self

Concatenate [self, rhs] and extract Self::N elements starting at index SHIFT. Read more
Source§

fn slide_within_blocks<const SHIFT: usize>( self, rhs: impl SimdInto<Self, S>, ) -> Self

Like slide, but operates independently on each 128-bit block.
Source§

impl<S: Simd> SimdCombine<S> for i32x8<S>

Source§

type Combined = i32x16<S>

Source§

fn combine(self, rhs: impl SimdInto<Self, S>) -> Self::Combined

Concatenate two vectors into a new one that’s twice as long.
Source§

impl<S: Simd> SimdCvtFloat<i32x8<S>> for f32x8<S>

Source§

fn float_from(x: i32x8<S>) -> Self

Convert each signed 32-bit integer element to a floating-point value.

Values that cannot be exactly represented are rounded to the nearest representable value.

Source§

impl<S: Simd> SimdCvtTruncate<f32x8<S>> for i32x8<S>

Source§

fn truncate_from(x: f32x8<S>) -> Self

Convert each floating-point element to a signed 32-bit integer, truncating towards zero.

Out-of-range values or NaN will produce implementation-defined results.

Source§

fn truncate_from_precise(x: f32x8<S>) -> Self

Convert each floating-point element to a signed 32-bit integer, truncating towards zero.

Out-of-range values are saturated to the closest in-range value. NaN becomes 0.

Source§

impl<S: Simd> SimdFrom<[i32; 8], S> for i32x8<S>

Source§

fn simd_from(simd: S, val: [i32; 8]) -> Self

Source§

impl<S: Simd> SimdFrom<__m256i, S> for i32x8<S>

Source§

fn simd_from(simd: S, arch: __m256i) -> Self

Source§

impl<S: Simd> SimdFrom<i32, S> for i32x8<S>

Source§

fn simd_from(simd: S, value: i32) -> Self

Source§

impl<S: Simd> SimdInt<S> for i32x8<S>

Source§

fn simd_eq(self, rhs: impl SimdInto<Self, S>) -> Self::Mask

Compare two vectors element-wise for equality. Read more
Source§

fn simd_lt(self, rhs: impl SimdInto<Self, S>) -> Self::Mask

Compare two vectors element-wise for less than. Read more
Source§

fn simd_le(self, rhs: impl SimdInto<Self, S>) -> Self::Mask

Compare two vectors element-wise for less than or equal. Read more
Source§

fn simd_ge(self, rhs: impl SimdInto<Self, S>) -> Self::Mask

Compare two vectors element-wise for greater than or equal. Read more
Source§

fn simd_gt(self, rhs: impl SimdInto<Self, S>) -> Self::Mask

Compare two vectors element-wise for greater than. Read more
Source§

fn zip_low(self, rhs: impl SimdInto<Self, S>) -> Self

Interleave the lower half elements of two vectors. Read more
Source§

fn zip_high(self, rhs: impl SimdInto<Self, S>) -> Self

Interleave the upper half elements of two vectors. Read more
Source§

fn unzip_low(self, rhs: impl SimdInto<Self, S>) -> Self

Extract even-indexed elements from two vectors. Read more
Source§

fn unzip_high(self, rhs: impl SimdInto<Self, S>) -> Self

Extract odd-indexed elements from two vectors. Read more
Source§

fn interleave(self, rhs: impl SimdInto<Self, S>) -> (Self, Self)

Interleave two vectors. Read more
Source§

fn deinterleave(self, rhs: impl SimdInto<Self, S>) -> (Self, Self)

Deinterleave two vectors. Read more
Source§

fn min(self, rhs: impl SimdInto<Self, S>) -> Self

Return the element-wise minimum of two vectors.
Source§

fn max(self, rhs: impl SimdInto<Self, S>) -> Self

Return the element-wise maximum of two vectors.
Source§

fn to_float<T: SimdCvtFloat<Self>>(self) -> T

Convert this integer type to a floating-point type. This is a convenience method that delegates to SimdCvtFloat::float_from, and can only be called if there actually exists a target type of the same bit width (currently, only f32).
Source§

impl<S: Simd> SimdSplit<S> for i32x8<S>

Source§

type Split = i32x4<S>

Source§

fn split(self) -> (Self::Split, Self::Split)

Split this vector into left and right halves.
Source§

impl<S: Simd> Sub<i32> for i32x8<S>

Source§

type Output = i32x8<S>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: i32) -> Self::Output

Performs the - operation. Read more
Source§

impl<S: Simd> Sub<i32x8<S>> for i32

Source§

type Output = i32x8<S>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: i32x8<S>) -> Self::Output

Performs the - operation. Read more
Source§

impl<S: Simd> Sub for i32x8<S>

Source§

fn sub(self, rhs: Self) -> Self::Output

Subtract two vectors element-wise, wrapping on overflow.

Source§

type Output = i32x8<S>

The resulting type after applying the - operator.
Source§

impl<S: Simd> SubAssign<i32> for i32x8<S>

Source§

fn sub_assign(&mut self, rhs: i32)

Performs the -= operation. Read more
Source§

impl<S: Simd> SubAssign for i32x8<S>

Source§

fn sub_assign(&mut self, rhs: Self)

Subtract two vectors element-wise, wrapping on overflow.

Source§

impl<S: Copy + Simd> Copy for i32x8<S>
where S::i32x8: Copy,

Auto Trait Implementations§

§

impl<S> Freeze for i32x8<S>
where <S as ArchTypes>::i32x8: Freeze, S: Freeze,

§

impl<S> RefUnwindSafe for i32x8<S>

§

impl<S> Send for i32x8<S>

§

impl<S> Sync for i32x8<S>

§

impl<S> Unpin for i32x8<S>
where <S as ArchTypes>::i32x8: Unpin, S: Unpin,

§

impl<S> UnsafeUnpin for i32x8<S>

§

impl<S> UnwindSafe for i32x8<S>
where <S as ArchTypes>::i32x8: UnwindSafe, S: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.