228 lines
4.0 KiB
Rust
228 lines
4.0 KiB
Rust
|
macro_rules! number {
|
||
|
{ 1 } => { "one" };
|
||
|
{ 2 } => { "two" };
|
||
|
{ 4 } => { "four" };
|
||
|
{ 8 } => { "eight" };
|
||
|
{ $x:literal } => { stringify!($x) };
|
||
|
}
|
||
|
|
||
|
macro_rules! plural {
|
||
|
{ 1 } => { "" };
|
||
|
{ $x:literal } => { "s" };
|
||
|
}
|
||
|
|
||
|
macro_rules! alias {
|
||
|
{
|
||
|
$(
|
||
|
$element_ty:ty = {
|
||
|
$($alias:ident $num_elements:tt)*
|
||
|
}
|
||
|
)*
|
||
|
} => {
|
||
|
$(
|
||
|
$(
|
||
|
#[doc = concat!("A SIMD vector with ", number!($num_elements), " element", plural!($num_elements), " of type [`", stringify!($element_ty), "`].")]
|
||
|
#[allow(non_camel_case_types)]
|
||
|
pub type $alias = $crate::simd::Simd<$element_ty, $num_elements>;
|
||
|
)*
|
||
|
)*
|
||
|
}
|
||
|
}
|
||
|
|
||
|
macro_rules! mask_alias {
|
||
|
{
|
||
|
$(
|
||
|
$element_ty:ty : $size:literal = {
|
||
|
$($alias:ident $num_elements:tt)*
|
||
|
}
|
||
|
)*
|
||
|
} => {
|
||
|
$(
|
||
|
$(
|
||
|
#[doc = concat!("A SIMD mask with ", number!($num_elements), " element", plural!($num_elements), " for vectors with ", $size, " element types.")]
|
||
|
///
|
||
|
#[doc = concat!(
|
||
|
"The layout of this type is unspecified, and may change between platforms and/or Rust versions, and code should not assume that it is equivalent to `[",
|
||
|
stringify!($element_ty), "; ", $num_elements, "]`."
|
||
|
)]
|
||
|
#[allow(non_camel_case_types)]
|
||
|
pub type $alias = $crate::simd::Mask<$element_ty, $num_elements>;
|
||
|
)*
|
||
|
)*
|
||
|
}
|
||
|
}
|
||
|
|
||
|
alias! {
|
||
|
i8 = {
|
||
|
i8x1 1
|
||
|
i8x2 2
|
||
|
i8x4 4
|
||
|
i8x8 8
|
||
|
i8x16 16
|
||
|
i8x32 32
|
||
|
i8x64 64
|
||
|
}
|
||
|
|
||
|
i16 = {
|
||
|
i16x1 1
|
||
|
i16x2 2
|
||
|
i16x4 4
|
||
|
i16x8 8
|
||
|
i16x16 16
|
||
|
i16x32 32
|
||
|
i16x64 64
|
||
|
}
|
||
|
|
||
|
i32 = {
|
||
|
i32x1 1
|
||
|
i32x2 2
|
||
|
i32x4 4
|
||
|
i32x8 8
|
||
|
i32x16 16
|
||
|
i32x32 32
|
||
|
i32x64 64
|
||
|
}
|
||
|
|
||
|
i64 = {
|
||
|
i64x1 1
|
||
|
i64x2 2
|
||
|
i64x4 4
|
||
|
i64x8 8
|
||
|
i64x16 16
|
||
|
i64x32 32
|
||
|
i64x64 64
|
||
|
}
|
||
|
|
||
|
isize = {
|
||
|
isizex1 1
|
||
|
isizex2 2
|
||
|
isizex4 4
|
||
|
isizex8 8
|
||
|
isizex16 16
|
||
|
isizex32 32
|
||
|
isizex64 64
|
||
|
}
|
||
|
|
||
|
u8 = {
|
||
|
u8x1 1
|
||
|
u8x2 2
|
||
|
u8x4 4
|
||
|
u8x8 8
|
||
|
u8x16 16
|
||
|
u8x32 32
|
||
|
u8x64 64
|
||
|
}
|
||
|
|
||
|
u16 = {
|
||
|
u16x1 1
|
||
|
u16x2 2
|
||
|
u16x4 4
|
||
|
u16x8 8
|
||
|
u16x16 16
|
||
|
u16x32 32
|
||
|
u16x64 64
|
||
|
}
|
||
|
|
||
|
u32 = {
|
||
|
u32x1 1
|
||
|
u32x2 2
|
||
|
u32x4 4
|
||
|
u32x8 8
|
||
|
u32x16 16
|
||
|
u32x32 32
|
||
|
u32x64 64
|
||
|
}
|
||
|
|
||
|
u64 = {
|
||
|
u64x1 1
|
||
|
u64x2 2
|
||
|
u64x4 4
|
||
|
u64x8 8
|
||
|
u64x16 16
|
||
|
u64x32 32
|
||
|
u64x64 64
|
||
|
}
|
||
|
|
||
|
usize = {
|
||
|
usizex1 1
|
||
|
usizex2 2
|
||
|
usizex4 4
|
||
|
usizex8 8
|
||
|
usizex16 16
|
||
|
usizex32 32
|
||
|
usizex64 64
|
||
|
}
|
||
|
|
||
|
f32 = {
|
||
|
f32x1 1
|
||
|
f32x2 2
|
||
|
f32x4 4
|
||
|
f32x8 8
|
||
|
f32x16 16
|
||
|
f32x32 32
|
||
|
f32x64 64
|
||
|
}
|
||
|
|
||
|
f64 = {
|
||
|
f64x1 1
|
||
|
f64x2 2
|
||
|
f64x4 4
|
||
|
f64x8 8
|
||
|
f64x16 16
|
||
|
f64x32 32
|
||
|
f64x64 64
|
||
|
}
|
||
|
}
|
||
|
|
||
|
mask_alias! {
|
||
|
i8 : "8-bit" = {
|
||
|
mask8x1 1
|
||
|
mask8x2 2
|
||
|
mask8x4 4
|
||
|
mask8x8 8
|
||
|
mask8x16 16
|
||
|
mask8x32 32
|
||
|
mask8x64 64
|
||
|
}
|
||
|
|
||
|
i16 : "16-bit" = {
|
||
|
mask16x1 1
|
||
|
mask16x2 2
|
||
|
mask16x4 4
|
||
|
mask16x8 8
|
||
|
mask16x16 16
|
||
|
mask16x32 32
|
||
|
mask16x64 64
|
||
|
}
|
||
|
|
||
|
i32 : "32-bit" = {
|
||
|
mask32x1 1
|
||
|
mask32x2 2
|
||
|
mask32x4 4
|
||
|
mask32x8 8
|
||
|
mask32x16 16
|
||
|
mask32x32 32
|
||
|
mask32x64 64
|
||
|
}
|
||
|
|
||
|
i64 : "64-bit" = {
|
||
|
mask64x1 1
|
||
|
mask64x2 2
|
||
|
mask64x4 4
|
||
|
mask64x8 8
|
||
|
mask64x16 16
|
||
|
mask64x32 32
|
||
|
mask64x64 64
|
||
|
}
|
||
|
|
||
|
isize : "pointer-sized" = {
|
||
|
masksizex1 1
|
||
|
masksizex2 2
|
||
|
masksizex4 4
|
||
|
masksizex8 8
|
||
|
masksizex16 16
|
||
|
masksizex32 32
|
||
|
masksizex64 64
|
||
|
}
|
||
|
}
|