Fix generic_const_exprs feature
This commit is contained in:
parent
b7fea94c96
commit
1cee9304b3
@ -13,10 +13,10 @@
|
||||
mod mask_impl;
|
||||
|
||||
mod to_bitmask;
|
||||
pub use to_bitmask::{ToBitMask, ToBitMaskArray};
|
||||
pub use to_bitmask::ToBitMask;
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
pub use to_bitmask::bitmask_len;
|
||||
pub use to_bitmask::{bitmask_len, ToBitMaskArray};
|
||||
|
||||
use crate::simd::{intrinsics, LaneCount, Simd, SimdElement, SimdPartialEq, SupportedLaneCount};
|
||||
use core::cmp::Ordering;
|
||||
|
@ -1,7 +1,7 @@
|
||||
#![allow(unused_imports)]
|
||||
use super::MaskElement;
|
||||
use crate::simd::intrinsics;
|
||||
use crate::simd::{LaneCount, Simd, SupportedLaneCount, ToBitMask, ToBitMaskArray};
|
||||
use crate::simd::{LaneCount, Simd, SupportedLaneCount, ToBitMask};
|
||||
use core::marker::PhantomData;
|
||||
|
||||
/// A mask where each lane is represented by a single bit.
|
||||
@ -115,6 +115,7 @@ where
|
||||
unsafe { Self(intrinsics::simd_bitmask(value), PhantomData) }
|
||||
}
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
#[inline]
|
||||
#[must_use = "method returns a new array and does not mutate the original value"]
|
||||
pub fn to_bitmask_array<const N: usize>(self) -> [u8; N] {
|
||||
@ -124,6 +125,7 @@ where
|
||||
unsafe { core::mem::transmute_copy(&self.0) }
|
||||
}
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
#[inline]
|
||||
#[must_use = "method returns a new mask and does not mutate the original value"]
|
||||
pub fn from_bitmask_array<const N: usize>(bitmask: [u8; N]) -> Self {
|
||||
|
@ -2,7 +2,10 @@
|
||||
|
||||
use super::MaskElement;
|
||||
use crate::simd::intrinsics;
|
||||
use crate::simd::{LaneCount, Simd, SupportedLaneCount, ToBitMask, ToBitMaskArray};
|
||||
use crate::simd::{LaneCount, Simd, SupportedLaneCount, ToBitMask};
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
use crate::simd::ToBitMaskArray;
|
||||
|
||||
#[repr(transparent)]
|
||||
pub struct Mask<T, const LANES: usize>(Simd<T, LANES>)
|
||||
@ -139,6 +142,7 @@ where
|
||||
unsafe { Mask(intrinsics::simd_cast(self.0)) }
|
||||
}
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
#[inline]
|
||||
#[must_use = "method returns a new array and does not mutate the original value"]
|
||||
pub fn to_bitmask_array<const N: usize>(self) -> [u8; N]
|
||||
@ -171,6 +175,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
#[inline]
|
||||
#[must_use = "method returns a new mask and does not mutate the original value"]
|
||||
pub fn from_bitmask_array<const N: usize>(mut bitmask: [u8; N]) -> Self
|
||||
|
@ -38,6 +38,7 @@ pub unsafe trait ToBitMask: Sealed {
|
||||
/// # Safety
|
||||
/// This trait is `unsafe` and sealed, since the `BYTES` value must match the number of lanes in
|
||||
/// the mask.
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
pub unsafe trait ToBitMaskArray: Sealed {
|
||||
/// The length of the bitmask array.
|
||||
const BYTES: usize;
|
||||
@ -78,10 +79,12 @@ impl_integer_intrinsic! {
|
||||
}
|
||||
|
||||
/// Returns the minimum numnber of bytes in a bitmask with `lanes` lanes.
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
pub const fn bitmask_len(lanes: usize) -> usize {
|
||||
(lanes + 7) / 8
|
||||
}
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
unsafe impl<T: MaskElement, const LANES: usize> ToBitMaskArray for Mask<T, LANES>
|
||||
where
|
||||
LaneCount<LANES>: SupportedLaneCount,
|
||||
|
@ -123,6 +123,7 @@ macro_rules! test_mask_api {
|
||||
cast_impl::<isize>();
|
||||
}
|
||||
|
||||
#[cfg(feature = "generic_const_exprs")]
|
||||
#[test]
|
||||
fn roundtrip_bitmask_array_conversion() {
|
||||
use core_simd::ToBitMaskArray;
|
||||
|
Loading…
x
Reference in New Issue
Block a user