From 26f742f1bcaa611095950667807879e729db4a83 Mon Sep 17 00:00:00 2001 From: TheIronBorn Date: Wed, 13 Mar 2024 22:18:57 -0700 Subject: [PATCH 1/3] document more crate features --- rand_core/src/lib.rs | 1 + src/distributions/distribution.rs | 1 + src/distributions/integer.rs | 26 +++++++++++++--- src/distributions/mod.rs | 1 + src/distributions/other.rs | 3 ++ src/distributions/slice.rs | 1 + src/distributions/uniform.rs | 50 ++++++++++++++++++++++--------- src/seq/mod.rs | 13 ++++---- 8 files changed, 72 insertions(+), 24 deletions(-) diff --git a/rand_core/src/lib.rs b/rand_core/src/lib.rs index d42ab8d63ef..70424e6c9c0 100644 --- a/rand_core/src/lib.rs +++ b/rand_core/src/lib.rs @@ -481,6 +481,7 @@ impl<'a, R: CryptoRng + ?Sized> CryptoRng for &'a mut R {} // Implement `CryptoRng` for boxed references to a `CryptoRng`. #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] impl CryptoRng for Box {} #[cfg(test)] diff --git a/src/distributions/distribution.rs b/src/distributions/distribution.rs index 18ab30b8860..175e355ac8d 100644 --- a/src/distributions/distribution.rs +++ b/src/distributions/distribution.rs @@ -186,6 +186,7 @@ where /// Sampling a `String` of random characters is not quite the same as collecting /// a sequence of chars. This trait contains some helpers. #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] pub trait DistString { /// Append `len` random chars to `string` fn append_string(&self, rng: &mut R, string: &mut String, len: usize); diff --git a/src/distributions/integer.rs b/src/distributions/integer.rs index e5d320b2550..08f4522f60e 100644 --- a/src/distributions/integer.rs +++ b/src/distributions/integer.rs @@ -124,8 +124,11 @@ impl_nzint!(NonZeroI128, NonZeroI128::new); impl_nzint!(NonZeroIsize, NonZeroIsize::new); macro_rules! x86_intrinsic_impl { - ($($intrinsic:ident),+) => {$( - /// Available only on x86/64 platforms + ($meta:meta, $doc:literal, $($intrinsic:ident),+) => {$( + #[doc = $doc] + #[cfg($meta)] + // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this + #[cfg_attr(doc_cfg, doc(cfg($meta)))] impl Distribution<$intrinsic> for Standard { #[inline] fn sample(&self, rng: &mut R) -> $intrinsic { @@ -146,6 +149,9 @@ macro_rules! simd_impl { /// Requires nightly Rust and the [`simd_support`] feature /// /// [`simd_support`]: https://github.com/rust-random/rand#crate-features + #[cfg(feature = "simd_support")] + // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this + #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))] impl Distribution> for Standard where LaneCount: SupportedLaneCount, @@ -164,12 +170,24 @@ macro_rules! simd_impl { simd_impl!(u8, i8, u16, i16, u32, i32, u64, i64, usize, isize); #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] -x86_intrinsic_impl!(__m128i, __m256i); +x86_intrinsic_impl!( + any(target_arch = "x86", target_arch = "x86_64"), + "Requires x86/64", + __m128i, + __m256i +); #[cfg(all( any(target_arch = "x86", target_arch = "x86_64"), feature = "simd_support" ))] -x86_intrinsic_impl!(__m512i); +x86_intrinsic_impl!( + all( + any(target_arch = "x86", target_arch = "x86_64"), + feature = "simd_support" + ), + "Requires x86/64 and `simd_support`", + __m512i +); #[cfg(test)] mod tests { diff --git a/src/distributions/mod.rs b/src/distributions/mod.rs index 39d967d4f60..ee3615cf922 100644 --- a/src/distributions/mod.rs +++ b/src/distributions/mod.rs @@ -112,6 +112,7 @@ pub mod uniform; pub use self::bernoulli::{Bernoulli, BernoulliError}; pub use self::distribution::{Distribution, DistIter, DistMap}; #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] pub use self::distribution::DistString; pub use self::float::{Open01, OpenClosed01}; pub use self::other::Alphanumeric; diff --git a/src/distributions/other.rs b/src/distributions/other.rs index 596b8962c1e..a5425200791 100644 --- a/src/distributions/other.rs +++ b/src/distributions/other.rs @@ -98,6 +98,7 @@ impl Distribution for Standard { /// Note: the `String` is potentially left with excess capacity; optionally the /// user may call `string.shrink_to_fit()` afterwards. #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] impl DistString for Standard { fn append_string(&self, rng: &mut R, s: &mut String, len: usize) { // A char is encoded with at most four bytes, thus this reservation is @@ -128,6 +129,7 @@ impl Distribution for Alphanumeric { } #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] impl DistString for Alphanumeric { fn append_string(&self, rng: &mut R, string: &mut String, len: usize) { unsafe { @@ -177,6 +179,7 @@ impl Distribution for Standard { /// [`_mm_blendv_epi8`]: https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_epi8&ig_expand=514/ /// [`simd_support`]: https://github.com/rust-random/rand#crate-features #[cfg(feature = "simd_support")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))] impl Distribution> for Standard where T: MaskElement + Default, diff --git a/src/distributions/slice.rs b/src/distributions/slice.rs index 1c96680aa64..d49f45ccebc 100644 --- a/src/distributions/slice.rs +++ b/src/distributions/slice.rs @@ -129,6 +129,7 @@ impl std::error::Error for EmptySlice {} /// Note: the `String` is potentially left with excess capacity; optionally the /// user may call `string.shrink_to_fit()` afterwards. #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] impl<'a> super::DistString for Slice<'a, char> { fn append_string(&self, rng: &mut R, string: &mut String, len: usize) { // Get the max char length to minimize extra space. diff --git a/src/distributions/uniform.rs b/src/distributions/uniform.rs index ecf90520b21..01ba71a44dc 100644 --- a/src/distributions/uniform.rs +++ b/src/distributions/uniform.rs @@ -604,7 +604,7 @@ macro_rules! uniform_int_impl { let (mut result, mut lo) = rng.gen::<$sample_ty>().wmul(range); - // In constrast to the biased sampler, we use a loop: + // In contrast to the biased sampler, we use a loop: while lo > range.wrapping_neg() { let (new_hi, new_lo) = (rng.gen::<$sample_ty>()).wmul(range); match lo.checked_add(new_hi) { @@ -652,6 +652,13 @@ macro_rules! uniform_simd_int_impl { // know the PRNG's minimal output size, and casting to a larger vector // is generally a bad idea for SIMD performance. The user can still // implement it manually. + + /// Requires nightly Rust and the [`simd_support`] feature + /// + /// [`simd_support`]: https://github.com/rust-random/rand#crate-features + #[cfg(feature = "simd_support")] + // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this + #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))] impl SampleUniform for Simd<$ty, LANES> where LaneCount: SupportedLaneCount, @@ -662,6 +669,12 @@ macro_rules! uniform_simd_int_impl { type Sampler = UniformInt>; } + /// Requires nightly Rust and the [`simd_support`] feature + /// + /// [`simd_support`]: https://github.com/rust-random/rand#crate-features + #[cfg(feature = "simd_support")] + // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this + #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))] impl UniformSampler for UniformInt> where LaneCount: SupportedLaneCount, @@ -839,11 +852,12 @@ impl UniformSampler for UniformChar { } } -/// Note: the `String` is potentially left with excess capacity if the range -/// includes non ascii chars; optionally the user may call +/// Note: the `String` is potentially left with excess capacity if the range +/// includes non ascii chars; optionally the user may call /// `string.shrink_to_fit()` afterwards. #[cfg(feature = "alloc")] -impl super::DistString for Uniform{ +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] +impl super::DistString for Uniform { fn append_string(&self, rng: &mut R, string: &mut alloc::string::String, len: usize) { // Getting the hi value to assume the required length to reserve in string. let mut hi = self.0.sampler.low + self.0.sampler.range - 1; @@ -884,11 +898,19 @@ pub struct UniformFloat { } macro_rules! uniform_float_impl { - ($ty:ty, $uty:ident, $f_scalar:ident, $u_scalar:ident, $bits_to_discard:expr) => { + ($($meta:meta, $doc:literal)?, $ty:ty, $uty:ident, $f_scalar:ident, $u_scalar:ident, $bits_to_discard:expr) => { + $(#[doc = $doc] + #[cfg(feature = "simd_support")] + // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this + #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))])? impl SampleUniform for $ty { type Sampler = UniformFloat<$ty>; } + $(#[doc = $doc] + #[cfg(feature = "simd_support")] + // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this + #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))])? impl UniformSampler for UniformFloat<$ty> { type X = $ty; @@ -1088,24 +1110,24 @@ macro_rules! uniform_float_impl { }; } -uniform_float_impl! { f32, u32, f32, u32, 32 - 23 } -uniform_float_impl! { f64, u64, f64, u64, 64 - 52 } +uniform_float_impl! { , f32, u32, f32, u32, 32 - 23 } +uniform_float_impl! { , f64, u64, f64, u64, 64 - 52 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f32x2, u32x2, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x2, u32x2, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f32x4, u32x4, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x4, u32x4, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f32x8, u32x8, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x8, u32x8, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f32x16, u32x16, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x16, u32x16, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f64x2, u64x2, f64, u64, 64 - 52 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f64x2, u64x2, f64, u64, 64 - 52 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f64x4, u64x4, f64, u64, 64 - 52 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f64x4, u64x4, f64, u64, 64 - 52 } #[cfg(feature = "simd_support")] -uniform_float_impl! { f64x8, u64x8, f64, u64, 64 - 52 } +uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f64x8, u64x8, f64, u64, 64 - 52 } /// The back-end implementing [`UniformSampler`] for `Duration`. diff --git a/src/seq/mod.rs b/src/seq/mod.rs index 908021ad3dc..8d19e57df21 100644 --- a/src/seq/mod.rs +++ b/src/seq/mod.rs @@ -637,17 +637,17 @@ impl SliceRandom for [T] { // for an unbiased permutation. // It ensures that the last `amount` elements of the slice // are randomly selected from the whole slice. - - //`IncreasingUniform::next_index()` is faster than `gen_index` - //but only works for 32 bit integers - //So we must use the slow method if the slice is longer than that. + + // `IncreasingUniform::next_index()` is faster than `gen_index` + // but only works for 32 bit integers + // So we must use the slow method if the slice is longer than that. if self.len() < (u32::MAX as usize) { let mut chooser = IncreasingUniform::new(rng, m as u32); for i in m..self.len() { let index = chooser.next_index(); self.swap(i, index); } - } else { + } else { for i in m..self.len() { let index = gen_index(rng, i + 1); self.swap(i, index); @@ -674,6 +674,7 @@ pub struct SliceChooseIter<'a, S: ?Sized + 'a, T: 'a> { } #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] impl<'a, S: Index + ?Sized + 'a, T: 'a> Iterator for SliceChooseIter<'a, S, T> { type Item = &'a T; @@ -688,6 +689,7 @@ impl<'a, S: Index + ?Sized + 'a, T: 'a> Iterator for SliceCho } #[cfg(feature = "alloc")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] impl<'a, S: Index + ?Sized + 'a, T: 'a> ExactSizeIterator for SliceChooseIter<'a, S, T> { @@ -701,7 +703,6 @@ impl<'a, S: Index + ?Sized + 'a, T: 'a> ExactSizeIterator // platforms. #[inline] fn gen_index(rng: &mut R, ubound: usize) -> usize { - if ubound <= (core::u32::MAX as usize) { rng.gen_range(0..ubound as u32) as usize } else { From e4c0186ae8af00b319a9fba2f510ee9a13fc0131 Mon Sep 17 00:00:00 2001 From: TheIronBorn Date: Fri, 15 Mar 2024 14:28:45 -0700 Subject: [PATCH 2/3] fix rustdoc example --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1d8cfbe057c..3e9d4a1173a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ include = ["src/", "LICENSE-*", "README.md", "CHANGELOG.md", "COPYRIGHT"] [package.metadata.docs.rs] # To build locally: -# RUSTDOCFLAGS="--cfg doc_cfg" cargo +nightly doc --all-features --no-deps --generate-link-to-definition --open +# RUSTDOCFLAGS="--cfg doc_cfg -Zunstable-options --generate-link-to-definition" cargo +nightly doc --all --all-features --no-deps --open all-features = true rustdoc-args = ["--cfg", "doc_cfg", "--generate-link-to-definition"] From 8ded1c9bb197ddb8b24598abf9f41a24c76a2ab3 Mon Sep 17 00:00:00 2001 From: TheIronBorn Date: Sat, 16 Mar 2024 03:06:50 -0700 Subject: [PATCH 3/3] doc more features, remove redundant doc comments --- src/distributions/float.rs | 27 +++++++++++++++++---------- src/distributions/integer.rs | 6 +----- src/distributions/other.rs | 2 -- src/distributions/uniform.rs | 36 ++++++++++++------------------------ 4 files changed, 30 insertions(+), 41 deletions(-) diff --git a/src/distributions/float.rs b/src/distributions/float.rs index 4414cc74988..da7321ee866 100644 --- a/src/distributions/float.rs +++ b/src/distributions/float.rs @@ -90,8 +90,9 @@ pub trait IntoFloat { } macro_rules! float_impls { - ($ty:ident, $uty:ident, $f_scalar:ident, $u_scalar:ty, + ($($meta:meta)?, $ty:ident, $uty:ident, $f_scalar:ident, $u_scalar:ty, $fraction_bits:expr, $exponent_bias:expr) => { + $(#[cfg($meta)])? impl IntoFloat for $uty { type F = $ty; #[inline(always)] @@ -103,6 +104,8 @@ macro_rules! float_impls { } } + $(#[cfg($meta)] + #[cfg_attr(doc_cfg, doc(cfg($meta)))])? impl Distribution<$ty> for Standard { fn sample(&self, rng: &mut R) -> $ty { // Multiply-based method; 24/53 random bits; [0, 1) interval. @@ -118,6 +121,8 @@ macro_rules! float_impls { } } + $(#[cfg($meta)] + #[cfg_attr(doc_cfg, doc(cfg($meta)))])? impl Distribution<$ty> for OpenClosed01 { fn sample(&self, rng: &mut R) -> $ty { // Multiply-based method; 24/53 random bits; (0, 1] interval. @@ -134,6 +139,8 @@ macro_rules! float_impls { } } + $(#[cfg($meta)] + #[cfg_attr(doc_cfg, doc(cfg($meta)))])? impl Distribution<$ty> for Open01 { fn sample(&self, rng: &mut R) -> $ty { // Transmute-based method; 23/52 random bits; (0, 1) interval. @@ -150,24 +157,24 @@ macro_rules! float_impls { } } -float_impls! { f32, u32, f32, u32, 23, 127 } -float_impls! { f64, u64, f64, u64, 52, 1023 } +float_impls! { , f32, u32, f32, u32, 23, 127 } +float_impls! { , f64, u64, f64, u64, 52, 1023 } #[cfg(feature = "simd_support")] -float_impls! { f32x2, u32x2, f32, u32, 23, 127 } +float_impls! { feature = "simd_support", f32x2, u32x2, f32, u32, 23, 127 } #[cfg(feature = "simd_support")] -float_impls! { f32x4, u32x4, f32, u32, 23, 127 } +float_impls! { feature = "simd_support", f32x4, u32x4, f32, u32, 23, 127 } #[cfg(feature = "simd_support")] -float_impls! { f32x8, u32x8, f32, u32, 23, 127 } +float_impls! { feature = "simd_support", f32x8, u32x8, f32, u32, 23, 127 } #[cfg(feature = "simd_support")] -float_impls! { f32x16, u32x16, f32, u32, 23, 127 } +float_impls! { feature = "simd_support", f32x16, u32x16, f32, u32, 23, 127 } #[cfg(feature = "simd_support")] -float_impls! { f64x2, u64x2, f64, u64, 52, 1023 } +float_impls! { feature = "simd_support", f64x2, u64x2, f64, u64, 52, 1023 } #[cfg(feature = "simd_support")] -float_impls! { f64x4, u64x4, f64, u64, 52, 1023 } +float_impls! { feature = "simd_support", f64x4, u64x4, f64, u64, 52, 1023 } #[cfg(feature = "simd_support")] -float_impls! { f64x8, u64x8, f64, u64, 52, 1023 } +float_impls! { feature = "simd_support", f64x8, u64x8, f64, u64, 52, 1023 } #[cfg(test)] mod tests { diff --git a/src/distributions/integer.rs b/src/distributions/integer.rs index 08f4522f60e..8b9ae4ad403 100644 --- a/src/distributions/integer.rs +++ b/src/distributions/integer.rs @@ -124,10 +124,8 @@ impl_nzint!(NonZeroI128, NonZeroI128::new); impl_nzint!(NonZeroIsize, NonZeroIsize::new); macro_rules! x86_intrinsic_impl { - ($meta:meta, $doc:literal, $($intrinsic:ident),+) => {$( - #[doc = $doc] + ($meta:meta, $($intrinsic:ident),+) => {$( #[cfg($meta)] - // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this #[cfg_attr(doc_cfg, doc(cfg($meta)))] impl Distribution<$intrinsic> for Standard { #[inline] @@ -172,7 +170,6 @@ simd_impl!(u8, i8, u16, i16, u32, i32, u64, i64, usize, isize); #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] x86_intrinsic_impl!( any(target_arch = "x86", target_arch = "x86_64"), - "Requires x86/64", __m128i, __m256i ); @@ -185,7 +182,6 @@ x86_intrinsic_impl!( any(target_arch = "x86", target_arch = "x86_64"), feature = "simd_support" ), - "Requires x86/64 and `simd_support`", __m512i ); diff --git a/src/distributions/other.rs b/src/distributions/other.rs index a5425200791..5b922bd37e2 100644 --- a/src/distributions/other.rs +++ b/src/distributions/other.rs @@ -150,8 +150,6 @@ impl Distribution for Standard { } } -/// Requires nightly Rust and the [`simd_support`] feature -/// /// Note that on some hardware like x86/64 mask operations like [`_mm_blendv_epi8`] /// only care about a single bit. This means that you could use uniform random bits /// directly: diff --git a/src/distributions/uniform.rs b/src/distributions/uniform.rs index 01ba71a44dc..e69d5fe0200 100644 --- a/src/distributions/uniform.rs +++ b/src/distributions/uniform.rs @@ -653,11 +653,7 @@ macro_rules! uniform_simd_int_impl { // is generally a bad idea for SIMD performance. The user can still // implement it manually. - /// Requires nightly Rust and the [`simd_support`] feature - /// - /// [`simd_support`]: https://github.com/rust-random/rand#crate-features #[cfg(feature = "simd_support")] - // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))] impl SampleUniform for Simd<$ty, LANES> where @@ -669,11 +665,7 @@ macro_rules! uniform_simd_int_impl { type Sampler = UniformInt>; } - /// Requires nightly Rust and the [`simd_support`] feature - /// - /// [`simd_support`]: https://github.com/rust-random/rand#crate-features #[cfg(feature = "simd_support")] - // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))] impl UniformSampler for UniformInt> where @@ -898,19 +890,15 @@ pub struct UniformFloat { } macro_rules! uniform_float_impl { - ($($meta:meta, $doc:literal)?, $ty:ty, $uty:ident, $f_scalar:ident, $u_scalar:ident, $bits_to_discard:expr) => { - $(#[doc = $doc] - #[cfg(feature = "simd_support")] - // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this - #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))])? + ($($meta:meta)?, $ty:ty, $uty:ident, $f_scalar:ident, $u_scalar:ident, $bits_to_discard:expr) => { + $(#[cfg($meta)] + #[cfg_attr(doc_cfg, doc(cfg($meta)))])? impl SampleUniform for $ty { type Sampler = UniformFloat<$ty>; } - $(#[doc = $doc] - #[cfg(feature = "simd_support")] - // TODO: as doc_cfg/doc_auto_cfg mature ensure they catch this - #[cfg_attr(doc_cfg, doc(cfg(feature = "simd_support")))])? + $(#[cfg($meta)] + #[cfg_attr(doc_cfg, doc(cfg($meta)))])? impl UniformSampler for UniformFloat<$ty> { type X = $ty; @@ -1114,20 +1102,20 @@ uniform_float_impl! { , f32, u32, f32, u32, 32 - 23 } uniform_float_impl! { , f64, u64, f64, u64, 64 - 52 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x2, u32x2, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", f32x2, u32x2, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x4, u32x4, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", f32x4, u32x4, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x8, u32x8, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", f32x8, u32x8, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f32x16, u32x16, f32, u32, 32 - 23 } +uniform_float_impl! { feature = "simd_support", f32x16, u32x16, f32, u32, 32 - 23 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f64x2, u64x2, f64, u64, 64 - 52 } +uniform_float_impl! { feature = "simd_support", f64x2, u64x2, f64, u64, 64 - 52 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f64x4, u64x4, f64, u64, 64 - 52 } +uniform_float_impl! { feature = "simd_support", f64x4, u64x4, f64, u64, 64 - 52 } #[cfg(feature = "simd_support")] -uniform_float_impl! { feature = "simd_support", "Requires `simd_support`", f64x8, u64x8, f64, u64, 64 - 52 } +uniform_float_impl! { feature = "simd_support", f64x8, u64x8, f64, u64, 64 - 52 } /// The back-end implementing [`UniformSampler`] for `Duration`.