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 } }