-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #27169 - huonw:simd, r=alexcrichton
This implements rust-lang/rfcs#1199 (except for doing all the platform intrinsics). Things remaining for SIMD (not necessarily in this PR): - [x] I (@huonw) am signed up to ensure the compiler matches the RFC, when it lands - [x] the platform specific intrinsics aren't properly type checked at the moment (LLVM will throw a "random" assertion) - [ ] there's a lot of useful intrinsics that are missing, including whole platforms (mips, powerpc) - [ ] the target-feature `cfg` detection/adding is not so great at the moment - [x] I think the platform specific intrinsics should go in their own `extern` ABI (i.e. not `"rust-intrinsic"`) (I'm adjusting the RFC to reflect the latter.) I think it would be very nice for this to land without requiring the RFC to land first, because of the first point, and because this is the only way for any further work to happen/be experimented with, without requiring people to build/install/multirust a compiler from a custom branch. r? @alexcrichton
- Loading branch information
Showing
77 changed files
with
3,032 additions
and
1,031 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.