1 /* { dg-do run } */
2 /* { dg-require-effective-target avx2 } */
3 /* { dg-options "-O2 -mavx2" } */
4
5 #ifndef CHECK
6 #define CHECK "avx2-check.h"
7 #endif
8
9 #ifndef TEST
10 #define TEST avx2_test
11 #endif
12
13 #include CHECK
14
15 #include "avx2-pr88547-1.c"
16
17 #define NUM 256
18
19 #define TEST_SIGNED(vtype, type, N, fn, op) \
20 do \
21 { \
22 union { vtype x[NUM / N]; type i[NUM]; } dst, src1, src2; \
23 int i, sign = 1; \
24 type res; \
25 for (i = 0; i < NUM; i++) \
26 { \
27 src1.i[i] = i * i * sign; \
28 src2.i[i] = (i + 20) * sign; \
29 sign = -sign; \
30 } \
31 for (i = 0; i < NUM; i += N) \
32 dst.x[i / N] = fn (src1.x[i / N], src2.x[i / N]); \
33 \
34 for (i = 0; i < NUM; i++) \
35 { \
36 res = src1.i[i] op src2.i[i] ? -1 : 0; \
37 if (res != dst.i[i]) \
38 abort (); \
39 } \
40 } \
41 while (0)
42
43 #define TEST_UNSIGNED(vtype, type, N, fn, op) \
44 do \
45 { \
46 union { vtype x[NUM / N]; type i[NUM]; } dst, src1, src2; \
47 int i; \
48 type res; \
49 \
50 for (i = 0; i < NUM; i++) \
51 { \
52 src1.i[i] = i * i; \
53 src2.i[i] = i + 20; \
54 if ((i % 4)) \
55 src2.i[i] |= (1ULL << (sizeof (type) \
56 * __CHAR_BIT__ - 1)); \
57 } \
58 \
59 for (i = 0; i < NUM; i += N) \
60 dst.x[i / N] = fn (src1.x[i / N], src2.x[i / N]); \
61 \
62 for (i = 0; i < NUM; i++) \
63 { \
64 res = src1.i[i] op src2.i[i] ? -1 : 0; \
65 if (res != dst.i[i]) \
66 abort (); \
67 } \
68 } \
69 while (0)
70
71 static void
TEST(void)72 TEST (void)
73 {
74 TEST_SIGNED (v32qi, signed char, 32, f1, <=);
75 TEST_UNSIGNED (v32uqi, unsigned char, 32, f2, <=);
76 TEST_SIGNED (v32qi, signed char, 32, f3, >=);
77 TEST_UNSIGNED (v32uqi, unsigned char, 32, f4, >=);
78 TEST_SIGNED (v16hi, short int, 16, f5, <=);
79 TEST_UNSIGNED (v16uhi, unsigned short int, 16, f6, <=);
80 TEST_SIGNED (v16hi, short int, 16, f7, >=);
81 TEST_UNSIGNED (v16uhi, unsigned short int, 16, f8, >=);
82 TEST_SIGNED (v8si, int, 8, f9, <=);
83 TEST_UNSIGNED (v8usi, unsigned int, 8, f10, <=);
84 TEST_SIGNED (v8si, int, 8, f11, >=);
85 TEST_UNSIGNED (v8usi, unsigned int, 8, f12, >=);
86 TEST_SIGNED (v4di, long long int, 4, f13, <=);
87 TEST_UNSIGNED (v4udi, unsigned long long int, 4, f14, <=);
88 TEST_SIGNED (v4di, long long int, 4, f15, >=);
89 TEST_UNSIGNED (v4udi, unsigned long long int, 4, f16, >=);
90 }
91