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