Add cond_add/sub/mul for vector integer modes.
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / cond_op_addsubmul_d-2.c
blob490f4afbf18044525be5ad9e347a572e441741d0
1 /* { dg-do run } */
2 /* { dg-options "-O2 -mavx512vl -mprefer-vector-width=256" } */
3 #define AVX512VL
4 #ifndef CHECK
5 #define CHECK "avx512f-helper.h"
6 #endif
8 #include CHECK
10 #include "cond_op_addsubmul_d-1.c"
11 #define BINO2(OPNAME, OP) \
12 void \
13 __attribute__ ((noipa,optimize ("O2"))) \
14 foo_o2_##OPNAME () \
15 { \
16 for (int i = 0; i != NUM; i++) \
17 if (b[i] < c[i]) \
18 j[i] = d[i] OP e[i]; \
19 else \
20 j[i] = MAX(d[i], e[i]); \
23 BINO2 (add, +);
24 BINO2 (sub, -);
25 BINO2 (mul, *);
27 static void
28 test_256 (void)
30 int sign = -1;
31 for (int i = 0; i != NUM; i++)
33 a[i] = 0;
34 d[i] = i * 2;
35 e[i] = i * i * 3 - i * 9 + 153;
36 b[i] = i * 83;
37 c[i] = b[i] + sign;
38 sign *= -1;
39 j[i] = 1;
41 foo_add ();
42 foo_o2_add ();
43 for (int i = 0; i != NUM; i++)
45 if (a[i] != j[i])
46 abort ();
47 a[i] = 0;
48 b[i] = 1;
51 foo_sub ();
52 foo_o2_sub ();
53 for (int i = 0; i != NUM; i++)
55 if (a[i] != j[i])
56 abort ();
57 a[i] = 0;
58 j[i] = 1;
61 foo_mul ();
62 foo_o2_mul ();
63 for (int i = 0; i != NUM; i++)
65 if (a[i] != j[i])
66 abort ();
67 a[i] = 0;
68 j[i] = 1;
72 static void
73 test_128 ()