https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84077
--- 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 excess precision. In any case, most likely not a bug on the GCC side.