@@ -328,6 +328,9 @@ fn codegen_float_intrinsic_call<'tcx>(
328328 sym:: fabsf64 => ( "fabs" , 1 , fx. tcx . types . f64 , types:: F64 ) ,
329329 sym:: fmaf32 => ( "fmaf" , 3 , fx. tcx . types . f32 , types:: F32 ) ,
330330 sym:: fmaf64 => ( "fma" , 3 , fx. tcx . types . f64 , types:: F64 ) ,
331+ // FIXME: calling `fma` from libc without FMA target feature uses expensive sofware emulation
332+ sym:: fmuladdf32 => ( "fmaf" , 3 , fx. tcx . types . f32 , types:: F32 ) , // TODO: use cranelift intrinsic analogous to llvm.fmuladd.f32
333+ sym:: fmuladdf64 => ( "fma" , 3 , fx. tcx . types . f64 , types:: F64 ) , // TODO: use cranelift intrinsic analogous to llvm.fmuladd.f64
331334 sym:: copysignf32 => ( "copysignf" , 2 , fx. tcx . types . f32 , types:: F32 ) ,
332335 sym:: copysignf64 => ( "copysign" , 2 , fx. tcx . types . f64 , types:: F64 ) ,
333336 sym:: floorf32 => ( "floorf" , 1 , fx. tcx . types . f32 , types:: F32 ) ,
@@ -381,7 +384,7 @@ fn codegen_float_intrinsic_call<'tcx>(
381384
382385 let layout = fx. layout_of ( ty) ;
383386 let res = match intrinsic {
384- sym:: fmaf32 | sym:: fmaf64 => {
387+ sym:: fmaf32 | sym:: fmaf64 | sym :: fmuladdf32 | sym :: fmuladdf64 => {
385388 CValue :: by_val ( fx. bcx . ins ( ) . fma ( args[ 0 ] , args[ 1 ] , args[ 2 ] ) , layout)
386389 }
387390 sym:: copysignf32 | sym:: copysignf64 => {
0 commit comments