]> git.lizzy.rs Git - rust.git/blob - src/test/ui/simd/intrinsic/generic-as.rs
Add simd_as intrinsic
[rust.git] / src / test / ui / simd / intrinsic / generic-as.rs
1 // run-pass
2
3 #![feature(repr_simd, platform_intrinsics)]
4
5 extern "platform-intrinsic" {
6     fn simd_as<T, U>(x: T) -> U;
7 }
8
9 #[derive(Copy, Clone)]
10 #[repr(simd)]
11 struct V<T>([T; 2]);
12
13 fn main() {
14     unsafe {
15         let u = V::<u32>([u32::MIN, u32::MAX]);
16         let i: V<i16> = simd_as(u);
17         assert_eq!(i.0[0], u.0[0] as i16);
18         assert_eq!(i.0[1], u.0[1] as i16);
19     }
20
21     unsafe {
22         let f = V::<f32>([f32::MIN, f32::MAX]);
23         let i: V<i16> = simd_as(f);
24         assert_eq!(i.0[0], f.0[0] as i16);
25         assert_eq!(i.0[1], f.0[1] as i16);
26     }
27
28     unsafe {
29         let f = V::<f32>([f32::MIN, f32::MAX]);
30         let u: V<u8> = simd_as(f);
31         assert_eq!(u.0[0], f.0[0] as u8);
32         assert_eq!(u.0[1], f.0[1] as u8);
33     }
34 }