about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-10-17 10:07:36 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-10-17 10:07:36 +0000
commitbf2da675c8b4dc94a9cace1866bc54942740eeae (patch)
treecb52f12f032b0c0f87b6b91ae5d7ff0295cfb5ac
parent76dfce7a6f8aaf421d32027f96ffb030a979bd79 (diff)
parent270fb2130c979fe1d1e520dbb8474aa13257d16b (diff)
downloadrust-bf2da675c8b4dc94a9cace1866bc54942740eeae.tar.gz
rust-bf2da675c8b4dc94a9cace1866bc54942740eeae.zip
Sync from rust 798fb83f7d24e31b16acca113496f39ff168c143
-rw-r--r--src/discriminant.rs3
-rw-r--r--src/intrinsics/mod.rs5
-rw-r--r--src/lib.rs1
3 files changed, 7 insertions, 2 deletions
diff --git a/src/discriminant.rs b/src/discriminant.rs
index e7ac084558a..d462dcd63a9 100644
--- a/src/discriminant.rs
+++ b/src/discriminant.rs
@@ -3,7 +3,8 @@
 //! Adapted from <https://github.com/rust-lang/rust/blob/31c0645b9d2539f47eecb096142474b29dc542f7/compiler/rustc_codegen_ssa/src/mir/place.rs>
 //! (<https://github.com/rust-lang/rust/pull/104535>)
 
-use rustc_target::abi::{Int, TagEncoding, Variants};
+use rustc_abi::Primitive::Int;
+use rustc_abi::{TagEncoding, Variants};
 
 use crate::prelude::*;
 
diff --git a/src/intrinsics/mod.rs b/src/intrinsics/mod.rs
index 19e5adc2538..35f0ccff3f9 100644
--- a/src/intrinsics/mod.rs
+++ b/src/intrinsics/mod.rs
@@ -328,6 +328,9 @@ fn codegen_float_intrinsic_call<'tcx>(
         sym::fabsf64 => ("fabs", 1, fx.tcx.types.f64, types::F64),
         sym::fmaf32 => ("fmaf", 3, fx.tcx.types.f32, types::F32),
         sym::fmaf64 => ("fma", 3, fx.tcx.types.f64, types::F64),
+        // FIXME: calling `fma` from libc without FMA target feature uses expensive sofware emulation
+        sym::fmuladdf32 => ("fmaf", 3, fx.tcx.types.f32, types::F32), // TODO: use cranelift intrinsic analogous to llvm.fmuladd.f32
+        sym::fmuladdf64 => ("fma", 3, fx.tcx.types.f64, types::F64), // TODO: use cranelift intrinsic analogous to llvm.fmuladd.f64
         sym::copysignf32 => ("copysignf", 2, fx.tcx.types.f32, types::F32),
         sym::copysignf64 => ("copysign", 2, fx.tcx.types.f64, types::F64),
         sym::floorf32 => ("floorf", 1, fx.tcx.types.f32, types::F32),
@@ -381,7 +384,7 @@ fn codegen_float_intrinsic_call<'tcx>(
 
     let layout = fx.layout_of(ty);
     let res = match intrinsic {
-        sym::fmaf32 | sym::fmaf64 => {
+        sym::fmaf32 | sym::fmaf64 | sym::fmuladdf32 | sym::fmuladdf64 => {
             CValue::by_val(fx.bcx.ins().fma(args[0], args[1], args[2]), layout)
         }
         sym::copysignf32 | sym::copysignf64 => {
diff --git a/src/lib.rs b/src/lib.rs
index 1cc2eebc47c..f63685acdef 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -15,6 +15,7 @@
 extern crate jobserver;
 #[macro_use]
 extern crate rustc_middle;
+extern crate rustc_abi;
 extern crate rustc_ast;
 extern crate rustc_codegen_ssa;
 extern crate rustc_data_structures;