--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The problem goes away even in the original unmodified dcp.ii with -msse2
-mfpmath=sse or with -ffloat-store, which means most likely the source just
relies on excess precision not happening.
If so, this is a dup of PR323. To make i?86 32-bit code use no excess
precision in float and double, one needs to use -msse2 -mfpmath=sse, or to get
rid of it in most cases while paying in performance -ffloat-store, otherwise
some computations can be done in the 80-bit precision and rounding can happen
whenever something needs to be forced out of the i387 floating point stack.
Instead of -ffloat-store, you could also insert optimization barriers in
certain spots (e.g. using inline asm and for FLT_EVAL_METHOD non-zero only)
where you really require rounding to float or double rather than allowing
In any case, most likely not a bug on the GCC side.