@@ -11,23 +11,25 @@ crate trait Fma {
11
11
#[ cfg( not( target_arch = "s390x" ) ) ]
12
12
#[ allow( improper_ctypes) ]
13
13
extern "C" {
14
- #[ link_name = "llvm.fma.v2f32" ]
14
+ // We use the `fmuladd` intrinsic instead of `fma` to allow LLVM to decide
15
+ // on a per-case basis whether it's better to use FMA or not.
16
+ #[ link_name = "llvm.fmuladd.v2f32" ]
15
17
fn fma_v2f32 ( x : f32x2 , y : f32x2 , z : f32x2 ) -> f32x2 ;
16
- #[ link_name = "llvm.fma .v4f32" ]
18
+ #[ link_name = "llvm.fmuladd .v4f32" ]
17
19
fn fma_v4f32 ( x : f32x4 , y : f32x4 , z : f32x4 ) -> f32x4 ;
18
- #[ link_name = "llvm.fma .v8f32" ]
20
+ #[ link_name = "llvm.fmuladd .v8f32" ]
19
21
fn fma_v8f32 ( x : f32x8 , y : f32x8 , z : f32x8 ) -> f32x8 ;
20
- #[ link_name = "llvm.fma .v16f32" ]
22
+ #[ link_name = "llvm.fmuladd .v16f32" ]
21
23
fn fma_v16f32 ( x : f32x16 , y : f32x16 , z : f32x16 ) -> f32x16 ;
22
24
/* FIXME 64-bit single elem vectors
23
- #[link_name = "llvm.fma .v1f64"]
25
+ #[link_name = "llvm.fmuladd .v1f64"]
24
26
fn fma_v1f64(x: f64x1, y: f64x1, z: f64x1) -> f64x1;
25
27
*/
26
- #[ link_name = "llvm.fma .v2f64" ]
28
+ #[ link_name = "llvm.fmuladd .v2f64" ]
27
29
fn fma_v2f64 ( x : f64x2 , y : f64x2 , z : f64x2 ) -> f64x2 ;
28
- #[ link_name = "llvm.fma .v4f64" ]
30
+ #[ link_name = "llvm.fmuladd .v4f64" ]
29
31
fn fma_v4f64 ( x : f64x4 , y : f64x4 , z : f64x4 ) -> f64x4 ;
30
- #[ link_name = "llvm.fma .v8f64" ]
32
+ #[ link_name = "llvm.fmuladd .v8f64" ]
31
33
fn fma_v8f64 ( x : f64x8 , y : f64x8 , z : f64x8 ) -> f64x8 ;
32
34
}
33
35
0 commit comments