Merge pull request #353 from rust-lang/sync-upstream-2023-06-07

Sync upstream
This commit is contained in:
Jubilee 2023-07-07 03:21:10 -07:00 committed by GitHub
commit 2b55e03436
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 16 additions and 12 deletions

View File

@ -1,5 +1,5 @@
[workspace] [workspace]
resolver = "1"
members = [ members = [
"crates/core_simd", "crates/core_simd",
"crates/std_float", "crates/std_float",

View File

@ -187,7 +187,7 @@ mod tests {
fn main() { fn main() {
{ {
let (energy_before, energy_after) = nbody::run(1000); let (energy_before, energy_after) = nbody::run(1000);
println!("Energy before: {}", energy_before); println!("Energy before: {energy_before}");
println!("Energy after: {}", energy_after); println!("Energy after: {energy_after}");
} }
} }

View File

@ -69,7 +69,7 @@ fn dot(x: &[f64], y: &[f64]) -> f64 {
#[cfg(test)] #[cfg(test)]
#[test] #[test]
fn test() { fn test() {
assert_eq!(&format!("{:.9}", spectral_norm(100)), "1.274219991"); assert_eq!(format!("{:.9}", spectral_norm(100)), "1.274219991");
} }
fn main() { fn main() {

View File

@ -68,7 +68,6 @@ extern "platform-intrinsic" {
pub(crate) fn simd_cast<T, U>(x: T) -> U; pub(crate) fn simd_cast<T, U>(x: T) -> U;
/// follows Rust's `T as U` semantics, including saturating float casts /// follows Rust's `T as U` semantics, including saturating float casts
/// which amounts to the same as `simd_cast` for many cases /// which amounts to the same as `simd_cast` for many cases
#[cfg(not(bootstrap))]
pub(crate) fn simd_as<T, U>(x: T) -> U; pub(crate) fn simd_as<T, U>(x: T) -> U;
/// neg/fneg /// neg/fneg
@ -101,7 +100,7 @@ extern "platform-intrinsic" {
/// val: vector of values to select if a lane is masked /// val: vector of values to select if a lane is masked
/// ptr: vector of pointers to read from /// ptr: vector of pointers to read from
/// mask: a "wide" mask of integers, selects as if simd_select(mask, read(ptr), val) /// mask: a "wide" mask of integers, selects as if simd_select(mask, read(ptr), val)
/// note, the LLVM intrinsic accepts a mask vector of <N x i1> /// note, the LLVM intrinsic accepts a mask vector of `<N x i1>`
/// FIXME: review this if/when we fix up our mask story in general? /// FIXME: review this if/when we fix up our mask story in general?
pub(crate) fn simd_gather<T, U, V>(val: T, ptr: U, mask: V) -> T; pub(crate) fn simd_gather<T, U, V>(val: T, ptr: U, mask: V) -> T;
/// llvm.masked.scatter /// llvm.masked.scatter

View File

@ -88,7 +88,7 @@ impl_element! { isize }
/// The layout of this type is unspecified, and may change between platforms /// The layout of this type is unspecified, and may change between platforms
/// and/or Rust versions, and code should not assume that it is equivalent to /// and/or Rust versions, and code should not assume that it is equivalent to
/// `[T; LANES]`. /// `[T; LANES]`.
#[repr(transparent)] #[cfg_attr(not(doc), repr(transparent))] // work around https://github.com/rust-lang/rust/issues/90435
pub struct Mask<T, const LANES: usize>(mask_impl::Mask<T, LANES>) pub struct Mask<T, const LANES: usize>(mask_impl::Mask<T, LANES>)
where where
T: MaskElement, T: MaskElement,

View File

@ -260,7 +260,7 @@ where
} }
} }
impl<T, const LANES: usize> core::convert::From<Mask<T, LANES>> for Simd<T, LANES> impl<T, const LANES: usize> From<Mask<T, LANES>> for Simd<T, LANES>
where where
T: MaskElement, T: MaskElement,
LaneCount<LANES>: SupportedLaneCount, LaneCount<LANES>: SupportedLaneCount,

View File

@ -42,7 +42,7 @@ macro_rules! unsafe_base {
/// SAFETY: This macro should not be used for anything except Shl or Shr, and passed the appropriate shift intrinsic. /// SAFETY: This macro should not be used for anything except Shl or Shr, and passed the appropriate shift intrinsic.
/// It handles performing a bitand in addition to calling the shift operator, so that the result /// It handles performing a bitand in addition to calling the shift operator, so that the result
/// is well-defined: LLVM can return a poison value if you shl, lshr, or ashr if rhs >= <Int>::BITS /// is well-defined: LLVM can return a poison value if you shl, lshr, or ashr if `rhs >= <Int>::BITS`
/// At worst, this will maybe add another instruction and cycle, /// At worst, this will maybe add another instruction and cycle,
/// at best, it may open up more optimization opportunities, /// at best, it may open up more optimization opportunities,
/// or simply be elided entirely, especially for SIMD ISAs which default to this. /// or simply be elided entirely, especially for SIMD ISAs which default to this.

View File

@ -71,7 +71,7 @@ macro_rules! deref_ops {
#[inline] #[inline]
#[must_use = "operator returns a new vector without mutating the inputs"] #[must_use = "operator returns a new vector without mutating the inputs"]
fn $call(self, rhs: &$simd) -> Self::Output { fn $call(self, rhs: &'rhs $simd) -> Self::Output {
(*self).$call(*rhs) (*self).$call(*rhs)
} }
} }

View File

@ -18,7 +18,12 @@ where
#![allow(unused_imports, unused_unsafe)] #![allow(unused_imports, unused_unsafe)]
#[cfg(all(target_arch = "aarch64", target_endian = "little"))] #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtbl1_u8}; use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtbl1_u8};
#[cfg(all(target_arch = "arm", target_feature = "v7", target_endian = "little"))] #[cfg(all(
target_arch = "arm",
target_feature = "v7",
target_feature = "neon",
target_endian = "little"
))]
use core::arch::arm::{uint8x8_t, vtbl1_u8}; use core::arch::arm::{uint8x8_t, vtbl1_u8};
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
use core::arch::wasm32 as wasm; use core::arch::wasm32 as wasm;

View File

@ -25,7 +25,7 @@ use core::convert::{TryFrom, TryInto};
/// let sum = array::from_fn(|i| a[i] + b[i]); /// let sum = array::from_fn(|i| a[i] + b[i]);
/// let prod = array::from_fn(|i| a[i] * b[i]); /// let prod = array::from_fn(|i| a[i] * b[i]);
/// ///
/// // `Simd<T, N>` implements `From<[T; N]> /// // `Simd<T, N>` implements `From<[T; N]>`
/// let (v, w) = (Simd::from(a), Simd::from(b)); /// let (v, w) = (Simd::from(a), Simd::from(b));
/// // Which means arrays implement `Into<Simd<T, N>>`. /// // Which means arrays implement `Into<Simd<T, N>>`.
/// assert_eq!(v + w, sum.into()); /// assert_eq!(v + w, sum.into());