1
1
//@ run-pass
2
2
//@ ignore-emscripten FIXME(#45351) hits an LLVM assert
3
3
4
- #![ feature( repr_simd, intrinsics) ]
4
+ #![ feature( repr_simd, intrinsics, core_intrinsics) ]
5
+
6
+ use std:: intrinsics:: simd:: { simd_extract_dyn, simd_insert_dyn} ;
5
7
6
8
#[ repr( simd) ]
7
9
#[ derive( Copy , Clone , Debug , PartialEq ) ]
@@ -22,7 +24,6 @@ unsafe fn simd_insert<T, E>(x: T, idx: u32, y: E) -> T;
22
24
#[ rustc_intrinsic]
23
25
unsafe fn simd_extract < T , E > ( x : T , idx : u32 ) -> E ;
24
26
25
-
26
27
#[ rustc_intrinsic]
27
28
unsafe fn simd_shuffle < T , I , U > ( x : T , y : T , idx : I ) -> U ;
28
29
@@ -79,6 +80,41 @@ fn main() {
79
80
all_eq ! ( simd_extract( x8, 6 ) , 86 ) ;
80
81
all_eq ! ( simd_extract( x8, 7 ) , 87 ) ;
81
82
}
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
+ }
82
118
83
119
let y2 = i32x2 ( [ 120 , 121 ] ) ;
84
120
let y4 = i32x4 ( [ 140 , 141 , 142 , 143 ] ) ;
0 commit comments