pub trait Simd: 'static + Sync + Send {
type Vi8: SimdInt8<Scalar = i8> + SimdBaseIo;
type Vi16: SimdInt16<Scalar = i16> + SimdBaseIo;
type Vi32: SimdInt32<Engine = Self, Scalar = i32> + SimdBaseIo;
type Vi64: SimdInt64<Engine = Self, Scalar = i64> + SimdBaseIo;
type Vf32: SimdFloat32<Engine = Self, Scalar = f32> + SimdBaseIo;
type Vf64: SimdFloat64<Engine = Self, Scalar = f64> + SimdBaseIo;
const VF32_WIDTH: usize = <Self::Vf32>::WIDTH;
const VF64_WIDTH: usize = <Self::Vf64>::WIDTH;
const VI16_WIDTH: usize = <Self::Vi16>::WIDTH;
const VI32_WIDTH: usize = <Self::Vi32>::WIDTH;
const VI64_WIDTH: usize = <Self::Vi64>::WIDTH;
Show 151 methods
// Required method
fn invoke<R>(f: impl FnOnce() -> R) -> R;
// Provided methods
unsafe fn mul_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn mul_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn not_epi32(a: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn not_epi64(a: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn or_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn or_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn or_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn or_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn xor_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn xor_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn xor_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn xor_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn slli_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32 { ... }
unsafe fn srai_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32 { ... }
unsafe fn div_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn div_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn add_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16 { ... }
unsafe fn sub_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16 { ... }
unsafe fn add_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn add_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn add_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn add_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn and_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn and_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn and_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn and_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn abs_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn abs_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn mullo_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn mullo_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn mullo_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16 { ... }
unsafe fn andnot_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn andnot_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn andnot_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn andnot_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn blendv_epi32(
a: Self::Vi32,
b: Self::Vi32,
mask: Self::Vi32
) -> Self::Vi32 { ... }
unsafe fn blendv_epi64(
a: Self::Vi64,
b: Self::Vi64,
mask: Self::Vi64
) -> Self::Vi64 { ... }
unsafe fn blendv_ps(
a: Self::Vf32,
b: Self::Vf32,
mask: Self::Vf32
) -> Self::Vf32 { ... }
unsafe fn blendv_pd(
a: Self::Vf64,
b: Self::Vf64,
mask: Self::Vf64
) -> Self::Vf64 { ... }
unsafe fn castps_epi32(a: Self::Vf32) -> Self::Vi32 { ... }
unsafe fn castpd_epi64(a: Self::Vf64) -> Self::Vi64 { ... }
unsafe fn castepi32_ps(a: Self::Vi32) -> Self::Vf32 { ... }
unsafe fn castepi64_pd(a: Self::Vi64) -> Self::Vf64 { ... }
unsafe fn castps_pd(_a: Self::Vf32) -> Self::Vf64 { ... }
unsafe fn castpd_ps(_a: Self::Vf64) -> Self::Vf32 { ... }
unsafe fn cvtps_epi32(a: Self::Vf32) -> Self::Vi32 { ... }
unsafe fn cvtpd_epi64(a: Self::Vf64) -> Self::Vi64 { ... }
unsafe fn cvtepi32_ps(a: Self::Vi32) -> Self::Vf32 { ... }
unsafe fn cvtepi64_pd(a: Self::Vi64) -> Self::Vf64 { ... }
unsafe fn cmpeq_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn cmpneq_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn cmpge_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn cmpgt_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn cmple_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn cmplt_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn cmpeq_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn cmpneq_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn cmpge_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn cmpgt_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn cmple_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn cmplt_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn cmpeq_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn cmpneq_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn cmpge_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn cmpgt_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn cmple_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn cmplt_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn cmpeq_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn cmpneq_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn cmpge_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn cmpgt_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn cmple_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn cmplt_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn ceil_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn ceil_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn floor_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn floor_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn fast_round_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn fast_ceil_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn fast_floor_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn fast_floor_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn fmadd_ps(
a: Self::Vf32,
b: Self::Vf32,
c: Self::Vf32
) -> Self::Vf32 { ... }
unsafe fn fnmadd_ps(
a: Self::Vf32,
b: Self::Vf32,
c: Self::Vf32
) -> Self::Vf32 { ... }
unsafe fn fmadd_pd(
a: Self::Vf64,
b: Self::Vf64,
c: Self::Vf64
) -> Self::Vf64 { ... }
unsafe fn fnmadd_pd(
a: Self::Vf64,
b: Self::Vf64,
c: Self::Vf64
) -> Self::Vf64 { ... }
unsafe fn fmsub_ps(
a: Self::Vf32,
b: Self::Vf32,
c: Self::Vf32
) -> Self::Vf32 { ... }
unsafe fn fnmsub_ps(
a: Self::Vf32,
b: Self::Vf32,
c: Self::Vf32
) -> Self::Vf32 { ... }
unsafe fn fmsub_pd(
a: Self::Vf64,
b: Self::Vf64,
c: Self::Vf64
) -> Self::Vf64 { ... }
unsafe fn fnmsub_pd(
a: Self::Vf64,
b: Self::Vf64,
c: Self::Vf64
) -> Self::Vf64 { ... }
unsafe fn horizontal_add_ps(a: Self::Vf32) -> f32 { ... }
unsafe fn horizontal_add_pd(a: Self::Vf64) -> f64 { ... }
unsafe fn i32gather_epi32(_arr: &[i32], _index: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn i64gather_epi64(_arr: &[i64], _index: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn i32gather_ps(_arr: &[f32], _index: Self::Vi32) -> Self::Vf32 { ... }
unsafe fn load_ps(a: &f32) -> Self::Vf32 { ... }
unsafe fn load_pd(a: &f64) -> Self::Vf64 { ... }
unsafe fn load_epi16(a: &i16) -> Self::Vi16 { ... }
unsafe fn load_epi32(a: &i32) -> Self::Vi32 { ... }
unsafe fn load_epi64(a: &i64) -> Self::Vi64 { ... }
unsafe fn loadu_ps(a: &f32) -> Self::Vf32 { ... }
unsafe fn loadu_pd(a: &f64) -> Self::Vf64 { ... }
unsafe fn loadu_epi32(a: &i32) -> Self::Vi32 { ... }
unsafe fn loadu_epi64(a: &i64) -> Self::Vi64 { ... }
unsafe fn maskload_epi32(_mem_addr: &i32, _mask: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn maskload_epi64(_mem_addr: &i64, _mask: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn maskload_ps(_mem_addr: &f32, _mask: Self::Vi32) -> Self::Vf32 { ... }
unsafe fn maskload_pd(_mem_addr: &f64, _mask: Self::Vi64) -> Self::Vf64 { ... }
unsafe fn store_ps(mem_addr: &mut f32, a: Self::Vf32) { ... }
unsafe fn store_pd(mem_addr: &mut f64, a: Self::Vf64) { ... }
unsafe fn store_epi32(mem_addr: &mut i32, a: Self::Vi32) { ... }
unsafe fn store_epi64(mem_addr: &mut i64, a: Self::Vi64) { ... }
unsafe fn storeu_ps(mem_addr: &mut f32, a: Self::Vf32) { ... }
unsafe fn storeu_pd(mem_addr: &mut f64, a: Self::Vf64) { ... }
unsafe fn storeu_epi32(mem_addr: &mut i32, a: Self::Vi32) { ... }
unsafe fn storeu_epi64(mem_addr: &mut i64, a: Self::Vi64) { ... }
unsafe fn maskstore_epi32(
mem_addr: &mut i32,
mask: Self::Vi32,
a: Self::Vi32
) { ... }
unsafe fn maskstore_epi64(
mem_addr: &mut i64,
mask: Self::Vi64,
a: Self::Vi64
) { ... }
unsafe fn maskstore_ps(mem_addr: &mut f32, mask: Self::Vi32, a: Self::Vf32) { ... }
unsafe fn maskstore_pd(mem_addr: &mut f64, mask: Self::Vi64, a: Self::Vf64) { ... }
unsafe fn max_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn min_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn max_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn min_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn max_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn min_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn rcp_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn round_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn round_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn set1_epi32(a: i32) -> Self::Vi32 { ... }
unsafe fn set1_epi64(a: i64) -> Self::Vi64 { ... }
unsafe fn set1_ps(a: f32) -> Self::Vf32 { ... }
unsafe fn set1_pd(a: f64) -> Self::Vf64 { ... }
unsafe fn setzero_ps() -> Self::Vf32 { ... }
unsafe fn setzero_pd() -> Self::Vf64 { ... }
unsafe fn setzero_epi32() -> Self::Vi32 { ... }
unsafe fn setzero_epi64() -> Self::Vi64 { ... }
unsafe fn srai_epi64(a: Self::Vi64, amt_const: i32) -> Self::Vi64 { ... }
unsafe fn srli_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32 { ... }
unsafe fn sra_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32 { ... }
unsafe fn srl_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32 { ... }
unsafe fn sll_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32 { ... }
unsafe fn sub_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32 { ... }
unsafe fn sub_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64 { ... }
unsafe fn sub_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn sub_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn sqrt_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn rsqrt_ps(a: Self::Vf32) -> Self::Vf32 { ... }
unsafe fn sqrt_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn rsqrt_pd(a: Self::Vf64) -> Self::Vf64 { ... }
unsafe fn shuffle_epi32<const IMM8: i32>(_a: Self::Vi32) -> Self::Vi32 { ... }
}
Expand description
The abstract SIMD trait which is implemented by Avx2, Sse41, etc
Required Associated Types§
sourcetype Vi8: SimdInt8<Scalar = i8> + SimdBaseIo
type Vi8: SimdInt8<Scalar = i8> + SimdBaseIo
Vector of i8s. Corresponds to __m128i when used with the Sse impl, __m256i when used with Avx2, or a single i8 when used with Scalar.
sourcetype Vi16: SimdInt16<Scalar = i16> + SimdBaseIo
type Vi16: SimdInt16<Scalar = i16> + SimdBaseIo
Vector of i16s. Corresponds to __m128i when used with the Sse impl, __m256i when used with Avx2, or a single i16 when used with Scalar.
sourcetype Vi32: SimdInt32<Engine = Self, Scalar = i32> + SimdBaseIo
type Vi32: SimdInt32<Engine = Self, Scalar = i32> + SimdBaseIo
Vector of i32s. Corresponds to __m128i when used with the Sse impl, __m256i when used with Avx2, or a single i32 when used with Scalar.
sourcetype Vi64: SimdInt64<Engine = Self, Scalar = i64> + SimdBaseIo
type Vi64: SimdInt64<Engine = Self, Scalar = i64> + SimdBaseIo
Vector of i64s. Corresponds to __m128i when used with the Sse impl, __m256i when used with Avx2, or a single i64 when used with Scalar.
sourcetype Vf32: SimdFloat32<Engine = Self, Scalar = f32> + SimdBaseIo
type Vf32: SimdFloat32<Engine = Self, Scalar = f32> + SimdBaseIo
Vector of f32s. Corresponds to __m128 when used with the Sse impl, __m256 when used with Avx2, or a single f32 when used with Scalar.
sourcetype Vf64: SimdFloat64<Engine = Self, Scalar = f64> + SimdBaseIo
type Vf64: SimdFloat64<Engine = Self, Scalar = f64> + SimdBaseIo
Vector of f64s. Corresponds to __m128d when used with the Sse impl, __m256d when used with Avx2, or a single f64 when used with Scalar.
Provided Associated Constants§
sourceconst VF32_WIDTH: usize = <Self::Vf32>::WIDTH
const VF32_WIDTH: usize = <Self::Vf32>::WIDTH
sourceconst VF64_WIDTH: usize = <Self::Vf64>::WIDTH
const VF64_WIDTH: usize = <Self::Vf64>::WIDTH
sourceconst VI16_WIDTH: usize = <Self::Vi16>::WIDTH
const VI16_WIDTH: usize = <Self::Vi16>::WIDTH
sourceconst VI32_WIDTH: usize = <Self::Vi32>::WIDTH
const VI32_WIDTH: usize = <Self::Vi32>::WIDTH
sourceconst VI64_WIDTH: usize = <Self::Vi64>::WIDTH
const VI64_WIDTH: usize = <Self::Vi64>::WIDTH
Required Methods§
Provided Methods§
sourceunsafe fn mul_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn mul_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn mul_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn mul_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn not_epi32(a: Self::Vi32) -> Self::Vi32
unsafe fn not_epi32(a: Self::Vi32) -> Self::Vi32
sourceunsafe fn not_epi64(a: Self::Vi64) -> Self::Vi64
unsafe fn not_epi64(a: Self::Vi64) -> Self::Vi64
sourceunsafe fn or_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn or_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn or_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn or_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn or_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn or_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn or_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn or_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn xor_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn xor_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn xor_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn xor_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn xor_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn xor_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn xor_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn xor_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn slli_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32
unsafe fn slli_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32
amt must be a constant
sourceunsafe fn srai_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32
unsafe fn srai_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32
amt must be a constant
sourceunsafe fn div_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn div_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn div_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn div_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn add_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16
unsafe fn add_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16
sourceunsafe fn sub_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16
unsafe fn sub_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16
sourceunsafe fn add_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn add_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn add_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn add_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn add_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn add_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn add_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn add_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn and_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn and_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn and_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn and_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn and_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn and_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn and_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn and_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn abs_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn abs_ps(a: Self::Vf32) -> Self::Vf32
sourceunsafe fn abs_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn abs_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn mullo_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn mullo_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn mullo_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn mullo_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn mullo_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16
unsafe fn mullo_epi16(a: Self::Vi16, b: Self::Vi16) -> Self::Vi16
sourceunsafe fn andnot_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn andnot_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn andnot_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn andnot_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn andnot_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn andnot_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn andnot_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn andnot_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn blendv_epi32(
a: Self::Vi32,
b: Self::Vi32,
mask: Self::Vi32
) -> Self::Vi32
unsafe fn blendv_epi32( a: Self::Vi32, b: Self::Vi32, mask: Self::Vi32 ) -> Self::Vi32
Note SSE2 will select B only when all bits are 1, while SSE41 and AVX2 only check the high bit. To maintain portability ensure all bits are 1 when using blend. Results of comparison operations adhere to this.
sourceunsafe fn blendv_epi64(
a: Self::Vi64,
b: Self::Vi64,
mask: Self::Vi64
) -> Self::Vi64
unsafe fn blendv_epi64( a: Self::Vi64, b: Self::Vi64, mask: Self::Vi64 ) -> Self::Vi64
Note SSE2 will select B only when all bits are 1, while SSE41 and AVX2 only check the high bit. To maintain portability ensure all bits are 1 when using blend. Results of comparison operations adhere to this.
sourceunsafe fn blendv_ps(
a: Self::Vf32,
b: Self::Vf32,
mask: Self::Vf32
) -> Self::Vf32
unsafe fn blendv_ps( a: Self::Vf32, b: Self::Vf32, mask: Self::Vf32 ) -> Self::Vf32
Note SSE2 will select B only when all bits are 1, while SSE41 and AVX2 only check the high bit. To maintain portability ensure all bits are 1 when using blend. Results of comparison operations adhere to this.
sourceunsafe fn blendv_pd(
a: Self::Vf64,
b: Self::Vf64,
mask: Self::Vf64
) -> Self::Vf64
unsafe fn blendv_pd( a: Self::Vf64, b: Self::Vf64, mask: Self::Vf64 ) -> Self::Vf64
Note SSE2 will select B only when all bits are 1, while SSE41 and AVX2 only check the high bit. To maintain portability ensure all bits are 1 when using blend. Results of comparison operations adhere to this.
sourceunsafe fn castps_epi32(a: Self::Vf32) -> Self::Vi32
unsafe fn castps_epi32(a: Self::Vf32) -> Self::Vi32
sourceunsafe fn castpd_epi64(a: Self::Vf64) -> Self::Vi64
unsafe fn castpd_epi64(a: Self::Vf64) -> Self::Vi64
sourceunsafe fn castepi32_ps(a: Self::Vi32) -> Self::Vf32
unsafe fn castepi32_ps(a: Self::Vi32) -> Self::Vf32
sourceunsafe fn castepi64_pd(a: Self::Vi64) -> Self::Vf64
unsafe fn castepi64_pd(a: Self::Vi64) -> Self::Vf64
sourceunsafe fn castps_pd(_a: Self::Vf32) -> Self::Vf64
unsafe fn castps_pd(_a: Self::Vf32) -> Self::Vf64
Converts the type of a f32 vector to a f64 vector without changing the underlying bits.
sourceunsafe fn castpd_ps(_a: Self::Vf64) -> Self::Vf32
unsafe fn castpd_ps(_a: Self::Vf64) -> Self::Vf32
Converts the type of a f64 vector to a f32 vector without changing the underlying bits.
sourceunsafe fn cvtps_epi32(a: Self::Vf32) -> Self::Vi32
unsafe fn cvtps_epi32(a: Self::Vf32) -> Self::Vi32
Currently scalar will have different results in some cases depending on the current SSE rounding mode.
sourceunsafe fn cvtpd_epi64(a: Self::Vf64) -> Self::Vi64
unsafe fn cvtpd_epi64(a: Self::Vf64) -> Self::Vi64
sourceunsafe fn cvtepi32_ps(a: Self::Vi32) -> Self::Vf32
unsafe fn cvtepi32_ps(a: Self::Vi32) -> Self::Vf32
sourceunsafe fn cvtepi64_pd(a: Self::Vi64) -> Self::Vf64
unsafe fn cvtepi64_pd(a: Self::Vi64) -> Self::Vf64
sourceunsafe fn cmpeq_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn cmpeq_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn cmpneq_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn cmpneq_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn cmpge_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn cmpge_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn cmpgt_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn cmpgt_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn cmple_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn cmple_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn cmplt_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn cmplt_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn cmpeq_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn cmpeq_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn cmpneq_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn cmpneq_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn cmpge_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn cmpge_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn cmpgt_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn cmpgt_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn cmple_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn cmple_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn cmplt_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn cmplt_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn cmpeq_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn cmpeq_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn cmpneq_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn cmpneq_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn cmpge_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn cmpge_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn cmpgt_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn cmpgt_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn cmple_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn cmple_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn cmplt_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn cmplt_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn cmpeq_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn cmpeq_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn cmpneq_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn cmpneq_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn cmpge_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn cmpge_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn cmpgt_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn cmpgt_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn cmple_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn cmple_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn cmplt_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn cmplt_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn ceil_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn ceil_ps(a: Self::Vf32) -> Self::Vf32
sourceunsafe fn ceil_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn ceil_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn floor_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn floor_ps(a: Self::Vf32) -> Self::Vf32
sourceunsafe fn floor_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn floor_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn fast_round_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn fast_round_ps(a: Self::Vf32) -> Self::Vf32
When using Sse2, fastround uses a faster version of floor that only works on floating point values small enough to fit in an i32. This is a big performance boost if you don’t need a complete floor.
sourceunsafe fn fast_ceil_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn fast_ceil_ps(a: Self::Vf32) -> Self::Vf32
When using Sse2, fastceil uses a faster version of floor that only works on floating point values small enough to fit in an i32. This is a big performance boost if you don’t need a complete floor.
sourceunsafe fn fast_floor_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn fast_floor_ps(a: Self::Vf32) -> Self::Vf32
When using Sse2, fastfloor uses a faster version of floor that only works on floating point values small enough to fit in an i32. This is a big performance boost if you don’t need a complete floor.
sourceunsafe fn fast_floor_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn fast_floor_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn fmadd_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
unsafe fn fmadd_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and add are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fnmadd_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
unsafe fn fnmadd_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and add are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fmadd_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
unsafe fn fmadd_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and add are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fnmadd_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
unsafe fn fnmadd_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and add are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fmsub_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
unsafe fn fmsub_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and sub are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fnmsub_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
unsafe fn fnmsub_ps(a: Self::Vf32, b: Self::Vf32, c: Self::Vf32) -> Self::Vf32
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and sub are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fmsub_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
unsafe fn fmsub_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and sub are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn fnmsub_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
unsafe fn fnmsub_pd(a: Self::Vf64, b: Self::Vf64, c: Self::Vf64) -> Self::Vf64
Actual FMA instructions will be used when Avx2 is used, otherwise a mul and sub are used to replicate it, allowing you to just always use FMA in your code and get best perf in both cases.
sourceunsafe fn horizontal_add_ps(a: Self::Vf32) -> f32
unsafe fn horizontal_add_ps(a: Self::Vf32) -> f32
Adds all lanes together. Distinct from h_add which adds pairs.
sourceunsafe fn horizontal_add_pd(a: Self::Vf64) -> f64
unsafe fn horizontal_add_pd(a: Self::Vf64) -> f64
Adds all lanes together. Distinct from h_add which adds pairs.
sourceunsafe fn i32gather_epi32(_arr: &[i32], _index: Self::Vi32) -> Self::Vi32
unsafe fn i32gather_epi32(_arr: &[i32], _index: Self::Vi32) -> Self::Vi32
Sse2 and Sse41 paths will simulate a gather by breaking out and doing scalar array accesses, because gather doesn’t exist until Avx2.
sourceunsafe fn i64gather_epi64(_arr: &[i64], _index: Self::Vi64) -> Self::Vi64
unsafe fn i64gather_epi64(_arr: &[i64], _index: Self::Vi64) -> Self::Vi64
sourceunsafe fn i32gather_ps(_arr: &[f32], _index: Self::Vi32) -> Self::Vf32
unsafe fn i32gather_ps(_arr: &[f32], _index: Self::Vi32) -> Self::Vf32
Sse2 and Sse41 paths will simulate a gather by breaking out and doing scalar array accesses, because gather doesn’t exist until Avx2.
sourceunsafe fn load_ps(a: &f32) -> Self::Vf32
unsafe fn load_ps(a: &f32) -> Self::Vf32
sourceunsafe fn load_pd(a: &f64) -> Self::Vf64
unsafe fn load_pd(a: &f64) -> Self::Vf64
sourceunsafe fn load_epi16(a: &i16) -> Self::Vi16
unsafe fn load_epi16(a: &i16) -> Self::Vi16
sourceunsafe fn load_epi32(a: &i32) -> Self::Vi32
unsafe fn load_epi32(a: &i32) -> Self::Vi32
sourceunsafe fn load_epi64(a: &i64) -> Self::Vi64
unsafe fn load_epi64(a: &i64) -> Self::Vi64
sourceunsafe fn loadu_ps(a: &f32) -> Self::Vf32
unsafe fn loadu_ps(a: &f32) -> Self::Vf32
sourceunsafe fn loadu_pd(a: &f64) -> Self::Vf64
unsafe fn loadu_pd(a: &f64) -> Self::Vf64
sourceunsafe fn loadu_epi32(a: &i32) -> Self::Vi32
unsafe fn loadu_epi32(a: &i32) -> Self::Vi32
sourceunsafe fn loadu_epi64(a: &i64) -> Self::Vi64
unsafe fn loadu_epi64(a: &i64) -> Self::Vi64
sourceunsafe fn maskload_epi32(_mem_addr: &i32, _mask: Self::Vi32) -> Self::Vi32
unsafe fn maskload_epi32(_mem_addr: &i32, _mask: Self::Vi32) -> Self::Vi32
Note, SSE2 and SSE4 will load when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure that the high bit is set.
sourceunsafe fn maskload_epi64(_mem_addr: &i64, _mask: Self::Vi64) -> Self::Vi64
unsafe fn maskload_epi64(_mem_addr: &i64, _mask: Self::Vi64) -> Self::Vi64
Note, SSE2 and SSE4 will load when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure that the high bit is set.
sourceunsafe fn maskload_ps(_mem_addr: &f32, _mask: Self::Vi32) -> Self::Vf32
unsafe fn maskload_ps(_mem_addr: &f32, _mask: Self::Vi32) -> Self::Vf32
Note, SSE2 and SSE4 will load when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure that the high bit is set.
sourceunsafe fn maskload_pd(_mem_addr: &f64, _mask: Self::Vi64) -> Self::Vf64
unsafe fn maskload_pd(_mem_addr: &f64, _mask: Self::Vi64) -> Self::Vf64
Note, SSE2 and SSE4 will load when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure that the high bit is set.
sourceunsafe fn store_ps(mem_addr: &mut f32, a: Self::Vf32)
unsafe fn store_ps(mem_addr: &mut f32, a: Self::Vf32)
sourceunsafe fn store_pd(mem_addr: &mut f64, a: Self::Vf64)
unsafe fn store_pd(mem_addr: &mut f64, a: Self::Vf64)
sourceunsafe fn store_epi32(mem_addr: &mut i32, a: Self::Vi32)
unsafe fn store_epi32(mem_addr: &mut i32, a: Self::Vi32)
sourceunsafe fn store_epi64(mem_addr: &mut i64, a: Self::Vi64)
unsafe fn store_epi64(mem_addr: &mut i64, a: Self::Vi64)
sourceunsafe fn storeu_ps(mem_addr: &mut f32, a: Self::Vf32)
unsafe fn storeu_ps(mem_addr: &mut f32, a: Self::Vf32)
sourceunsafe fn storeu_pd(mem_addr: &mut f64, a: Self::Vf64)
unsafe fn storeu_pd(mem_addr: &mut f64, a: Self::Vf64)
sourceunsafe fn storeu_epi32(mem_addr: &mut i32, a: Self::Vi32)
unsafe fn storeu_epi32(mem_addr: &mut i32, a: Self::Vi32)
sourceunsafe fn storeu_epi64(mem_addr: &mut i64, a: Self::Vi64)
unsafe fn storeu_epi64(mem_addr: &mut i64, a: Self::Vi64)
sourceunsafe fn maskstore_epi32(mem_addr: &mut i32, mask: Self::Vi32, a: Self::Vi32)
unsafe fn maskstore_epi32(mem_addr: &mut i32, mask: Self::Vi32, a: Self::Vi32)
Note, SSE2 and SSE4 will store when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure the high bit is set.
sourceunsafe fn maskstore_epi64(mem_addr: &mut i64, mask: Self::Vi64, a: Self::Vi64)
unsafe fn maskstore_epi64(mem_addr: &mut i64, mask: Self::Vi64, a: Self::Vi64)
Note, SSE2 and SSE4 will store when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure the high bit is set.
sourceunsafe fn maskstore_ps(mem_addr: &mut f32, mask: Self::Vi32, a: Self::Vf32)
unsafe fn maskstore_ps(mem_addr: &mut f32, mask: Self::Vi32, a: Self::Vf32)
Note, SSE2 and SSE4 will store when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure the high bit is set.
sourceunsafe fn maskstore_pd(mem_addr: &mut f64, mask: Self::Vi64, a: Self::Vf64)
unsafe fn maskstore_pd(mem_addr: &mut f64, mask: Self::Vi64, a: Self::Vf64)
Note, SSE2 and SSE4 will store when mask[i] is nonzero, where AVX2 will store only when the high bit is set. To ensure portability ensure the high bit is set.
sourceunsafe fn max_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn max_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn min_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn min_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn max_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn max_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn min_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn min_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn max_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn max_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn min_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn min_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn rcp_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn rcp_ps(a: Self::Vf32) -> Self::Vf32
sourceunsafe fn round_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn round_ps(a: Self::Vf32) -> Self::Vf32
Round is implemented for Sse2 by combining other Sse2 operations.
sourceunsafe fn round_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn round_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn set1_epi32(a: i32) -> Self::Vi32
unsafe fn set1_epi32(a: i32) -> Self::Vi32
sourceunsafe fn set1_epi64(a: i64) -> Self::Vi64
unsafe fn set1_epi64(a: i64) -> Self::Vi64
sourceunsafe fn set1_ps(a: f32) -> Self::Vf32
unsafe fn set1_ps(a: f32) -> Self::Vf32
sourceunsafe fn set1_pd(a: f64) -> Self::Vf64
unsafe fn set1_pd(a: f64) -> Self::Vf64
sourceunsafe fn setzero_ps() -> Self::Vf32
unsafe fn setzero_ps() -> Self::Vf32
sourceunsafe fn setzero_pd() -> Self::Vf64
unsafe fn setzero_pd() -> Self::Vf64
sourceunsafe fn setzero_epi32() -> Self::Vi32
unsafe fn setzero_epi32() -> Self::Vi32
sourceunsafe fn setzero_epi64() -> Self::Vi64
unsafe fn setzero_epi64() -> Self::Vi64
sourceunsafe fn srai_epi64(a: Self::Vi64, amt_const: i32) -> Self::Vi64
unsafe fn srai_epi64(a: Self::Vi64, amt_const: i32) -> Self::Vi64
amt must be a constant
sourceunsafe fn srli_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32
unsafe fn srli_epi32(a: Self::Vi32, amt_const: i32) -> Self::Vi32
amt must be a constant
sourceunsafe fn sra_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32
unsafe fn sra_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32
amt does not have to be a constant, but may be slower than the srai version
sourceunsafe fn srl_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32
unsafe fn srl_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32
amt does not have to be a constant, but may be slower than the srli version
sourceunsafe fn sll_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32
unsafe fn sll_epi32(a: Self::Vi32, amt: i32) -> Self::Vi32
amt does not have to be a constant, but may be slower than the slli version
sourceunsafe fn sub_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
unsafe fn sub_epi32(a: Self::Vi32, b: Self::Vi32) -> Self::Vi32
sourceunsafe fn sub_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
unsafe fn sub_epi64(a: Self::Vi64, b: Self::Vi64) -> Self::Vi64
sourceunsafe fn sub_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
unsafe fn sub_ps(a: Self::Vf32, b: Self::Vf32) -> Self::Vf32
sourceunsafe fn sub_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
unsafe fn sub_pd(a: Self::Vf64, b: Self::Vf64) -> Self::Vf64
sourceunsafe fn sqrt_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn sqrt_ps(a: Self::Vf32) -> Self::Vf32
sourceunsafe fn rsqrt_ps(a: Self::Vf32) -> Self::Vf32
unsafe fn rsqrt_ps(a: Self::Vf32) -> Self::Vf32
sourceunsafe fn sqrt_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn sqrt_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn rsqrt_pd(a: Self::Vf64) -> Self::Vf64
unsafe fn rsqrt_pd(a: Self::Vf64) -> Self::Vf64
sourceunsafe fn shuffle_epi32<const IMM8: i32>(_a: Self::Vi32) -> Self::Vi32
unsafe fn shuffle_epi32<const IMM8: i32>(_a: Self::Vi32) -> Self::Vi32
Using the shuffle function is undefined behavior because imm8 behaves differently on different architectures.