]> git.lizzy.rs Git - rust.git/blob - tests/codegen/simd-intrinsic/simd-intrinsic-float-fma.rs
Rollup merge of #106717 - klensy:typo, r=lcnr
[rust.git] / tests / codegen / simd-intrinsic / simd-intrinsic-float-fma.rs
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" {
29     fn simd_fma<T>(x: T, b: T, c: T) -> T;
30 }
31
32 // CHECK-LABEL: @fma_32x2
33 #[no_mangle]
34 pub unsafe fn fma_32x2(a: f32x2, b: f32x2, c: f32x2) -> f32x2 {
35     // CHECK: call <2 x float> @llvm.fma.v2f32
36     simd_fma(a, b, c)
37 }
38
39 // CHECK-LABEL: @fma_32x4
40 #[no_mangle]
41 pub unsafe fn fma_32x4(a: f32x4, b: f32x4, c: f32x4) -> f32x4 {
42     // CHECK: call <4 x float> @llvm.fma.v4f32
43     simd_fma(a, b, c)
44 }
45
46 // CHECK-LABEL: @fma_32x8
47 #[no_mangle]
48 pub unsafe fn fma_32x8(a: f32x8, b: f32x8, c: f32x8) -> f32x8 {
49     // CHECK: call <8 x float> @llvm.fma.v8f32
50     simd_fma(a, b, c)
51 }
52
53 // CHECK-LABEL: @fma_32x16
54 #[no_mangle]
55 pub unsafe fn fma_32x16(a: f32x16, b: f32x16, c: f32x16) -> f32x16 {
56     // CHECK: call <16 x float> @llvm.fma.v16f32
57     simd_fma(a, b, c)
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: @fma_64x4
74 #[no_mangle]
75 pub unsafe fn fma_64x4(a: f64x4, b: f64x4, c: f64x4) -> f64x4 {
76     // CHECK: call <4 x double> @llvm.fma.v4f64
77     simd_fma(a, b, c)
78 }
79
80 // CHECK-LABEL: @fma_64x2
81 #[no_mangle]
82 pub unsafe fn fma_64x2(a: f64x2, b: f64x2, c: f64x2) -> f64x2 {
83     // CHECK: call <2 x double> @llvm.fma.v2f64
84     simd_fma(a, b, c)
85 }
86
87 // CHECK-LABEL: @fma_64x8
88 #[no_mangle]
89 pub unsafe fn fma_64x8(a: f64x8, b: f64x8, c: f64x8) -> f64x8 {
90     // CHECK: call <8 x double> @llvm.fma.v8f64
91     simd_fma(a, b, c)
92 }