Skip to content

Commit b9bf9ef

Browse files
committed
Remove remaining derived traits
1 parent d817b56 commit b9bf9ef

13 files changed

+81
-93
lines changed

crates/core_simd/src/macros.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,28 @@ macro_rules! base_vector_traits {
207207
}
208208
}
209209

210+
/// Implements additional integer traits (Eq, Ord, Hash) on the specified vector `$name`, holding multiple `$lanes` of `$type`.
211+
macro_rules! integer_vector_traits {
212+
{ $name:path => [$type:ty; $lanes:literal] } => {
213+
impl Eq for $name {}
214+
215+
impl Ord for $name {
216+
fn cmp(&self, other: &Self) -> core::cmp::Ordering {
217+
AsRef::<[$type]>::as_ref(self).cmp(AsRef::<[$type]>::as_ref(other))
218+
}
219+
}
220+
221+
impl core::hash::Hash for $name {
222+
fn hash<H>(&self, state: &mut H)
223+
where
224+
H: core::hash::Hasher
225+
{
226+
AsRef::<[$type]>::as_ref(self).hash(state)
227+
}
228+
}
229+
}
230+
}
231+
210232
/// Defines a vector `$name` containing multiple `$lanes` of `$type`.
211233
macro_rules! define_vector {
212234
{ $(#[$attr:meta])* struct $name:ident([$type:ty; $lanes:tt]); } => {
@@ -242,6 +264,18 @@ macro_rules! define_vector {
242264
}
243265
}
244266

267+
/// Defines an integer vector `$name` containing multiple `$lanes` of integer `$type`.
268+
macro_rules! define_integer_vector {
269+
{ $(#[$attr:meta])* struct $name:ident([$type:ty; $lanes:tt]); } => {
270+
define_vector! {
271+
$(#[$attr])*
272+
struct $name([$type; $lanes]);
273+
}
274+
275+
integer_vector_traits! { $name => [$type; $lanes] }
276+
}
277+
}
278+
245279
/// Defines a mask vector `$name` containing multiple `$lanes` of `$type`, represented by the
246280
/// underlying type `$impl_type`.
247281
macro_rules! define_mask_vector {
@@ -254,11 +288,11 @@ macro_rules! define_mask_vector {
254288
}
255289

256290
base_vector_traits! { $name => [$type; $lanes] }
291+
integer_vector_traits! { $name => [$type; $lanes] }
257292
};
258293
{ def $(#[$attr:meta])* | $name:ident | $($itype:ty)* } => {
259294
$(#[$attr])*
260295
#[allow(non_camel_case_types)]
261-
#[derive(Eq, Ord)]
262296
#[repr(simd)]
263297
pub struct $name($($itype),*);
264298
};

crates/core_simd/src/vectors_i128.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `i128` values
3-
#[derive(Eq, Ord, Hash)]
43
struct i128x2([i128; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `i128` values
9-
#[derive(Eq, Ord, Hash)]
108
struct i128x4([i128; 4]);
119
}
1210

crates/core_simd/src/vectors_i16.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `i16` values
3-
#[derive(Eq, Ord, Hash)]
43
struct i16x2([i16; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `i16` values
9-
#[derive(Eq, Ord, Hash)]
108
struct i16x4([i16; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `i16` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct i16x8([i16; 8]);
1714
}
1815

19-
define_vector! {
16+
define_integer_vector! {
2017
/// Vector of 16 `i16` values
21-
#[derive(Eq, Ord, Hash)]
2218
struct i16x16([i16; 16]);
2319
}
2420

25-
define_vector! {
21+
define_integer_vector! {
2622
/// Vector of 32 `i16` values
27-
#[derive(Eq, Ord, Hash)]
2823
struct i16x32([i16; 32]);
2924
}
3025

crates/core_simd/src/vectors_i32.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `i32` values
3-
#[derive(Eq, Ord, Hash)]
43
struct i32x2([i32; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `i32` values
9-
#[derive(Eq, Ord, Hash)]
108
struct i32x4([i32; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `i32` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct i32x8([i32; 8]);
1714
}
1815

19-
define_vector! {
16+
define_integer_vector! {
2017
/// Vector of 16 `i32` values
21-
#[derive(Eq, Ord, Hash)]
2218
struct i32x16([i32; 16]);
2319
}
2420

crates/core_simd/src/vectors_i64.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `i64` values
3-
#[derive(Eq, Ord, Hash)]
43
struct i64x2([i64; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `i64` values
9-
#[derive(Eq, Ord, Hash)]
108
struct i64x4([i64; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `i64` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct i64x8([i64; 8]);
1714
}
1815

crates/core_simd/src/vectors_i8.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,30 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `i8` values
3-
#[derive(Eq, Ord, Hash)]
43
struct i8x2([i8; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `i8` values
9-
#[derive(Eq, Ord, Hash)]
108
struct i8x4([i8; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `i8` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct i8x8([i8; 8]);
1714
}
1815

19-
define_vector! {
16+
define_integer_vector! {
2017
/// Vector of 16 `i8` values
21-
#[derive(Eq, Ord, Hash)]
2218
struct i8x16([i8; 16]);
2319
}
2420

25-
define_vector! {
21+
define_integer_vector! {
2622
/// Vector of 32 `i8` values
27-
#[derive(Eq, Ord, Hash)]
2823
struct i8x32([i8; 32]);
2924
}
3025

31-
define_vector! {
26+
define_integer_vector! {
3227
/// Vector of 64 `i8` values
33-
#[derive(Eq, Ord, Hash)]
3428
struct i8x64([i8; 64]);
3529
}
3630

crates/core_simd/src/vectors_isize.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `isize` values
3-
#[derive(Eq, Ord, Hash)]
43
struct isizex2([isize; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `isize` values
9-
#[derive(Eq, Ord, Hash)]
108
struct isizex4([isize; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `isize` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct isizex8([isize; 8]);
1714
}
1815

crates/core_simd/src/vectors_u128.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `u128` values
3-
#[derive(Eq, Ord, Hash)]
43
struct u128x2([u128; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `u128` values
9-
#[derive(Eq, Ord, Hash)]
108
struct u128x4([u128; 4]);
119
}
1210

crates/core_simd/src/vectors_u16.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `u16` values
3-
#[derive(Eq, Ord, Hash)]
43
struct u16x2([u16; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `u16` values
9-
#[derive(Eq, Ord, Hash)]
108
struct u16x4([u16; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `u16` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct u16x8([u16; 8]);
1714
}
1815

19-
define_vector! {
16+
define_integer_vector! {
2017
/// Vector of 16 `u16` values
21-
#[derive(Eq, Ord, Hash)]
2218
struct u16x16([u16; 16]);
2319
}
2420

25-
define_vector! {
21+
define_integer_vector! {
2622
/// Vector of 32 `u16` values
27-
#[derive(Eq, Ord, Hash)]
2823
struct u16x32([u16; 32]);
2924
}
3025

crates/core_simd/src/vectors_u32.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `u32` values
3-
#[derive(Eq, Ord, Hash)]
43
struct u32x2([u32; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `u32` values
9-
#[derive(Eq, Ord, Hash)]
108
struct u32x4([u32; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `u32` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct u32x8([u32; 8]);
1714
}
1815

19-
define_vector! {
16+
define_integer_vector! {
2017
/// Vector of 16 `u32` values
21-
#[derive(Eq, Ord, Hash)]
2218
struct u32x16([u32; 16]);
2319
}
2420

crates/core_simd/src/vectors_u64.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `u64` values
3-
#[derive(Eq, Ord, Hash)]
43
struct u64x2([u64; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `u64` values
9-
#[derive(Eq, Ord, Hash)]
108
struct u64x4([u64; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `u64` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct u64x8([u64; 8]);
1714
}
1815

crates/core_simd/src/vectors_u8.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,30 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `u8` values
3-
#[derive(Eq, Ord, Hash)]
43
struct u8x2([u8; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `u8` values
9-
#[derive(Eq, Ord, Hash)]
108
struct u8x4([u8; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `u8` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct u8x8([u8; 8]);
1714
}
1815

19-
define_vector! {
16+
define_integer_vector! {
2017
/// Vector of 16 `u8` values
21-
#[derive(Eq, Ord, Hash)]
2218
struct u8x16([u8; 16]);
2319
}
2420

25-
define_vector! {
21+
define_integer_vector! {
2622
/// Vector of 32 `u8` values
27-
#[derive(Eq, Ord, Hash)]
2823
struct u8x32([u8; 32]);
2924
}
3025

31-
define_vector! {
26+
define_integer_vector! {
3227
/// Vector of 64 `u8` values
33-
#[derive(Eq, Ord, Hash)]
3428
struct u8x64([u8; 64]);
3529
}
3630

crates/core_simd/src/vectors_usize.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
define_vector! {
1+
define_integer_vector! {
22
/// Vector of two `usize` values
3-
#[derive(Eq, Ord, Hash)]
43
struct usizex2([usize; 2]);
54
}
65

7-
define_vector! {
6+
define_integer_vector! {
87
/// Vector of four `usize` values
9-
#[derive(Eq, Ord, Hash)]
108
struct usizex4([usize; 4]);
119
}
1210

13-
define_vector! {
11+
define_integer_vector! {
1412
/// Vector of eight `usize` values
15-
#[derive(Eq, Ord, Hash)]
1613
struct usizex8([usize; 8]);
1714
}
1815

0 commit comments

Comments
 (0)