1
1
// run-pass
2
2
#![ allow( non_camel_case_types) ]
3
-
4
3
// ignore-emscripten FIXME(#45351) hits an LLVM assert
5
-
6
4
#![ feature( repr_simd, platform_intrinsics) ]
7
5
8
6
#[ repr( simd) ]
@@ -22,18 +20,17 @@ macro_rules! all_eq {
22
20
let a = $a;
23
21
let b = $b;
24
22
assert!( a. 0 == b. 0 && a. 1 == b. 1 && a. 2 == b. 2 && a. 3 == b. 3 ) ;
25
- } }
23
+ } } ;
26
24
}
27
25
28
26
macro_rules! all_eq_ {
29
27
( $a: expr, $b: expr) => { {
30
28
let a = $a;
31
29
let b = $b;
32
30
assert!( a. 0 == b. 0 ) ;
33
- } }
31
+ } } ;
34
32
}
35
33
36
-
37
34
extern "platform-intrinsic" {
38
35
fn simd_add < T > ( x : T , y : T ) -> T ;
39
36
fn simd_sub < T > ( x : T , y : T ) -> T ;
@@ -88,8 +85,8 @@ fn main() {
88
85
all_eq_ ! ( simd_div( y1, y1) , U32 :: <4 >( [ 1 , 1 , 1 , 1 ] ) ) ;
89
86
all_eq_ ! ( simd_div( U32 :: <4 >( [ 2 , 4 , 6 , 8 ] ) , U32 :: <4 >( [ 2 , 2 , 2 , 2 ] ) ) , y1) ;
90
87
all_eq ! ( simd_div( z1, z1) , f32x4( 1.0 , 1.0 , 1.0 , 1.0 ) ) ;
91
- all_eq ! ( simd_div( z1, z2) , f32x4( 1.0 / 2.0 , 2.0 / 3.0 , 3.0 / 4.0 , 4.0 / 5.0 ) ) ;
92
- all_eq ! ( simd_div( z2, z1) , f32x4( 2.0 / 1.0 , 3.0 / 2.0 , 4.0 / 3.0 , 5.0 / 4.0 ) ) ;
88
+ all_eq ! ( simd_div( z1, z2) , f32x4( 1.0 / 2.0 , 2.0 / 3.0 , 3.0 / 4.0 , 4.0 / 5.0 ) ) ;
89
+ all_eq ! ( simd_div( z2, z1) , f32x4( 2.0 / 1.0 , 3.0 / 2.0 , 4.0 / 3.0 , 5.0 / 4.0 ) ) ;
93
90
94
91
all_eq ! ( simd_rem( x1, x1) , i32x4( 0 , 0 , 0 , 0 ) ) ;
95
92
all_eq ! ( simd_rem( x2, x1) , i32x4( 0 , 1 , 1 , 1 ) ) ;
@@ -113,8 +110,10 @@ fn main() {
113
110
// ensure we get logical vs. arithmetic shifts correct
114
111
let ( a, b, c, d) = ( -12 , -123 , -1234 , -12345 ) ;
115
112
all_eq ! ( simd_shr( i32x4( a, b, c, d) , x1) , i32x4( a >> 1 , b >> 2 , c >> 3 , d >> 4 ) ) ;
116
- all_eq_ ! ( simd_shr( U32 :: <4 >( [ a as u32 , b as u32 , c as u32 , d as u32 ] ) , y1) ,
117
- U32 :: <4 >( [ ( a as u32 ) >> 1 , ( b as u32 ) >> 2 , ( c as u32 ) >> 3 , ( d as u32 ) >> 4 ] ) ) ;
113
+ all_eq_ ! (
114
+ simd_shr( U32 :: <4 >( [ a as u32 , b as u32 , c as u32 , d as u32 ] ) , y1) ,
115
+ U32 :: <4 >( [ ( a as u32 ) >> 1 , ( b as u32 ) >> 2 , ( c as u32 ) >> 3 , ( d as u32 ) >> 4 ] )
116
+ ) ;
118
117
119
118
all_eq ! ( simd_and( x1, x2) , i32x4( 0 , 2 , 0 , 4 ) ) ;
120
119
all_eq ! ( simd_and( x2, x1) , i32x4( 0 , 2 , 0 , 4 ) ) ;
@@ -139,7 +138,10 @@ fn main() {
139
138
all_eq ! ( simd_bswap( x1) , i32x4( 0x01000000 , 0x02000000 , 0x03000000 , 0x04000000 ) ) ;
140
139
all_eq_ ! ( simd_bswap( y1) , U32 :: <4 >( [ 0x01000000 , 0x02000000 , 0x03000000 , 0x04000000 ] ) ) ;
141
140
142
- all_eq ! ( simd_bitreverse( x1) , i32x4( 0x80000000u32 as i32 , 0x40000000 , 0xc0000000u32 as i32 , 0x20000000 ) ) ;
141
+ all_eq ! (
142
+ simd_bitreverse( x1) ,
143
+ i32x4( 0x80000000u32 as i32 , 0x40000000 , 0xc0000000u32 as i32 , 0x20000000 )
144
+ ) ;
143
145
all_eq_ ! ( simd_bitreverse( y1) , U32 :: <4 >( [ 0x80000000 , 0x40000000 , 0xc0000000 , 0x20000000 ] ) ) ;
144
146
145
147
all_eq ! ( simd_ctlz( x1) , i32x4( 31 , 30 , 30 , 29 ) ) ;
0 commit comments