11//@ run-pass
22//@ ignore-emscripten FIXME(#45351) hits an LLVM assert
33
4- #![ feature( repr_simd, intrinsics) ]
4+ #![ feature( repr_simd, intrinsics, core_intrinsics) ]
5+
6+ use std:: intrinsics:: simd:: { simd_extract_dyn, simd_insert_dyn} ;
57
68#[ repr( simd) ]
79#[ derive( Copy , Clone , Debug , PartialEq ) ]
@@ -22,7 +24,6 @@ unsafe fn simd_insert<T, E>(x: T, idx: u32, y: E) -> T;
2224#[ rustc_intrinsic]
2325unsafe fn simd_extract < T , E > ( x : T , idx : u32 ) -> E ;
2426
25-
2627#[ rustc_intrinsic]
2728unsafe fn simd_shuffle < T , I , U > ( x : T , y : T , idx : I ) -> U ;
2829
@@ -79,6 +80,41 @@ fn main() {
7980 all_eq ! ( simd_extract( x8, 6 ) , 86 ) ;
8081 all_eq ! ( simd_extract( x8, 7 ) , 87 ) ;
8182 }
83+ unsafe {
84+ all_eq ! ( simd_insert_dyn( x2, 0 , 100 ) , i32x2( [ 100 , 21 ] ) ) ;
85+ all_eq ! ( simd_insert_dyn( x2, 1 , 100 ) , i32x2( [ 20 , 100 ] ) ) ;
86+
87+ all_eq ! ( simd_insert_dyn( x4, 0 , 100 ) , i32x4( [ 100 , 41 , 42 , 43 ] ) ) ;
88+ all_eq ! ( simd_insert_dyn( x4, 1 , 100 ) , i32x4( [ 40 , 100 , 42 , 43 ] ) ) ;
89+ all_eq ! ( simd_insert_dyn( x4, 2 , 100 ) , i32x4( [ 40 , 41 , 100 , 43 ] ) ) ;
90+ all_eq ! ( simd_insert_dyn( x4, 3 , 100 ) , i32x4( [ 40 , 41 , 42 , 100 ] ) ) ;
91+
92+ all_eq ! ( simd_insert_dyn( x8, 0 , 100 ) , i32x8( [ 100 , 81 , 82 , 83 , 84 , 85 , 86 , 87 ] ) ) ;
93+ all_eq ! ( simd_insert_dyn( x8, 1 , 100 ) , i32x8( [ 80 , 100 , 82 , 83 , 84 , 85 , 86 , 87 ] ) ) ;
94+ all_eq ! ( simd_insert_dyn( x8, 2 , 100 ) , i32x8( [ 80 , 81 , 100 , 83 , 84 , 85 , 86 , 87 ] ) ) ;
95+ all_eq ! ( simd_insert_dyn( x8, 3 , 100 ) , i32x8( [ 80 , 81 , 82 , 100 , 84 , 85 , 86 , 87 ] ) ) ;
96+ all_eq ! ( simd_insert_dyn( x8, 4 , 100 ) , i32x8( [ 80 , 81 , 82 , 83 , 100 , 85 , 86 , 87 ] ) ) ;
97+ all_eq ! ( simd_insert_dyn( x8, 5 , 100 ) , i32x8( [ 80 , 81 , 82 , 83 , 84 , 100 , 86 , 87 ] ) ) ;
98+ all_eq ! ( simd_insert_dyn( x8, 6 , 100 ) , i32x8( [ 80 , 81 , 82 , 83 , 84 , 85 , 100 , 87 ] ) ) ;
99+ all_eq ! ( simd_insert_dyn( x8, 7 , 100 ) , i32x8( [ 80 , 81 , 82 , 83 , 84 , 85 , 86 , 100 ] ) ) ;
100+
101+ all_eq ! ( simd_extract_dyn( x2, 0 ) , 20 ) ;
102+ all_eq ! ( simd_extract_dyn( x2, 1 ) , 21 ) ;
103+
104+ all_eq ! ( simd_extract_dyn( x4, 0 ) , 40 ) ;
105+ all_eq ! ( simd_extract_dyn( x4, 1 ) , 41 ) ;
106+ all_eq ! ( simd_extract_dyn( x4, 2 ) , 42 ) ;
107+ all_eq ! ( simd_extract_dyn( x4, 3 ) , 43 ) ;
108+
109+ all_eq ! ( simd_extract_dyn( x8, 0 ) , 80 ) ;
110+ all_eq ! ( simd_extract_dyn( x8, 1 ) , 81 ) ;
111+ all_eq ! ( simd_extract_dyn( x8, 2 ) , 82 ) ;
112+ all_eq ! ( simd_extract_dyn( x8, 3 ) , 83 ) ;
113+ all_eq ! ( simd_extract_dyn( x8, 4 ) , 84 ) ;
114+ all_eq ! ( simd_extract_dyn( x8, 5 ) , 85 ) ;
115+ all_eq ! ( simd_extract_dyn( x8, 6 ) , 86 ) ;
116+ all_eq ! ( simd_extract_dyn( x8, 7 ) , 87 ) ;
117+ }
82118
83119 let y2 = i32x2 ( [ 120 , 121 ] ) ;
84120 let y4 = i32x4 ( [ 140 , 141 , 142 , 143 ] ) ;
0 commit comments