]>
Commit | Line | Data |
---|---|---|
fc512014 XL |
1 | // run-pass |
2 | #![allow(dead_code)] | |
3 | ||
4 | // pretty-expanded FIXME #23616 | |
5 | ||
5869c6ff | 6 | #![feature(repr_simd, platform_intrinsics)] |
fc512014 XL |
7 | |
8 | #[repr(simd)] | |
9 | #[derive(Copy, Clone)] | |
10 | struct S([i32; 4]); | |
11 | ||
12 | #[repr(simd)] | |
13 | #[derive(Copy, Clone)] | |
14 | struct T<const N: usize>([i32; N]); | |
15 | ||
16 | extern "platform-intrinsic" { | |
17 | fn simd_insert<T, E>(x: T, idx: u32, y: E) -> T; | |
18 | fn simd_extract<T, E>(x: T, idx: u32) -> E; | |
19 | } | |
20 | ||
21 | pub fn main() { | |
22 | let mut s = S([0; 4]); | |
23 | ||
24 | unsafe { | |
25 | for i in 0_i32..4 { | |
26 | s = simd_insert(s, i as u32, i); | |
27 | } | |
28 | for i in 0_i32..4 { | |
29 | assert_eq!(i, simd_extract(s, i as u32)); | |
30 | } | |
31 | } | |
32 | ||
33 | let mut t = T::<4>([0; 4]); | |
34 | unsafe { | |
35 | for i in 0_i32..4 { | |
36 | t = simd_insert(t, i as u32, i); | |
37 | } | |
38 | for i in 0_i32..4 { | |
39 | assert_eq!(i, simd_extract(t, i as u32)); | |
40 | } | |
41 | } | |
42 | } |