diff options
| author | Caleb Zulawski <caleb.zulawski@gmail.com> | 2022-10-16 21:38:13 -0400 |
|---|---|---|
| committer | Caleb Zulawski <caleb.zulawski@gmail.com> | 2022-10-16 21:38:13 -0400 |
| commit | 61a6f1854f453bb1003b08358b9478eba7fd6ad8 (patch) | |
| tree | f48129cca17153216d11252df03bf300da95b4cd | |
| parent | 2f38f70e110f109e77149f894b026d8632476866 (diff) | |
| download | rust-61a6f1854f453bb1003b08358b9478eba7fd6ad8.tar.gz rust-61a6f1854f453bb1003b08358b9478eba7fd6ad8.zip | |
Specify aliases in one place, and make it more uniform which are defined
| -rw-r--r-- | crates/core_simd/src/alias.rs | 227 | ||||
| -rw-r--r-- | crates/core_simd/src/masks.rs | 126 | ||||
| -rw-r--r-- | crates/core_simd/src/mod.rs | 2 | ||||
| -rw-r--r-- | crates/core_simd/src/vector.rs | 8 | ||||
| -rw-r--r-- | crates/core_simd/src/vector/float.rs | 24 | ||||
| -rw-r--r-- | crates/core_simd/src/vector/int.rs | 63 | ||||
| -rw-r--r-- | crates/core_simd/src/vector/uint.rs | 63 |
7 files changed, 229 insertions, 284 deletions
diff --git a/crates/core_simd/src/alias.rs b/crates/core_simd/src/alias.rs new file mode 100644 index 00000000000..b4d5f45208a --- /dev/null +++ b/crates/core_simd/src/alias.rs @@ -0,0 +1,227 @@ +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 = { + $($alias:ident $elements:tt)* + } + )* + } => { + $( + $( + #[doc = concat!("A SIMD vector with ", number!($elements), " element", plural!($elements), " of type [`", stringify!($element), "`].")] + #[allow(non_camel_case_types)] + pub type $alias = $crate::simd::Simd<$element, $elements>; + )* + )* + } +} + +macro_rules! mask_alias { + { + $( + $element:ty : $size:literal = { + $($alias:ident $elements:tt)* + } + )* + } => { + $( + $( + #[doc = concat!("A SIMD mask with ", number!($elements), " element", plural!($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), "; ", $elements, "]`." + )] + #[allow(non_camel_case_types)] + pub type $alias = $crate::simd::Mask<$element, $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 + } +} diff --git a/crates/core_simd/src/masks.rs b/crates/core_simd/src/masks.rs index 7fd50fed447..e58df80fca8 100644 --- a/crates/core_simd/src/masks.rs +++ b/crates/core_simd/src/masks.rs @@ -530,132 +530,6 @@ where } } -/// A mask for SIMD vectors with eight elements of 8 bits. -/// -/// 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 -/// `[i8; 8]`. -pub type mask8x8 = Mask<i8, 8>; - -/// A mask for SIMD vectors with 16 elements of 8 bits. -/// -/// 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 -/// `[i8; 16]`. -pub type mask8x16 = Mask<i8, 16>; - -/// A mask for SIMD vectors with 32 elements of 8 bits. -/// -/// 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 -/// `[i8; 32]`. -pub type mask8x32 = Mask<i8, 32>; - -/// A mask for SIMD vectors with 64 elements of 8 bits. -/// -/// 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 -/// `[i8; 64]`. -pub type mask8x64 = Mask<i8, 64>; - -/// A mask for SIMD vectors with four elements of 16 bits. -/// -/// 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 -/// `[i16; 4]`. -pub type mask16x4 = Mask<i16, 4>; - -/// A mask for SIMD vectors with eight elements of 16 bits. -/// -/// 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 -/// `[i16; 8]`. -pub type mask16x8 = Mask<i16, 8>; - -/// A mask for SIMD vectors with 16 elements of 16 bits. -/// -/// 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 -/// `[i16; 16]`. -pub type mask16x16 = Mask<i16, 16>; - -/// A mask for SIMD vectors with 32 elements of 16 bits. -/// -/// 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 -/// `[i16; 32]`. -pub type mask16x32 = Mask<i16, 32>; - -/// A mask for SIMD vectors with two elements of 32 bits. -/// -/// 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 -/// `[i32; 2]`. -pub type mask32x2 = Mask<i32, 2>; - -/// A mask for SIMD vectors with four elements of 32 bits. -/// -/// 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 -/// `[i32; 4]`. -pub type mask32x4 = Mask<i32, 4>; - -/// A mask for SIMD vectors with eight elements of 32 bits. -/// -/// 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 -/// `[i32; 8]`. -pub type mask32x8 = Mask<i32, 8>; - -/// A mask for SIMD vectors with 16 elements of 32 bits. -/// -/// 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 -/// `[i32; 16]`. -pub type mask32x16 = Mask<i32, 16>; - -/// A mask for SIMD vectors with two elements of 64 bits. -/// -/// 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 -/// `[i64; 2]`. -pub type mask64x2 = Mask<i64, 2>; - -/// A mask for SIMD vectors with four elements of 64 bits. -/// -/// 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 -/// `[i64; 4]`. -pub type mask64x4 = Mask<i64, 4>; - -/// A mask for SIMD vectors with eight elements of 64 bits. -/// -/// 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 -/// `[i64; 8]`. -pub type mask64x8 = Mask<i64, 8>; - -/// A mask for SIMD vectors with two elements of pointer width. -/// -/// 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 -/// `[isize; 2]`. -pub type masksizex2 = Mask<isize, 2>; - -/// A mask for SIMD vectors with four elements of pointer width. -/// -/// 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 -/// `[isize; 4]`. -pub type masksizex4 = Mask<isize, 4>; - -/// A mask for SIMD vectors with eight elements of pointer width. -/// -/// 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 -/// `[isize; 8]`. -pub type masksizex8 = Mask<isize, 8>; - macro_rules! impl_from { { $from:ty => $($to:ty),* } => { $( diff --git a/crates/core_simd/src/mod.rs b/crates/core_simd/src/mod.rs index b472aa3abe2..9909d639874 100644 --- a/crates/core_simd/src/mod.rs +++ b/crates/core_simd/src/mod.rs @@ -6,6 +6,7 @@ pub(crate) mod intrinsics; #[cfg(feature = "generic_const_exprs")] mod to_bytes; +mod alias; mod elements; mod eq; mod fmt; @@ -22,6 +23,7 @@ mod vendor; pub mod simd { pub(crate) use crate::core_simd::intrinsics; + pub use crate::core_simd::alias::*; pub use crate::core_simd::elements::*; pub use crate::core_simd::eq::*; pub use crate::core_simd::lane_count::{LaneCount, SupportedLaneCount}; diff --git a/crates/core_simd/src/vector.rs b/crates/core_simd/src/vector.rs index e8e8f6899d3..7f0e8350cf8 100644 --- a/crates/core_simd/src/vector.rs +++ b/crates/core_simd/src/vector.rs @@ -1,11 +1,3 @@ -mod float; -mod int; -mod uint; - -pub use float::*; -pub use int::*; -pub use uint::*; - // Vectors of pointers are not for public use at the current time. pub(crate) mod ptr; diff --git a/crates/core_simd/src/vector/float.rs b/crates/core_simd/src/vector/float.rs deleted file mode 100644 index f836c99b1e2..00000000000 --- a/crates/core_simd/src/vector/float.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![allow(non_camel_case_types)] - -use crate::simd::Simd; - -/// A 64-bit SIMD vector with two elements of type `f32`. -pub type f32x2 = Simd<f32, 2>; - -/// A 128-bit SIMD vector with four elements of type `f32`. -pub type f32x4 = Simd<f32, 4>; - -/// A 256-bit SIMD vector with eight elements of type `f32`. -pub type f32x8 = Simd<f32, 8>; - -/// A 512-bit SIMD vector with 16 elements of type `f32`. -pub type f32x16 = Simd<f32, 16>; - -/// A 128-bit SIMD vector with two elements of type `f64`. -pub type f64x2 = Simd<f64, 2>; - -/// A 256-bit SIMD vector with four elements of type `f64`. -pub type f64x4 = Simd<f64, 4>; - -/// A 512-bit SIMD vector with eight elements of type `f64`. -pub type f64x8 = Simd<f64, 8>; diff --git a/crates/core_simd/src/vector/int.rs b/crates/core_simd/src/vector/int.rs deleted file mode 100644 index 20e56c7dc64..00000000000 --- a/crates/core_simd/src/vector/int.rs +++ /dev/null @@ -1,63 +0,0 @@ -#![allow(non_camel_case_types)] - -use crate::simd::Simd; - -/// A SIMD vector with two elements of type `isize`. -pub type isizex2 = Simd<isize, 2>; - -/// A SIMD vector with four elements of type `isize`. -pub type isizex4 = Simd<isize, 4>; - -/// A SIMD vector with eight elements of type `isize`. -pub type isizex8 = Simd<isize, 8>; - -/// A 32-bit SIMD vector with two elements of type `i16`. -pub type i16x2 = Simd<i16, 2>; - -/// A 64-bit SIMD vector with four elements of type `i16`. -pub type i16x4 = Simd<i16, 4>; - -/// A 128-bit SIMD vector with eight elements of type `i16`. -pub type i16x8 = Simd<i16, 8>; - -/// A 256-bit SIMD vector with 16 elements of type `i16`. -pub type i16x16 = Simd<i16, 16>; - -/// A 512-bit SIMD vector with 32 elements of type `i16`. -pub type i16x32 = Simd<i16, 32>; - -/// A 64-bit SIMD vector with two elements of type `i32`. -pub type i32x2 = Simd<i32, 2>; - -/// A 128-bit SIMD vector with four elements of type `i32`. -pub type i32x4 = Simd<i32, 4>; - -/// A 256-bit SIMD vector with eight elements of type `i32`. -pub type i32x8 = Simd<i32, 8>; - -/// A 512-bit SIMD vector with 16 elements of type `i32`. -pub type i32x16 = Simd<i32, 16>; - -/// A 128-bit SIMD vector with two elements of type `i64`. -pub type i64x2 = Simd<i64, 2>; - -/// A 256-bit SIMD vector with four elements of type `i64`. -pub type i64x4 = Simd<i64, 4>; - -/// A 512-bit SIMD vector with eight elements of type `i64`. -pub type i64x8 = Simd<i64, 8>; - -/// A 32-bit SIMD vector with four elements of type `i8`. -pub type i8x4 = Simd<i8, 4>; - -/// A 64-bit SIMD vector with eight elements of type `i8`. -pub type i8x8 = Simd<i8, 8>; - -/// A 128-bit SIMD vector with 16 elements of type `i8`. -pub type i8x16 = Simd<i8, 16>; - -/// A 256-bit SIMD vector with 32 elements of type `i8`. -pub type i8x32 = Simd<i8, 32>; - -/// A 512-bit SIMD vector with 64 elements of type `i8`. -pub type i8x64 = Simd<i8, 64>; diff --git a/crates/core_simd/src/vector/uint.rs b/crates/core_simd/src/vector/uint.rs deleted file mode 100644 index b4a69c44363..00000000000 --- a/crates/core_simd/src/vector/uint.rs +++ /dev/null @@ -1,63 +0,0 @@ -#![allow(non_camel_case_types)] - -use crate::simd::Simd; - -/// A SIMD vector with two elements of type `usize`. -pub type usizex2 = Simd<usize, 2>; - -/// A SIMD vector with four elements of type `usize`. -pub type usizex4 = Simd<usize, 4>; - -/// A SIMD vector with eight elements of type `usize`. -pub type usizex8 = Simd<usize, 8>; - -/// A 32-bit SIMD vector with two elements of type `u16`. -pub type u16x2 = Simd<u16, 2>; - -/// A 64-bit SIMD vector with four elements of type `u16`. -pub type u16x4 = Simd<u16, 4>; - -/// A 128-bit SIMD vector with eight elements of type `u16`. -pub type u16x8 = Simd<u16, 8>; - -/// A 256-bit SIMD vector with 16 elements of type `u16`. -pub type u16x16 = Simd<u16, 16>; - -/// A 512-bit SIMD vector with 32 elements of type `u16`. -pub type u16x32 = Simd<u16, 32>; - -/// A 64-bit SIMD vector with two elements of type `u32`. -pub type u32x2 = Simd<u32, 2>; - -/// A 128-bit SIMD vector with four elements of type `u32`. -pub type u32x4 = Simd<u32, 4>; - -/// A 256-bit SIMD vector with eight elements of type `u32`. -pub type u32x8 = Simd<u32, 8>; - -/// A 512-bit SIMD vector with 16 elements of type `u32`. -pub type u32x16 = Simd<u32, 16>; - -/// A 128-bit SIMD vector with two elements of type `u64`. -pub type u64x2 = Simd<u64, 2>; - -/// A 256-bit SIMD vector with four elements of type `u64`. -pub type u64x4 = Simd<u64, 4>; - -/// A 512-bit SIMD vector with eight elements of type `u64`. -pub type u64x8 = Simd<u64, 8>; - -/// A 32-bit SIMD vector with four elements of type `u8`. -pub type u8x4 = Simd<u8, 4>; - -/// A 64-bit SIMD vector with eight elements of type `u8`. -pub type u8x8 = Simd<u8, 8>; - -/// A 128-bit SIMD vector with 16 elements of type `u8`. -pub type u8x16 = Simd<u8, 16>; - -/// A 256-bit SIMD vector with 32 elements of type `u8`. -pub type u8x32 = Simd<u8, 32>; - -/// A 512-bit SIMD vector with 64 elements of type `u8`. -pub type u8x64 = Simd<u8, 64>; |
