From 98cd636d581962c29ca336ca89dce083dbed926f Mon Sep 17 00:00:00 2001 From: Jubilee Young Date: Wed, 2 Mar 2022 20:09:01 -0800 Subject: [PATCH 1/3] Add Mask::cast --- crates/core_simd/src/masks.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/core_simd/src/masks.rs b/crates/core_simd/src/masks.rs index e8962b86b118..8f2f3f6aee00 100644 --- a/crates/core_simd/src/masks.rs +++ b/crates/core_simd/src/masks.rs @@ -181,6 +181,13 @@ where self.0.to_int() } + /// Converts the mask to a mask of any other lane size. + #[inline] + #[must_use = "method returns a new mask and does not mutate the original value"] + pub fn cast(self) -> Mask { + Mask(self.0.convert()) + } + /// Tests the value of the specified lane. /// /// # Safety From aa11959f19789f7db6d3a37bc52f5d7718cc9224 Mon Sep 17 00:00:00 2001 From: Caleb Zulawski Date: Sat, 21 May 2022 15:13:20 -0400 Subject: [PATCH 2/3] Add mask cast tests --- crates/core_simd/tests/masks.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/crates/core_simd/tests/masks.rs b/crates/core_simd/tests/masks.rs index d10c6610f505..3a0493d4ee66 100644 --- a/crates/core_simd/tests/masks.rs +++ b/crates/core_simd/tests/masks.rs @@ -99,6 +99,29 @@ macro_rules! test_mask_api { assert_eq!(bitmask, 0b01); assert_eq!(core_simd::Mask::<$type, 2>::from_bitmask(bitmask), mask); } + + #[test] + fn cast() { + fn cast_impl() + where + core_simd::Mask<$type, 8>: Into>, + { + let values = [true, false, false, true, false, false, true, false]; + let mask = core_simd::Mask::<$type, 8>::from_array(values); + + let cast_mask = mask.cast::(); + assert_eq!(values, cast_mask.to_array()); + + let into_mask: core_simd::Mask = mask.into(); + assert_eq!(values, into_mask.to_array()); + } + + cast_impl::(); + cast_impl::(); + cast_impl::(); + cast_impl::(); + cast_impl::(); + } } } } From c9f4e0ef98a4c8c54919d25eafd83e9bcaf2e4df Mon Sep 17 00:00:00 2001 From: Caleb Zulawski Date: Sat, 21 May 2022 16:49:03 -0400 Subject: [PATCH 3/3] Use Mask::cast in From impl --- crates/core_simd/src/masks.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/core_simd/src/masks.rs b/crates/core_simd/src/masks.rs index 8f2f3f6aee00..dcec336cfaf2 100644 --- a/crates/core_simd/src/masks.rs +++ b/crates/core_simd/src/masks.rs @@ -578,7 +578,7 @@ macro_rules! impl_from { LaneCount: SupportedLaneCount, { fn from(value: Mask<$from, LANES>) -> Self { - Self(value.0.convert()) + value.cast() } } )*