https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116738
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- C testcase with unnecessary clutter removed: #include <x86intrin.h> static inline float clamp (float f) { __m128 v = _mm_set_ss (f); __m128 zero = _mm_setzero_ps (); __m128 greatest = _mm_set_ss (__FLT_MAX__); v = _mm_min_ss (v, greatest); v = _mm_max_ss (v, zero); return _mm_cvtss_f32 (v); } int main () { float f = clamp (-0.0f); if (f != 0.0f || __builtin_signbitf (f)) __builtin_abort (); f = clamp (__builtin_nanf ("")); if (__builtin_isnanf (f) || f != __FLT_MAX__) __builtin_abort (); }