http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42961
--- Comment #8 from Mikael Pettersson <mikpe at it dot uu.se> 2012-02-19 17:43:07 UTC --- The movss instructions were eliminated on trunk by Vladimir Makarov's "patch to solve recent SPEC2000 degradation" in r178019: http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01954.html http://gcc.gnu.org/ml/gcc-cvs/2011-08/msg01034.html The code generation change at that point is: --- pr42961.s-r178018 2012-02-19 18:22:46.000000000 +0100 +++ pr42961.s-r178019 2012-02-19 18:17:07.000000000 +0100 @@ -10,18 +10,17 @@ ucomiss %xmm2, %xmm2 jp .L7 jne .L7 - movss %xmm1, -4(%rsp) .L2: movl f(%rip), %eax testl %eax, %eax je .L4 - movss -4(%rsp), %xmm2 + movaps %xmm1, %xmm2 .L4: movaps %xmm2, %xmm0 ret .L7: movaps %xmm1, %xmm2 - movss %xmm0, -4(%rsp) + movaps %xmm0, %xmm1 jmp .L2 .cfi_endproc .LFE0: