PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / sse2-pr71559.c
blob59ecc7fb37f1e2e4634edfa1bfa1e274841467b6
1 /* PR target/71559 */
2 /* { dg-do run { target sse2 } } */
3 /* { dg-options "-O2 -ftree-vectorize -msse2" } */
5 #ifndef PR71559_TEST
6 #include "sse2-check.h"
7 #define PR71559_TEST sse2_test
8 #endif
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];
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; \
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]))
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 (); \
55 void
56 PR71559_TEST (void)
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)