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]))
FN(unordered,__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 }
74