Merge pull request #353 from rust-lang/sync-upstream-2023-06-07
Sync upstream
This commit is contained in:
commit
2b55e03436
@ -1,5 +1,5 @@
|
||||
[workspace]
|
||||
|
||||
resolver = "1"
|
||||
members = [
|
||||
"crates/core_simd",
|
||||
"crates/std_float",
|
||||
|
@ -187,7 +187,7 @@ mod tests {
|
||||
fn main() {
|
||||
{
|
||||
let (energy_before, energy_after) = nbody::run(1000);
|
||||
println!("Energy before: {}", energy_before);
|
||||
println!("Energy after: {}", energy_after);
|
||||
println!("Energy before: {energy_before}");
|
||||
println!("Energy after: {energy_after}");
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ fn dot(x: &[f64], y: &[f64]) -> f64 {
|
||||
#[cfg(test)]
|
||||
#[test]
|
||||
fn test() {
|
||||
assert_eq!(&format!("{:.9}", spectral_norm(100)), "1.274219991");
|
||||
assert_eq!(format!("{:.9}", spectral_norm(100)), "1.274219991");
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -68,7 +68,6 @@ extern "platform-intrinsic" {
|
||||
pub(crate) fn simd_cast<T, U>(x: T) -> U;
|
||||
/// follows Rust's `T as U` semantics, including saturating float casts
|
||||
/// which amounts to the same as `simd_cast` for many cases
|
||||
#[cfg(not(bootstrap))]
|
||||
pub(crate) fn simd_as<T, U>(x: T) -> U;
|
||||
|
||||
/// neg/fneg
|
||||
@ -101,7 +100,7 @@ extern "platform-intrinsic" {
|
||||
/// val: vector of values to select if a lane is masked
|
||||
/// ptr: vector of pointers to read from
|
||||
/// 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?
|
||||
pub(crate) fn simd_gather<T, U, V>(val: T, ptr: U, mask: V) -> T;
|
||||
/// llvm.masked.scatter
|
||||
|
@ -88,7 +88,7 @@ impl_element! { isize }
|
||||
/// 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
|
||||
/// `[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>)
|
||||
where
|
||||
T: MaskElement,
|
||||
|
@ -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
|
||||
T: MaskElement,
|
||||
LaneCount<LANES>: SupportedLaneCount,
|
||||
|
@ -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.
|
||||
/// 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 best, it may open up more optimization opportunities,
|
||||
/// or simply be elided entirely, especially for SIMD ISAs which default to this.
|
||||
|
@ -71,7 +71,7 @@ macro_rules! deref_ops {
|
||||
|
||||
#[inline]
|
||||
#[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)
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,12 @@ where
|
||||
#![allow(unused_imports, unused_unsafe)]
|
||||
#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
|
||||
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};
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
use core::arch::wasm32 as wasm;
|
||||
|
@ -25,7 +25,7 @@ use core::convert::{TryFrom, TryInto};
|
||||
/// let sum = 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));
|
||||
/// // Which means arrays implement `Into<Simd<T, N>>`.
|
||||
/// assert_eq!(v + w, sum.into());
|
||||
|
Loading…
x
Reference in New Issue
Block a user