Supporting 'MAC' instruction on gcc v4.1.1

Geert Bosch bosch@adacore.com
Fri May 11 15:19:00 GMT 2007


On May 11, 2007, at 08:26, Rahul wrote:
> But for the following example
>  int a = 1;
>  int b = 2;
>  int c = 3;
>  c = c + a * b;
> the MAC pattern is not getting recognized, instead it is still using
> PLUS and MULT patterns.

In general, this transformation is not valid, as it has
different rounding behavior from the expression with the
+ and * operations. While fused multiply-add is a very
powerful instruction that can be helpful for both speed
and accuracy (especially accuracy exceeding native precision),
good algorithms may become unstable if fused multiply-add
is used when a*b+c is expected or vice versa.
So, implementing a builtin (conforming to C99's fma)
would seem the best approach. The -ffast-math option, or
preferably #pragma STDC CONTRACT ON, could be used to
enable the transformation.

   -Geert



More information about the Gcc mailing list