#[repr(C, align(64))]pub struct f64x8<S: Simd> {
pub(crate) val: S::f64x8,
pub simd: S,
}Expand description
A SIMD vector of 8 f64 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 = f64x8::splat(simd, 1.0);
let b = f64x8::simd_from(simd, 1.0);
// From a slice:
let c = f64x8::from_slice(simd, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]);
// From an array:
let d = f64x8::simd_from(simd, [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]);
// From an element-wise function:
let e = f64x8::from_fn(simd, |i| i as f64);
// From `Self::Block`:
let f = f64x8::block_splat(f64x2::simd_from(simd, [1.0, 2.0]));
}Fields§
§val: S::f64x8§simd: STrait Implementations§
Source§impl<S: Simd> AddAssign<f64> for f64x8<S>
impl<S: Simd> AddAssign<f64> for f64x8<S>
Source§fn add_assign(&mut self, rhs: f64)
fn add_assign(&mut self, rhs: f64)
Performs the
+= operation. Read moreSource§impl<S: Simd> AddAssign for f64x8<S>
impl<S: Simd> AddAssign for f64x8<S>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Add two vectors element-wise.
Source§impl<S: Simd> Bytes for f64x8<S>
impl<S: Simd> Bytes for f64x8<S>
Source§impl<S: Simd> DivAssign<f64> for f64x8<S>
impl<S: Simd> DivAssign<f64> for f64x8<S>
Source§fn div_assign(&mut self, rhs: f64)
fn div_assign(&mut self, rhs: f64)
Performs the
/= operation. Read moreSource§impl<S: Simd> DivAssign for f64x8<S>
impl<S: Simd> DivAssign for f64x8<S>
Source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
Divide two vectors element-wise.
Source§impl<S: Simd> MulAssign<f64> for f64x8<S>
impl<S: Simd> MulAssign<f64> for f64x8<S>
Source§fn mul_assign(&mut self, rhs: f64)
fn mul_assign(&mut self, rhs: f64)
Performs the
*= operation. Read moreSource§impl<S: Simd> MulAssign for f64x8<S>
impl<S: Simd> MulAssign for f64x8<S>
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Multiply two vectors element-wise.
Source§impl<S: Simd> SimdBase<S> for f64x8<S>
impl<S: Simd> SimdBase<S> for f64x8<S>
Source§const N: usize = 8
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 Array = [f64; 8]
type Array = [f64; 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.fn as_slice(&self) -> &[f64]
fn as_mut_slice(&mut self) -> &mut [f64]
Source§fn from_slice(simd: S, slice: &[f64]) -> Self
fn from_slice(simd: S, slice: &[f64]) -> Self
Create a SIMD vector from a slice. Read more
Source§fn store_slice(&self, slice: &mut [f64])
fn store_slice(&self, slice: &mut [f64])
Store a SIMD vector into a slice. Read more
Source§fn splat(simd: S, val: f64) -> Self
fn splat(simd: S, val: f64) -> Self
Create a SIMD vector with all elements set to the given value.
Source§fn block_splat(block: Self::Block) -> Self
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) -> f64) -> Self
fn from_fn(simd: S, f: impl FnMut(usize) -> f64) -> 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_within_blocks<const SHIFT: usize>(
self,
rhs: impl SimdInto<Self, S>,
) -> Self
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> SimdFloat<S> for f64x8<S>
impl<S: Simd> SimdFloat<S> for f64x8<S>
Source§fn simd_eq(self, rhs: impl SimdInto<Self, S>) -> Self::Mask
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
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
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
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
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
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
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
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
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)
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)
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
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
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
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
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
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 moreSource§fn mul_sub(
self,
op1: impl SimdInto<Self, S>,
op2: impl SimdInto<Self, S>,
) -> Self
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 moreSource§fn floor(self) -> Self
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
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
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 to_int<T: SimdCvtTruncate<Self>>(self) -> T
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 moreSource§fn to_int_precise<T: SimdCvtTruncate<Self>>(self) -> T
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 moreSource§impl<S: Simd> SubAssign<f64> for f64x8<S>
impl<S: Simd> SubAssign<f64> for f64x8<S>
Source§fn sub_assign(&mut self, rhs: f64)
fn sub_assign(&mut self, rhs: f64)
Performs the
-= operation. Read moreSource§impl<S: Simd> SubAssign for f64x8<S>
impl<S: Simd> SubAssign for f64x8<S>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Subtract two vectors element-wise.
impl<S: Copy + Simd> Copy for f64x8<S>
Auto Trait Implementations§
impl<S> Freeze for f64x8<S>
impl<S> RefUnwindSafe for f64x8<S>
impl<S> Send for f64x8<S>
impl<S> Sync for f64x8<S>
impl<S> Unpin for f64x8<S>
impl<S> UnsafeUnpin for f64x8<S>
impl<S> UnwindSafe for f64x8<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more