3 // compile-flags: -C no-prepopulate-passes
7 #![feature(repr_simd, platform_intrinsics)]
8 #![allow(non_camel_case_types)]
11 #[derive(Copy, Clone, PartialEq, Debug)]
12 pub struct f32x2(pub f32, pub f32);
15 #[derive(Copy, Clone, PartialEq, Debug)]
16 pub struct f32x4(pub f32, pub f32, pub f32, pub f32);
19 #[derive(Copy, Clone, PartialEq, Debug)]
20 pub struct f32x8(pub f32, pub f32, pub f32, pub f32,
21 pub f32, pub f32, pub f32, pub f32);
24 #[derive(Copy, Clone, PartialEq, Debug)]
25 pub struct f32x16(pub f32, pub f32, pub f32, pub f32,
26 pub f32, pub f32, pub f32, pub f32,
27 pub f32, pub f32, pub f32, pub f32,
28 pub f32, pub f32, pub f32, pub f32);
30 extern "platform-intrinsic" {
31 fn simd_fexp<T>(x: T) -> T;
34 // CHECK-LABEL: @exp_32x2
36 pub unsafe fn exp_32x2(a: f32x2) -> f32x2 {
37 // CHECK: call fast <2 x float> @llvm.exp.v2f32
41 // CHECK-LABEL: @exp_32x4
43 pub unsafe fn exp_32x4(a: f32x4) -> f32x4 {
44 // CHECK: call fast <4 x float> @llvm.exp.v4f32
48 // CHECK-LABEL: @exp_32x8
50 pub unsafe fn exp_32x8(a: f32x8) -> f32x8 {
51 // CHECK: call fast <8 x float> @llvm.exp.v8f32
55 // CHECK-LABEL: @exp_32x16
57 pub unsafe fn exp_32x16(a: f32x16) -> f32x16 {
58 // CHECK: call fast <16 x float> @llvm.exp.v16f32
63 #[derive(Copy, Clone, PartialEq, Debug)]
64 pub struct f64x2(pub f64, pub f64);
67 #[derive(Copy, Clone, PartialEq, Debug)]
68 pub struct f64x4(pub f64, pub f64, pub f64, pub f64);
71 #[derive(Copy, Clone, PartialEq, Debug)]
72 pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
73 pub f64, pub f64, pub f64, pub f64);
75 // CHECK-LABEL: @exp_64x4
77 pub unsafe fn exp_64x4(a: f64x4) -> f64x4 {
78 // CHECK: call fast <4 x double> @llvm.exp.v4f64
82 // CHECK-LABEL: @exp_64x2
84 pub unsafe fn exp_64x2(a: f64x2) -> f64x2 {
85 // CHECK: call fast <2 x double> @llvm.exp.v2f64
89 // CHECK-LABEL: @exp_64x8
91 pub unsafe fn exp_64x8(a: f64x8) -> f64x8 {
92 // CHECK: call fast <8 x double> @llvm.exp.v8f64