11// run-pass
22#![ allow( non_camel_case_types) ]
3-
43// ignore-emscripten FIXME(#45351) hits an LLVM assert
5-
64#![ feature( repr_simd, platform_intrinsics) ]
75
86#[ repr( simd) ]
@@ -22,18 +20,17 @@ macro_rules! all_eq {
2220 let a = $a;
2321 let b = $b;
2422 assert!( a. 0 == b. 0 && a. 1 == b. 1 && a. 2 == b. 2 && a. 3 == b. 3 ) ;
25- } }
23+ } } ;
2624}
2725
2826macro_rules! all_eq_ {
2927 ( $a: expr, $b: expr) => { {
3028 let a = $a;
3129 let b = $b;
3230 assert!( a. 0 == b. 0 ) ;
33- } }
31+ } } ;
3432}
3533
36-
3734extern "platform-intrinsic" {
3835 fn simd_add < T > ( x : T , y : T ) -> T ;
3936 fn simd_sub < T > ( x : T , y : T ) -> T ;
@@ -88,8 +85,8 @@ fn main() {
8885 all_eq_ ! ( simd_div( y1, y1) , U32 :: <4 >( [ 1 , 1 , 1 , 1 ] ) ) ;
8986 all_eq_ ! ( simd_div( U32 :: <4 >( [ 2 , 4 , 6 , 8 ] ) , U32 :: <4 >( [ 2 , 2 , 2 , 2 ] ) ) , y1) ;
9087 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 ) ) ;
9390
9491 all_eq ! ( simd_rem( x1, x1) , i32x4( 0 , 0 , 0 , 0 ) ) ;
9592 all_eq ! ( simd_rem( x2, x1) , i32x4( 0 , 1 , 1 , 1 ) ) ;
@@ -113,8 +110,10 @@ fn main() {
113110 // ensure we get logical vs. arithmetic shifts correct
114111 let ( a, b, c, d) = ( -12 , -123 , -1234 , -12345 ) ;
115112 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+ ) ;
118117
119118 all_eq ! ( simd_and( x1, x2) , i32x4( 0 , 2 , 0 , 4 ) ) ;
120119 all_eq ! ( simd_and( x2, x1) , i32x4( 0 , 2 , 0 , 4 ) ) ;
@@ -139,7 +138,10 @@ fn main() {
139138 all_eq ! ( simd_bswap( x1) , i32x4( 0x01000000 , 0x02000000 , 0x03000000 , 0x04000000 ) ) ;
140139 all_eq_ ! ( simd_bswap( y1) , U32 :: <4 >( [ 0x01000000 , 0x02000000 , 0x03000000 , 0x04000000 ] ) ) ;
141140
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+ ) ;
143145 all_eq_ ! ( simd_bitreverse( y1) , U32 :: <4 >( [ 0x80000000 , 0x40000000 , 0xc0000000 , 0x20000000 ] ) ) ;
144146
145147 all_eq ! ( simd_ctlz( x1) , i32x4( 31 , 30 , 30 , 29 ) ) ;
0 commit comments