Struct vectoreyes::I16x8 
source · [−]#[repr(transparent)]pub struct I16x8(_);Expand description
[i16; 8] as a vector.
Implementations
sourceimpl I16x8
 
impl I16x8
sourcepub const fn from_array(array: [i16; 8]) -> I16x8
 
pub const fn from_array(array: [i16; 8]) -> I16x8
Create a vector from an array.
Unlike the From trait function, the from_array function is const.
Example
const MY_EXTREMELY_FUN_VALUE: I16x8 =
    I16x8::from_array([0, 1, 2, 3, 4, 5, 6, 7]);
for (i, value) in MY_EXTREMELY_FUN_VALUE.as_array().iter().copied().enumerate() {
    assert_eq!(i as i16, value);
}Avx2
Trait Implementations
sourceimpl Add<I16x8> for I16x8
 
impl Add<I16x8> for I16x8
sourcefn add(self, rhs: I16x8) -> I16x8
 
fn add(self, rhs: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0].wrapping_add(rhs.as_array()[0]),
    self.as_array()[1].wrapping_add(rhs.as_array()[1]),
    self.as_array()[2].wrapping_add(rhs.as_array()[2]),
    self.as_array()[3].wrapping_add(rhs.as_array()[3]),
    self.as_array()[4].wrapping_add(rhs.as_array()[4]),
    self.as_array()[5].wrapping_add(rhs.as_array()[5]),
    self.as_array()[6].wrapping_add(rhs.as_array()[6]),
    self.as_array()[7].wrapping_add(rhs.as_array()[7]),
])Avx2
- 
- PADDW xmm, xmm
 
sourceimpl AddAssign<I16x8> for I16x8
 
impl AddAssign<I16x8> for I16x8
sourcefn add_assign(&mut self, rhs: Self)
 
fn add_assign(&mut self, rhs: Self)
Performs the 
+= operation. Read moresourceimpl BitAnd<I16x8> for I16x8
 
impl BitAnd<I16x8> for I16x8
sourcefn bitand(self, rhs: I16x8) -> I16x8
 
fn bitand(self, rhs: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0] & rhs.as_array()[0],
    self.as_array()[1] & rhs.as_array()[1],
    self.as_array()[2] & rhs.as_array()[2],
    self.as_array()[3] & rhs.as_array()[3],
    self.as_array()[4] & rhs.as_array()[4],
    self.as_array()[5] & rhs.as_array()[5],
    self.as_array()[6] & rhs.as_array()[6],
    self.as_array()[7] & rhs.as_array()[7],
])Avx2
- 
- PAND xmm, xmm
 
sourceimpl BitAndAssign<I16x8> for I16x8
 
impl BitAndAssign<I16x8> for I16x8
sourcefn bitand_assign(&mut self, rhs: Self)
 
fn bitand_assign(&mut self, rhs: Self)
Performs the 
&= operation. Read moresourceimpl BitOr<I16x8> for I16x8
 
impl BitOr<I16x8> for I16x8
sourcefn bitor(self, rhs: I16x8) -> I16x8
 
fn bitor(self, rhs: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0] | rhs.as_array()[0],
    self.as_array()[1] | rhs.as_array()[1],
    self.as_array()[2] | rhs.as_array()[2],
    self.as_array()[3] | rhs.as_array()[3],
    self.as_array()[4] | rhs.as_array()[4],
    self.as_array()[5] | rhs.as_array()[5],
    self.as_array()[6] | rhs.as_array()[6],
    self.as_array()[7] | rhs.as_array()[7],
])Avx2
- 
- POR xmm, xmm
 
sourceimpl BitOrAssign<I16x8> for I16x8
 
impl BitOrAssign<I16x8> for I16x8
sourcefn bitor_assign(&mut self, rhs: Self)
 
fn bitor_assign(&mut self, rhs: Self)
Performs the 
|= operation. Read moresourceimpl BitXor<I16x8> for I16x8
 
impl BitXor<I16x8> for I16x8
sourcefn bitxor(self, rhs: I16x8) -> I16x8
 
fn bitxor(self, rhs: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0] ^ rhs.as_array()[0],
    self.as_array()[1] ^ rhs.as_array()[1],
    self.as_array()[2] ^ rhs.as_array()[2],
    self.as_array()[3] ^ rhs.as_array()[3],
    self.as_array()[4] ^ rhs.as_array()[4],
    self.as_array()[5] ^ rhs.as_array()[5],
    self.as_array()[6] ^ rhs.as_array()[6],
    self.as_array()[7] ^ rhs.as_array()[7],
])Avx2
- 
- PXOR xmm, xmm
 
sourceimpl BitXorAssign<I16x8> for I16x8
 
impl BitXorAssign<I16x8> for I16x8
sourcefn bitxor_assign(&mut self, rhs: Self)
 
fn bitxor_assign(&mut self, rhs: Self)
Performs the 
^= operation. Read moresourceimpl ConditionallySelectable for I16x8
 
impl ConditionallySelectable for I16x8
sourcefn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self
 
fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self
sourcefn conditional_assign(&mut self, other: &Self, choice: Choice)
 
fn conditional_assign(&mut self, other: &Self, choice: Choice)
sourceimpl ConstantTimeEq for I16x8
 
impl ConstantTimeEq for I16x8
sourceimpl ExtendingCast<I16x8> for I32x4
 
impl ExtendingCast<I16x8> for I32x4
sourcefn extending_cast_from(vector: I16x8) -> I32x4
 
fn extending_cast_from(vector: I16x8) -> I32x4
Scalar Equivalent:
I32x4::from([
        i32::from(vector.as_array()[0]),
        i32::from(vector.as_array()[1]),
        i32::from(vector.as_array()[2]),
        i32::from(vector.as_array()[3]),
])Avx2
- 
- PMOVSXWD xmm, xmm
 
sourceimpl ExtendingCast<I16x8> for I32x8
 
impl ExtendingCast<I16x8> for I32x8
sourcefn extending_cast_from(vector: I16x8) -> I32x8
 
fn extending_cast_from(vector: I16x8) -> I32x8
Scalar Equivalent:
I32x8::from([
        i32::from(vector.as_array()[0]),
        i32::from(vector.as_array()[1]),
        i32::from(vector.as_array()[2]),
        i32::from(vector.as_array()[3]),
        i32::from(vector.as_array()[4]),
        i32::from(vector.as_array()[5]),
        i32::from(vector.as_array()[6]),
        i32::from(vector.as_array()[7]),
])Avx2
- 
- VPMOVSXWD ymm, xmm
 
sourceimpl ExtendingCast<I16x8> for I64x2
 
impl ExtendingCast<I16x8> for I64x2
sourcefn extending_cast_from(vector: I16x8) -> I64x2
 
fn extending_cast_from(vector: I16x8) -> I64x2
Scalar Equivalent:
I64x2::from([
        i64::from(vector.as_array()[0]),
        i64::from(vector.as_array()[1]),
])Avx2
- 
- PMOVSXWQ xmm, xmm
 
sourceimpl ExtendingCast<I16x8> for I64x4
 
impl ExtendingCast<I16x8> for I64x4
sourcefn extending_cast_from(vector: I16x8) -> I64x4
 
fn extending_cast_from(vector: I16x8) -> I64x4
Scalar Equivalent:
I64x4::from([
        i64::from(vector.as_array()[0]),
        i64::from(vector.as_array()[1]),
        i64::from(vector.as_array()[2]),
        i64::from(vector.as_array()[3]),
])Avx2
- 
- VPMOVSXWQ ymm, xmm
 
sourceimpl ExtendingCast<I8x16> for I16x8
 
impl ExtendingCast<I8x16> for I16x8
sourcefn extending_cast_from(vector: I8x16) -> I16x8
 
fn extending_cast_from(vector: I8x16) -> I16x8
Scalar Equivalent:
I16x8::from([
        i16::from(vector.as_array()[0]),
        i16::from(vector.as_array()[1]),
        i16::from(vector.as_array()[2]),
        i16::from(vector.as_array()[3]),
        i16::from(vector.as_array()[4]),
        i16::from(vector.as_array()[5]),
        i16::from(vector.as_array()[6]),
        i16::from(vector.as_array()[7]),
])Avx2
- 
- PMOVSXBW xmm, xmm
 
sourceimpl From<I16x8> for I16x16
 
impl From<I16x8> for I16x16
sourcefn from(vector: I16x8) -> I16x16
 
fn from(vector: I16x8) -> I16x16
NOTE: this will zero the upper bits of the destination. Other intrinsics are more effcient, but leave the upper bits undefined. At present, these more effcient intrinsics are not exposed.
Scalar Equivalent:
let mut out = [0; 16];
out[0..8].copy_from_slice(&vector.as_array());
I16x16::from(out)Avx2
sourceimpl From<I16x8> for I32x8
 
impl From<I16x8> for I32x8
sourcefn from(vector: I16x8) -> I32x8
 
fn from(vector: I16x8) -> I32x8
Scalar Equivalent:
I32x8::from([
        i32::from(vector.as_array()[0]),
        i32::from(vector.as_array()[1]),
        i32::from(vector.as_array()[2]),
        i32::from(vector.as_array()[3]),
        i32::from(vector.as_array()[4]),
        i32::from(vector.as_array()[5]),
        i32::from(vector.as_array()[6]),
        i32::from(vector.as_array()[7]),
])Avx2
- 
- VPMOVSXWD ymm, xmm
 
sourceimpl Shl<I16x8> for I16x8
 
impl Shl<I16x8> for I16x8
sourcefn shl(self, amount: I16x8) -> I16x8
 
fn shl(self, amount: I16x8) -> I16x8
Scalar Equivalent:
let mut out = self.as_array();
for (x, amm) in out.iter_mut().zip(amount.as_array().iter().copied()) {
    *x = if amm >= 16 || amm < 0 {
        0
    } else {
        *x << amm
    };
}
I16x8::from(out)Avx2
WARNING: this implementation is a polyfill which executes the scalar implemenation.
sourceimpl Shl<u64> for I16x8
 
impl Shl<u64> for I16x8
sourcefn shl(self, amount: u64) -> I16x8
 
fn shl(self, amount: u64) -> I16x8
Scalar Equivalent:
if amount >= 16 {
    I16x8::ZERO
} else {
    I16x8::from([
        self.as_array()[0] << amount,
        self.as_array()[1] << amount,
        self.as_array()[2] << amount,
        self.as_array()[3] << amount,
        self.as_array()[4] << amount,
        self.as_array()[5] << amount,
        self.as_array()[6] << amount,
        self.as_array()[7] << amount,
    ])
}Avx2
- 
Instruction sequence. 
- 
- PSLLW xmm, xmm
 
sourceimpl ShlAssign<I16x8> for I16x8
 
impl ShlAssign<I16x8> for I16x8
sourcefn shl_assign(&mut self, amount: I16x8)
 
fn shl_assign(&mut self, amount: I16x8)
Performs the 
<<= operation. Read moresourceimpl ShlAssign<u64> for I16x8
 
impl ShlAssign<u64> for I16x8
sourcefn shl_assign(&mut self, amount: u64)
 
fn shl_assign(&mut self, amount: u64)
Performs the 
<<= operation. Read moresourceimpl Shr<I16x8> for I16x8
 
impl Shr<I16x8> for I16x8
sourcefn shr(self, amount: I16x8) -> I16x8
 
fn shr(self, amount: I16x8) -> I16x8
Scalar Equivalent:
let mut out = self.as_array();
for (x, amm) in out.iter_mut().zip(amount.as_array().iter().copied()) {
    *x = if amm >= 16 || amm < 0 {
        if *x < 0 { -1 } else { 0 }
    } else {
        *x >> amm
    };
}
I16x8::from(out)Avx2
WARNING: this implementation is a polyfill which executes the scalar implemenation.
sourceimpl Shr<u64> for I16x8
 
impl Shr<u64> for I16x8
sourcefn shr(self, amount: u64) -> I16x8
 
fn shr(self, amount: u64) -> I16x8
Scalar Equivalent:
if amount >= 16 {
    let mut out = self.as_array();
    for x in out.iter_mut() {
        *x = if *x < 0 { -1 } else { 0 };
    }
    I16x8::from(out)
} else {
    I16x8::from([
        self.as_array()[0] >> amount,
        self.as_array()[1] >> amount,
        self.as_array()[2] >> amount,
        self.as_array()[3] >> amount,
        self.as_array()[4] >> amount,
        self.as_array()[5] >> amount,
        self.as_array()[6] >> amount,
        self.as_array()[7] >> amount,
    ])
}Avx2
- 
Instruction sequence. 
- 
- PSRAW xmm, xmm
 
sourceimpl ShrAssign<I16x8> for I16x8
 
impl ShrAssign<I16x8> for I16x8
sourcefn shr_assign(&mut self, amount: I16x8)
 
fn shr_assign(&mut self, amount: I16x8)
Performs the 
>>= operation. Read moresourceimpl ShrAssign<u64> for I16x8
 
impl ShrAssign<u64> for I16x8
sourcefn shr_assign(&mut self, amount: u64)
 
fn shr_assign(&mut self, amount: u64)
Performs the 
>>= operation. Read moresourceimpl SimdBase for I16x8
 
impl SimdBase for I16x8
sourcefn set_lo(scalar: i16) -> I16x8
 
fn set_lo(scalar: i16) -> I16x8
Scalar Equivalent:
let mut out = [0; 8];
out[0] = scalar;
I16x8::from(out)Avx2
- 
Instruction sequence. 
sourcefn broadcast_lo(vector: I16x8) -> I16x8
 
fn broadcast_lo(vector: I16x8) -> I16x8
sourcefn cmp_eq(&self, other: I16x8) -> I16x8
 
fn cmp_eq(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    if self.as_array()[0] == other.as_array()[0] {  -1  } else { 0 },
    if self.as_array()[1] == other.as_array()[1] {  -1  } else { 0 },
    if self.as_array()[2] == other.as_array()[2] {  -1  } else { 0 },
    if self.as_array()[3] == other.as_array()[3] {  -1  } else { 0 },
    if self.as_array()[4] == other.as_array()[4] {  -1  } else { 0 },
    if self.as_array()[5] == other.as_array()[5] {  -1  } else { 0 },
    if self.as_array()[6] == other.as_array()[6] {  -1  } else { 0 },
    if self.as_array()[7] == other.as_array()[7] {  -1  } else { 0 },
])Avx2
- 
- PCMPEQW xmm, xmm
 
sourcefn and_not(&self, other: I16x8) -> I16x8
 
fn and_not(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0] & (!other.as_array()[0]),
    self.as_array()[1] & (!other.as_array()[1]),
    self.as_array()[2] & (!other.as_array()[2]),
    self.as_array()[3] & (!other.as_array()[3]),
    self.as_array()[4] & (!other.as_array()[4]),
    self.as_array()[5] & (!other.as_array()[5]),
    self.as_array()[6] & (!other.as_array()[6]),
    self.as_array()[7] & (!other.as_array()[7]),
])Avx2
- 
- PANDN xmm, xmm
 
sourcefn cmp_gt(&self, other: I16x8) -> I16x8
 
fn cmp_gt(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    if self.as_array()[0] > other.as_array()[0] {  -1  } else { 0 },
    if self.as_array()[1] > other.as_array()[1] {  -1  } else { 0 },
    if self.as_array()[2] > other.as_array()[2] {  -1  } else { 0 },
    if self.as_array()[3] > other.as_array()[3] {  -1  } else { 0 },
    if self.as_array()[4] > other.as_array()[4] {  -1  } else { 0 },
    if self.as_array()[5] > other.as_array()[5] {  -1  } else { 0 },
    if self.as_array()[6] > other.as_array()[6] {  -1  } else { 0 },
    if self.as_array()[7] > other.as_array()[7] {  -1  } else { 0 },
])Avx2
- 
- PCMPGTW xmm, xmm
 
sourcefn shift_left<const BITS: usize>(&self) -> I16x8
 
fn shift_left<const BITS: usize>(&self) -> I16x8
Scalar Equivalent:
let mut out = self.as_array();
for x in out.iter_mut() {
    *x <<= BITS;
}
I16x8::from(out)Avx2
- 
- PSLLW xmm, imm8
 
sourcefn shift_right<const BITS: usize>(&self) -> I16x8
 
fn shift_right<const BITS: usize>(&self) -> I16x8
Scalar Equivalent:
let mut out = self.as_array();
for x in out.iter_mut() {
    *x >>= BITS;
}
I16x8::from(out)Avx2
- 
- PSRAW xmm, imm8
 
sourcefn unpack_lo(&self, other: I16x8) -> I16x8
 
fn unpack_lo(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    // Lane# 0
    self.as_array()[0],
    other.as_array()[0],
    self.as_array()[1],
    other.as_array()[1],
    self.as_array()[2],
    other.as_array()[2],
    self.as_array()[3],
    other.as_array()[3],
])Avx2
- 
- PUNPCKLWD xmm, xmm
 
sourcefn unpack_hi(&self, other: I16x8) -> I16x8
 
fn unpack_hi(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    // Lane# 0
    self.as_array()[4],
    other.as_array()[4],
    self.as_array()[5],
    other.as_array()[5],
    self.as_array()[6],
    other.as_array()[6],
    self.as_array()[7],
    other.as_array()[7],
])Avx2
- 
- PUNPCKHWD xmm, xmm
 
sourcefn max(&self, other: I16x8) -> I16x8
 
fn max(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0].max(other.as_array()[0]),
    self.as_array()[1].max(other.as_array()[1]),
    self.as_array()[2].max(other.as_array()[2]),
    self.as_array()[3].max(other.as_array()[3]),
    self.as_array()[4].max(other.as_array()[4]),
    self.as_array()[5].max(other.as_array()[5]),
    self.as_array()[6].max(other.as_array()[6]),
    self.as_array()[7].max(other.as_array()[7]),
])Avx2
- 
- PMAXSW xmm, xmm
 
sourcefn min(&self, other: I16x8) -> I16x8
 
fn min(&self, other: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0].min(other.as_array()[0]),
    self.as_array()[1].min(other.as_array()[1]),
    self.as_array()[2].min(other.as_array()[2]),
    self.as_array()[3].min(other.as_array()[3]),
    self.as_array()[4].min(other.as_array()[4]),
    self.as_array()[5].min(other.as_array()[5]),
    self.as_array()[6].min(other.as_array()[6]),
    self.as_array()[7].min(other.as_array()[7]),
])Avx2
- 
- PMINSW xmm, xmm
 
const ZERO: Self = _
type BroadcastLoInput = I16x8
sourceimpl SimdBase8x for I16x8
 
impl SimdBase8x for I16x8
sourcefn blend<const B7: bool, const B6: bool, const B5: bool, const B4: bool, const B3: bool, const B2: bool, const B1: bool, const B0: bool>(
    &self,
    if_true: I16x8
) -> I16x8
 
fn blend<const B7: bool, const B6: bool, const B5: bool, const B4: bool, const B3: bool, const B2: bool, const B1: bool, const B0: bool>(
    &self,
    if_true: I16x8
) -> I16x8
Scalar Equivalent:
I16x8::from([
        (if B0 { if_true } else { *self }).as_array()[0],
        (if B1 { if_true } else { *self }).as_array()[1],
        (if B2 { if_true } else { *self }).as_array()[2],
        (if B3 { if_true } else { *self }).as_array()[3],
        (if B4 { if_true } else { *self }).as_array()[4],
        (if B5 { if_true } else { *self }).as_array()[5],
        (if B6 { if_true } else { *self }).as_array()[6],
        (if B7 { if_true } else { *self }).as_array()[7],
])Avx2
- 
- PBLENDW xmm, xmm, imm8
 
sourceimpl Sub<I16x8> for I16x8
 
impl Sub<I16x8> for I16x8
sourcefn sub(self, rhs: I16x8) -> I16x8
 
fn sub(self, rhs: I16x8) -> I16x8
Scalar Equivalent:
I16x8::from([
    self.as_array()[0].wrapping_sub(rhs.as_array()[0]),
    self.as_array()[1].wrapping_sub(rhs.as_array()[1]),
    self.as_array()[2].wrapping_sub(rhs.as_array()[2]),
    self.as_array()[3].wrapping_sub(rhs.as_array()[3]),
    self.as_array()[4].wrapping_sub(rhs.as_array()[4]),
    self.as_array()[5].wrapping_sub(rhs.as_array()[5]),
    self.as_array()[6].wrapping_sub(rhs.as_array()[6]),
    self.as_array()[7].wrapping_sub(rhs.as_array()[7]),
])Avx2
- 
- PSUBW xmm, xmm
 
sourceimpl SubAssign<I16x8> for I16x8
 
impl SubAssign<I16x8> for I16x8
sourcefn sub_assign(&mut self, rhs: Self)
 
fn sub_assign(&mut self, rhs: Self)
Performs the 
-= operation. Read moreimpl Copy for I16x8
impl Eq for I16x8
impl Pod for I16x8
Auto Trait Implementations
impl RefUnwindSafe for I16x8
impl Send for I16x8
impl Sync for I16x8
impl Unpin for I16x8
impl UnwindSafe for I16x8
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> CheckedBitPattern for Twhere
    T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
    T: AnyBitPattern,
type Bits = T
type Bits = T
Self must have the same layout as the specified Bits except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern. Read more