2 /* { dg-do run { target sse2 } } */
3 /* { dg-options "-O2 -ftree-vectorize -msse2" } */
6 #include "sse2-check.h"
7 #define PR71559_TEST sse2_test
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 ("") };
17 #define FN(name, op) \
22 for (i = 0; i < N; i++) \
23 c[i] = (op || d[i] > 37) ? 5 : 32; \
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) \
41 for (i = 0; i < N; i++) \
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; \
59 asm volatile ("" : : "g" (a
), "g" (b
), "g" (c
), "g" (d
) : "memory");
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)