@@ -2,51 +2,49 @@ use crate::simd::intrinsics;
22use crate :: simd:: { LaneCount , Mask , MaskElement , Simd , SimdElement , SupportedLaneCount } ;
33
44mod sealed {
5- pub trait Sealed { }
5+ pub trait Sealed < Mask > {
6+ fn select ( mask : Mask , true_values : Self , false_values : Self ) -> Self ;
7+ }
68}
79use sealed:: Sealed ;
810
911/// Supporting trait for vector `select` function
10- pub trait Select < Mask > : Sealed {
11- #[ doc( hidden) ]
12- fn select ( mask : Mask , true_values : Self , false_values : Self ) -> Self ;
13- }
12+ pub trait Select < Mask > : Sealed < Mask > { }
1413
15- impl < T , const LANES : usize > Sealed for Simd < T , LANES >
14+ impl < T , const LANES : usize > Sealed < Mask < T :: Mask , LANES > > for Simd < T , LANES >
1615where
1716 T : SimdElement ,
1817 LaneCount < LANES > : SupportedLaneCount ,
1918{
19+ #[ inline]
20+ fn select ( mask : Mask < T :: Mask , LANES > , true_values : Self , false_values : Self ) -> Self {
21+ unsafe { intrinsics:: simd_select ( mask. to_int ( ) , true_values, false_values) }
22+ }
2023}
2124
2225impl < T , const LANES : usize > Select < Mask < T :: Mask , LANES > > for Simd < T , LANES >
2326where
2427 T : SimdElement ,
2528 LaneCount < LANES > : SupportedLaneCount ,
2629{
27- #[ inline]
28- fn select ( mask : Mask < T :: Mask , LANES > , true_values : Self , false_values : Self ) -> Self {
29- unsafe { intrinsics:: simd_select ( mask. to_int ( ) , true_values, false_values) }
30- }
3130}
3231
33- impl < T , const LANES : usize > Sealed for Mask < T , LANES >
32+ impl < T , const LANES : usize > Sealed < Self > for Mask < T , LANES >
3433where
3534 T : MaskElement ,
3635 LaneCount < LANES > : SupportedLaneCount ,
3736{
37+ #[ inline]
38+ fn select ( mask : Self , true_values : Self , false_values : Self ) -> Self {
39+ mask & true_values | !mask & false_values
40+ }
3841}
3942
4043impl < T , const LANES : usize > Select < Self > for Mask < T , LANES >
4144where
4245 T : MaskElement ,
4346 LaneCount < LANES > : SupportedLaneCount ,
4447{
45- #[ doc( hidden) ]
46- #[ inline]
47- fn select ( mask : Self , true_values : Self , false_values : Self ) -> Self {
48- mask & true_values | !mask & false_values
49- }
5048}
5149
5250impl < T , const LANES : usize > Mask < T , LANES >
0 commit comments