@@ -328,6 +328,9 @@ fn codegen_float_intrinsic_call<'tcx>(
328
328
sym:: fabsf64 => ( "fabs" , 1 , fx. tcx . types . f64 , types:: F64 ) ,
329
329
sym:: fmaf32 => ( "fmaf" , 3 , fx. tcx . types . f32 , types:: F32 ) ,
330
330
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
331
334
sym:: copysignf32 => ( "copysignf" , 2 , fx. tcx . types . f32 , types:: F32 ) ,
332
335
sym:: copysignf64 => ( "copysign" , 2 , fx. tcx . types . f64 , types:: F64 ) ,
333
336
sym:: floorf32 => ( "floorf" , 1 , fx. tcx . types . f32 , types:: F32 ) ,
@@ -381,7 +384,7 @@ fn codegen_float_intrinsic_call<'tcx>(
381
384
382
385
let layout = fx. layout_of ( ty) ;
383
386
let res = match intrinsic {
384
- sym:: fmaf32 | sym:: fmaf64 => {
387
+ sym:: fmaf32 | sym:: fmaf64 | sym :: fmuladdf32 | sym :: fmuladdf64 => {
385
388
CValue :: by_val ( fx. bcx . ins ( ) . fma ( args[ 0 ] , args[ 1 ] , args[ 2 ] ) , layout)
386
389
}
387
390
sym:: copysignf32 | sym:: copysignf64 => {
0 commit comments