Skip to main content

f32x16

Struct f32x16 

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

A SIMD vector of 16 f32 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 = f32x16::splat(simd, 1.0);
    let b = f32x16::simd_from(simd, 1.0);

    // From a slice:
    let c = f32x16::from_slice(simd, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0]);

    // From an array:
    let d = f32x16::simd_from(simd, [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0]);

    // From an element-wise function:
    let e = f32x16::from_fn(simd, |i| i as f32);
    // From `Self::Block`:
    let f = f32x16::block_splat(f32x4::simd_from(simd, [1.0, 2.0, 3.0, 4.0]));
}

Fields§

§val: S::f32x16§simd: S

Trait Implementations§

Source§

impl<S: Simd> Add<f32> for f32x16<S>

Source§

type Output = f32x16<S>

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl<S: Simd> Add<f32x16<S>> for f32

Source§

type Output = f32x16<S>

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

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

Source§

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

Add two vectors element-wise.

Source§

type Output = f32x16<S>

The resulting type after applying the + operator.
Source§

impl<S: Simd> AddAssign<f32> for f32x16<S>

Source§

fn add_assign(&mut self, rhs: f32)

Performs the += operation. Read more
Source§

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

Source§

fn add_assign(&mut self, rhs: Self)

Add two vectors element-wise.

Source§

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

Source§

type Bytes = u8x64<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 f32x16<S>
where S::f32x16: Clone,

Source§

fn clone(&self) -> f32x16<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 f32x16<S>

Source§

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

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

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

Source§

type Target = [f32; 16]

The resulting type after dereferencing.
Source§

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

Dereferences the value.
Source§

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

Source§

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

Mutably dereferences the value.
Source§

impl<S: Simd> Div<f32> for f32x16<S>

Source§

type Output = f32x16<S>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: f32) -> Self::Output

Performs the / operation. Read more
Source§

impl<S: Simd> Div<f32x16<S>> for f32

Source§

type Output = f32x16<S>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: f32x16<S>) -> Self::Output

Performs the / operation. Read more
Source§

impl<S: Simd> Div for f32x16<S>

Source§

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

Divide two vectors element-wise.

Source§

type Output = f32x16<S>

The resulting type after applying the / operator.
Source§

impl<S: Simd> DivAssign<f32> for f32x16<S>

Source§

fn div_assign(&mut self, rhs: f32)

Performs the /= operation. Read more
Source§

impl<S: Simd> DivAssign for f32x16<S>

Source§

fn div_assign(&mut self, rhs: Self)

Divide two vectors element-wise.

Source§

impl<S: Simd> From<f32x16<S>> for [f32; 16]

Source§

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

Converts to this type from the input type.
Source§

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

Source§

type Output = f32

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 f32x16<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<f32> for f32x16<S>

Source§

type Output = f32x16<S>

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

impl<S: Simd> Mul<f32x16<S>> for f32

Source§

type Output = f32x16<S>

The resulting type after applying the * operator.
Source§

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

Performs the * operation. Read more
Source§

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

Source§

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

Multiply two vectors element-wise.

Source§

type Output = f32x16<S>

The resulting type after applying the * operator.
Source§

impl<S: Simd> MulAssign<f32> for f32x16<S>

Source§

fn mul_assign(&mut self, rhs: f32)

Performs the *= operation. Read more
Source§

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

Source§

fn mul_assign(&mut self, rhs: Self)

Multiply two vectors element-wise.

Source§

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

Source§

fn neg(self) -> Self::Output

Negate each element of the vector.

Source§

type Output = f32x16<S>

The resulting type after applying the - operator.
Source§

impl<S: Simd> Select<f32x16<S>> for mask32x16<S>

Source§

fn select(self, if_true: f32x16<S>, if_false: f32x16<S>) -> f32x16<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> SimdBase<S> for f32x16<S>

Source§

const N: usize = 16

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 = f32

The type of this vector’s elements.
Source§

type Mask = mask32x16<S>

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

type Block = f32x4<S>

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

type Array = [f32; 16]

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) -> &[f32]

Source§

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

Source§

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

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

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

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

fn splat(simd: S, val: f32) -> 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) -> f32) -> 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> SimdCvtFloat<i32x16<S>> for f32x16<S>

Source§

fn float_from(x: i32x16<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> SimdCvtFloat<u32x16<S>> for f32x16<S>

Source§

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

Convert each unsigned 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<f32x16<S>> for i32x16<S>

Source§

fn truncate_from(x: f32x16<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: f32x16<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> SimdCvtTruncate<f32x16<S>> for u32x16<S>

Source§

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

Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.

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

On x86 platforms, this operation will still be slower than converting to i32, because there is no native instruction for converting to u32 (at least until AVX-512, which is currently not supported). If you know your values fit within range of an i32, you should convert to an i32 and cast to your desired datatype afterwards.

Source§

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

Convert each floating-point element to an unsigned 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> SimdFloat<S> for f32x16<S>

Source§

fn abs(self) -> Self

Compute the absolute value of each element.
Source§

fn sqrt(self) -> Self

Compute the square root of each element. Read more
Source§

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

Return a vector with the magnitude of self and the sign of rhs for each element. Read more
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 max(self, rhs: impl SimdInto<Self, S>) -> Self

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

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

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

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

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

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

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

fn mul_add( self, op1: impl SimdInto<Self, S>, op2: impl SimdInto<Self, S>, ) -> Self

Compute (self * op1) + op2 (fused multiply-add) for each element. Read more
Source§

fn mul_sub( self, op1: impl SimdInto<Self, S>, op2: impl SimdInto<Self, S>, ) -> Self

Compute (self * op1) - op2 (fused multiply-subtract) for each element. Read more
Source§

fn floor(self) -> Self

Return the largest integer less than or equal to each element, that is, round towards negative infinity.
Source§

fn ceil(self) -> Self

Return the smallest integer greater than or equal to each element, that is, round towards positive infinity.
Source§

fn round_ties_even(self) -> Self

Round each element to the nearest integer, with ties rounding to the nearest even integer. Read more
Source§

fn fract(self) -> Self

Return the fractional part of each element. Read more
Source§

fn trunc(self) -> Self

Return the integer part of each element, rounding towards zero.
Source§

fn to_int<T: SimdCvtTruncate<Self>>(self) -> T

Convert this floating-point type to an integer. This is a convenience method that delegates to SimdCvtTruncate::truncate_from, and can only be called if there actually exists a target type of the same bit width (currently, only u32 and i32). Read more
Source§

fn to_int_precise<T: SimdCvtTruncate<Self>>(self) -> T

Convert this floating-point type to an integer, saturating on overflow and returning 0 for NaN. This is a convenience method that delegates to SimdCvtTruncate::truncate_from_precise, and can only be called if there actually exists a target type of the same bit width (currently, only u32 and i32). Read more
Source§

impl<S: Simd> SimdFrom<[f32; 16], S> for f32x16<S>

Source§

fn simd_from(simd: S, val: [f32; 16]) -> Self

Source§

impl<S: Simd> SimdFrom<f32, S> for f32x16<S>

Source§

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

Source§

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

Source§

type Split = f32x8<S>

Source§

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

Split this vector into left and right halves.
Source§

impl<S: Simd> Sub<f32> for f32x16<S>

Source§

type Output = f32x16<S>

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

impl<S: Simd> Sub<f32x16<S>> for f32

Source§

type Output = f32x16<S>

The resulting type after applying the - operator.
Source§

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

Performs the - operation. Read more
Source§

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

Source§

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

Subtract two vectors element-wise.

Source§

type Output = f32x16<S>

The resulting type after applying the - operator.
Source§

impl<S: Simd> SubAssign<f32> for f32x16<S>

Source§

fn sub_assign(&mut self, rhs: f32)

Performs the -= operation. Read more
Source§

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

Source§

fn sub_assign(&mut self, rhs: Self)

Subtract two vectors element-wise.

Source§

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

Auto Trait Implementations§

§

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

§

impl<S> RefUnwindSafe for f32x16<S>

§

impl<S> Send for f32x16<S>

§

impl<S> Sync for f32x16<S>

§

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

§

impl<S> UnsafeUnpin for f32x16<S>

§

impl<S> UnwindSafe for f32x16<S>

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.