Add masks
This commit is contained in:
parent
872e8f62d6
commit
3df72fddc2
23 changed files with 439 additions and 114 deletions
|
|
@ -1,10 +1,14 @@
|
|||
#![no_std]
|
||||
#![feature(repr_simd)]
|
||||
#![warn(missing_docs)]
|
||||
//! Portable SIMD module.
|
||||
|
||||
#[macro_use]
|
||||
mod macros;
|
||||
|
||||
mod masks;
|
||||
pub use masks::*;
|
||||
|
||||
mod vectors_u8;
|
||||
pub use vectors_u8::*;
|
||||
mod vectors_u16;
|
||||
|
|
@ -17,6 +21,7 @@ mod vectors_u128;
|
|||
pub use vectors_u128::*;
|
||||
mod vectors_usize;
|
||||
pub use vectors_usize::*;
|
||||
|
||||
mod vectors_i8;
|
||||
pub use vectors_i8::*;
|
||||
mod vectors_i16;
|
||||
|
|
@ -29,7 +34,21 @@ mod vectors_i128;
|
|||
pub use vectors_i128::*;
|
||||
mod vectors_isize;
|
||||
pub use vectors_isize::*;
|
||||
|
||||
mod vectors_f32;
|
||||
pub use vectors_f32::*;
|
||||
mod vectors_f64;
|
||||
pub use vectors_f64::*;
|
||||
|
||||
mod vectors_mask8;
|
||||
pub use vectors_mask8::*;
|
||||
mod vectors_mask16;
|
||||
pub use vectors_mask16::*;
|
||||
mod vectors_mask32;
|
||||
pub use vectors_mask32::*;
|
||||
mod vectors_mask64;
|
||||
pub use vectors_mask64::*;
|
||||
mod vectors_mask128;
|
||||
pub use vectors_mask128::*;
|
||||
mod vectors_masksize;
|
||||
pub use vectors_masksize::*;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
/// Provides implementations of `From<$a> for $b` and `From<$b> for $a` that transmutes the value.
|
||||
macro_rules! from_transmute {
|
||||
{ unsafe $a:ty => $b:ty } => {
|
||||
from_transmute!{ @impl $a => $b }
|
||||
|
|
@ -13,6 +14,8 @@ macro_rules! from_transmute {
|
|||
};
|
||||
}
|
||||
|
||||
/// Provides implementations of `From<$generic> for core::arch::{x86, x86_64}::$intel` and
|
||||
/// vice-versa that transmutes the value.
|
||||
macro_rules! from_transmute_x86 {
|
||||
{ unsafe $generic:ty => $intel:ident } => {
|
||||
#[cfg(target_arch = "x86")]
|
||||
|
|
@ -23,10 +26,118 @@ macro_rules! from_transmute_x86 {
|
|||
}
|
||||
}
|
||||
|
||||
macro_rules! define_type {
|
||||
{ $(#[$attr:meta])* struct $name:ident([$type:ty; $lanes:tt]); } => {
|
||||
define_type! { @impl $(#[$attr])* | $name [$type; $lanes] }
|
||||
/// Calls a the macro `$mac` with the provided `$args` followed by `$repeat` repeated the specified
|
||||
/// number of times.
|
||||
macro_rules! call_repeat {
|
||||
{ 1 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)*
|
||||
}
|
||||
};
|
||||
{ 2 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)* $($repeat)*
|
||||
}
|
||||
};
|
||||
{ 4 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
}
|
||||
};
|
||||
{ 8 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
}
|
||||
};
|
||||
{ 16 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
}
|
||||
};
|
||||
{ 32 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
}
|
||||
};
|
||||
{ 64 => $mac:path [$($repeat:tt)*] $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
$($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)* $($repeat)*
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// Calls the macro `$mac` with the specified `$args` followed by the specified number of unique
|
||||
/// identifiers.
|
||||
macro_rules! call_counting_args {
|
||||
{ 1 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
value
|
||||
}
|
||||
};
|
||||
{ 2 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
v1 v2
|
||||
}
|
||||
};
|
||||
{ 4 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
v0 v1 v2 v3
|
||||
}
|
||||
};
|
||||
{ 8 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
v0 v1 v2 v3 v4 v5 v6 v7
|
||||
}
|
||||
};
|
||||
{ 16 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15
|
||||
}
|
||||
};
|
||||
{ 32 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15
|
||||
v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31
|
||||
}
|
||||
};
|
||||
{ 64 => $mac:path => $($args:tt)* } => {
|
||||
$mac! {
|
||||
$($args)*
|
||||
v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15
|
||||
v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31
|
||||
v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47
|
||||
v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// Implements common traits on the specified vector `$name`, holding multiple `$lanes` of `$type`.
|
||||
macro_rules! base_vector_traits {
|
||||
{ $name:path => [$type:ty; $lanes:literal] } => {
|
||||
// array references
|
||||
impl AsRef<[$type; $lanes]> for $name {
|
||||
#[inline]
|
||||
|
|
@ -67,71 +178,78 @@ macro_rules! define_type {
|
|||
Self::splat(value)
|
||||
}
|
||||
}
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 1] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type | $type, | v0, }
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 2] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type | $type, $type, | v0, v1, }
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 4] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type |
|
||||
$type, $type, $type, $type, |
|
||||
v0, v1, v2, v3,
|
||||
}
|
||||
}
|
||||
|
||||
/// Defines a vector `$name` containing multiple `$lanes` of `$type`.
|
||||
macro_rules! define_vector {
|
||||
{ $(#[$attr:meta])* struct $name:ident([$type:ty; $lanes:tt]); } => {
|
||||
call_repeat! { $lanes => define_vector [$type] def $(#[$attr])* | $name | }
|
||||
|
||||
impl $name {
|
||||
call_repeat! { $lanes => define_vector [$type] splat $type | }
|
||||
call_counting_args! { $lanes => define_vector => new $type | }
|
||||
}
|
||||
|
||||
base_vector_traits! { $name => [$type; $lanes] }
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 8] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type |
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, |
|
||||
v0, v1, v2, v3, v4, v5, v6, v7,
|
||||
}
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 16] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type |
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, |
|
||||
v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
|
||||
}
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 32] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type |
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type,
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, |
|
||||
v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
|
||||
v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
|
||||
}
|
||||
};
|
||||
{ @impl $(#[$attr:meta])* | $name:ident [$type:ty; 64] } => {
|
||||
define_type! { @def $(#[$attr])* | $name | $type |
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type,
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type,
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type,
|
||||
$type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, $type, |
|
||||
v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
|
||||
v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
|
||||
v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
|
||||
v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63,
|
||||
}
|
||||
};
|
||||
{ @def $(#[$attr:meta])* | $name:ident | $type:ty | $($itype:ty,)* | $($ivar:ident,)* } => {
|
||||
{ def $(#[$attr:meta])* | $name:ident | $($itype:ty)* } => {
|
||||
$(#[$attr])*
|
||||
#[allow(non_camel_case_types)]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, PartialOrd)]
|
||||
#[repr(simd)]
|
||||
pub struct $name($($itype),*);
|
||||
|
||||
impl $name {
|
||||
/// Construct a vector by setting all lanes to the given value.
|
||||
#[inline]
|
||||
pub const fn splat(value: $type) -> Self {
|
||||
Self($(value as $itype),*)
|
||||
}
|
||||
|
||||
/// Construct a vector by setting each lane to the given values.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[inline]
|
||||
pub const fn new($($ivar: $itype),*) -> Self {
|
||||
Self($($ivar),*)
|
||||
}
|
||||
};
|
||||
{ splat $type:ty | $($itype:ty)* } => {
|
||||
/// Construct a vector by setting all lanes to the given value.
|
||||
#[inline]
|
||||
pub const fn splat(value: $type) -> Self {
|
||||
Self($(value as $itype),*)
|
||||
}
|
||||
};
|
||||
{ new $type:ty | $($var:ident)* } => {
|
||||
/// Construct a vector by setting each lane to the given values.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[inline]
|
||||
pub const fn new($($var: $type),*) -> Self {
|
||||
Self($($var),*)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Defines a mask vector `$name` containing multiple `$lanes` of `$type`, represented by the
|
||||
/// underlying type `$impl_type`.
|
||||
macro_rules! define_mask_vector {
|
||||
{ $(#[$attr:meta])* struct $name:ident([$impl_type:ty as $type:ty; $lanes:tt]); } => {
|
||||
call_repeat! { $lanes => define_mask_vector [$impl_type] def $(#[$attr])* | $name | }
|
||||
|
||||
impl $name {
|
||||
call_repeat! { $lanes => define_mask_vector [$impl_type] splat $type | }
|
||||
call_counting_args! { $lanes => define_mask_vector => new $type | }
|
||||
}
|
||||
|
||||
base_vector_traits! { $name => [$type; $lanes] }
|
||||
};
|
||||
{ def $(#[$attr:meta])* | $name:ident | $($itype:ty)* } => {
|
||||
$(#[$attr])*
|
||||
#[allow(non_camel_case_types)]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, PartialOrd)]
|
||||
#[repr(simd)]
|
||||
pub struct $name($($itype),*);
|
||||
};
|
||||
{ splat $type:ty | $($itype:ty)* } => {
|
||||
/// Construct a vector by setting all lanes to the given value.
|
||||
#[inline]
|
||||
pub const fn splat(value: $type) -> Self {
|
||||
Self($(value.0 as $itype),*)
|
||||
}
|
||||
};
|
||||
{ new $type:ty | $($var:ident)* } => {
|
||||
/// Construct a vector by setting each lane to the given values.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[inline]
|
||||
pub const fn new($($var: $type),*) -> Self {
|
||||
Self($($var.0),*)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
67
crates/core_simd/src/masks.rs
Normal file
67
crates/core_simd/src/masks.rs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
macro_rules! define_mask {
|
||||
{ $(#[$attr:meta])* struct $name:ident($type:ty); } => {
|
||||
$(#[$attr])*
|
||||
#[allow(non_camel_case_types)]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, PartialOrd, Eq, Ord, Hash)]
|
||||
#[repr(transparent)]
|
||||
pub struct $name(pub(crate) $type);
|
||||
|
||||
impl $name {
|
||||
/// Construct a mask from the given value.
|
||||
pub const fn new(value: bool) -> Self {
|
||||
if value {
|
||||
Self(!0)
|
||||
} else {
|
||||
Self(0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Test if the mask is set.
|
||||
pub const fn test(&self) -> bool {
|
||||
self.0 != 0
|
||||
}
|
||||
}
|
||||
|
||||
impl core::convert::From<bool> for $name {
|
||||
fn from(value: bool) -> Self {
|
||||
Self::new(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl core::convert::From<$name> for bool {
|
||||
fn from(mask: $name) -> Self {
|
||||
mask.test()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
define_mask! {
|
||||
#[doc = "8-bit mask"]
|
||||
struct mask8(i8);
|
||||
}
|
||||
|
||||
define_mask! {
|
||||
#[doc = "16-bit mask"]
|
||||
struct mask16(i16);
|
||||
}
|
||||
|
||||
define_mask! {
|
||||
#[doc = "32-bit mask"]
|
||||
struct mask32(i32);
|
||||
}
|
||||
|
||||
define_mask! {
|
||||
#[doc = "64-bit mask"]
|
||||
struct mask64(i64);
|
||||
}
|
||||
|
||||
define_mask! {
|
||||
#[doc = "128-bit mask"]
|
||||
struct mask128(i128);
|
||||
}
|
||||
|
||||
define_mask! {
|
||||
#[doc = "`isize`-wide mask"]
|
||||
struct masksize(isize);
|
||||
}
|
||||
|
|
@ -1,19 +1,19 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `f32` values"]
|
||||
struct f32x2([f32; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `f32` values"]
|
||||
struct f32x4([f32; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `f32` values"]
|
||||
struct f32x8([f32; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `f32` values"]
|
||||
struct f32x16([f32; 16]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `f64` values"]
|
||||
struct f64x2([f64; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `f64` values"]
|
||||
struct f64x4([f64; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `f64` values"]
|
||||
struct f64x8([f64; 8]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `i128` values"]
|
||||
struct i128x2([i128; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `i128` values"]
|
||||
struct i128x4([i128; 4]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `i16` values"]
|
||||
struct i16x2([i16; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `i16` values"]
|
||||
struct i16x4([i16; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `i16` values"]
|
||||
struct i16x8([i16; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `i16` values"]
|
||||
struct i16x16([i16; 16]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 32 `i16` values"]
|
||||
struct i16x32([i16; 32]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `i32` values"]
|
||||
struct i32x2([i32; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `i32` values"]
|
||||
struct i32x4([i32; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `i32` values"]
|
||||
struct i32x8([i32; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `i32` values"]
|
||||
struct i32x16([i32; 16]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `i64` values"]
|
||||
struct i64x2([i64; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `i64` values"]
|
||||
struct i64x4([i64; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `i64` values"]
|
||||
struct i64x8([i64; 8]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,29 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `i8` values"]
|
||||
struct i8x2([i8; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `i8` values"]
|
||||
struct i8x4([i8; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `i8` values"]
|
||||
struct i8x8([i8; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `i8` values"]
|
||||
struct i8x16([i8; 16]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 32 `i8` values"]
|
||||
struct i8x32([i8; 32]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 64 `i8` values"]
|
||||
struct i8x64([i8; 64]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `isize` values"]
|
||||
struct isizex2([isize; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `isize` values"]
|
||||
struct isizex4([isize; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `isize` values"]
|
||||
struct isizex8([isize; 8]);
|
||||
}
|
||||
|
|
|
|||
11
crates/core_simd/src/vectors_mask128.rs
Normal file
11
crates/core_simd/src/vectors_mask128.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
use crate::mask128;
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of two `mask128` values"]
|
||||
struct mask128x2([i128 as mask128; 2]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of four `mask128` values"]
|
||||
struct mask128x4([i128 as mask128; 4]);
|
||||
}
|
||||
26
crates/core_simd/src/vectors_mask16.rs
Normal file
26
crates/core_simd/src/vectors_mask16.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
use crate::mask16;
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of two `mask16` values"]
|
||||
struct mask16x2([i16 as mask16; 2]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of four `mask16` values"]
|
||||
struct mask16x4([i16 as mask16; 4]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of eight `mask16` values"]
|
||||
struct mask16x8([i16 as mask16; 8]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of 16 `mask16` values"]
|
||||
struct mask16x16([i16 as mask16; 16]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of 32 `mask16` values"]
|
||||
struct mask16x32([i16 as mask16; 32]);
|
||||
}
|
||||
21
crates/core_simd/src/vectors_mask32.rs
Normal file
21
crates/core_simd/src/vectors_mask32.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
use crate::mask32;
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of two `mask32` values"]
|
||||
struct mask32x2([i32 as mask32; 2]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of four `mask32` values"]
|
||||
struct mask32x4([i32 as mask32; 4]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of eight `mask32` values"]
|
||||
struct mask32x8([i32 as mask32; 8]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of 16 `mask32` values"]
|
||||
struct mask32x16([i32 as mask32; 16]);
|
||||
}
|
||||
16
crates/core_simd/src/vectors_mask64.rs
Normal file
16
crates/core_simd/src/vectors_mask64.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
use crate::mask64;
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of two `mask64` values"]
|
||||
struct mask64x2([i64 as mask64; 2]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of four `mask64` values"]
|
||||
struct mask64x4([i64 as mask64; 4]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of eight `mask64` values"]
|
||||
struct mask64x8([i64 as mask64; 8]);
|
||||
}
|
||||
31
crates/core_simd/src/vectors_mask8.rs
Normal file
31
crates/core_simd/src/vectors_mask8.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
use crate::mask8;
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of two `mask8` values"]
|
||||
struct mask8x2([i8 as mask8; 2]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of four `mask8` values"]
|
||||
struct mask8x4([i8 as mask8; 4]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of eight `mask8` values"]
|
||||
struct mask8x8([i8 as mask8; 8]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of 16 `mask8` values"]
|
||||
struct mask8x16([i8 as mask8; 16]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of 32 `mask8` values"]
|
||||
struct mask8x32([i8 as mask8; 32]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of 64 `mask8` values"]
|
||||
struct mask8x64([i8 as mask8; 64]);
|
||||
}
|
||||
16
crates/core_simd/src/vectors_masksize.rs
Normal file
16
crates/core_simd/src/vectors_masksize.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
use crate::masksize;
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of two `masksize` values"]
|
||||
struct masksizex2([isize as masksize; 2]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of four `masksize` values"]
|
||||
struct masksizex4([isize as masksize; 4]);
|
||||
}
|
||||
|
||||
define_mask_vector! {
|
||||
#[doc = "vector of eight `masksize` values"]
|
||||
struct masksizex8([isize as masksize; 8]);
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `u128` values"]
|
||||
struct u128x2([u128; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `u128` values"]
|
||||
struct u128x4([u128; 4]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `u16` values"]
|
||||
struct u16x2([u16; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `u16` values"]
|
||||
struct u16x4([u16; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `u16` values"]
|
||||
struct u16x8([u16; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `u16` values"]
|
||||
struct u16x16([u16; 16]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 32 `u16` values"]
|
||||
struct u16x32([u16; 32]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `u32` values"]
|
||||
struct u32x2([u32; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `u32` values"]
|
||||
struct u32x4([u32; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `u32` values"]
|
||||
struct u32x8([u32; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `u32` values"]
|
||||
struct u32x16([u32; 16]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `u64` values"]
|
||||
struct u64x2([u64; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `u64` values"]
|
||||
struct u64x4([u64; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `u64` values"]
|
||||
struct u64x8([u64; 8]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,29 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `u8` values"]
|
||||
struct u8x2([u8; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `u8` values"]
|
||||
struct u8x4([u8; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `u8` values"]
|
||||
struct u8x8([u8; 8]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 16 `u8` values"]
|
||||
struct u8x16([u8; 16]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 32 `u8` values"]
|
||||
struct u8x32([u8; 32]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of 64 `u8` values"]
|
||||
struct u8x64([u8; 64]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of two `usize` values"]
|
||||
struct usizex2([usize; 2]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of four `usize` values"]
|
||||
struct usizex4([usize; 4]);
|
||||
}
|
||||
|
||||
define_type! {
|
||||
define_vector! {
|
||||
#[doc = "Vector of eight `usize` values"]
|
||||
struct usizex8([usize; 8]);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue