pub trait Simd: Seal + Debug + Copy + Send + Sync + 'static {
type m32s: Debug + Copy + Send + Sync + 'static;
type f32s: Debug + Copy + Send + Sync + Pod + 'static;
type i32s: Debug + Copy + Send + Sync + Pod + 'static;
type u32s: Debug + Copy + Send + Sync + Pod + 'static;
type m64s: Debug + Copy + Send + Sync + 'static;
type f64s: Debug + Copy + Send + Sync + Pod + 'static;
type i64s: Debug + Copy + Send + Sync + Pod + 'static;
type u64s: Debug + Copy + Send + Sync + Pod + 'static;
Show 105 methods
fn vectorize<Op: WithSimd>(self, op: Op) -> Op::Output;
fn m32s_not(self, a: Self::m32s) -> Self::m32s;
fn m32s_and(self, a: Self::m32s, b: Self::m32s) -> Self::m32s;
fn m32s_or(self, a: Self::m32s, b: Self::m32s) -> Self::m32s;
fn m32s_xor(self, a: Self::m32s, b: Self::m32s) -> Self::m32s;
fn m64s_not(self, a: Self::m64s) -> Self::m64s;
fn m64s_and(self, a: Self::m64s, b: Self::m64s) -> Self::m64s;
fn m64s_or(self, a: Self::m64s, b: Self::m64s) -> Self::m64s;
fn m64s_xor(self, a: Self::m64s, b: Self::m64s) -> Self::m64s;
fn u32s_not(self, a: Self::u32s) -> Self::u32s;
fn u32s_and(self, a: Self::u32s, b: Self::u32s) -> Self::u32s;
fn u32s_or(self, a: Self::u32s, b: Self::u32s) -> Self::u32s;
fn u32s_xor(self, a: Self::u32s, b: Self::u32s) -> Self::u32s;
fn u64s_not(self, a: Self::u64s) -> Self::u64s;
fn u64s_and(self, a: Self::u64s, b: Self::u64s) -> Self::u64s;
fn u64s_or(self, a: Self::u64s, b: Self::u64s) -> Self::u64s;
fn u64s_xor(self, a: Self::u64s, b: Self::u64s) -> Self::u64s;
fn m32s_select_u32s(
self,
mask: Self::m32s,
if_true: Self::u32s,
if_false: Self::u32s
) -> Self::u32s;
fn m64s_select_u64s(
self,
mask: Self::m64s,
if_true: Self::u64s,
if_false: Self::u64s
) -> Self::u64s;
fn u32s_splat(self, value: u32) -> Self::u32s;
fn u32s_add(self, a: Self::u32s, b: Self::u32s) -> Self::u32s;
fn u32s_sub(self, a: Self::u32s, b: Self::u32s) -> Self::u32s;
fn u64s_splat(self, value: u64) -> Self::u64s;
fn u64s_add(self, a: Self::u64s, b: Self::u64s) -> Self::u64s;
fn u64s_sub(self, a: Self::u64s, b: Self::u64s) -> Self::u64s;
fn f32s_splat(self, value: f32) -> Self::f32s;
fn f32s_add(self, a: Self::f32s, b: Self::f32s) -> Self::f32s;
fn f32s_sub(self, a: Self::f32s, b: Self::f32s) -> Self::f32s;
fn f32s_mul(self, a: Self::f32s, b: Self::f32s) -> Self::f32s;
fn f32s_div(self, a: Self::f32s, b: Self::f32s) -> Self::f32s;
fn f32s_equal(self, a: Self::f32s, b: Self::f32s) -> Self::m32s;
fn f32s_less_than(self, a: Self::f32s, b: Self::f32s) -> Self::m32s;
fn f32s_less_than_or_equal(self, a: Self::f32s, b: Self::f32s) -> Self::m32s;
fn f32s_min(self, a: Self::f32s, b: Self::f32s) -> Self::f32s;
fn f32s_max(self, a: Self::f32s, b: Self::f32s) -> Self::f32s;
fn f32s_reduce_sum(self, a: Self::f32s) -> f32;
fn f32s_reduce_product(self, a: Self::f32s) -> f32;
fn f32s_reduce_min(self, a: Self::f32s) -> f32;
fn f32s_reduce_max(self, a: Self::f32s) -> f32;
fn f64s_splat(self, value: f64) -> Self::f64s;
fn f64s_add(self, a: Self::f64s, b: Self::f64s) -> Self::f64s;
fn f64s_sub(self, a: Self::f64s, b: Self::f64s) -> Self::f64s;
fn f64s_mul(self, a: Self::f64s, b: Self::f64s) -> Self::f64s;
fn f64s_div(self, a: Self::f64s, b: Self::f64s) -> Self::f64s;
fn f64s_equal(self, a: Self::f64s, b: Self::f64s) -> Self::m64s;
fn f64s_less_than(self, a: Self::f64s, b: Self::f64s) -> Self::m64s;
fn f64s_less_than_or_equal(self, a: Self::f64s, b: Self::f64s) -> Self::m64s;
fn f64s_min(self, a: Self::f64s, b: Self::f64s) -> Self::f64s;
fn f64s_max(self, a: Self::f64s, b: Self::f64s) -> Self::f64s;
fn f64s_reduce_sum(self, a: Self::f64s) -> f64;
fn f64s_reduce_product(self, a: Self::f64s) -> f64;
fn f64s_reduce_min(self, a: Self::f64s) -> f64;
fn f64s_reduce_max(self, a: Self::f64s) -> f64;
fn f32s_as_simd(slice: &[f32]) -> (&[Self::f32s], &[f32]) { ... }
fn f32s_as_mut_simd(slice: &mut [f32]) -> (&mut [Self::f32s], &mut [f32]) { ... }
fn f64s_as_simd(slice: &[f64]) -> (&[Self::f64s], &[f64]) { ... }
fn f64s_as_mut_simd(slice: &mut [f64]) -> (&mut [Self::f64s], &mut [f64]) { ... }
fn i32s_not(self, a: Self::i32s) -> Self::i32s { ... }
fn i32s_and(self, a: Self::i32s, b: Self::i32s) -> Self::i32s { ... }
fn i32s_or(self, a: Self::i32s, b: Self::i32s) -> Self::i32s { ... }
fn i32s_xor(self, a: Self::i32s, b: Self::i32s) -> Self::i32s { ... }
fn i64s_not(self, a: Self::i64s) -> Self::i64s { ... }
fn i64s_and(self, a: Self::i64s, b: Self::i64s) -> Self::i64s { ... }
fn i64s_or(self, a: Self::i64s, b: Self::i64s) -> Self::i64s { ... }
fn i64s_xor(self, a: Self::i64s, b: Self::i64s) -> Self::i64s { ... }
fn f32s_not(self, a: Self::f32s) -> Self::f32s { ... }
fn f32s_and(self, a: Self::f32s, b: Self::f32s) -> Self::f32s { ... }
fn f32s_or(self, a: Self::f32s, b: Self::f32s) -> Self::f32s { ... }
fn f32s_xor(self, a: Self::f32s, b: Self::f32s) -> Self::f32s { ... }
fn f64s_not(self, a: Self::f64s) -> Self::f64s { ... }
fn f64s_and(self, a: Self::f64s, b: Self::f64s) -> Self::f64s { ... }
fn f64s_or(self, a: Self::f64s, b: Self::f64s) -> Self::f64s { ... }
fn f64s_xor(self, a: Self::f64s, b: Self::f64s) -> Self::f64s { ... }
fn m32s_select_i32s(
self,
mask: Self::m32s,
if_true: Self::i32s,
if_false: Self::i32s
) -> Self::i32s { ... }
fn m32s_select_f32s(
self,
mask: Self::m32s,
if_true: Self::f32s,
if_false: Self::f32s
) -> Self::f32s { ... }
fn m64s_select_i64s(
self,
mask: Self::m64s,
if_true: Self::i64s,
if_false: Self::i64s
) -> Self::i64s { ... }
fn m64s_select_f64s(
self,
mask: Self::m64s,
if_true: Self::f64s,
if_false: Self::f64s
) -> Self::f64s { ... }
fn i32s_splat(self, value: i32) -> Self::i32s { ... }
fn i32s_add(self, a: Self::i32s, b: Self::i32s) -> Self::i32s { ... }
fn i32s_sub(self, a: Self::i32s, b: Self::i32s) -> Self::i32s { ... }
fn i64s_splat(self, value: i64) -> Self::i64s { ... }
fn i64s_add(self, a: Self::i64s, b: Self::i64s) -> Self::i64s { ... }
fn i64s_sub(self, a: Self::i64s, b: Self::i64s) -> Self::i64s { ... }
fn f32s_abs(self, a: Self::f32s) -> Self::f32s { ... }
fn f32s_neg(self, a: Self::f32s) -> Self::f32s { ... }
fn f32s_mul_adde(
self,
a: Self::f32s,
b: Self::f32s,
c: Self::f32s
) -> Self::f32s { ... }
fn f32s_greater_than(self, a: Self::f32s, b: Self::f32s) -> Self::m32s { ... }
fn f32s_greater_than_or_equal(
self,
a: Self::f32s,
b: Self::f32s
) -> Self::m32s { ... }
fn f64s_abs(self, a: Self::f64s) -> Self::f64s { ... }
fn f64s_neg(self, a: Self::f64s) -> Self::f64s { ... }
fn f64s_mul_adde(
self,
a: Self::f64s,
b: Self::f64s,
c: Self::f64s
) -> Self::f64s { ... }
fn f64s_greater_than(self, a: Self::f64s, b: Self::f64s) -> Self::m64s { ... }
fn f64s_greater_than_or_equal(
self,
a: Self::f64s,
b: Self::f64s
) -> Self::m64s { ... }
fn f32s_transmute_i32s(self, a: Self::f32s) -> Self::i32s { ... }
fn f32s_transmute_u32s(self, a: Self::f32s) -> Self::u32s { ... }
fn i32s_transmute_f32s(self, a: Self::i32s) -> Self::f32s { ... }
fn i32s_transmute_u32s(self, a: Self::i32s) -> Self::u32s { ... }
fn u32s_transmute_f32s(self, a: Self::u32s) -> Self::f32s { ... }
fn u32s_transmute_i32s(self, a: Self::u32s) -> Self::i32s { ... }
fn f64s_transmute_i64s(self, a: Self::f64s) -> Self::i64s { ... }
fn f64s_transmute_u64s(self, a: Self::f64s) -> Self::u64s { ... }
fn i64s_transmute_f64s(self, a: Self::i64s) -> Self::f64s { ... }
fn i64s_transmute_u64s(self, a: Self::i64s) -> Self::u64s { ... }
fn u64s_transmute_f64s(self, a: Self::u64s) -> Self::f64s { ... }
fn u64s_transmute_i64s(self, a: Self::u64s) -> Self::i64s { ... }
}