1 /* { dg-do run { target { powerpc*-*-* && p8vector_hw } } } */
2 /* { dg-options "-mdejagnu-cpu=power8 -O3" } */
4 /* Test that the vec_addec builtin works as expected. */
12 #define define_test_functions(STYPE, NAMESUFFIX) \
14 STYPE result_##NAMESUFFIX[N]; \
15 STYPE addend1_##NAMESUFFIX[N]; \
16 STYPE addend2_##NAMESUFFIX[N]; \
17 STYPE carry_##NAMESUFFIX[N]; \
18 STYPE expected_##NAMESUFFIX[N]; \
20 __attribute__((noinline)) void vector_tests_##NAMESUFFIX () \
22 vector STYPE v1, v2, v3, tmp; \
24 for (i = 0; i < N; i+=16/sizeof (STYPE)) \
26 /* result=carry of addend1+addend2+(carry & 0x1). */ \
27 v1 = vec_vsx_ld (0, &addend1_##NAMESUFFIX[i]); \
28 v2 = vec_vsx_ld (0, &addend2_##NAMESUFFIX[i]); \
29 v3 = vec_vsx_ld (0, &carry_##NAMESUFFIX[i]); \
31 tmp = vec_addec (v1, v2, v3); \
32 vec_vsx_st (tmp, 0, &result_##NAMESUFFIX[i]); \
36 __attribute__((noinline)) void init_##NAMESUFFIX () \
39 for (i = 0; i < N; ++i) \
41 result_##NAMESUFFIX[i] = 0; \
44 addend1_##NAMESUFFIX[i] = 0xfffffffd; \
45 addend2_##NAMESUFFIX[i] = 1; \
46 carry_##NAMESUFFIX[i] = 1; \
47 expected_##NAMESUFFIX[i] = 0; \
51 addend1_##NAMESUFFIX[i] = 0xffffffff; \
52 addend2_##NAMESUFFIX[i] = 1; \
53 carry_##NAMESUFFIX[i] = 0; \
54 expected_##NAMESUFFIX[i] = 1; \
58 addend1_##NAMESUFFIX[i] = 0xffffffff; \
59 addend2_##NAMESUFFIX[i] = 0; \
60 carry_##NAMESUFFIX[i] = 3; /* 3 should work like 1 here. */ \
61 expected_##NAMESUFFIX[i] = 1; \
65 addend1_##NAMESUFFIX[i] = 1; \
66 addend2_##NAMESUFFIX[i] = 0xffffffff; \
67 carry_##NAMESUFFIX[i] = 2; /* 2 should work like 0 here. */ \
68 expected_##NAMESUFFIX[i] = 1; \
72 addend1_##NAMESUFFIX[i] = 0; \
73 addend2_##NAMESUFFIX[i] = 0xffffffff; \
74 carry_##NAMESUFFIX[i] = 1; \
75 expected_##NAMESUFFIX[i] = 1; \
79 addend1_##NAMESUFFIX[i] = 0xffff0000; \
80 addend2_##NAMESUFFIX[i] = 0x0000ffff; \
81 carry_##NAMESUFFIX[i] = 1; \
82 expected_##NAMESUFFIX[i] = 1; \
87 __attribute__((noinline)) void verify_results_##NAMESUFFIX () \
90 for (i = 0; i < N; ++i) \
92 if (result_##NAMESUFFIX[i] != expected_##NAMESUFFIX[i]) \
98 #define execute_test_functions(STYPE, NAMESUFFIX) \
100 init_##NAMESUFFIX (); \
101 vector_tests_##NAMESUFFIX (); \
102 verify_results_##NAMESUFFIX (); \
106 define_test_functions (signed int, si
);
107 define_test_functions (unsigned int, ui
);
111 execute_test_functions (signed int, si
);
112 execute_test_functions (unsigned int, ui
);