(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
sse2-pr71559.c
       1  /* PR target/71559 */
       2  /* { dg-do run { target sse2 } } */
       3  /* { dg-options "-O2 -ftree-vectorize -msse2" } */
       4  
       5  #ifndef PR71559_TEST
       6  #include "sse2-check.h"
       7  #define PR71559_TEST sse2_test
       8  #endif
       9  
      10  #define N 16
      11  float a[N] = { 5.0f, -3.0f, 1.0f, __builtin_nanf (""), 9.0f, 7.0f, -3.0f, -9.0f,
      12                 -3.0f, -5.0f, -9.0f, __builtin_nanf (""), 0.5f, -0.5f, 0.0f, 0.0f };
      13  float b[N] = { -5.0f, 3.0f, 1.0f, 7.0f, 8.0f, 8.0f, -3.0f, __builtin_nanf (""),
      14                 -4.0f, -4.0f, -9.0f, __builtin_nanf (""), 0.0f, 0.0f, 0.0f, __builtin_nanf ("") };
      15  int c[N], d[N];
      16  
      17  #define FN(name, op) \
      18  void					\
      19  name (void)				\
      20  {					\
      21    int i;				\
      22    for (i = 0; i < N; i++)		\
      23      c[i] = (op || d[i] > 37) ? 5 : 32;	\
      24  }
      25  FN (eq, a[i] == b[i])
      26  FN (ne, a[i] != b[i])
      27  FN (gt, a[i] > b[i])
      28  FN (ge, a[i] >= b[i])
      29  FN (lt, a[i] < b[i])
      30  FN (le, a[i] <= b[i])
      31  FN (unle, !__builtin_isgreater (a[i], b[i]))
      32  FN (unlt, !__builtin_isgreaterequal (a[i], b[i]))
      33  FN (unge, !__builtin_isless (a[i], b[i]))
      34  FN (ungt, !__builtin_islessequal (a[i], b[i]))
      35  FN (uneq, !__builtin_islessgreater (a[i], b[i]))
      36  FN (ordered, !__builtin_isunordered (a[i], b[i]))
      37  FN (unordered, __builtin_isunordered (a[i], b[i]))
      38  
      39  #define TEST(name, GT, LT, EQ, UO) \
      40    name ();				\
      41    for (i = 0; i < N; i++)		\
      42      {					\
      43        int v;				\
      44        switch (i % 4)			\
      45  	{				\
      46  	case 0: v = GT ? 5 : 32; break;	\
      47  	case 1: v = LT ? 5 : 32; break;	\
      48  	case 2: v = EQ ? 5 : 32; break;	\
      49  	case 3: v = UO ? 5 : 32; break;	\
      50  	}				\
      51        if (c[i] != v)			\
      52  	__builtin_abort ();		\
      53      }
      54  
      55  void
      56  PR71559_TEST (void)
      57  {
      58    int i;
      59    asm volatile ("" : : "g" (a), "g" (b), "g" (c), "g" (d) : "memory");
      60    TEST (eq, 0, 0, 1, 0)
      61    TEST (ne, 1, 1, 0, 1)
      62    TEST (gt, 1, 0, 0, 0)
      63    TEST (ge, 1, 0, 1, 0)
      64    TEST (lt, 0, 1, 0, 0)
      65    TEST (le, 0, 1, 1, 0)
      66    TEST (unle, 0, 1, 1, 1)
      67    TEST (unlt, 0, 1, 0, 1)
      68    TEST (unge, 1, 0, 1, 1)
      69    TEST (ungt, 1, 0, 0, 1)
      70    TEST (uneq, 0, 0, 1, 1)
      71    TEST (ordered, 1, 1, 1, 0)
      72    TEST (unordered, 0, 0, 0, 1)
      73  }