Easiest way to use FMA instruction

Johan j at j.nl
Fri Jan 10 00:08:44 UTC 2020


On Friday, 10 January 2020 at 00:02:52 UTC, Johan wrote:
> 
> For LDC:
> ```
> double fma(double a, double b, double c)
> {
>     import ldc.llvmasm;
>     return __irEx!(
>              `declare double @llvm.fma.f64(double %a, double 
> %b, double %c)`,
>              `%r = call double @llvm.fma.f64(double %0, double 
> %1, double %2)
>               ret double %r`,
>              "",
>              double, double, double, double)(a,b,c);
> }
> ```

You have to tell LDC that you are compiling for a CPU that has 
FMA capability (otherwise it will insert a call to a "fma" 
runtime library function that most likely you are not linking 
with). For example, "-mattr=fma" or "-mcpu=skylake".
https://d.godbolt.org/z/ddwORl

Or you add it only for the "fma" function, using
```
import ldc.attributes;
@target("fma") double fma(double a, double b, double c) ...
```
https://d.godbolt.org/z/-X7FnC
https://wiki.dlang.org/LDC-specific_language_changes#.40.28ldc.attributes.target.28.22feature.22.29.29

cheers,
   Johan



More information about the Digitalmars-d-learn mailing list