https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85957
--- Comment #17 from Rich Felker <bugdal at aerifal dot cx> --- And indeed you're right that GCC does it wrong. This can be seen from a minimal example: double g(),h(); double f() { return g()+h(); } where gcc emits fstpl/fldp around the second call rather than fstpt/fldt. So this is all even more broken that I thought. It looks like the only way to get deterministic behavior from GCC right now is to get the wrong deterministic behavior via -ffloat-store. Note that libfirm/cparser gets the right result, emitting fstpt/fldt.