1 /* { dg-do run } */
2 /* { dg-require-effective-target avx512bw } */
3 /* { dg-require-effective-target avx512vl } */
4 /* { dg-options "-Ofast -mavx512bw -mavx512vl -mprefer-vector-width=256" } */
5
6 #ifndef CHECK
7 #define CHECK "avx512f-helper.h"
8 #endif
9
10 #include CHECK
11
12 #ifndef TEST
13 #define TEST avx512vl_test
14 #endif
15
16 #include "avx512vl-pr92686-movcc-1.c"
17 #include "pr92686.inc"
18
19 #define NUM 256
20
21
22 #define TEST_SIGNED(vtype, type, N, fn, fn2, op) \
23 do \
24 { \
25 type dst[NUM], src1[NUM], src2[NUM]; \
26 int i, j, sign = 1; \
27 type res[N]; \
28 for (i = 0; i < NUM; i++) \
29 { \
30 src1[i] = i * i * sign; \
31 src2[i] = (i + 20) * sign; \
32 dst[i] = i * i * i + 100; \
33 sign = -sign; \
34 } \
35 for (i = 0; i < NUM; i += N) \
36 { \
37 for (j = 0; j < N; j++) \
38 res[j] = dst[i + j]; \
39 fn (&dst[i], &src1[i], &src2[i]); \
40 for (j = 0; j < N; j++) \
41 { \
42 res[j] = fn2 (res[j], src1[i + j], \
43 src2[i+ j], op); \
44 if (res[j] != dst[i+ j]) \
45 abort(); \
46 } \
47 } \
48 } \
49 while (0)
50
51 #define TEST_UNSIGNED(vtype, type, N, fn, fn2, op) \
52 do \
53 { \
54 type dst[NUM], src1[NUM], src2[NUM]; \
55 int i,j; \
56 type res[N]; \
57 \
58 for (i = 0; i < NUM; i++) \
59 { \
60 src1[i] = i * i; \
61 src2[i] = i + 20; \
62 dst[i] = i * i * i + 100; \
63 if ((i % 4)) \
64 src2[i] |= (1ULL << (sizeof (type) \
65 * __CHAR_BIT__ - 1)); \
66 } \
67 for (i = 0; i < NUM; i += N) \
68 { \
69 for (j = 0; j < N; j++) \
70 res[j] = dst[i + j]; \
71 fn (&dst[i], &src1[i], &src2[i]); \
72 for (j = 0; j < N; j++) \
73 { \
74 res[j] = fn2 (res[j], src1[i + j], \
75 src2[i + j], op); \
76 if (res[j] != dst[i + j]) \
77 abort(); \
78 } \
79 } \
80 } \
81 while (0)
82
83 static void
TEST(void)84 TEST (void)
85 {
86 TEST_SIGNED (v32qi, signed char, 32, f1, cmpb, 5);
87 TEST_UNSIGNED (v32uqi, unsigned char, 32, f2, cmpub, 5);
88 TEST_SIGNED (v32qi, signed char, 32, f3, cmpb, 2);
89 TEST_UNSIGNED (v32uqi, unsigned char, 32, f4, cmpub, 2);
90 TEST_SIGNED (v16hi, short int, 16, f5, cmpw, 5);
91 TEST_UNSIGNED (v16uhi, unsigned short int, 16, f6, cmpuw, 5);
92 TEST_SIGNED (v16hi, short int, 16, f7, cmpw, 2);
93 TEST_UNSIGNED (v16uhi, unsigned short int, 16, f8, cmpuw, 2);
94 TEST_SIGNED (v8si, int, 8, f9, cmpd, 5);
95 TEST_UNSIGNED (v8usi, unsigned int, 8, f10, cmpud, 5);
96 TEST_SIGNED (v8si, int, 8, f11, cmpd, 2);
97 TEST_UNSIGNED (v8usi, unsigned int, 8, f12, cmpud, 2);
98 TEST_SIGNED (v4di, long long int, 4, f13, cmpq, 5);
99 TEST_UNSIGNED (v4udi, unsigned long long int, 4, f14, cmpuq, 5);
100 TEST_SIGNED (v4di, long long int, 4, f15, cmpq, 2);
101 TEST_UNSIGNED (v4udi, unsigned long long int, 4, f16, cmpuq, 2);
102 }
103