File tree Expand file tree Collapse file tree 3 files changed +66
-0
lines changed Expand file tree Collapse file tree 3 files changed +66
-0
lines changed Original file line number Diff line number Diff line change 66
66
unsafe { Mask :: from_int_unchecked ( intrinsics:: simd_ge ( self , other) ) }
67
67
}
68
68
}
69
+
70
+ macro_rules! impl_min_max_vector {
71
+ { $type: ty } => {
72
+ impl <const LANES : usize > Simd <$type, LANES >
73
+ where
74
+ LaneCount <LANES >: SupportedLaneCount ,
75
+ {
76
+ /// Returns the lane-wise minimum with other
77
+ #[ must_use = "method returns a new vector and does not mutate the original value" ]
78
+ #[ inline]
79
+ pub fn min( self , other: Self ) -> Self {
80
+ self . lanes_gt( other) . select( other, self )
81
+ }
82
+
83
+ /// Returns the lane-wise maximum with other
84
+ #[ must_use = "method returns a new vector and does not mutate the original value" ]
85
+ #[ inline]
86
+ pub fn max( self , other: Self ) -> Self {
87
+ self . lanes_lt( other) . select( other, self )
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+ impl_min_max_vector ! ( i8 ) ;
94
+ impl_min_max_vector ! ( i16 ) ;
95
+ impl_min_max_vector ! ( i32 ) ;
96
+ impl_min_max_vector ! ( i64 ) ;
97
+ impl_min_max_vector ! ( isize ) ;
98
+ impl_min_max_vector ! ( u8 ) ;
99
+ impl_min_max_vector ! ( u16 ) ;
100
+ impl_min_max_vector ! ( u32 ) ;
101
+ impl_min_max_vector ! ( u64 ) ;
102
+ impl_min_max_vector ! ( usize ) ;
Original file line number Diff line number Diff line change 1
1
#![ feature( portable_simd) ]
2
+ use core_simd:: i16x2;
2
3
3
4
#[ macro_use]
4
5
mod ops_macros;
5
6
impl_signed_tests ! { i16 }
7
+
8
+ #[ test]
9
+ fn max_is_not_lexicographic ( ) {
10
+ let a = i16x2:: splat ( 10 ) ;
11
+ let b = i16x2:: from_array ( [ -4 , 12 ] ) ;
12
+ assert_eq ! ( a. max( b) , i16x2:: from_array( [ 10 , 12 ] ) ) ;
13
+ }
14
+
15
+ #[ test]
16
+ fn min_is_not_lexicographic ( ) {
17
+ let a = i16x2:: splat ( 10 ) ;
18
+ let b = i16x2:: from_array ( [ 12 , -4 ] ) ;
19
+ assert_eq ! ( a. min( b) , i16x2:: from_array( [ 10 , -4 ] ) ) ;
20
+ }
Original file line number Diff line number Diff line change @@ -222,6 +222,23 @@ macro_rules! impl_signed_tests {
222
222
assert_eq!( a % b, Vector :: <LANES >:: splat( 0 ) ) ;
223
223
}
224
224
225
+ fn min<const LANES : usize >( ) {
226
+ let a = Vector :: <LANES >:: splat( Scalar :: MIN ) ;
227
+ let b = Vector :: <LANES >:: splat( 0 ) ;
228
+ assert_eq!( a. min( b) , a) ;
229
+ let a = Vector :: <LANES >:: splat( Scalar :: MAX ) ;
230
+ let b = Vector :: <LANES >:: splat( 0 ) ;
231
+ assert_eq!( a. min( b) , b) ;
232
+ }
233
+
234
+ fn max<const LANES : usize >( ) {
235
+ let a = Vector :: <LANES >:: splat( Scalar :: MIN ) ;
236
+ let b = Vector :: <LANES >:: splat( 0 ) ;
237
+ assert_eq!( a. max( b) , b) ;
238
+ let a = Vector :: <LANES >:: splat( Scalar :: MAX ) ;
239
+ let b = Vector :: <LANES >:: splat( 0 ) ;
240
+ assert_eq!( a. max( b) , a) ;
241
+ }
225
242
}
226
243
227
244
test_helpers:: test_lanes_panic! {
You can’t perform that action at this time.
0 commit comments