Trait SimdBase

Source
pub trait SimdBase<Element: SimdElement, S: Simd>:
    Copy
    + Sync
    + Send
    + 'static
    + Bytes {
    type Mask: SimdMask<Element::Mask, S>;
    type Block: SimdBase<Element, S>;

    const N: usize;

    // Required methods
    fn as_slice(&self) -> &[Element];
    fn as_mut_slice(&mut self) -> &mut [Element];
    fn from_slice(simd: S, slice: &[Element]) -> Self;
    fn splat(simd: S, val: Element) -> Self;
    fn block_splat(block: Self::Block) -> Self;
}

Required Associated Constants§

Source

const N: usize

Required Associated Types§

Source

type Mask: SimdMask<Element::Mask, S>

A SIMD vector mask with the same number of elements.

The mask element is represented as an integer which is all-0 for false and all-1 for true. When we get deep into AVX-512, we need to think about predication masks.

One possibility to consider is that the SIMD trait grows maskAxB associated types.

Source

type Block: SimdBase<Element, S>

A 128 bit SIMD vector of the same scalar type.

Required Methods§

Source

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

Source

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

Source

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

Create a SIMD vector from a slice.

The slice must be the proper width.

Source

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

Source

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

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<S: Simd> SimdBase<f32, S> for f32x4<S>

Source§

const N: usize = 4usize

Source§

type Mask = mask32x4<S>

Source§

type Block = f32x4<S>

Source§

impl<S: Simd> SimdBase<f32, S> for f32x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask32x8<S>

Source§

type Block = f32x4<S>

Source§

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

Source§

const N: usize = 16usize

Source§

type Mask = mask32x16<S>

Source§

type Block = f32x4<S>

Source§

impl<S: Simd> SimdBase<f64, S> for f64x2<S>

Source§

const N: usize = 2usize

Source§

type Mask = mask64x2<S>

Source§

type Block = f64x2<S>

Source§

impl<S: Simd> SimdBase<f64, S> for f64x4<S>

Source§

const N: usize = 4usize

Source§

type Mask = mask64x4<S>

Source§

type Block = f64x2<S>

Source§

impl<S: Simd> SimdBase<f64, S> for f64x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask64x8<S>

Source§

type Block = f64x2<S>

Source§

impl<S: Simd> SimdBase<i8, S> for i8x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask8x16<S>

Source§

type Block = i8x16<S>

Source§

impl<S: Simd> SimdBase<i8, S> for i8x32<S>

Source§

const N: usize = 32usize

Source§

type Mask = mask8x32<S>

Source§

type Block = i8x16<S>

Source§

impl<S: Simd> SimdBase<i8, S> for i8x64<S>

Source§

const N: usize = 64usize

Source§

type Mask = mask8x64<S>

Source§

type Block = i8x16<S>

Source§

impl<S: Simd> SimdBase<i8, S> for mask8x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask8x16<S>

Source§

type Block = mask8x16<S>

Source§

impl<S: Simd> SimdBase<i8, S> for mask8x32<S>

Source§

const N: usize = 32usize

Source§

type Mask = mask8x32<S>

Source§

type Block = mask8x16<S>

Source§

impl<S: Simd> SimdBase<i8, S> for mask8x64<S>

Source§

const N: usize = 64usize

Source§

type Mask = mask8x64<S>

Source§

type Block = mask8x16<S>

Source§

impl<S: Simd> SimdBase<i16, S> for i16x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask16x8<S>

Source§

type Block = i16x8<S>

Source§

impl<S: Simd> SimdBase<i16, S> for i16x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask16x16<S>

Source§

type Block = i16x8<S>

Source§

impl<S: Simd> SimdBase<i16, S> for i16x32<S>

Source§

const N: usize = 32usize

Source§

type Mask = mask16x32<S>

Source§

type Block = i16x8<S>

Source§

impl<S: Simd> SimdBase<i16, S> for mask16x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask16x8<S>

Source§

type Block = mask16x8<S>

Source§

impl<S: Simd> SimdBase<i16, S> for mask16x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask16x16<S>

Source§

type Block = mask16x8<S>

Source§

impl<S: Simd> SimdBase<i16, S> for mask16x32<S>

Source§

const N: usize = 32usize

Source§

type Mask = mask16x32<S>

Source§

type Block = mask16x8<S>

Source§

impl<S: Simd> SimdBase<i32, S> for i32x4<S>

Source§

const N: usize = 4usize

Source§

type Mask = mask32x4<S>

Source§

type Block = i32x4<S>

Source§

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

Source§

const N: usize = 8usize

Source§

type Mask = mask32x8<S>

Source§

type Block = i32x4<S>

Source§

impl<S: Simd> SimdBase<i32, S> for i32x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask32x16<S>

Source§

type Block = i32x4<S>

Source§

impl<S: Simd> SimdBase<i32, S> for mask32x4<S>

Source§

const N: usize = 4usize

Source§

type Mask = mask32x4<S>

Source§

type Block = mask32x4<S>

Source§

impl<S: Simd> SimdBase<i32, S> for mask32x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask32x8<S>

Source§

type Block = mask32x4<S>

Source§

impl<S: Simd> SimdBase<i32, S> for mask32x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask32x16<S>

Source§

type Block = mask32x4<S>

Source§

impl<S: Simd> SimdBase<i64, S> for mask64x2<S>

Source§

const N: usize = 2usize

Source§

type Mask = mask64x2<S>

Source§

type Block = mask64x2<S>

Source§

impl<S: Simd> SimdBase<i64, S> for mask64x4<S>

Source§

const N: usize = 4usize

Source§

type Mask = mask64x4<S>

Source§

type Block = mask64x2<S>

Source§

impl<S: Simd> SimdBase<i64, S> for mask64x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask64x8<S>

Source§

type Block = mask64x2<S>

Source§

impl<S: Simd> SimdBase<u8, S> for u8x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask8x16<S>

Source§

type Block = u8x16<S>

Source§

impl<S: Simd> SimdBase<u8, S> for u8x32<S>

Source§

const N: usize = 32usize

Source§

type Mask = mask8x32<S>

Source§

type Block = u8x16<S>

Source§

impl<S: Simd> SimdBase<u8, S> for u8x64<S>

Source§

const N: usize = 64usize

Source§

type Mask = mask8x64<S>

Source§

type Block = u8x16<S>

Source§

impl<S: Simd> SimdBase<u16, S> for u16x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask16x8<S>

Source§

type Block = u16x8<S>

Source§

impl<S: Simd> SimdBase<u16, S> for u16x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask16x16<S>

Source§

type Block = u16x8<S>

Source§

impl<S: Simd> SimdBase<u16, S> for u16x32<S>

Source§

const N: usize = 32usize

Source§

type Mask = mask16x32<S>

Source§

type Block = u16x8<S>

Source§

impl<S: Simd> SimdBase<u32, S> for u32x4<S>

Source§

const N: usize = 4usize

Source§

type Mask = mask32x4<S>

Source§

type Block = u32x4<S>

Source§

impl<S: Simd> SimdBase<u32, S> for u32x8<S>

Source§

const N: usize = 8usize

Source§

type Mask = mask32x8<S>

Source§

type Block = u32x4<S>

Source§

impl<S: Simd> SimdBase<u32, S> for u32x16<S>

Source§

const N: usize = 16usize

Source§

type Mask = mask32x16<S>

Source§

type Block = u32x4<S>