]> git.proxmox.com Git - rustc.git/blob - src/test/codegen/simd-intrinsic-float-abs.rs
New upstream version 1.33.0+dfsg1
[rustc.git] / src / test / codegen / simd-intrinsic-float-abs.rs
1 // ignore-emscripten
2
3 // compile-flags: -C no-prepopulate-passes
4
5 #![crate_type = "lib"]
6
7 #![feature(repr_simd, platform_intrinsics)]
8 #![allow(non_camel_case_types)]
9
10 #[repr(simd)]
11 #[derive(Copy, Clone, PartialEq, Debug)]
12 pub struct f32x2(pub f32, pub f32);
13
14 #[repr(simd)]
15 #[derive(Copy, Clone, PartialEq, Debug)]
16 pub struct f32x4(pub f32, pub f32, pub f32, pub f32);
17
18 #[repr(simd)]
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);
22
23 #[repr(simd)]
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);
29
30 extern "platform-intrinsic" {
31 fn simd_fabs<T>(x: T) -> T;
32 }
33
34 // CHECK-LABEL: @fabs_32x2
35 #[no_mangle]
36 pub unsafe fn fabs_32x2(a: f32x2) -> f32x2 {
37 // CHECK: call fast <2 x float> @llvm.fabs.v2f32
38 simd_fabs(a)
39 }
40
41 // CHECK-LABEL: @fabs_32x4
42 #[no_mangle]
43 pub unsafe fn fabs_32x4(a: f32x4) -> f32x4 {
44 // CHECK: call fast <4 x float> @llvm.fabs.v4f32
45 simd_fabs(a)
46 }
47
48 // CHECK-LABEL: @fabs_32x8
49 #[no_mangle]
50 pub unsafe fn fabs_32x8(a: f32x8) -> f32x8 {
51 // CHECK: call fast <8 x float> @llvm.fabs.v8f32
52 simd_fabs(a)
53 }
54
55 // CHECK-LABEL: @fabs_32x16
56 #[no_mangle]
57 pub unsafe fn fabs_32x16(a: f32x16) -> f32x16 {
58 // CHECK: call fast <16 x float> @llvm.fabs.v16f32
59 simd_fabs(a)
60 }
61
62 #[repr(simd)]
63 #[derive(Copy, Clone, PartialEq, Debug)]
64 pub struct f64x2(pub f64, pub f64);
65
66 #[repr(simd)]
67 #[derive(Copy, Clone, PartialEq, Debug)]
68 pub struct f64x4(pub f64, pub f64, pub f64, pub f64);
69
70 #[repr(simd)]
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);
74
75 // CHECK-LABEL: @fabs_64x4
76 #[no_mangle]
77 pub unsafe fn fabs_64x4(a: f64x4) -> f64x4 {
78 // CHECK: call fast <4 x double> @llvm.fabs.v4f64
79 simd_fabs(a)
80 }
81
82 // CHECK-LABEL: @fabs_64x2
83 #[no_mangle]
84 pub unsafe fn fabs_64x2(a: f64x2) -> f64x2 {
85 // CHECK: call fast <2 x double> @llvm.fabs.v2f64
86 simd_fabs(a)
87 }
88
89 // CHECK-LABEL: @fabs_64x8
90 #[no_mangle]
91 pub unsafe fn fabs_64x8(a: f64x8) -> f64x8 {
92 // CHECK: call fast <8 x double> @llvm.fabs.v8f64
93 simd_fabs(a)
94 }