1 // compile-flags: -C no-prepopulate-passes
2
3 #![crate_type = "lib"]
4
5 #![feature(repr_simd, platform_intrinsics)]
6 #![allow(non_camel_case_types)]
7
8 #[repr(simd)]
9 #[derive(Copy, Clone, PartialEq, Debug)]
10 pub struct f32x2(pub f32, pub f32);
11
12 #[repr(simd)]
13 #[derive(Copy, Clone, PartialEq, Debug)]
14 pub struct f32x4(pub f32, pub f32, pub f32, pub f32);
15
16 #[repr(simd)]
17 #[derive(Copy, Clone, PartialEq, Debug)]
18 pub struct f32x8(pub f32, pub f32, pub f32, pub f32,
19 pub f32, pub f32, pub f32, pub f32);
20
21 #[repr(simd)]
22 #[derive(Copy, Clone, PartialEq, Debug)]
23 pub struct f32x16(pub f32, pub f32, pub f32, pub f32,
24 pub f32, pub f32, pub f32, pub f32,
25 pub f32, pub f32, pub f32, pub f32,
26 pub f32, pub f32, pub f32, pub f32);
27
28 extern "platform-intrinsic" {
simd_ceil<T>(x: T) -> T29 fn simd_ceil<T>(x: T) -> T;
30 }
31
32 // CHECK-LABEL: @ceil_32x2
33 #[no_mangle]
ceil_32x2(a: f32x2) -> f32x234 pub unsafe fn ceil_32x2(a: f32x2) -> f32x2 {
35 // CHECK: call <2 x float> @llvm.ceil.v2f32
36 simd_ceil(a)
37 }
38
39 // CHECK-LABEL: @ceil_32x4
40 #[no_mangle]
ceil_32x4(a: f32x4) -> f32x441 pub unsafe fn ceil_32x4(a: f32x4) -> f32x4 {
42 // CHECK: call <4 x float> @llvm.ceil.v4f32
43 simd_ceil(a)
44 }
45
46 // CHECK-LABEL: @ceil_32x8
47 #[no_mangle]
ceil_32x8(a: f32x8) -> f32x848 pub unsafe fn ceil_32x8(a: f32x8) -> f32x8 {
49 // CHECK: call <8 x float> @llvm.ceil.v8f32
50 simd_ceil(a)
51 }
52
53 // CHECK-LABEL: @ceil_32x16
54 #[no_mangle]
ceil_32x16(a: f32x16) -> f32x1655 pub unsafe fn ceil_32x16(a: f32x16) -> f32x16 {
56 // CHECK: call <16 x float> @llvm.ceil.v16f32
57 simd_ceil(a)
58 }
59
60 #[repr(simd)]
61 #[derive(Copy, Clone, PartialEq, Debug)]
62 pub struct f64x2(pub f64, pub f64);
63
64 #[repr(simd)]
65 #[derive(Copy, Clone, PartialEq, Debug)]
66 pub struct f64x4(pub f64, pub f64, pub f64, pub f64);
67
68 #[repr(simd)]
69 #[derive(Copy, Clone, PartialEq, Debug)]
70 pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
71 pub f64, pub f64, pub f64, pub f64);
72
73 // CHECK-LABEL: @ceil_64x4
74 #[no_mangle]
ceil_64x4(a: f64x4) -> f64x475 pub unsafe fn ceil_64x4(a: f64x4) -> f64x4 {
76 // CHECK: call <4 x double> @llvm.ceil.v4f64
77 simd_ceil(a)
78 }
79
80 // CHECK-LABEL: @ceil_64x2
81 #[no_mangle]
ceil_64x2(a: f64x2) -> f64x282 pub unsafe fn ceil_64x2(a: f64x2) -> f64x2 {
83 // CHECK: call <2 x double> @llvm.ceil.v2f64
84 simd_ceil(a)
85 }
86
87 // CHECK-LABEL: @ceil_64x8
88 #[no_mangle]
ceil_64x8(a: f64x8) -> f64x889 pub unsafe fn ceil_64x8(a: f64x8) -> f64x8 {
90 // CHECK: call <8 x double> @llvm.ceil.v8f64
91 simd_ceil(a)
92 }
93