core::simd::num

Trait SimdUint

source
pub trait SimdUint: Copy + Sealed {
    type Scalar;
    type Cast<T: SimdElement>;

Show 17 methods // Required methods fn cast<T: SimdCast>(self) -> Self::Cast<T>; fn wrapping_neg(self) -> Self; fn saturating_add(self, second: Self) -> Self; fn saturating_sub(self, second: Self) -> Self; fn reduce_sum(self) -> Self::Scalar; fn reduce_product(self) -> Self::Scalar; fn reduce_max(self) -> Self::Scalar; fn reduce_min(self) -> Self::Scalar; fn reduce_and(self) -> Self::Scalar; fn reduce_or(self) -> Self::Scalar; fn reduce_xor(self) -> Self::Scalar; fn swap_bytes(self) -> Self; fn reverse_bits(self) -> Self; fn leading_zeros(self) -> Self; fn trailing_zeros(self) -> Self; fn leading_ones(self) -> Self; fn trailing_ones(self) -> Self;
}
🔬This is a nightly-only experimental API. (portable_simd #86656)
Expand description

Operations on SIMD vectors of unsigned integers.

Required Associated Types§

source

type Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Scalar type contained by this SIMD vector type.

source

type Cast<T: SimdElement>

🔬This is a nightly-only experimental API. (portable_simd #86656)

A SIMD vector with a different element type.

Required Methods§

source

fn cast<T: SimdCast>(self) -> Self::Cast<T>

🔬This is a nightly-only experimental API. (portable_simd #86656)

Performs elementwise conversion of this vector’s elements to another SIMD-valid type.

This follows the semantics of Rust’s as conversion for casting integers (wrapping to other integer types, and saturating to float types).

source

fn wrapping_neg(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Wrapping negation.

Like u32::wrapping_neg, all applications of this function will wrap, with the exception of -0.

source

fn saturating_add(self, second: Self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Lanewise saturating add.

§Examples
use core::u32::MAX;
let x = Simd::from_array([2, 1, 0, MAX]);
let max = Simd::splat(MAX);
let unsat = x + max;
let sat = x.saturating_add(max);
assert_eq!(unsat, Simd::from_array([1, 0, MAX, MAX - 1]));
assert_eq!(sat, max);
source

fn saturating_sub(self, second: Self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Lanewise saturating subtract.

§Examples
use core::u32::MAX;
let x = Simd::from_array([2, 1, 0, MAX]);
let max = Simd::splat(MAX);
let unsat = x - max;
let sat = x.saturating_sub(max);
assert_eq!(unsat, Simd::from_array([3, 2, 1, 0]));
assert_eq!(sat, Simd::splat(0));
source

fn reduce_sum(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the sum of the elements of the vector, with wrapping addition.

source

fn reduce_product(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the product of the elements of the vector, with wrapping multiplication.

source

fn reduce_max(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the maximum element in the vector.

source

fn reduce_min(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the minimum element in the vector.

source

fn reduce_and(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the cumulative bitwise “and” across the elements of the vector.

source

fn reduce_or(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the cumulative bitwise “or” across the elements of the vector.

source

fn reduce_xor(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the cumulative bitwise “xor” across the elements of the vector.

source

fn swap_bytes(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Reverses the byte order of each element.

source

fn reverse_bits(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Reverses the order of bits in each elemnent. The least significant bit becomes the most significant bit, second least-significant bit becomes second most-significant bit, etc.

source

fn leading_zeros(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the number of leading zeros in the binary representation of each element.

source

fn trailing_zeros(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the number of trailing zeros in the binary representation of each element.

source

fn leading_ones(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the number of leading ones in the binary representation of each element.

source

fn trailing_ones(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the number of trailing ones in the binary representation of each element.

Object Safety§

This trait is not object safe.

Implementors§