From c66554cab3518a9f5c36eafd622ca4c8a3fda631 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 13 Jul 2015 11:57:46 -0700 Subject: [PATCH] switch core::simd to repr(simd) and deprecate it. This functionality will be available out of tree in the `simd` crate on crates.io. [breaking-change] --- src/libcore/lib.rs | 9 ++- src/libcore/simd.rs | 23 ++++--- src/libcore/simd_old.rs | 98 +++++++++++++++++++++++++++++ src/libstd/lib.rs | 1 + src/libstd/rt/unwind/seh64_gnu.rs | 1 - src/libstd/sys/windows/backtrace.rs | 2 + 6 files changed, 122 insertions(+), 12 deletions(-) create mode 100644 src/libcore/simd_old.rs diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs index ae85e2712ce8..c064d87e3702 100644 --- a/src/libcore/lib.rs +++ b/src/libcore/lib.rs @@ -78,7 +78,8 @@ #![feature(optin_builtin_traits)] #![feature(reflect)] #![feature(rustc_attrs)] -#![feature(simd)] +#![cfg_attr(stage0, feature(simd))] +#![cfg_attr(not(stage0), feature(simd_basics))] #![feature(staged_api)] #![feature(unboxed_closures)] @@ -150,7 +151,13 @@ pub mod iter; pub mod option; pub mod raw; pub mod result; + +#[cfg(stage0)] +#[path = "simd_old.rs"] pub mod simd; +#[cfg(not(stage0))] +pub mod simd; + pub mod slice; pub mod str; pub mod hash; diff --git a/src/libcore/simd.rs b/src/libcore/simd.rs index b06c0241093c..d58d0c50a898 100644 --- a/src/libcore/simd.rs +++ b/src/libcore/simd.rs @@ -37,11 +37,14 @@ #![unstable(feature = "core_simd", reason = "needs an RFC to flesh out the design", issue = "27731")] +#![deprecated(since = "1.3.0", + reason = "use the external `simd` crate instead")] #![allow(non_camel_case_types)] #![allow(missing_docs)] +#![allow(deprecated)] -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct i8x16(pub i8, pub i8, pub i8, pub i8, @@ -49,23 +52,23 @@ pub struct i8x16(pub i8, pub i8, pub i8, pub i8, pub i8, pub i8, pub i8, pub i8, pub i8, pub i8, pub i8, pub i8); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct i16x8(pub i16, pub i16, pub i16, pub i16, pub i16, pub i16, pub i16, pub i16); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct i32x4(pub i32, pub i32, pub i32, pub i32); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct i64x2(pub i64, pub i64); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct u8x16(pub u8, pub u8, pub u8, pub u8, @@ -73,28 +76,28 @@ pub struct u8x16(pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct u16x8(pub u16, pub u16, pub u16, pub u16, pub u16, pub u16, pub u16, pub u16); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct u32x4(pub u32, pub u32, pub u32, pub u32); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct u64x2(pub u64, pub u64); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct f32x4(pub f32, pub f32, pub f32, pub f32); -#[simd] +#[repr(simd)] #[derive(Copy, Clone, Debug)] #[repr(C)] pub struct f64x2(pub f64, pub f64); diff --git a/src/libcore/simd_old.rs b/src/libcore/simd_old.rs new file mode 100644 index 000000000000..7ecd08bea357 --- /dev/null +++ b/src/libcore/simd_old.rs @@ -0,0 +1,98 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! SIMD vectors. +//! +//! These types can be used for accessing basic SIMD operations. Each of them +//! implements the standard arithmetic operator traits (Add, Sub, Mul, Div, +//! Rem, Shl, Shr) through compiler magic, rather than explicitly. Currently +//! comparison operators are not implemented. To use SSE3+, you must enable +//! the features, like `-C target-feature=sse3,sse4.1,sse4.2`, or a more +//! specific `target-cpu`. No other SIMD intrinsics or high-level wrappers are +//! provided beyond this module. +//! +//! ```rust +//! # #![feature(core_simd)] +//! fn main() { +//! use std::simd::f32x4; +//! let a = f32x4(40.0, 41.0, 42.0, 43.0); +//! let b = f32x4(1.0, 1.1, 3.4, 9.8); +//! println!("{:?}", a + b); +//! } +//! ``` +//! +//! # Stability Note +//! +//! These are all experimental. The interface may change entirely, without +//! warning. + +#![unstable(feature = "core_simd", + reason = "needs an RFC to flesh out the design")] + +#![allow(non_camel_case_types)] +#![allow(missing_docs)] + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct i8x16(pub i8, pub i8, pub i8, pub i8, + pub i8, pub i8, pub i8, pub i8, + pub i8, pub i8, pub i8, pub i8, + pub i8, pub i8, pub i8, pub i8); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct i16x8(pub i16, pub i16, pub i16, pub i16, + pub i16, pub i16, pub i16, pub i16); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct i32x4(pub i32, pub i32, pub i32, pub i32); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct i64x2(pub i64, pub i64); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct u8x16(pub u8, pub u8, pub u8, pub u8, + pub u8, pub u8, pub u8, pub u8, + pub u8, pub u8, pub u8, pub u8, + pub u8, pub u8, pub u8, pub u8); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct u16x8(pub u16, pub u16, pub u16, pub u16, + pub u16, pub u16, pub u16, pub u16); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct u32x4(pub u32, pub u32, pub u32, pub u32); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct u64x2(pub u64, pub u64); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct f32x4(pub f32, pub f32, pub f32, pub f32); + +#[simd] +#[derive(Copy, Clone, Debug)] +#[repr(C)] +pub struct f64x2(pub f64, pub f64); diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 655fa04c2644..bc7252fa33a8 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -294,6 +294,7 @@ pub use core::mem; pub use core::ops; pub use core::ptr; pub use core::raw; +#[allow(deprecated)] pub use core::simd; pub use core::result; pub use core::option; diff --git a/src/libstd/rt/unwind/seh64_gnu.rs b/src/libstd/rt/unwind/seh64_gnu.rs index 847ba47ff725..78f969bfbeb5 100644 --- a/src/libstd/rt/unwind/seh64_gnu.rs +++ b/src/libstd/rt/unwind/seh64_gnu.rs @@ -21,7 +21,6 @@ use self::EXCEPTION_DISPOSITION::*; use rt::dwarf::eh; use core::mem; use core::ptr; -use simd; use libc::{c_void, c_ulonglong, DWORD, LPVOID}; type ULONG_PTR = c_ulonglong; diff --git a/src/libstd/sys/windows/backtrace.rs b/src/libstd/sys/windows/backtrace.rs index 7078ee92085f..d36ca709c5c9 100644 --- a/src/libstd/sys/windows/backtrace.rs +++ b/src/libstd/sys/windows/backtrace.rs @@ -194,6 +194,8 @@ mod arch { #[cfg(target_arch = "x86_64")] mod arch { + #![allow(deprecated)] + use libc::{c_longlong, c_ulonglong}; use libc::types::os::arch::extra::{WORD, DWORD, DWORDLONG}; use simd;