Re: Somewhat OT: gcc, x86, -ffast-math, and Linux

From: Jamie Lokier
Date: Sat Mar 27 2004 - 09:28:02 EST


Daniel Forrest wrote:
> What is the -ffast-math option doing?

It enables some optimisations and mathematical transformations which
do not satisfy the properties of IEEE floating point arithmetic.

(Not that GCC's output satisfies those properties without -ffast-math
on x86, but this flag enables much looser semantics).

> How are the excess bits of precision dealt with during context
> switches?

They are preserved - they are part of the floating point context.
If there is any failure to preserve all of that context, it's a kernel bug.

> Shouldn't the same binary with the same inputs produce the same
> output on identical hardware?

Is the hardware *identical*, or are they different x86 CPUs?

Different CPUs give different results for the trigonometric functions.
GCC's manual claims that fsin, fcos and fsqrt instructions are only
used if the -funsafe-math-optimizations flag is also used, if the GCC
version is >= 2.6.1. However you may find that Glibc's <math.h> ends
up using those instructions when -ffast-math is used alone.

-- Jamie
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/