https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86855
--- Comment #3 from vincenzo Innocente <vincenzo.innocente at cern dot ch> --- looks more undefined behavior as const __m128 neg = _mm_set_ps(0.0f,0.0f,-0.0f,-0.0f); return _mm_xor_ps(_mm_sub_ps(v5, v3), neg); with -O3 compiles in xorps .LC0(%rip), %xmm0 ret .LC0: .long 2147483648 .long 2147483648 .long 0 .long 0 while -Ofast in xorps .LC0(%rip), %xmm0 ret .LC0: .long 2147483648 .long 2147483648 .long 2147483648 .long 2147483648 needless to say that neither clang nor icc display such a behavior...