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 ();
}

Reply via email to