forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
These tests just verify some basic APIs of core::simd function, and guarantees that attempting to access the wrong things doesn't work. The majority of tests are stochastic, and so remain upstream, but a few deterministic tests arrive in the subtree as doc tests.
- Loading branch information
1 parent
39cb863
commit 7c3d72d
Showing
6 changed files
with
99 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
use core::simd::f32x4; | ||
|
||
#[test] | ||
fn testing() { | ||
let x = f32x4::from_array([1.0, 1.0, 1.0, 1.0]); | ||
let y = -x; | ||
|
||
let h = x * 0.5; | ||
|
||
let r = y.abs(); | ||
assert_eq!(x, r); | ||
assert_eq!(h, f32x4::splat(0.5)); | ||
} |
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,21 @@ | ||
#![crate_type = "rlib"] | ||
#![no_std] | ||
#![feature(portable_simd)] | ||
use core::simd::f32x4; | ||
|
||
// For SIMD float ops, the LLIR version which is used to implement the portable | ||
// forms of them may become calls to math.h AKA libm. So, we can't guarantee | ||
// we can compile them for #![no_std] crates. | ||
// Someday we may solve this. | ||
// Until then, this test at least guarantees these functions require std. | ||
fn guarantee_no_std_nolibm_calls() -> f32x4 { | ||
let x = f32x4::from_array([0.1, 0.5, 0.6, -1.5]); | ||
let x2 = x + x; | ||
let _xc = x.ceil(); //~ ERROR E0599 | ||
let _xf = x.floor(); //~ ERROR E0599 | ||
let _xr = x.round(); //~ ERROR E0599 | ||
let _xt = x.trunc(); //~ ERROR E0599 | ||
let _xfma = x.mul_add(x, x); //~ ERROR E0599 | ||
let _xsqrt = x.sqrt(); //~ ERROR E0599 | ||
x2.abs() * x2 | ||
} |
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,39 @@ | ||
error[E0599]: no method named `ceil` found for struct `Simd` in the current scope | ||
--> $DIR/libm_no_std_cant_float.rs:14:17 | ||
| | ||
LL | let _xc = x.ceil(); | ||
| ^^^^ method not found in `Simd<f32, 4_usize>` | ||
|
||
error[E0599]: no method named `floor` found for struct `Simd` in the current scope | ||
--> $DIR/libm_no_std_cant_float.rs:15:17 | ||
| | ||
LL | let _xf = x.floor(); | ||
| ^^^^^ method not found in `Simd<f32, 4_usize>` | ||
|
||
error[E0599]: no method named `round` found for struct `Simd` in the current scope | ||
--> $DIR/libm_no_std_cant_float.rs:16:17 | ||
| | ||
LL | let _xr = x.round(); | ||
| ^^^^^ method not found in `Simd<f32, 4_usize>` | ||
|
||
error[E0599]: no method named `trunc` found for struct `Simd` in the current scope | ||
--> $DIR/libm_no_std_cant_float.rs:17:17 | ||
| | ||
LL | let _xt = x.trunc(); | ||
| ^^^^^ method not found in `Simd<f32, 4_usize>` | ||
|
||
error[E0599]: no method named `mul_add` found for struct `Simd` in the current scope | ||
--> $DIR/libm_no_std_cant_float.rs:18:19 | ||
| | ||
LL | let _xfma = x.mul_add(x, x); | ||
| ^^^^^^^ method not found in `Simd<f32, 4_usize>` | ||
|
||
error[E0599]: no method named `sqrt` found for struct `Simd` in the current scope | ||
--> $DIR/libm_no_std_cant_float.rs:19:20 | ||
| | ||
LL | let _xsqrt = x.sqrt(); | ||
| ^^^^ method not found in `Simd<f32, 4_usize>` | ||
|
||
error: aborting due to 6 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0599`. |
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,8 @@ | ||
// May not matter, since people can use them with a nightly feature. | ||
// However this tests to guarantee they don't leak out via portable_simd, | ||
// and thus don't accidentally get stabilized. | ||
use std::simd::intrinsics; //~ERROR E0603 | ||
|
||
fn main() { | ||
() | ||
} |
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,15 @@ | ||
error[E0603]: module `intrinsics` is private | ||
--> $DIR/portable-intrinsics-arent-exposed.rs:4:16 | ||
| | ||
LL | use std::simd::intrinsics; | ||
| ^^^^^^^^^^ private module | ||
| | ||
note: the module `intrinsics` is defined here | ||
--> $SRC_DIR/core/src/lib.rs:LL:COL | ||
| | ||
LL | pub use crate::core_simd::simd::*; | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0603`. |