#![allow(non_camel_case_types)]
use core::{hash::Hash, marker::PhantomData};
use generic_array::{
ArrayLength,
typenum::{U1, U2, U3, U4, U8, U16},
};
use crate::{
Vector,
element::{FloatElementWithBits, USize},
isa::InstructionSet,
register::{
BitCastRegister, CastRegister, ConcatRegister, ExtendRegister, FloatRegister, FullyInteroperable,
IndexableRegister, Lanes, LinAlg3Register, LinAlg4Register, PackedFloatRegister, Register, Sad16Register,
Sad32Register, Sad64Register, SignedIntegerRegister, UnsignedIntegerRegister,
reduced::ReducedRegister,
well_formed::{
WellFormedFloatElement, WellFormedFloatRegister, WellFormedSignedIntegerElement,
WellFormedSignedIntegerRegister, WellFormedUnsignedIntegerElement, WellFormedUnsignedIntegerRegister,
},
},
};
#[doc(hidden)]
#[repr(align(16))]
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Align16;
#[doc(hidden)]
#[repr(align(32))]
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Align32;
#[doc(hidden)]
#[repr(align(64))]
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Align64;
pub trait HasIsa {
type Native: NativeIsa;
const ISA: InstructionSet = <Self::Native as HasIsa>::ISA;
}
#[rustfmt::skip]
pub trait NativeIsa: HasIsa + core::fmt::Debug + Clone + Copy + PartialEq + Eq + Hash {
type Registers: ArrayLength;
type Native32Width: Lanes;
type Native64Width: Lanes;
type Native16Width: Lanes;
type Native8Width: Lanes;
type NativeAlignment: Sized + Default + Copy + Ord + Hash + Send + Sync + Unpin + core::panic::UnwindSafe + core::panic::RefUnwindSafe + core::fmt::Debug + 'static;
unsafe fn disable_denormals() -> Result<bool, UnsupportedError> { Err(UnsupportedError) }
unsafe fn enable_denormals() -> Result<(), UnsupportedError> { Err(UnsupportedError) }
const HAS_PREFETCH: bool = false;
#[inline(always)]
fn prefetch<const LOCALITY: u8, const WRITE: bool>(ptr: *const u8) {
const { assert!(LOCALITY <= 3, "prefetch LOCALITY must be 0 (non-temporal) ..= 3 (keep in every cache level)") };
let _ = ptr;
}
unsafe fn zeroupper() -> bool { false }
}
pub struct UnsupportedError;
pub struct DisableDenormals<S: NativeIsa>(Result<bool, UnsupportedError>, PhantomData<S>);
impl<S: NativeIsa> DisableDenormals<S> {
#[inline(always)]
#[allow(clippy::self_named_constructors)]
pub unsafe fn disable_denormals() -> Self {
unsafe { Self(S::disable_denormals(), PhantomData) }
}
#[inline(always)]
pub fn was_enabled(&self) -> bool {
matches!(self.0, Ok(true))
}
#[inline(always)]
pub fn is_disabled(&self) -> bool {
self.0.is_ok()
}
}
impl<S: NativeIsa> Drop for DisableDenormals<S> {
#[inline(always)]
fn drop(&mut self) {
if let Ok(true) = self.0 {
unsafe { _ = S::enable_denormals() };
}
}
}
#[rustfmt::skip]
pub trait NativeSimd: NativeIsa {
type f32xN: FullyInteroperable<Self::i32xN, Self::u32xN, Lanes = Self::Native32Width, Element = f32, Unsigned = Self::u32xN, Signed = Self::i32xN>
+ WellFormedFloatRegister<Bits = Self::u32xN, SignedBits = Self::i32xN> + IndexableRegister<Self::u32xN>;
type i32xN: FullyInteroperable<Self::f32xN, Self::u32xN, Lanes = Self::Native32Width, Element = i32, Unsigned = Self::u32xN, Signed = Self::i32xN>
+ WellFormedSignedIntegerRegister + IndexableRegister<Self::u32xN>;
type u32xN: FullyInteroperable<Self::f32xN, Self::i32xN, Lanes = Self::Native32Width, Element = u32, Unsigned = Self::u32xN, Signed = Self::i32xN>
+ Sad64Register<Self::u64xN>
+ WellFormedUnsignedIntegerRegister + IndexableRegister<Self::u32xN>;
type f64xN: FullyInteroperable<Self::i64xN, Self::u64xN, Lanes = Self::Native64Width, Element = f64, Unsigned = Self::u64xN, Signed = Self::i64xN>
+ WellFormedFloatRegister<Bits = Self::u64xN, SignedBits = Self::i64xN> + IndexableRegister<Self::u64xN>;
type i64xN: FullyInteroperable<Self::f64xN, Self::u64xN, Lanes = Self::Native64Width, Element = i64, Unsigned = Self::u64xN, Signed = Self::i64xN>
+ WellFormedSignedIntegerRegister + IndexableRegister<Self::u64xN>;
type u64xN: FullyInteroperable<Self::f64xN, Self::i64xN, Lanes = Self::Native64Width, Element = u64, Unsigned = Self::u64xN, Signed = Self::i64xN>
+ WellFormedUnsignedIntegerRegister + IndexableRegister<Self::u64xN>;
type i16xN: WellFormedSignedIntegerRegister<Element = i16, Lanes = Self::Native16Width>
+ IndexableRegister<Self::u16xN>;
type u16xN: WellFormedUnsignedIntegerRegister<Element = u16, Lanes = Self::Native16Width>
+ IndexableRegister<Self::u16xN>
+ Sad32Register<Self::u32xN> + Sad64Register<Self::u64xN>;
type i8xN: WellFormedSignedIntegerRegister<Element = i8, Lanes = Self::Native8Width>
+ IndexableRegister<Self::u8xN>;
type u8xN: WellFormedUnsignedIntegerRegister<Element = u8, Lanes = Self::Native8Width>
+ IndexableRegister<Self::u8xN>
+ Sad16Register<Self::u16xN> + Sad32Register<Self::u32xN> + Sad64Register<Self::u64xN>;
}
pub mod helpers {
use super::*;
pub trait IndexedBy<
USIZE: UnsignedIntegerRegister<Lanes = Self::Lanes>,
U32: UnsignedIntegerRegister<Lanes = Self::Lanes>,
U64: UnsignedIntegerRegister<Lanes = Self::Lanes>,
>: Register + IndexableRegister<USIZE> + IndexableRegister<U32> + IndexableRegister<U64>
{
}
impl<
USIZE: UnsignedIntegerRegister<Lanes = Self::Lanes>,
U32: UnsignedIntegerRegister<Lanes = Self::Lanes>,
U64: UnsignedIntegerRegister<Lanes = Self::Lanes>,
R,
> IndexedBy<USIZE, U32, U64> for R
where
R: Register + IndexableRegister<USIZE> + IndexableRegister<U32> + IndexableRegister<U64>,
{
}
pub trait FullExtendRegister<FROM: Register>:
Register<Mask: ExtendRegister<FROM::Mask>> + ExtendRegister<FROM>
{
}
pub trait FullConcatRegister<HALF: Register>:
Register<Mask: ConcatRegister<HALF::Mask>> + FullExtendRegister<HALF> + ConcatRegister<HALF>
{
}
impl<R: Register, F: Register> FullExtendRegister<F> for R where
R: Register<Mask: ExtendRegister<F::Mask>> + ExtendRegister<F>
{
}
impl<R: Register, H: Register> FullConcatRegister<H> for R where
R: Register<Mask: ConcatRegister<H::Mask>> + FullExtendRegister<H> + ConcatRegister<H>
{
}
use crate::element::float::spec::{Bf16, Fp8E4M3, Fp8E5M2, Fp16, Fp16Fast};
pub trait PackedF16Register<F>:
PackedFloatRegister<Fp16, F> + PackedFloatRegister<Fp16Fast, F> + PackedFloatRegister<Bf16, F>
where
F: FloatRegister<Element = f32, Lanes = Self::Lanes, Bits: CastRegister<Self>>,
{
}
impl<R, F> PackedF16Register<F> for R
where
F: FloatRegister<Element = f32, Lanes = R::Lanes, Bits: CastRegister<R>>,
R: PackedFloatRegister<Fp16, F> + PackedFloatRegister<Fp16Fast, F> + PackedFloatRegister<Bf16, F>,
{
}
pub trait PackedF16Vector<F>:
PackedFloatVector<Fp16, F> + PackedFloatVector<Fp16Fast, F> + PackedFloatVector<Bf16, F>
{
}
impl<V, F> PackedF16Vector<F> for V where
V: PackedFloatVector<Fp16, F> + PackedFloatVector<Fp16Fast, F> + PackedFloatVector<Bf16, F>
{
}
pub trait PackedF8Register<F>: PackedFloatRegister<Fp8E4M3, F> + PackedFloatRegister<Fp8E5M2, F>
where
F: FloatRegister<Element = f32, Lanes = Self::Lanes, Bits: CastRegister<Self>>,
{
}
impl<R, F> PackedF8Register<F> for R
where
F: FloatRegister<Element = f32, Lanes = R::Lanes, Bits: CastRegister<R>>,
R: PackedFloatRegister<Fp8E4M3, F> + PackedFloatRegister<Fp8E5M2, F>,
{
}
pub trait PackedF8Vector<F>: PackedFloatVector<Fp8E4M3, F> + PackedFloatVector<Fp8E5M2, F> {}
impl<V, F> PackedF8Vector<F> for V where V: PackedFloatVector<Fp8E4M3, F> + PackedFloatVector<Fp8E5M2, F> {}
pub trait VectorIndexedBy<
USIZE: UnsignedIntegerVector<Lanes = Self::Lanes>,
U32: UnsignedIntegerVector<Lanes = Self::Lanes>,
U64: UnsignedIntegerVector<Lanes = Self::Lanes>,
>: GenericVector + IndexableVector<USIZE> + IndexableVector<U32> + IndexableVector<U64>
{
}
impl<
USIZE: UnsignedIntegerVector<Lanes = Self::Lanes>,
U32: UnsignedIntegerVector<Lanes = Self::Lanes>,
U64: UnsignedIntegerVector<Lanes = Self::Lanes>,
R,
> VectorIndexedBy<USIZE, U32, U64> for R
where
R: GenericVector + IndexableVector<USIZE> + IndexableVector<U32> + IndexableVector<U64>,
{
}
}
use self::helpers::*;
#[rustfmt::skip]
pub trait Simd: NativeSimd {type usizex2: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = U2>
+ IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2> + FullConcatRegister<USize>;
type usizex4: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = U4>
+ IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4> + FullConcatRegister<Self::usizex2>;
type usizex8: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = U8>
+ IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8> + FullConcatRegister<Self::usizex4>;
type usizex16: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = U16>
+ IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16> + FullConcatRegister<Self::usizex8>;
type f32x2: WellFormedFloatRegister<Bits = Self::u32x2, SignedBits = Self::i32x2>
+ FullyInteroperable<Self::i32x2, Self::u32x2, Lanes = U2, Element = f32, Unsigned = Self::u32x2, Signed = Self::i32x2>
+ CastRegister<Self::f64x2> + CastRegister<Self::i16x2> + CastRegister<Self::u16x2> + CastRegister<Self::i8x2> + CastRegister<Self::u8x2>
+ FullConcatRegister<f32> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::i64x2> + CastRegister<Self::u64x2>;
type i32x2: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f32x2, Self::u32x2, Lanes = U2, Element = i32, Unsigned = Self::u32x2, Signed = Self::i32x2>
+ CastRegister<Self::i64x2> + CastRegister<Self::i16x2> + CastRegister<Self::i8x2> + CastRegister<Self::f32x2> + CastRegister<Self::f64x2> + FullConcatRegister<i32> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::u8x2> + CastRegister<Self::u16x2> + CastRegister<Self::u64x2>;
type u32x2: WellFormedUnsignedIntegerRegister + Sad64Register<u64>
+ FullyInteroperable<Self::f32x2, Self::i32x2, Lanes = U2, Element = u32, Unsigned = Self::u32x2, Signed = Self::i32x2>
+ CastRegister<Self::u64x2> + CastRegister<Self::u16x2> + CastRegister<Self::u8x2> + CastRegister<Self::f32x2> + CastRegister<Self::f64x2> + FullConcatRegister<u32> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::i8x2> + CastRegister<Self::i16x2> + CastRegister<Self::i64x2>;
type f32x4: WellFormedFloatRegister<Bits = Self::u32x4, SignedBits = Self::i32x4> + LinAlg4Register
+ FullyInteroperable<Self::i32x4, Self::u32x4, Lanes = U4, Element = f32, Unsigned = Self::u32x4, Signed = Self::i32x4>
+ CastRegister<Self::f64x4> + CastRegister<Self::i16x4> + CastRegister<Self::u16x4> + CastRegister<Self::i8x4> + CastRegister<Self::u8x4>
+ FullConcatRegister<Self::f32x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4> + CastRegister<Self::u64x4>
+ CastRegister<Self::i64x4>;
type i32x4: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f32x4, Self::u32x4, Lanes = U4, Element = i32, Unsigned = Self::u32x4, Signed = Self::i32x4>
+ CastRegister<Self::i64x4> + CastRegister<Self::i16x4> + CastRegister<Self::i8x4> + CastRegister<Self::f32x4> + CastRegister<Self::f64x4> + FullConcatRegister<Self::i32x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ CastRegister<Self::u8x4> + CastRegister<Self::u16x4> + CastRegister<Self::u64x4>;
type u32x4: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f32x4, Self::i32x4, Lanes = U4, Element = u32, Unsigned = Self::u32x4, Signed = Self::i32x4>
+ CastRegister<Self::u64x4> + CastRegister<Self::u16x4> + CastRegister<Self::u8x4> + CastRegister<Self::f32x4> + CastRegister<Self::f64x4> + FullConcatRegister<Self::u32x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ BitCastRegister<Self::u8x16> + BitCastRegister<Self::u16x8>
+ Sad64Register<Self::u64x2>
+ CastRegister<Self::i8x4> + CastRegister<Self::i16x4> + CastRegister<Self::i64x4>;
type f32x8: WellFormedFloatRegister<Bits = Self::u32x8, SignedBits = Self::i32x8>
+ FullyInteroperable<Self::i32x8, Self::u32x8, Lanes = U8, Element = f32, Unsigned = Self::u32x8, Signed = Self::i32x8>
+ CastRegister<Self::f64x8> + CastRegister<Self::i16x8> + CastRegister<Self::u16x8> + CastRegister<Self::i8x8> + CastRegister<Self::u8x8>
+ FullConcatRegister<Self::f32x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::i64x8> + CastRegister<Self::u64x8>;
type i32x8: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f32x8, Self::u32x8, Lanes = U8, Element = i32, Unsigned = Self::u32x8, Signed = Self::i32x8>
+ CastRegister<Self::i64x8> + CastRegister<Self::i16x8> + CastRegister<Self::i8x8> + CastRegister<Self::f32x8> + CastRegister<Self::f64x8> + FullConcatRegister<Self::i32x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::u8x8> + CastRegister<Self::u16x8> + CastRegister<Self::u64x8>;
type u32x8: WellFormedUnsignedIntegerRegister + Sad64Register<Self::u64x4>
+ FullyInteroperable<Self::f32x8, Self::i32x8, Lanes = U8, Element = u32, Unsigned = Self::u32x8, Signed = Self::i32x8>
+ CastRegister<Self::u64x8> + CastRegister<Self::u16x8> + CastRegister<Self::u8x8> + CastRegister<Self::f32x8> + CastRegister<Self::f64x8> + FullConcatRegister<Self::u32x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::i8x8> + CastRegister<Self::i16x8> + CastRegister<Self::i64x8>;
type f64x2: WellFormedFloatRegister<Bits = Self::u64x2, SignedBits = Self::i64x2>
+ FullyInteroperable<Self::i64x2, Self::u64x2, Lanes = U2, Element = f64, Unsigned = Self::u64x2, Signed = Self::i64x2>
+ CastRegister<Self::f32x2> + CastRegister<Self::i16x2> + CastRegister<Self::u16x2> + CastRegister<Self::i8x2> + CastRegister<Self::u8x2>
+ FullConcatRegister<f64> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::i32x2> + CastRegister<Self::u32x2>;
type i64x2: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f64x2, Self::u64x2, Lanes = U2, Element = i64, Unsigned = Self::u64x2, Signed = Self::i64x2>
+ CastRegister<Self::i32x2> + CastRegister<Self::i16x2> + CastRegister<Self::i8x2> + CastRegister<Self::f64x2> + CastRegister<Self::f32x2> + FullConcatRegister<i64> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::u8x2> + CastRegister<Self::u16x2> + CastRegister<Self::u32x2>;
type u64x2: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f64x2, Self::i64x2, Lanes = U2, Element = u64, Unsigned = Self::u64x2, Signed = Self::i64x2>
+ CastRegister<Self::u32x2> + CastRegister<Self::u16x2> + CastRegister<Self::u8x2> + CastRegister<Self::f64x2> + CastRegister<Self::f32x2> + FullConcatRegister<u64> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ BitCastRegister<Self::u8x16> + BitCastRegister<Self::u16x8> + BitCastRegister<Self::u32x4>
+ CastRegister<Self::i8x2> + CastRegister<Self::i16x2> + CastRegister<Self::i32x2>;
type f64x4: WellFormedFloatRegister<Bits = Self::u64x4, SignedBits = Self::i64x4> + LinAlg4Register
+ FullyInteroperable<Self::i64x4, Self::u64x4, Lanes = U4, Element = f64, Unsigned = Self::u64x4, Signed = Self::i64x4>
+ CastRegister<Self::f32x4> + CastRegister<Self::i16x4> + CastRegister<Self::u16x4> + CastRegister<Self::i8x4> + CastRegister<Self::u8x4>
+ FullConcatRegister<Self::f64x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ CastRegister<Self::i32x4> + CastRegister<Self::u32x4>;
type i64x4: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f64x4, Self::u64x4, Lanes = U4, Element = i64, Unsigned = Self::u64x4, Signed = Self::i64x4>
+ CastRegister<Self::i32x4> + CastRegister<Self::i16x4> + CastRegister<Self::i8x4> + CastRegister<Self::f64x4> + CastRegister<Self::f32x4> + FullConcatRegister<Self::i64x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ CastRegister<Self::u8x4> + CastRegister<Self::u16x4> + CastRegister<Self::u32x4>;
type u64x4: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f64x4, Self::i64x4, Lanes = U4, Element = u64, Unsigned = Self::u64x4, Signed = Self::i64x4>
+ CastRegister<Self::u32x4> + CastRegister<Self::u16x4> + CastRegister<Self::u8x4> + CastRegister<Self::f64x4> + CastRegister<Self::f32x4> + FullConcatRegister<Self::u64x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ CastRegister<Self::i8x4> + CastRegister<Self::i16x4> + CastRegister<Self::i32x4>;
type f64x8: WellFormedFloatRegister<Bits = Self::u64x8, SignedBits = Self::i64x8>
+ FullyInteroperable<Self::i64x8, Self::u64x8, Lanes = U8, Element = f64, Unsigned = Self::u64x8, Signed = Self::i64x8>
+ CastRegister<Self::f32x8> + CastRegister<Self::i16x8> + CastRegister<Self::u16x8> + CastRegister<Self::i8x8> + CastRegister<Self::u8x8>
+ FullConcatRegister<Self::f64x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::i32x8> + CastRegister<Self::u32x8>;
type i64x8: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f64x8, Self::u64x8, Lanes = U8, Element = i64, Unsigned = Self::u64x8, Signed = Self::i64x8>
+ CastRegister<Self::i32x8> + CastRegister<Self::i16x8> + CastRegister<Self::i8x8> + CastRegister<Self::f64x8> + CastRegister<Self::f32x8> + FullConcatRegister<Self::i64x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::u8x8> + CastRegister<Self::u16x8> + CastRegister<Self::u32x8>;
type u64x8: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f64x8, Self::i64x8, Lanes = U8, Element = u64, Unsigned = Self::u64x8, Signed = Self::i64x8>
+ CastRegister<Self::u32x8> + CastRegister<Self::u16x8> + CastRegister<Self::u8x8> + CastRegister<Self::f64x8> + CastRegister<Self::f32x8> + FullConcatRegister<Self::u64x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::i8x8> + CastRegister<Self::i16x8> + CastRegister<Self::i32x8>;
type f32x16: WellFormedFloatRegister<Bits = Self::u32x16, SignedBits = Self::i32x16>
+ FullyInteroperable<Self::i32x16, Self::u32x16, Lanes = U16, Element = f32, Unsigned = Self::u32x16, Signed = Self::i32x16>
+ CastRegister<Self::f64x16> + CastRegister<Self::i16x16> + CastRegister<Self::u16x16> + CastRegister<Self::i8x16> + CastRegister<Self::u8x16>
+ FullConcatRegister<Self::f32x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::i64x16> + CastRegister<Self::u64x16>;
type i32x16: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f32x16, Self::u32x16, Lanes = U16, Element = i32, Unsigned = Self::u32x16, Signed = Self::i32x16>
+ CastRegister<Self::i64x16> + CastRegister<Self::i16x16> + CastRegister<Self::i8x16> + CastRegister<Self::f32x16> + CastRegister<Self::f64x16> + FullConcatRegister<Self::i32x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::u8x16> + CastRegister<Self::u16x16> + CastRegister<Self::u64x16>;
type u32x16: WellFormedUnsignedIntegerRegister + Sad64Register<Self::u64x8>
+ FullyInteroperable<Self::f32x16, Self::i32x16, Lanes = U16, Element = u32, Unsigned = Self::u32x16, Signed = Self::i32x16>
+ CastRegister<Self::u64x16> + CastRegister<Self::u16x16> + CastRegister<Self::u8x16> + CastRegister<Self::f32x16> + CastRegister<Self::f64x16> + FullConcatRegister<Self::u32x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::i8x16> + CastRegister<Self::i16x16> + CastRegister<Self::i64x16>;
type f64x16: WellFormedFloatRegister<Bits = Self::u64x16, SignedBits = Self::i64x16>
+ FullyInteroperable<Self::i64x16, Self::u64x16, Lanes = U16, Element = f64, Unsigned = Self::u64x16, Signed = Self::i64x16>
+ CastRegister<Self::f32x16> + CastRegister<Self::i16x16> + CastRegister<Self::u16x16> + CastRegister<Self::i8x16> + CastRegister<Self::u8x16>
+ FullConcatRegister<Self::f64x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::i32x16> + CastRegister<Self::u32x16>;
type i64x16: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f64x16, Self::u64x16, Lanes = U16, Element = i64, Unsigned = Self::u64x16, Signed = Self::i64x16>
+ CastRegister<Self::i32x16> + CastRegister<Self::i16x16> + CastRegister<Self::i8x16> + CastRegister<Self::f64x16> + CastRegister<Self::f32x16> + FullConcatRegister<Self::i64x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::u8x16> + CastRegister<Self::u16x16> + CastRegister<Self::u32x16>;
type u64x16: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f64x16, Self::i64x16, Lanes = U16, Element = u64, Unsigned = Self::u64x16, Signed = Self::i64x16>
+ CastRegister<Self::u32x16> + CastRegister<Self::u16x16> + CastRegister<Self::u8x16> + CastRegister<Self::f64x16> + CastRegister<Self::f32x16> + FullConcatRegister<Self::u64x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::i8x16> + CastRegister<Self::i16x16> + CastRegister<Self::i32x16>;
type i8x16: WellFormedSignedIntegerRegister<Element = i8, Lanes = U16, Unsigned = Self::u8x16, Signed = Self::i8x16>
+ IndexableRegister<Self::u8x16> + CastRegister<Self::i32x16> + CastRegister<Self::i16x16> + CastRegister<Self::i64x16>
+ CastRegister<Self::f32x16> + CastRegister<Self::f64x16>
+ BitCastRegister<Self::u8x16>
+ FullConcatRegister<Self::i8x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::u16x16> + CastRegister<Self::u32x16> + CastRegister<Self::u64x16>;
type u8x16: WellFormedUnsignedIntegerRegister<Element = u8, Lanes = U16, Unsigned = Self::u8x16, Signed = Self::i8x16>
+ IndexableRegister<Self::u8x16> + CastRegister<Self::u32x16> + CastRegister<Self::u16x16> + CastRegister<Self::u64x16>
+ CastRegister<Self::f32x16> + CastRegister<Self::f64x16>
+ BitCastRegister<Self::i8x16>
+ FullConcatRegister<Self::u8x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16> + PackedF8Register<Self::f32x16>
+ Sad16Register<Self::u16x8> + Sad32Register<Self::u32x4> + Sad64Register<Self::u64x2>
+ CastRegister<Self::i16x16> + CastRegister<Self::i32x16> + CastRegister<Self::i64x16>;
type i8x2: WellFormedSignedIntegerRegister<Element = i8, Lanes = U2, Unsigned = Self::u8x2, Signed = Self::i8x2>
+ CastRegister<Self::i32x2> + CastRegister<Self::i16x2> + CastRegister<Self::i64x2>
+ CastRegister<Self::f32x2> + CastRegister<Self::f64x2>
+ BitCastRegister<Self::u8x2> + FullConcatRegister<i8> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::u16x2> + CastRegister<Self::u32x2> + CastRegister<Self::u64x2>;
type u8x2: WellFormedUnsignedIntegerRegister<Element = u8, Lanes = U2, Unsigned = Self::u8x2, Signed = Self::i8x2>
+ CastRegister<Self::u32x2> + CastRegister<Self::u16x2> + CastRegister<Self::u64x2>
+ CastRegister<Self::f32x2> + CastRegister<Self::f64x2>
+ BitCastRegister<Self::i8x2> + FullConcatRegister<u8> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ PackedF8Register<Self::f32x2>
+ Sad16Register<u16> + Sad32Register<u32> + Sad64Register<u64>
+ CastRegister<Self::i16x2> + CastRegister<Self::i32x2> + CastRegister<Self::i64x2>;
type i8x4: WellFormedSignedIntegerRegister<Element = i8, Lanes = U4, Unsigned = Self::u8x4, Signed = Self::i8x4>
+ CastRegister<Self::i32x4> + CastRegister<Self::i16x4> + CastRegister<Self::i64x4>
+ CastRegister<Self::f32x4> + CastRegister<Self::f64x4>
+ BitCastRegister<Self::u8x4> + FullConcatRegister<Self::i8x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ CastRegister<Self::u16x4> + CastRegister<Self::u32x4> + CastRegister<Self::u64x4>;
type u8x4: WellFormedUnsignedIntegerRegister<Element = u8, Lanes = U4, Unsigned = Self::u8x4, Signed = Self::i8x4>
+ CastRegister<Self::u32x4> + CastRegister<Self::u16x4> + CastRegister<Self::u64x4>
+ CastRegister<Self::f32x4> + CastRegister<Self::f64x4>
+ BitCastRegister<Self::i8x4> + FullConcatRegister<Self::u8x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ PackedF8Register<Self::f32x4>
+ Sad16Register<Self::u16x2> + Sad32Register<u32> + Sad64Register<u64>
+ CastRegister<Self::i16x4> + CastRegister<Self::i32x4> + CastRegister<Self::i64x4>;
type i8x8: WellFormedSignedIntegerRegister<Element = i8, Lanes = U8, Unsigned = Self::u8x8, Signed = Self::i8x8>
+ CastRegister<Self::i32x8> + CastRegister<Self::i16x8> + CastRegister<Self::i64x8>
+ CastRegister<Self::f32x8> + CastRegister<Self::f64x8>
+ BitCastRegister<Self::u8x8> + FullConcatRegister<Self::i8x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::u16x8> + CastRegister<Self::u32x8> + CastRegister<Self::u64x8>;
type u8x8: WellFormedUnsignedIntegerRegister<Element = u8, Lanes = U8, Unsigned = Self::u8x8, Signed = Self::i8x8>
+ CastRegister<Self::u32x8> + CastRegister<Self::u16x8> + CastRegister<Self::u64x8>
+ CastRegister<Self::f32x8> + CastRegister<Self::f64x8>
+ BitCastRegister<Self::i8x8> + FullConcatRegister<Self::u8x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ PackedF8Register<Self::f32x8>
+ Sad16Register<Self::u16x4> + Sad32Register<Self::u32x2> + Sad64Register<u64>
+ CastRegister<Self::i16x8> + CastRegister<Self::i32x8> + CastRegister<Self::i64x8>;
type i16x2: WellFormedSignedIntegerRegister<Element = i16, Lanes = U2, Unsigned = Self::u16x2, Signed = Self::i16x2>
+ CastRegister<Self::i32x2> + CastRegister<Self::i8x2> + CastRegister<Self::i64x2>
+ CastRegister<Self::f32x2> + CastRegister<Self::f64x2>
+ BitCastRegister<Self::u16x2> + FullConcatRegister<i16> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::u8x2> + CastRegister<Self::u32x2> + CastRegister<Self::u64x2>;
type u16x2: WellFormedUnsignedIntegerRegister<Element = u16, Lanes = U2, Unsigned = Self::u16x2, Signed = Self::i16x2>
+ Sad32Register<u32> + Sad64Register<u64>
+ CastRegister<Self::u32x2> + CastRegister<Self::u8x2> + CastRegister<Self::u64x2>
+ CastRegister<Self::f32x2> + CastRegister<Self::f64x2>
+ BitCastRegister<Self::i16x2> + FullConcatRegister<u16> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>
+ CastRegister<Self::i8x2> + CastRegister<Self::i32x2> + CastRegister<Self::i64x2>;
type i16x4: WellFormedSignedIntegerRegister<Element = i16, Lanes = U4, Unsigned = Self::u16x4, Signed = Self::i16x4>
+ CastRegister<Self::i32x4> + CastRegister<Self::i8x4> + CastRegister<Self::i64x4>
+ CastRegister<Self::f32x4> + CastRegister<Self::f64x4>
+ BitCastRegister<Self::u16x4> + FullConcatRegister<Self::i16x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ CastRegister<Self::u8x4> + CastRegister<Self::u32x4> + CastRegister<Self::u64x4>;
type u16x4: WellFormedUnsignedIntegerRegister<Element = u16, Lanes = U4, Unsigned = Self::u16x4, Signed = Self::i16x4>
+ Sad32Register<Self::u32x2> + Sad64Register<u64>
+ CastRegister<Self::u32x4> + CastRegister<Self::u8x4> + CastRegister<Self::u64x4>
+ CastRegister<Self::f32x4> + CastRegister<Self::f64x4>
+ BitCastRegister<Self::i16x4> + FullConcatRegister<Self::u16x2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>
+ PackedF16Register<Self::f32x4>
+ CastRegister<Self::i8x4> + CastRegister<Self::i32x4> + CastRegister<Self::i64x4>;
type i16x8: WellFormedSignedIntegerRegister<Element = i16, Lanes = U8, Unsigned = Self::u16x8, Signed = Self::i16x8>
+ CastRegister<Self::i32x8> + CastRegister<Self::i8x8> + CastRegister<Self::i64x8>
+ CastRegister<Self::f32x8> + CastRegister<Self::f64x8>
+ BitCastRegister<Self::u16x8> + FullConcatRegister<Self::i16x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ CastRegister<Self::u8x8> + CastRegister<Self::u32x8> + CastRegister<Self::u64x8>;
type u16x8: WellFormedUnsignedIntegerRegister<Element = u16, Lanes = U8, Unsigned = Self::u16x8, Signed = Self::i16x8>
+ CastRegister<Self::u32x8> + CastRegister<Self::u8x8> + CastRegister<Self::u64x8>
+ CastRegister<Self::f32x8> + CastRegister<Self::f64x8>
+ BitCastRegister<Self::i16x8> + FullConcatRegister<Self::u16x4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>
+ PackedF16Register<Self::f32x8>
+ BitCastRegister<Self::u8x16>
+ Sad32Register<Self::u32x4> + Sad64Register<Self::u64x2>
+ CastRegister<Self::i8x8> + CastRegister<Self::i32x8> + CastRegister<Self::i64x8>;
type i16x16: WellFormedSignedIntegerRegister<Element = i16, Lanes = U16, Unsigned = Self::u16x16, Signed = Self::i16x16>
+ CastRegister<Self::i32x16> + CastRegister<Self::i8x16> + CastRegister<Self::i64x16>
+ CastRegister<Self::f32x16> + CastRegister<Self::f64x16>
+ BitCastRegister<Self::u16x16> + FullConcatRegister<Self::i16x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ CastRegister<Self::u8x16> + CastRegister<Self::u32x16> + CastRegister<Self::u64x16>;
type u16x16: WellFormedUnsignedIntegerRegister<Element = u16, Lanes = U16, Unsigned = Self::u16x16, Signed = Self::i16x16>
+ Sad32Register<Self::u32x8> + Sad64Register<Self::u64x4>
+ CastRegister<Self::u32x16> + CastRegister<Self::u8x16> + CastRegister<Self::u64x16>
+ CastRegister<Self::f32x16> + CastRegister<Self::f64x16>
+ BitCastRegister<Self::i16x16> + FullConcatRegister<Self::u16x8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>
+ PackedF16Register<Self::f32x16>
+ CastRegister<Self::i8x16> + CastRegister<Self::i32x16> + CastRegister<Self::i64x16>;}
#[rustfmt::skip]
pub trait Simd3A: Simd<
usizex4: FullExtendRegister<Self::usizex3A>,
f32x4: FullExtendRegister<Self::f32x3A>,
i32x4: FullExtendRegister<Self::i32x3A>,
u32x4: FullExtendRegister<Self::u32x3A>,
f64x4: FullExtendRegister<Self::f64x3A>,
i64x4: FullExtendRegister<Self::i64x3A>,
u64x4: FullExtendRegister<Self::u64x3A>,
> {type usizex3A: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = U3>
+ IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>;
type f32x3A: WellFormedFloatRegister<Bits = Self::u32x3A, SignedBits = Self::i32x3A> + LinAlg3Register
+ FullyInteroperable<Self::i32x3A, Self::u32x3A, Lanes = U3, Element = f32, Unsigned = Self::u32x3A, Signed = Self::i32x3A>
+ CastRegister<Self::f64x3A> + IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>
+ CastRegister<Self::i64x3A> + CastRegister<Self::u64x3A>;
type i32x3A: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f32x3A, Self::u32x3A, Lanes = U3, Element = i32, Unsigned = Self::u32x3A, Signed = Self::i32x3A>
+ CastRegister<Self::i64x3A> + CastRegister<Self::f32x3A> + CastRegister<Self::f64x3A> + IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>
+ CastRegister<Self::u64x3A>;
type u32x3A: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f32x3A, Self::i32x3A, Lanes = U3, Element = u32, Unsigned = Self::u32x3A, Signed = Self::i32x3A>
+ CastRegister<Self::u64x3A> + CastRegister<Self::f32x3A> + CastRegister<Self::f64x3A> + IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>
+ CastRegister<Self::i64x3A>;
type f64x3A: WellFormedFloatRegister<Bits = Self::u64x3A, SignedBits = Self::i64x3A> + LinAlg3Register
+ FullyInteroperable<Self::i64x3A, Self::u64x3A, Lanes = U3, Element = f64, Unsigned = Self::u64x3A, Signed = Self::i64x3A>
+ CastRegister<Self::f32x3A> + IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>
+ CastRegister<Self::i32x3A> + CastRegister<Self::u32x3A>;
type i64x3A: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f64x3A, Self::u64x3A, Lanes = U3, Element = i64, Unsigned = Self::u64x3A, Signed = Self::i64x3A>
+ CastRegister<Self::i32x3A> + CastRegister<Self::f64x3A> + CastRegister<Self::f32x3A> + IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>
+ CastRegister<Self::u32x3A>;
type u64x3A: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f64x3A, Self::i64x3A, Lanes = U3, Element = u64, Unsigned = Self::u64x3A, Signed = Self::i64x3A>
+ CastRegister<Self::u32x3A> + CastRegister<Self::f64x3A> + CastRegister<Self::f32x3A> + IndexedBy<Self::usizex3A, Self::u32x3A, Self::u64x3A>
+ CastRegister<Self::i32x3A>;}
impl<S: Simd> Simd3A for S {
type usizex3A = ReducedRegister<S::usizex4, U1>;
type f32x3A = ReducedRegister<S::f32x4, U1>;
type i32x3A = ReducedRegister<S::i32x4, U1>;
type u32x3A = ReducedRegister<S::u32x4, U1>;
type f64x3A = ReducedRegister<S::f64x4, U1>;
type i64x3A = ReducedRegister<S::i64x4, U1>;
type u64x3A = ReducedRegister<S::u64x4, U1>;
}
#[rustfmt::skip]
pub trait Simd3: Simd3A<
usizex4: FullExtendRegister<Self::usizex3>,
f32x4: FullExtendRegister<Self::f32x3>,
i32x4: FullExtendRegister<Self::i32x3>,
u32x4: FullExtendRegister<Self::u32x3>,
f64x4: FullExtendRegister<Self::f64x3>,
i64x4: FullExtendRegister<Self::i64x3>,
u64x4: FullExtendRegister<Self::u64x3>,
> {type usizex3: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = U3>
+ IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>;
type f32x3: WellFormedFloatRegister<Bits = Self::u32x3, SignedBits = Self::i32x3> + LinAlg3Register
+ FullyInteroperable<Self::i32x3, Self::u32x3, Lanes = U3, Element = f32, Unsigned = Self::u32x3, Signed = Self::i32x3>
+ CastRegister<Self::f64x3> + IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>
+ CastRegister<Self::i64x3> + CastRegister<Self::u64x3>;
type i32x3: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f32x3, Self::u32x3, Lanes = U3, Element = i32, Unsigned = Self::u32x3, Signed = Self::i32x3>
+ CastRegister<Self::i64x3> + CastRegister<Self::f32x3> + CastRegister<Self::f64x3> + IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>
+ CastRegister<Self::u64x3>;
type u32x3: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f32x3, Self::i32x3, Lanes = U3, Element = u32, Unsigned = Self::u32x3, Signed = Self::i32x3>
+ CastRegister<Self::u64x3> + CastRegister<Self::f32x3> + CastRegister<Self::f64x3> + IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>
+ CastRegister<Self::i64x3>;
type f64x3: WellFormedFloatRegister<Bits = Self::u64x3, SignedBits = Self::i64x3> + LinAlg3Register
+ FullyInteroperable<Self::i64x3, Self::u64x3, Lanes = U3, Element = f64, Unsigned = Self::u64x3, Signed = Self::i64x3>
+ CastRegister<Self::f32x3> + IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>
+ CastRegister<Self::i32x3> + CastRegister<Self::u32x3>;
type i64x3: WellFormedSignedIntegerRegister
+ FullyInteroperable<Self::f64x3, Self::u64x3, Lanes = U3, Element = i64, Unsigned = Self::u64x3, Signed = Self::i64x3>
+ CastRegister<Self::i32x3> + CastRegister<Self::f64x3> + CastRegister<Self::f32x3> + IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>
+ CastRegister<Self::u32x3>;
type u64x3: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<Self::f64x3, Self::i64x3, Lanes = U3, Element = u64, Unsigned = Self::u64x3, Signed = Self::i64x3>
+ CastRegister<Self::u32x3> + CastRegister<Self::f64x3> + CastRegister<Self::f32x3> + IndexedBy<Self::usizex3, Self::u32x3, Self::u64x3>
+ CastRegister<Self::i32x3>;}
pub trait FixedWidthSimd<Width: Lanes>: Simd {
type usizexN: WellFormedUnsignedIntegerRegister<Element = crate::element::USize, Lanes = Width>;
type f32xN: WellFormedFloatRegister<
Bits = <Self as FixedWidthSimd<Width>>::u32xN,
SignedBits = <Self as FixedWidthSimd<Width>>::i32xN,
> + FullyInteroperable<
<Self as FixedWidthSimd<Width>>::i32xN,
<Self as FixedWidthSimd<Width>>::u32xN,
Lanes = Width,
Element = f32,
Unsigned = <Self as FixedWidthSimd<Width>>::u32xN,
Signed = <Self as FixedWidthSimd<Width>>::i32xN,
> + IndexedBy<
<Self as FixedWidthSimd<Width>>::usizexN,
<Self as FixedWidthSimd<Width>>::u32xN,
<Self as FixedWidthSimd<Width>>::u64xN,
> + CastRegister<<Self as FixedWidthSimd<Width>>::f64xN>;
type i32xN: WellFormedSignedIntegerRegister
+ FullyInteroperable<
<Self as FixedWidthSimd<Width>>::f32xN,
<Self as FixedWidthSimd<Width>>::u32xN,
Lanes = Width,
Element = i32,
Unsigned = <Self as FixedWidthSimd<Width>>::u32xN,
Signed = <Self as FixedWidthSimd<Width>>::i32xN,
> + IndexedBy<
<Self as FixedWidthSimd<Width>>::usizexN,
<Self as FixedWidthSimd<Width>>::u32xN,
<Self as FixedWidthSimd<Width>>::u64xN,
> + CastRegister<<Self as FixedWidthSimd<Width>>::i64xN>;
type u32xN: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<
<Self as FixedWidthSimd<Width>>::f32xN,
<Self as FixedWidthSimd<Width>>::i32xN,
Lanes = Width,
Element = u32,
Unsigned = <Self as FixedWidthSimd<Width>>::u32xN,
Signed = <Self as FixedWidthSimd<Width>>::i32xN,
> + IndexedBy<
<Self as FixedWidthSimd<Width>>::usizexN,
<Self as FixedWidthSimd<Width>>::u32xN,
<Self as FixedWidthSimd<Width>>::u64xN,
> + CastRegister<<Self as FixedWidthSimd<Width>>::u64xN>;
type f64xN: WellFormedFloatRegister<
Bits = <Self as FixedWidthSimd<Width>>::u64xN,
SignedBits = <Self as FixedWidthSimd<Width>>::i64xN,
> + FullyInteroperable<
<Self as FixedWidthSimd<Width>>::i64xN,
<Self as FixedWidthSimd<Width>>::u64xN,
Lanes = Width,
Element = f64,
Unsigned = <Self as FixedWidthSimd<Width>>::u64xN,
Signed = <Self as FixedWidthSimd<Width>>::i64xN,
> + IndexedBy<
<Self as FixedWidthSimd<Width>>::usizexN,
<Self as FixedWidthSimd<Width>>::u32xN,
<Self as FixedWidthSimd<Width>>::u64xN,
> + CastRegister<<Self as FixedWidthSimd<Width>>::f32xN>;
type i64xN: WellFormedSignedIntegerRegister
+ FullyInteroperable<
<Self as FixedWidthSimd<Width>>::f64xN,
<Self as FixedWidthSimd<Width>>::u64xN,
Lanes = Width,
Element = i64,
Unsigned = <Self as FixedWidthSimd<Width>>::u64xN,
Signed = <Self as FixedWidthSimd<Width>>::i64xN,
> + IndexedBy<
<Self as FixedWidthSimd<Width>>::usizexN,
<Self as FixedWidthSimd<Width>>::u32xN,
<Self as FixedWidthSimd<Width>>::u64xN,
> + CastRegister<<Self as FixedWidthSimd<Width>>::i32xN>;
type u64xN: WellFormedUnsignedIntegerRegister
+ FullyInteroperable<
<Self as FixedWidthSimd<Width>>::f64xN,
<Self as FixedWidthSimd<Width>>::i64xN,
Lanes = Width,
Element = u64,
Unsigned = <Self as FixedWidthSimd<Width>>::u64xN,
Signed = <Self as FixedWidthSimd<Width>>::i64xN,
> + IndexedBy<
<Self as FixedWidthSimd<Width>>::usizexN,
<Self as FixedWidthSimd<Width>>::u32xN,
<Self as FixedWidthSimd<Width>>::u64xN,
> + CastRegister<<Self as FixedWidthSimd<Width>>::u32xN>;
}
macro_rules! impl_wide_simd {
($($width:literal),*) => {paste::paste! { $(
impl<S: Simd> FixedWidthSimd<[<U $width>]> for S {
type usizexN = S::[<usizex $width>];
type f32xN = S::[<f32x $width>];
type i32xN = S::[<i32x $width>];
type u32xN = S::[<u32x $width>];
type f64xN = S::[<f64x $width>];
type i64xN = S::[<i64x $width>];
type u64xN = S::[<u64x $width>];
}
)* }}
}
impl<S: Simd> FixedWidthSimd<U1> for S {
type usizexN = crate::element::USize;
type f32xN = f32;
type i32xN = i32;
type u32xN = u32;
type f64xN = f64;
type i64xN = i64;
type u64xN = u64;
}
impl_wide_simd!(2, 4, 8, 16);
impl<S: Simd3> FixedWidthSimd<U3> for S {
type usizexN = S::usizex3;
type f32xN = S::f32x3;
type i32xN = S::i32x3;
type u32xN = S::u32x3;
type f64xN = S::f64x3;
type i64xN = S::i64x3;
type u64xN = S::u64x3;
}
#[rustfmt::skip]
pub trait SizedSimd<
F: WellFormedFloatElement + FloatElementWithBits<SignedBits = I, Bits = U>,
I: WellFormedSignedIntegerElement,
U: WellFormedUnsignedIntegerElement,
>: Simd {
type NativeWidth: Lanes;
type fxN: FullyInteroperable<Self::ixN, Self::uxN, Lanes = Self::NativeWidth, Element = F, Unsigned = Self::uxN, Signed = Self::ixN>
+ FloatRegister<Bits = Self::uxN, SignedBits = Self::ixN> + IndexableRegister<Self::uxN>;
type ixN: FullyInteroperable<Self::fxN, Self::uxN, Lanes = Self::NativeWidth, Element = I, Unsigned = Self::uxN, Signed = Self::ixN>
+ SignedIntegerRegister<Element = <F as FloatElementWithBits>::SignedBits> + IndexableRegister<Self::uxN>;
type uxN: FullyInteroperable<Self::fxN, Self::ixN, Lanes = Self::NativeWidth, Element = U, Unsigned = Self::uxN, Signed = Self::ixN>
+ UnsignedIntegerRegister<Element = <F as FloatElementWithBits>::Bits> + IndexableRegister<Self::uxN>;
type fx2: FullyInteroperable<Self::ix2, Self::ux2, Lanes = U2, Element = F, Unsigned = Self::ux2, Signed = Self::ix2>
+ FloatRegister<Bits = Self::ux2, SignedBits = Self::ix2> + FullConcatRegister<F> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>;
type ix2: FullyInteroperable<Self::fx2, Self::ux2, Lanes = U2, Element = I, Unsigned = Self::ux2, Signed = Self::ix2>
+ SignedIntegerRegister<Element = <F as FloatElementWithBits>::SignedBits> + FullConcatRegister<I> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>;
type ux2: FullyInteroperable<Self::fx2, Self::ix2, Lanes = U2, Element = U, Unsigned = Self::ux2, Signed = Self::ix2>
+ UnsignedIntegerRegister<Element = <F as FloatElementWithBits>::Bits> + FullConcatRegister<U> + IndexedBy<Self::usizex2, Self::u32x2, Self::u64x2>;
type fx4: FullyInteroperable<Self::ix4, Self::ux4, Lanes = U4, Element = F, Unsigned = Self::ux4, Signed = Self::ix4>
+ FloatRegister<Bits = Self::ux4, SignedBits = Self::ix4> + LinAlg4Register
+ FullConcatRegister<Self::fx2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>;
type ix4: FullyInteroperable<Self::fx4, Self::ux4, Lanes = U4, Element = I, Unsigned = Self::ux4, Signed = Self::ix4>
+ SignedIntegerRegister<Element = <F as FloatElementWithBits>::SignedBits> + FullConcatRegister<Self::ix2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>;
type ux4: FullyInteroperable<Self::fx4, Self::ix4, Lanes = U4, Element = U, Unsigned = Self::ux4, Signed = Self::ix4>
+ UnsignedIntegerRegister<Element = <F as FloatElementWithBits>::Bits> + FullConcatRegister<Self::ux2> + IndexedBy<Self::usizex4, Self::u32x4, Self::u64x4>;
type fx8: FullyInteroperable<Self::ix8, Self::ux8, Lanes = U8, Element = F, Unsigned = Self::ux8, Signed = Self::ix8>
+ FloatRegister<Bits = Self::ux8, SignedBits = Self::ix8> + FullConcatRegister<Self::fx4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>;
type ix8: FullyInteroperable<Self::fx8, Self::ux8, Lanes = U8, Element = I, Unsigned = Self::ux8, Signed = Self::ix8>
+ SignedIntegerRegister<Element = <F as FloatElementWithBits>::SignedBits> + FullConcatRegister<Self::ix4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>;
type ux8: FullyInteroperable<Self::fx8, Self::ix8, Lanes = U8, Element = U, Unsigned = Self::ux8, Signed = Self::ix8>
+ UnsignedIntegerRegister<Element = <F as FloatElementWithBits>::Bits> + FullConcatRegister<Self::ux4> + IndexedBy<Self::usizex8, Self::u32x8, Self::u64x8>;
type fx16: FullyInteroperable<Self::ix16, Self::ux16, Lanes = U16, Element = F, Unsigned = Self::ux16, Signed = Self::ix16>
+ FloatRegister<Bits = Self::ux16, SignedBits = Self::ix16> + FullConcatRegister<Self::fx8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>;
type ix16: FullyInteroperable<Self::fx16, Self::ux16, Lanes = U16, Element = I, Unsigned = Self::ux16, Signed = Self::ix16>
+ SignedIntegerRegister<Element = <F as FloatElementWithBits>::SignedBits> + FullConcatRegister<Self::ix8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>;
type ux16: FullyInteroperable<Self::fx16, Self::ix16, Lanes = U16, Element = U, Unsigned = Self::ux16, Signed = Self::ix16>
+ UnsignedIntegerRegister<Element = <F as FloatElementWithBits>::Bits> + FullConcatRegister<Self::ux8> + IndexedBy<Self::usizex16, Self::u32x16, Self::u64x16>;
}
pub trait FloatSimd<F: WellFormedFloatElement + FloatElementWithBits>:
SizedSimd<F, <F as FloatElementWithBits>::SignedBits, <F as FloatElementWithBits>::Bits>
{
}
impl<S, F> FloatSimd<F> for S
where
F: WellFormedFloatElement + FloatElementWithBits,
S: SizedSimd<F, <F as FloatElementWithBits>::SignedBits, <F as FloatElementWithBits>::Bits>,
{
}
impl<S: Simd> SizedSimd<f32, i32, u32> for S {
type NativeWidth = S::Native32Width;
type fxN = S::f32xN;
type ixN = S::i32xN;
type uxN = S::u32xN;
type fx2 = S::f32x2;
type ix2 = S::i32x2;
type ux2 = S::u32x2;
type fx4 = S::f32x4;
type ix4 = S::i32x4;
type ux4 = S::u32x4;
type fx8 = S::f32x8;
type ix8 = S::i32x8;
type ux8 = S::u32x8;
type fx16 = S::f32x16;
type ix16 = S::i32x16;
type ux16 = S::u32x16;
}
impl<S: Simd> SizedSimd<f64, i64, u64> for S {
type NativeWidth = S::Native64Width;
type fxN = S::f64xN;
type ixN = S::i64xN;
type uxN = S::u64xN;
type fx2 = S::f64x2;
type ix2 = S::i64x2;
type ux2 = S::u64x2;
type fx4 = S::f64x4;
type ix4 = S::i64x4;
type ux4 = S::u64x4;
type fx8 = S::f64x8;
type ix8 = S::i64x8;
type ux8 = S::u64x8;
type fx16 = S::f64x16;
type ix16 = S::i64x16;
type ux16 = S::u64x16;
}
pub type f32xN<S> = Vector<<S as NativeSimd>::f32xN>;
pub type i32xN<S> = Vector<<S as NativeSimd>::i32xN>;
pub type u32xN<S> = Vector<<S as NativeSimd>::u32xN>;
pub type f64xN<S> = Vector<<S as NativeSimd>::f64xN>;
pub type i64xN<S> = Vector<<S as NativeSimd>::i64xN>;
pub type u64xN<S> = Vector<<S as NativeSimd>::u64xN>;
pub type f32x2<S> = Vector<<S as Simd>::f32x2>;
pub type i32x2<S> = Vector<<S as Simd>::i32x2>;
pub type u32x2<S> = Vector<<S as Simd>::u32x2>;
pub type f32x3A<S> = Vector<<S as Simd3A>::f32x3A>;
pub type i32x3A<S> = Vector<<S as Simd3A>::i32x3A>;
pub type u32x3A<S> = Vector<<S as Simd3A>::u32x3A>;
pub type usizex3<S> = Vector<<S as Simd3>::usizex3>;
pub type f32x3<S> = Vector<<S as Simd3>::f32x3>;
pub type i32x3<S> = Vector<<S as Simd3>::i32x3>;
pub type u32x3<S> = Vector<<S as Simd3>::u32x3>;
pub type f32x4<S> = Vector<<S as Simd>::f32x4>;
pub type i32x4<S> = Vector<<S as Simd>::i32x4>;
pub type u32x4<S> = Vector<<S as Simd>::u32x4>;
pub type f32x8<S> = Vector<<S as Simd>::f32x8>;
pub type i32x8<S> = Vector<<S as Simd>::i32x8>;
pub type u32x8<S> = Vector<<S as Simd>::u32x8>;
pub type f64x2<S> = Vector<<S as Simd>::f64x2>;
pub type i64x2<S> = Vector<<S as Simd>::i64x2>;
pub type u64x2<S> = Vector<<S as Simd>::u64x2>;
pub type f64x3A<S> = Vector<<S as Simd3A>::f64x3A>;
pub type i64x3A<S> = Vector<<S as Simd3A>::i64x3A>;
pub type u64x3A<S> = Vector<<S as Simd3A>::u64x3A>;
pub type f64x3<S> = Vector<<S as Simd3>::f64x3>;
pub type i64x3<S> = Vector<<S as Simd3>::i64x3>;
pub type u64x3<S> = Vector<<S as Simd3>::u64x3>;
pub type f64x4<S> = Vector<<S as Simd>::f64x4>;
pub type i64x4<S> = Vector<<S as Simd>::i64x4>;
pub type u64x4<S> = Vector<<S as Simd>::u64x4>;
pub type f64x8<S> = Vector<<S as Simd>::f64x8>;
pub type i64x8<S> = Vector<<S as Simd>::i64x8>;
pub type u64x8<S> = Vector<<S as Simd>::u64x8>;
pub type f32x16<S> = Vector<<S as Simd>::f32x16>;
pub type i32x16<S> = Vector<<S as Simd>::i32x16>;
pub type u32x16<S> = Vector<<S as Simd>::u32x16>;
pub type f64x16<S> = Vector<<S as Simd>::f64x16>;
pub type i64x16<S> = Vector<<S as Simd>::i64x16>;
pub type u64x16<S> = Vector<<S as Simd>::u64x16>;
pub type i16xN<S> = Vector<<S as NativeSimd>::i16xN>;
pub type u16xN<S> = Vector<<S as NativeSimd>::u16xN>;
pub type i16x2<S> = Vector<<S as Simd>::i16x2>;
pub type u16x2<S> = Vector<<S as Simd>::u16x2>;
pub type i16x4<S> = Vector<<S as Simd>::i16x4>;
pub type u16x4<S> = Vector<<S as Simd>::u16x4>;
pub type i16x8<S> = Vector<<S as Simd>::i16x8>;
pub type u16x8<S> = Vector<<S as Simd>::u16x8>;
pub type i16x16<S> = Vector<<S as Simd>::i16x16>;
pub type u16x16<S> = Vector<<S as Simd>::u16x16>;
pub type i8xN<S> = Vector<<S as NativeSimd>::i8xN>;
pub type u8xN<S> = Vector<<S as NativeSimd>::u8xN>;
pub type i8x16<S> = Vector<<S as Simd>::i8x16>;
pub type u8x16<S> = Vector<<S as Simd>::u8x16>;
pub type i8x2<S> = Vector<<S as Simd>::i8x2>;
pub type u8x2<S> = Vector<<S as Simd>::u8x2>;
pub type i8x4<S> = Vector<<S as Simd>::i8x4>;
pub type u8x4<S> = Vector<<S as Simd>::u8x4>;
pub type i8x8<S> = Vector<<S as Simd>::i8x8>;
pub type u8x8<S> = Vector<<S as Simd>::u8x8>;
macro_rules! decl_aliases {
($simd:ty) => {
#[allow(non_camel_case_types)]
pub mod aliases {
use super::*;
pub type f32xN = crate::simd::f32xN<$simd>;
pub type i32xN = crate::simd::i32xN<$simd>;
pub type u32xN = crate::simd::u32xN<$simd>;
pub type f64xN = crate::simd::f64xN<$simd>;
pub type i64xN = crate::simd::i64xN<$simd>;
pub type u64xN = crate::simd::u64xN<$simd>;
pub type f32x2 = crate::simd::f32x2<$simd>;
pub type i32x2 = crate::simd::i32x2<$simd>;
pub type u32x2 = crate::simd::u32x2<$simd>;
pub type f32x3A = crate::simd::f32x3A<$simd>;
pub type i32x3A = crate::simd::i32x3A<$simd>;
pub type u32x3A = crate::simd::u32x3A<$simd>;
pub type usizex3 = crate::simd::usizex3<$simd>;
pub type f32x3 = crate::simd::f32x3<$simd>;
pub type i32x3 = crate::simd::i32x3<$simd>;
pub type u32x3 = crate::simd::u32x3<$simd>;
pub type f32x4 = crate::simd::f32x4<$simd>;
pub type i32x4 = crate::simd::i32x4<$simd>;
pub type u32x4 = crate::simd::u32x4<$simd>;
pub type f32x8 = crate::simd::f32x8<$simd>;
pub type i32x8 = crate::simd::i32x8<$simd>;
pub type u32x8 = crate::simd::u32x8<$simd>;
pub type f64x2 = crate::simd::f64x2<$simd>;
pub type i64x2 = crate::simd::i64x2<$simd>;
pub type u64x2 = crate::simd::u64x2<$simd>;
pub type f64x3A = crate::simd::f64x3A<$simd>;
pub type i64x3A = crate::simd::i64x3A<$simd>;
pub type u64x3A = crate::simd::u64x3A<$simd>;
pub type f64x3 = crate::simd::f64x3<$simd>;
pub type i64x3 = crate::simd::i64x3<$simd>;
pub type u64x3 = crate::simd::u64x3<$simd>;
pub type f64x4 = crate::simd::f64x4<$simd>;
pub type i64x4 = crate::simd::i64x4<$simd>;
pub type u64x4 = crate::simd::u64x4<$simd>;
pub type f64x8 = crate::simd::f64x8<$simd>;
pub type i64x8 = crate::simd::i64x8<$simd>;
pub type u64x8 = crate::simd::u64x8<$simd>;
pub type f32x16 = crate::simd::f32x16<$simd>;
pub type i32x16 = crate::simd::i32x16<$simd>;
pub type u32x16 = crate::simd::u32x16<$simd>;
pub type f64x16 = crate::simd::f64x16<$simd>;
pub type i64x16 = crate::simd::i64x16<$simd>;
pub type u64x16 = crate::simd::u64x16<$simd>;
}
};
}
use crate::vector::{
CastVector, ConcatVector, ExtendVector, FloatVector, FloatVectorWithRegister, FullyInteroperable as FIV,
GenericVector, IndexableVector, LinAlg3Vector, LinAlg4Vector, PackedFloatVector, Sad16Vector, Sad32Vector,
Sad64Vector, SignedIntegerVector, SignedIntegerVectorWithRegister, SwizzleVector, UnsignedIntegerVector,
UnsignedIntegerVectorWithRegister,
};
pub trait NativeSimdVectors: NativeIsa {
type f32xN: FloatVector<Lanes = <Self as NativeIsa>::Native32Width, Element = f32>
+ IndexableVector<<Self as NativeSimdVectors>::u32xN>;
type i32xN: SignedIntegerVector<Lanes = <Self as NativeIsa>::Native32Width, Element = i32>
+ IndexableVector<<Self as NativeSimdVectors>::u32xN>;
type u32xN: UnsignedIntegerVector<Lanes = <Self as NativeIsa>::Native32Width, Element = u32>
+ IndexableVector<<Self as NativeSimdVectors>::u32xN>
+ Sad64Vector<<Self as NativeSimdVectors>::u64xN>;
type f64xN: FloatVector<Lanes = <Self as NativeIsa>::Native64Width, Element = f64>
+ IndexableVector<<Self as NativeSimdVectors>::u64xN>;
type i64xN: SignedIntegerVector<Lanes = <Self as NativeIsa>::Native64Width, Element = i64>
+ IndexableVector<<Self as NativeSimdVectors>::u64xN>;
type u64xN: UnsignedIntegerVector<Lanes = <Self as NativeIsa>::Native64Width, Element = u64>
+ IndexableVector<<Self as NativeSimdVectors>::u64xN>;
type i16xN: SignedIntegerVector<Lanes = <Self as NativeIsa>::Native16Width, Element = i16> + SwizzleVector;
type u16xN: UnsignedIntegerVector<Lanes = <Self as NativeIsa>::Native16Width, Element = u16>
+ SwizzleVector
+ Sad32Vector<Self::u32xN>
+ Sad64Vector<Self::u64xN>;
type i8xN: SignedIntegerVector<Lanes = <Self as NativeIsa>::Native8Width, Element = i8> + SwizzleVector;
type u8xN: UnsignedIntegerVector<Lanes = <Self as NativeIsa>::Native8Width, Element = u8>
+ SwizzleVector
+ Sad16Vector<Self::u16xN>
+ Sad32Vector<Self::u32xN>
+ Sad64Vector<Self::u64xN>;
}
pub trait NativeSimdVectorsWithRegisters: NativeSimd + NativeSimdVectors<
f32xN: FloatVectorWithRegister<
Register = <Self as NativeSimd>::f32xN,
SignedBits = <Self as NativeSimdVectors>::i32xN,
Bits = <Self as NativeSimdVectors>::u32xN,
> + FIV<<Self as NativeSimdVectors>::i32xN, <Self as NativeSimdVectors>::u32xN>,
i32xN: SignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::i32xN>
+ FIV<<Self as NativeSimdVectors>::f32xN, <Self as NativeSimdVectors>::u32xN>,
u32xN: UnsignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::u32xN>
+ FIV<<Self as NativeSimdVectors>::f32xN, <Self as NativeSimdVectors>::i32xN>,
f64xN: FloatVectorWithRegister<
Register = <Self as NativeSimd>::f64xN,
SignedBits = <Self as NativeSimdVectors>::i64xN,
Bits = <Self as NativeSimdVectors>::u64xN,
> + FIV<<Self as NativeSimdVectors>::i64xN, <Self as NativeSimdVectors>::u64xN>,
i64xN: SignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::i64xN>
+ FIV<<Self as NativeSimdVectors>::f64xN, <Self as NativeSimdVectors>::u64xN>,
u64xN: UnsignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::u64xN>
+ FIV<<Self as NativeSimdVectors>::f64xN, <Self as NativeSimdVectors>::i64xN>,
i16xN: SignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::i16xN>,
u16xN: UnsignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::u16xN>,
i8xN: SignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::i8xN>,
u8xN: UnsignedIntegerVectorWithRegister<Register = <Self as NativeSimd>::u8xN>,
>
{}
impl<S: NativeSimd> NativeSimdVectors for S {
type f32xN = Vector<<Self as NativeSimd>::f32xN>;
type i32xN = Vector<<Self as NativeSimd>::i32xN>;
type u32xN = Vector<<Self as NativeSimd>::u32xN>;
type f64xN = Vector<<Self as NativeSimd>::f64xN>;
type i64xN = Vector<<Self as NativeSimd>::i64xN>;
type u64xN = Vector<<Self as NativeSimd>::u64xN>;
type i16xN = Vector<<Self as NativeSimd>::i16xN>;
type u16xN = Vector<<Self as NativeSimd>::u16xN>;
type i8xN = Vector<<Self as NativeSimd>::i8xN>;
type u8xN = Vector<<Self as NativeSimd>::u8xN>;
}
impl<S: NativeSimd> NativeSimdVectorsWithRegisters for S {}
#[rustfmt::skip]
pub trait SimdVectors: NativeSimdVectors {type usizex2: UnsignedIntegerVector<Lanes = U2, Element = crate::element::USize>
+ ConcatVector<Vector<crate::element::USize>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>;
type usizex4: UnsignedIntegerVector<Lanes = U4, Element = crate::element::USize>
+ ConcatVector<<Self as SimdVectors>::usizex2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>;
type usizex8: UnsignedIntegerVector<Lanes = U8, Element = crate::element::USize>
+ ConcatVector<<Self as SimdVectors>::usizex4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>;
type usizex16: UnsignedIntegerVector<Lanes = U16, Element = crate::element::USize>
+ ConcatVector<<Self as SimdVectors>::usizex8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>;
type f32x2: FloatVector<Lanes = U2, Element = f32>
+ CastVector<<Self as SimdVectors>::f64x2>
+ ConcatVector<Vector<f32>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i32x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u32x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type i32x2: SignedIntegerVector<Lanes = U2, Element = i32>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i64x2>
+ ConcatVector<Vector<i32>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u32x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type u32x2: UnsignedIntegerVector<Lanes = U2, Element = u32> + Sad64Vector<Vector<u64>>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u64x2>
+ ConcatVector<Vector<u32>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i32x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u8x2>;
type f32x4: FloatVector<Lanes = U4, Element = f32>
+ CastVector<<Self as SimdVectors>::f64x4>
+ ConcatVector<<Self as SimdVectors>::f32x2> + SwizzleVector
+ LinAlg4Vector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i32x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u32x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type i32x4: SignedIntegerVector<Lanes = U4, Element = i32>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i64x4>
+ ConcatVector<<Self as SimdVectors>::i32x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u32x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type u32x4: UnsignedIntegerVector<Lanes = U4, Element = u32> + Sad64Vector<<Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u64x4>
+ ConcatVector<<Self as SimdVectors>::u32x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i32x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u8x4>;
type f32x8: FloatVector<Lanes = U8, Element = f32>
+ CastVector<<Self as SimdVectors>::f64x8>
+ ConcatVector<<Self as SimdVectors>::f32x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i32x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u32x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type i32x8: SignedIntegerVector<Lanes = U8, Element = i32>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i64x8>
+ ConcatVector<<Self as SimdVectors>::i32x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u32x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type u32x8: UnsignedIntegerVector<Lanes = U8, Element = u32> + Sad64Vector<<Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u64x8>
+ ConcatVector<<Self as SimdVectors>::u32x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i32x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u8x8>;
type f64x2: FloatVector<Lanes = U2, Element = f64>
+ CastVector<<Self as SimdVectors>::f32x2>
+ ConcatVector<Vector<f64>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i32x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u32x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type i64x2: SignedIntegerVector<Lanes = U2, Element = i64>
+ CastVector<<Self as SimdVectors>::i32x2>
+ ConcatVector<Vector<i64>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u32x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type u64x2: UnsignedIntegerVector<Lanes = U2, Element = u64>
+ CastVector<<Self as SimdVectors>::u32x2>
+ ConcatVector<Vector<u64>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i32x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u8x2>;
type f64x4: FloatVector<Lanes = U4, Element = f64>
+ CastVector<<Self as SimdVectors>::f32x4>
+ ConcatVector<<Self as SimdVectors>::f64x2> + SwizzleVector
+ LinAlg4Vector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i32x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u32x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type i64x4: SignedIntegerVector<Lanes = U4, Element = i64>
+ CastVector<<Self as SimdVectors>::i32x4>
+ ConcatVector<<Self as SimdVectors>::i64x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u32x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type u64x4: UnsignedIntegerVector<Lanes = U4, Element = u64>
+ CastVector<<Self as SimdVectors>::u32x4>
+ ConcatVector<<Self as SimdVectors>::u64x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i32x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u8x4>;
type f64x8: FloatVector<Lanes = U8, Element = f64>
+ CastVector<<Self as SimdVectors>::f32x8>
+ ConcatVector<<Self as SimdVectors>::f64x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i32x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u32x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type i64x8: SignedIntegerVector<Lanes = U8, Element = i64>
+ CastVector<<Self as SimdVectors>::i32x8>
+ ConcatVector<<Self as SimdVectors>::i64x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u32x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type u64x8: UnsignedIntegerVector<Lanes = U8, Element = u64>
+ CastVector<<Self as SimdVectors>::u32x8>
+ ConcatVector<<Self as SimdVectors>::u64x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i32x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u8x8>;
type f32x16: FloatVector<Lanes = U16, Element = f32>
+ CastVector<<Self as SimdVectors>::f64x16>
+ ConcatVector<<Self as SimdVectors>::f32x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i32x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u32x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;
type i32x16: SignedIntegerVector<Lanes = U16, Element = i32>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i64x16>
+ ConcatVector<<Self as SimdVectors>::i32x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u32x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;
type u32x16: UnsignedIntegerVector<Lanes = U16, Element = u32> + Sad64Vector<<Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u64x16>
+ ConcatVector<<Self as SimdVectors>::u32x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i32x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u8x16>;
type f64x16: FloatVector<Lanes = U16, Element = f64>
+ CastVector<<Self as SimdVectors>::f32x16>
+ ConcatVector<<Self as SimdVectors>::f64x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i32x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u32x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;
type i64x16: SignedIntegerVector<Lanes = U16, Element = i64>
+ CastVector<<Self as SimdVectors>::i32x16>
+ ConcatVector<<Self as SimdVectors>::i64x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u32x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;
type u64x16: UnsignedIntegerVector<Lanes = U16, Element = u64>
+ CastVector<<Self as SimdVectors>::u32x16>
+ ConcatVector<<Self as SimdVectors>::u64x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i32x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u8x16>;
type i8x16: SignedIntegerVector<Lanes = U16, Element = i8, Unsigned = <Self as SimdVectors>::u8x16, Signed = <Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::i32x16> + CastVector<<Self as SimdVectors>::i32x16> + ConcatVector<<Self as SimdVectors>::i8x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i64x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u32x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;
type u8x16: UnsignedIntegerVector<Lanes = U16, Element = u8, Unsigned = <Self as SimdVectors>::u8x16, Signed = <Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u32x16> + CastVector<<Self as SimdVectors>::u32x16> + ConcatVector<<Self as SimdVectors>::u8x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ PackedF8Vector<<Self as SimdVectors>::f32x16>
+ Sad16Vector<<Self as SimdVectors>::u16x8>
+ Sad32Vector<<Self as SimdVectors>::u32x4>
+ Sad64Vector<<Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i32x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u64x16>;
type i8x2: SignedIntegerVector<Lanes = U2, Element = i8, Unsigned = <Self as SimdVectors>::u8x2, Signed = <Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::i32x2> + CastVector<<Self as SimdVectors>::i32x2> + ConcatVector<Vector<i8>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i64x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u32x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type u8x2: UnsignedIntegerVector<Lanes = U2, Element = u8, Unsigned = <Self as SimdVectors>::u8x2, Signed = <Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u32x2> + CastVector<<Self as SimdVectors>::u32x2> + ConcatVector<Vector<u8>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ PackedF8Vector<<Self as SimdVectors>::f32x2>
+ Sad16Vector<Vector<u16>> + Sad32Vector<Vector<u32>> + Sad64Vector<Vector<u64>>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i32x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u64x2>;
type i8x4: SignedIntegerVector<Lanes = U4, Element = i8, Unsigned = <Self as SimdVectors>::u8x4, Signed = <Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::i32x4> + CastVector<<Self as SimdVectors>::i32x4> + ConcatVector<<Self as SimdVectors>::i8x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i64x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u32x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type u8x4: UnsignedIntegerVector<Lanes = U4, Element = u8, Unsigned = <Self as SimdVectors>::u8x4, Signed = <Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u32x4> + CastVector<<Self as SimdVectors>::u32x4> + ConcatVector<<Self as SimdVectors>::u8x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ PackedF8Vector<<Self as SimdVectors>::f32x4>
+ Sad16Vector<<Self as SimdVectors>::u16x2> + Sad32Vector<Vector<u32>> + Sad64Vector<Vector<u64>>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i32x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u64x4>;
type i8x8: SignedIntegerVector<Lanes = U8, Element = i8, Unsigned = <Self as SimdVectors>::u8x8, Signed = <Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::i32x8> + CastVector<<Self as SimdVectors>::i32x8> + ConcatVector<<Self as SimdVectors>::i8x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i64x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u32x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type u8x8: UnsignedIntegerVector<Lanes = U8, Element = u8, Unsigned = <Self as SimdVectors>::u8x8, Signed = <Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u32x8> + CastVector<<Self as SimdVectors>::u32x8> + ConcatVector<<Self as SimdVectors>::u8x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ PackedF8Vector<<Self as SimdVectors>::f32x8>
+ Sad16Vector<<Self as SimdVectors>::u16x4> + Sad32Vector<<Self as SimdVectors>::u32x2> + Sad64Vector<Vector<u64>>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i32x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u64x8>;
type i16x2: SignedIntegerVector<Lanes = U2, Element = i16, Unsigned = <Self as SimdVectors>::u16x2, Signed = <Self as SimdVectors>::i16x2>
+ CastVector<<Self as SimdVectors>::i32x2> + CastVector<<Self as SimdVectors>::i32x2> + ConcatVector<Vector<i16>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u16x2> + CastVector<<Self as SimdVectors>::u32x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type u16x2: UnsignedIntegerVector<Lanes = U2, Element = u16, Unsigned = <Self as SimdVectors>::u16x2, Signed = <Self as SimdVectors>::i16x2>
+ Sad32Vector<Vector<u32>> + Sad64Vector<Vector<u64>>
+ CastVector<<Self as SimdVectors>::u32x2> + CastVector<<Self as SimdVectors>::u32x2> + ConcatVector<Vector<u16>> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex2, <Self as SimdVectors>::u32x2, <Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x2> + CastVector<<Self as SimdVectors>::f64x2>
+ CastVector<<Self as SimdVectors>::i16x2> + CastVector<<Self as SimdVectors>::i32x2>
+ CastVector<<Self as SimdVectors>::i64x2> + CastVector<<Self as SimdVectors>::i8x2>
+ CastVector<<Self as SimdVectors>::u64x2> + CastVector<<Self as SimdVectors>::u8x2>;
type i16x4: SignedIntegerVector<Lanes = U4, Element = i16, Unsigned = <Self as SimdVectors>::u16x4, Signed = <Self as SimdVectors>::i16x4>
+ CastVector<<Self as SimdVectors>::i32x4> + CastVector<<Self as SimdVectors>::i32x4> + ConcatVector<<Self as SimdVectors>::i16x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u16x4> + CastVector<<Self as SimdVectors>::u32x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type u16x4: UnsignedIntegerVector<Lanes = U4, Element = u16, Unsigned = <Self as SimdVectors>::u16x4, Signed = <Self as SimdVectors>::i16x4>
+ Sad32Vector<<Self as SimdVectors>::u32x2> + Sad64Vector<Vector<u64>>
+ CastVector<<Self as SimdVectors>::u32x4> + CastVector<<Self as SimdVectors>::u32x4> + ConcatVector<<Self as SimdVectors>::u16x2> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex4, <Self as SimdVectors>::u32x4, <Self as SimdVectors>::u64x4>
+ PackedF16Vector<<Self as SimdVectors>::f32x4>
+ CastVector<<Self as SimdVectors>::f32x4> + CastVector<<Self as SimdVectors>::f64x4>
+ CastVector<<Self as SimdVectors>::i16x4> + CastVector<<Self as SimdVectors>::i32x4>
+ CastVector<<Self as SimdVectors>::i64x4> + CastVector<<Self as SimdVectors>::i8x4>
+ CastVector<<Self as SimdVectors>::u64x4> + CastVector<<Self as SimdVectors>::u8x4>;
type i16x8: SignedIntegerVector<Lanes = U8, Element = i16, Unsigned = <Self as SimdVectors>::u16x8, Signed = <Self as SimdVectors>::i16x8>
+ CastVector<<Self as SimdVectors>::i32x8> + CastVector<<Self as SimdVectors>::i32x8> + ConcatVector<<Self as SimdVectors>::i16x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u16x8> + CastVector<<Self as SimdVectors>::u32x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type u16x8: UnsignedIntegerVector<Lanes = U8, Element = u16, Unsigned = <Self as SimdVectors>::u16x8, Signed = <Self as SimdVectors>::i16x8>
+ CastVector<<Self as SimdVectors>::u32x8> + CastVector<<Self as SimdVectors>::u32x8> + ConcatVector<<Self as SimdVectors>::u16x4> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex8, <Self as SimdVectors>::u32x8, <Self as SimdVectors>::u64x8>
+ PackedF16Vector<<Self as SimdVectors>::f32x8>
+ Sad32Vector<<Self as SimdVectors>::u32x4> + Sad64Vector<<Self as SimdVectors>::u64x2>
+ CastVector<<Self as SimdVectors>::f32x8> + CastVector<<Self as SimdVectors>::f64x8>
+ CastVector<<Self as SimdVectors>::i16x8> + CastVector<<Self as SimdVectors>::i32x8>
+ CastVector<<Self as SimdVectors>::i64x8> + CastVector<<Self as SimdVectors>::i8x8>
+ CastVector<<Self as SimdVectors>::u64x8> + CastVector<<Self as SimdVectors>::u8x8>;
type i16x16: SignedIntegerVector<Lanes = U16, Element = i16, Unsigned = <Self as SimdVectors>::u16x16, Signed = <Self as SimdVectors>::i16x16>
+ CastVector<<Self as SimdVectors>::i32x16> + CastVector<<Self as SimdVectors>::i32x16> + ConcatVector<<Self as SimdVectors>::i16x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u16x16> + CastVector<<Self as SimdVectors>::u32x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;
type u16x16: UnsignedIntegerVector<Lanes = U16, Element = u16, Unsigned = <Self as SimdVectors>::u16x16, Signed = <Self as SimdVectors>::i16x16>
+ Sad32Vector<<Self as SimdVectors>::u32x8> + Sad64Vector<<Self as SimdVectors>::u64x4>
+ CastVector<<Self as SimdVectors>::u32x16> + CastVector<<Self as SimdVectors>::u32x16> + ConcatVector<<Self as SimdVectors>::u16x8> + SwizzleVector
+ VectorIndexedBy<<Self as SimdVectors>::usizex16, <Self as SimdVectors>::u32x16, <Self as SimdVectors>::u64x16>
+ PackedF16Vector<<Self as SimdVectors>::f32x16>
+ CastVector<<Self as SimdVectors>::f32x16> + CastVector<<Self as SimdVectors>::f64x16>
+ CastVector<<Self as SimdVectors>::i16x16> + CastVector<<Self as SimdVectors>::i32x16>
+ CastVector<<Self as SimdVectors>::i64x16> + CastVector<<Self as SimdVectors>::i8x16>
+ CastVector<<Self as SimdVectors>::u64x16> + CastVector<<Self as SimdVectors>::u8x16>;}
pub trait SimdVectorsWithRegisters: Simd + NativeSimdVectorsWithRegisters + SimdVectors<
usizex2: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::usizex2>,
usizex4: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::usizex4>,
usizex8: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::usizex8>,
usizex16: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::usizex16>,
f32x2: FloatVectorWithRegister<Register = <Self as Simd>::f32x2, SignedBits = <Self as SimdVectors>::i32x2, Bits = <Self as SimdVectors>::u32x2>
+ FIV<<Self as SimdVectors>::i32x2, <Self as SimdVectors>::u32x2>,
i32x2: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i32x2>
+ FIV<<Self as SimdVectors>::f32x2, <Self as SimdVectors>::u32x2>,
u32x2: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u32x2>
+ FIV<<Self as SimdVectors>::f32x2, <Self as SimdVectors>::i32x2>,
f32x4: FloatVectorWithRegister<Register = <Self as Simd>::f32x4, SignedBits = <Self as SimdVectors>::i32x4, Bits = <Self as SimdVectors>::u32x4>
+ FIV<<Self as SimdVectors>::i32x4, <Self as SimdVectors>::u32x4>,
i32x4: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i32x4>
+ FIV<<Self as SimdVectors>::f32x4, <Self as SimdVectors>::u32x4>,
u32x4: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u32x4>
+ FIV<<Self as SimdVectors>::f32x4, <Self as SimdVectors>::i32x4>,
f32x8: FloatVectorWithRegister<Register = <Self as Simd>::f32x8, SignedBits = <Self as SimdVectors>::i32x8, Bits = <Self as SimdVectors>::u32x8>
+ FIV<<Self as SimdVectors>::i32x8, <Self as SimdVectors>::u32x8>,
i32x8: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i32x8>
+ FIV<<Self as SimdVectors>::f32x8, <Self as SimdVectors>::u32x8>,
u32x8: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u32x8>
+ FIV<<Self as SimdVectors>::f32x8, <Self as SimdVectors>::i32x8>,
f32x16: FloatVectorWithRegister<Register = <Self as Simd>::f32x16, SignedBits = <Self as SimdVectors>::i32x16, Bits = <Self as SimdVectors>::u32x16>
+ FIV<<Self as SimdVectors>::i32x16, <Self as SimdVectors>::u32x16>,
i32x16: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i32x16>
+ FIV<<Self as SimdVectors>::f32x16, <Self as SimdVectors>::u32x16>,
u32x16: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u32x16>
+ FIV<<Self as SimdVectors>::f32x16, <Self as SimdVectors>::i32x16>,
f64x2: FloatVectorWithRegister<Register = <Self as Simd>::f64x2, SignedBits = <Self as SimdVectors>::i64x2, Bits = <Self as SimdVectors>::u64x2>,
i64x2: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i64x2>
+ FIV<<Self as SimdVectors>::f64x2, <Self as SimdVectors>::u64x2>,
u64x2: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u64x2>
+ FIV<<Self as SimdVectors>::f64x2, <Self as SimdVectors>::i64x2>,
f64x4: FloatVectorWithRegister<Register = <Self as Simd>::f64x4, SignedBits = <Self as SimdVectors>::i64x4, Bits = <Self as SimdVectors>::u64x4>
+ FIV<<Self as SimdVectors>::i64x4, <Self as SimdVectors>::u64x4>,
i64x4: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i64x4>
+ FIV<<Self as SimdVectors>::f64x4, <Self as SimdVectors>::u64x4>,
u64x4: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u64x4>
+ FIV<<Self as SimdVectors>::f64x4, <Self as SimdVectors>::i64x4>,
f64x8: FloatVectorWithRegister<Register = <Self as Simd>::f64x8, SignedBits = <Self as SimdVectors>::i64x8, Bits = <Self as SimdVectors>::u64x8>
+ FIV<<Self as SimdVectors>::i64x8, <Self as SimdVectors>::u64x8>,
i64x8: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i64x8>
+ FIV<<Self as SimdVectors>::f64x8, <Self as SimdVectors>::u64x8>,
u64x8: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u64x8>
+ FIV<<Self as SimdVectors>::f64x8, <Self as SimdVectors>::i64x8>,
f64x16: FloatVectorWithRegister<Register = <Self as Simd>::f64x16, SignedBits = <Self as SimdVectors>::i64x16, Bits = <Self as SimdVectors>::u64x16>
+ FIV<<Self as SimdVectors>::i64x16, <Self as SimdVectors>::u64x16>,
i64x16: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i64x16>
+ FIV<<Self as SimdVectors>::f64x16, <Self as SimdVectors>::u64x16>,
u64x16: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u64x16>
+ FIV<<Self as SimdVectors>::f64x16, <Self as SimdVectors>::i64x16>,
i8x16: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i8x16>,
u8x16: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u8x16>,
i8x2: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i8x2>,
u8x2: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u8x2>,
i8x4: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i8x4>,
u8x4: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u8x4>,
i8x8: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i8x8>,
u8x8: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u8x8>,
i16x2: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i16x2>,
u16x2: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u16x2>,
i16x4: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i16x4>,
u16x4: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u16x4>,
i16x8: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i16x8>,
u16x8: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u16x8>,
i16x16: SignedIntegerVectorWithRegister<Register = <Self as Simd>::i16x16>,
u16x16: UnsignedIntegerVectorWithRegister<Register = <Self as Simd>::u16x16>,
>{}
pub trait Simd3AVectors:
SimdVectors<
usizex4: ExtendVector<Self::usizex3A>,
f32x4: ExtendVector<Self::f32x3A>,
i32x4: ExtendVector<Self::i32x3A>,
u32x4: ExtendVector<Self::u32x3A>,
f64x4: ExtendVector<Self::f64x3A>,
i64x4: ExtendVector<Self::i64x3A>,
u64x4: ExtendVector<Self::u64x3A>,
>
{
type usizex3A: UnsignedIntegerVector<Lanes = U3, Element = crate::element::USize>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
>;
type f32x3A: FloatVector<Lanes = U3, Element = f32>
+ LinAlg3Vector
+ CastVector<<Self as Simd3AVectors>::f64x3A>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
> + CastVector<<Self as Simd3AVectors>::i32x3A>
+ CastVector<<Self as Simd3AVectors>::i64x3A>
+ CastVector<<Self as Simd3AVectors>::u32x3A>
+ CastVector<<Self as Simd3AVectors>::u64x3A>;
type i32x3A: SignedIntegerVector<Lanes = U3, Element = i32>
+ CastVector<<Self as Simd3AVectors>::i64x3A>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
> + CastVector<<Self as Simd3AVectors>::f32x3A>
+ CastVector<<Self as Simd3AVectors>::f64x3A>
+ CastVector<<Self as Simd3AVectors>::u32x3A>
+ CastVector<<Self as Simd3AVectors>::u64x3A>;
type u32x3A: UnsignedIntegerVector<Lanes = U3, Element = u32>
+ CastVector<<Self as Simd3AVectors>::u64x3A>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
> + CastVector<<Self as Simd3AVectors>::f32x3A>
+ CastVector<<Self as Simd3AVectors>::f64x3A>
+ CastVector<<Self as Simd3AVectors>::i32x3A>
+ CastVector<<Self as Simd3AVectors>::i64x3A>;
type f64x3A: FloatVector<Lanes = U3, Element = f64>
+ LinAlg3Vector
+ CastVector<<Self as Simd3AVectors>::f32x3A>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
> + CastVector<<Self as Simd3AVectors>::i32x3A>
+ CastVector<<Self as Simd3AVectors>::i64x3A>
+ CastVector<<Self as Simd3AVectors>::u32x3A>
+ CastVector<<Self as Simd3AVectors>::u64x3A>;
type i64x3A: SignedIntegerVector<Lanes = U3, Element = i64>
+ CastVector<<Self as Simd3AVectors>::i32x3A>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
> + CastVector<<Self as Simd3AVectors>::f32x3A>
+ CastVector<<Self as Simd3AVectors>::f64x3A>
+ CastVector<<Self as Simd3AVectors>::u32x3A>
+ CastVector<<Self as Simd3AVectors>::u64x3A>;
type u64x3A: UnsignedIntegerVector<Lanes = U3, Element = u64>
+ CastVector<<Self as Simd3AVectors>::u32x3A>
+ SwizzleVector
+ VectorIndexedBy<
<Self as Simd3AVectors>::usizex3A,
<Self as Simd3AVectors>::u32x3A,
<Self as Simd3AVectors>::u64x3A,
> + CastVector<<Self as Simd3AVectors>::f32x3A>
+ CastVector<<Self as Simd3AVectors>::f64x3A>
+ CastVector<<Self as Simd3AVectors>::i32x3A>
+ CastVector<<Self as Simd3AVectors>::i64x3A>;
}
pub trait Simd3AVectorsWithRegisters: SimdVectorsWithRegisters + Simd3A + Simd3AVectors<
usizex3A: UnsignedIntegerVectorWithRegister<Register = <Self as Simd3A>::usizex3A>,
f32x3A: FloatVectorWithRegister<Register = <Self as Simd3A>::f32x3A, SignedBits = <Self as Simd3AVectors>::i32x3A, Bits = <Self as Simd3AVectors>::u32x3A>
+ FIV<<Self as Simd3AVectors>::i32x3A, <Self as Simd3AVectors>::u32x3A>,
i32x3A: SignedIntegerVectorWithRegister<Register = <Self as Simd3A>::i32x3A>
+ FIV<<Self as Simd3AVectors>::f32x3A, <Self as Simd3AVectors>::u32x3A>,
u32x3A: UnsignedIntegerVectorWithRegister<Register = <Self as Simd3A>::u32x3A>
+ FIV<<Self as Simd3AVectors>::f32x3A, <Self as Simd3AVectors>::i32x3A>,
f64x3A: FloatVectorWithRegister<Register = <Self as Simd3A>::f64x3A, SignedBits = <Self as Simd3AVectors>::i64x3A, Bits = <Self as Simd3AVectors>::u64x3A>
+ FIV<<Self as Simd3AVectors>::i64x3A, <Self as Simd3AVectors>::u64x3A>,
i64x3A: SignedIntegerVectorWithRegister<Register = <Self as Simd3A>::i64x3A>
+ FIV<<Self as Simd3AVectors>::f64x3A, <Self as Simd3AVectors>::u64x3A>,
u64x3A: UnsignedIntegerVectorWithRegister<Register = <Self as Simd3A>::u64x3A>
+ FIV<<Self as Simd3AVectors>::f64x3A, <Self as Simd3AVectors>::i64x3A>,
>{}
pub trait Simd3Vectors:
Simd3AVectors<
usizex4: ExtendVector<Self::usizex3>,
f32x4: ExtendVector<Self::f32x3>,
i32x4: ExtendVector<Self::i32x3>,
u32x4: ExtendVector<Self::u32x3>,
f64x4: ExtendVector<Self::f64x3>,
i64x4: ExtendVector<Self::i64x3>,
u64x4: ExtendVector<Self::u64x3>,
>
{
type usizex3: UnsignedIntegerVector<Lanes = U3, Element = crate::element::USize>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>;
type f32x3: FloatVector<Lanes = U3, Element = f32>
+ LinAlg3Vector
+ CastVector<<Self as Simd3Vectors>::f64x3>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>
+ CastVector<<Self as Simd3Vectors>::i32x3>
+ CastVector<<Self as Simd3Vectors>::i64x3>
+ CastVector<<Self as Simd3Vectors>::u32x3>
+ CastVector<<Self as Simd3Vectors>::u64x3>;
type i32x3: SignedIntegerVector<Lanes = U3, Element = i32>
+ CastVector<<Self as Simd3Vectors>::i64x3>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>
+ CastVector<<Self as Simd3Vectors>::f32x3>
+ CastVector<<Self as Simd3Vectors>::f64x3>
+ CastVector<<Self as Simd3Vectors>::u32x3>
+ CastVector<<Self as Simd3Vectors>::u64x3>;
type u32x3: UnsignedIntegerVector<Lanes = U3, Element = u32>
+ CastVector<<Self as Simd3Vectors>::u64x3>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>
+ CastVector<<Self as Simd3Vectors>::f32x3>
+ CastVector<<Self as Simd3Vectors>::f64x3>
+ CastVector<<Self as Simd3Vectors>::i32x3>
+ CastVector<<Self as Simd3Vectors>::i64x3>;
type f64x3: FloatVector<Lanes = U3, Element = f64>
+ LinAlg3Vector
+ CastVector<<Self as Simd3Vectors>::f32x3>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>
+ CastVector<<Self as Simd3Vectors>::i32x3>
+ CastVector<<Self as Simd3Vectors>::i64x3>
+ CastVector<<Self as Simd3Vectors>::u32x3>
+ CastVector<<Self as Simd3Vectors>::u64x3>;
type i64x3: SignedIntegerVector<Lanes = U3, Element = i64>
+ CastVector<<Self as Simd3Vectors>::i32x3>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>
+ CastVector<<Self as Simd3Vectors>::f32x3>
+ CastVector<<Self as Simd3Vectors>::f64x3>
+ CastVector<<Self as Simd3Vectors>::u32x3>
+ CastVector<<Self as Simd3Vectors>::u64x3>;
type u64x3: UnsignedIntegerVector<Lanes = U3, Element = u64>
+ CastVector<<Self as Simd3Vectors>::u32x3>
+ SwizzleVector
+ VectorIndexedBy<<Self as Simd3Vectors>::usizex3, <Self as Simd3Vectors>::u32x3, <Self as Simd3Vectors>::u64x3>
+ CastVector<<Self as Simd3Vectors>::f32x3>
+ CastVector<<Self as Simd3Vectors>::f64x3>
+ CastVector<<Self as Simd3Vectors>::i32x3>
+ CastVector<<Self as Simd3Vectors>::i64x3>;
}
pub trait Simd3VectorsWithRegisters: SimdVectorsWithRegisters + Simd3 + Simd3Vectors<
usizex3: UnsignedIntegerVectorWithRegister<Register = <Self as Simd3>::usizex3>,
f32x3: FloatVectorWithRegister<Register = <Self as Simd3>::f32x3, SignedBits = <Self as Simd3Vectors>::i32x3, Bits = <Self as Simd3Vectors>::u32x3>
+ FIV<<Self as Simd3Vectors>::i32x3, <Self as Simd3Vectors>::u32x3>,
i32x3: SignedIntegerVectorWithRegister<Register = <Self as Simd3>::i32x3>
+ FIV<<Self as Simd3Vectors>::f32x3, <Self as Simd3Vectors>::u32x3>,
u32x3: UnsignedIntegerVectorWithRegister<Register = <Self as Simd3>::u32x3>
+ FIV<<Self as Simd3Vectors>::f32x3, <Self as Simd3Vectors>::i32x3>,
f64x3: FloatVectorWithRegister<Register = <Self as Simd3>::f64x3, SignedBits = <Self as Simd3Vectors>::i64x3, Bits = <Self as Simd3Vectors>::u64x3>
+ FIV<<Self as Simd3Vectors>::i64x3, <Self as Simd3Vectors>::u64x3>,
i64x3: SignedIntegerVectorWithRegister<Register = <Self as Simd3>::i64x3>
+ FIV<<Self as Simd3Vectors>::f64x3, <Self as Simd3Vectors>::u64x3>,
u64x3: UnsignedIntegerVectorWithRegister<Register = <Self as Simd3>::u64x3>
+ FIV<<Self as Simd3Vectors>::f64x3, <Self as Simd3Vectors>::i64x3>,
>{}
impl<S: Simd> SimdVectors for S {
type usizex2 = Vector<<Self as Simd>::usizex2>;
type usizex4 = Vector<<Self as Simd>::usizex4>;
type usizex8 = Vector<<Self as Simd>::usizex8>;
type usizex16 = Vector<<Self as Simd>::usizex16>;
type f32x2 = Vector<<Self as Simd>::f32x2>;
type i32x2 = Vector<<Self as Simd>::i32x2>;
type u32x2 = Vector<<Self as Simd>::u32x2>;
type f32x4 = Vector<<Self as Simd>::f32x4>;
type i32x4 = Vector<<Self as Simd>::i32x4>;
type u32x4 = Vector<<Self as Simd>::u32x4>;
type f32x8 = Vector<<Self as Simd>::f32x8>;
type i32x8 = Vector<<Self as Simd>::i32x8>;
type u32x8 = Vector<<Self as Simd>::u32x8>;
type f64x2 = Vector<<Self as Simd>::f64x2>;
type i64x2 = Vector<<Self as Simd>::i64x2>;
type u64x2 = Vector<<Self as Simd>::u64x2>;
type f64x4 = Vector<<Self as Simd>::f64x4>;
type i64x4 = Vector<<Self as Simd>::i64x4>;
type u64x4 = Vector<<Self as Simd>::u64x4>;
type f64x8 = Vector<<Self as Simd>::f64x8>;
type i64x8 = Vector<<Self as Simd>::i64x8>;
type u64x8 = Vector<<Self as Simd>::u64x8>;
type f32x16 = Vector<<Self as Simd>::f32x16>;
type i32x16 = Vector<<Self as Simd>::i32x16>;
type u32x16 = Vector<<Self as Simd>::u32x16>;
type f64x16 = Vector<<Self as Simd>::f64x16>;
type i64x16 = Vector<<Self as Simd>::i64x16>;
type u64x16 = Vector<<Self as Simd>::u64x16>;
type i8x16 = Vector<<Self as Simd>::i8x16>;
type u8x16 = Vector<<Self as Simd>::u8x16>;
type i8x2 = Vector<<Self as Simd>::i8x2>;
type u8x2 = Vector<<Self as Simd>::u8x2>;
type i8x4 = Vector<<Self as Simd>::i8x4>;
type u8x4 = Vector<<Self as Simd>::u8x4>;
type i8x8 = Vector<<Self as Simd>::i8x8>;
type u8x8 = Vector<<Self as Simd>::u8x8>;
type i16x2 = Vector<<Self as Simd>::i16x2>;
type u16x2 = Vector<<Self as Simd>::u16x2>;
type i16x4 = Vector<<Self as Simd>::i16x4>;
type u16x4 = Vector<<Self as Simd>::u16x4>;
type i16x8 = Vector<<Self as Simd>::i16x8>;
type u16x8 = Vector<<Self as Simd>::u16x8>;
type i16x16 = Vector<<Self as Simd>::i16x16>;
type u16x16 = Vector<<Self as Simd>::u16x16>;
}
impl<S: Simd> SimdVectorsWithRegisters for S {}
impl<S: Simd3A> Simd3AVectors for S {
type usizex3A = Vector<<Self as Simd3A>::usizex3A>;
type f32x3A = Vector<<Self as Simd3A>::f32x3A>;
type i32x3A = Vector<<Self as Simd3A>::i32x3A>;
type u32x3A = Vector<<Self as Simd3A>::u32x3A>;
type f64x3A = Vector<<Self as Simd3A>::f64x3A>;
type i64x3A = Vector<<Self as Simd3A>::i64x3A>;
type u64x3A = Vector<<Self as Simd3A>::u64x3A>;
}
impl<S: Simd3A> Simd3AVectorsWithRegisters for S {}
impl<S: Simd3> Simd3Vectors for S {
type usizex3 = Vector<<Self as Simd3>::usizex3>;
type f32x3 = Vector<<Self as Simd3>::f32x3>;
type i32x3 = Vector<<Self as Simd3>::i32x3>;
type u32x3 = Vector<<Self as Simd3>::u32x3>;
type f64x3 = Vector<<Self as Simd3>::f64x3>;
type i64x3 = Vector<<Self as Simd3>::i64x3>;
type u64x3 = Vector<<Self as Simd3>::u64x3>;
}
impl<S: Simd3> Simd3VectorsWithRegisters for S {}