passes: Print a header in emergency_dump_function
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / p8vector-builtin-5.c
blob5d9b0ba2e25f6dcd6772c0a7291040ccaa5f9615
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
5 /* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */
7 #include <altivec.h>
9 #ifndef SIZE
10 #define SIZE 1024
11 #endif
13 #ifndef ALIGN
14 #define ALIGN 32
15 #endif
17 #ifndef ATTR_ALIGN
18 #define ATTR_ALIGN __attribute__((__aligned__(ALIGN)))
19 #endif
21 #define DOIT(TYPE, PREFIX) \
22 TYPE PREFIX ## _eqv_builtin (TYPE a, TYPE b) \
23 { \
24 return vec_eqv (a, b); \
25 } \
27 TYPE PREFIX ## _eqv_arith (TYPE a, TYPE b) \
28 { \
29 return ~(a ^ b); \
30 } \
32 TYPE PREFIX ## _nand_builtin (TYPE a, TYPE b) \
33 { \
34 return vec_nand (a, b); \
35 } \
37 TYPE PREFIX ## _nand_arith1 (TYPE a, TYPE b) \
38 { \
39 return ~(a & b); \
40 } \
42 TYPE PREFIX ## _nand_arith2 (TYPE a, TYPE b) \
43 { \
44 return (~a) | (~b); \
45 } \
47 TYPE PREFIX ## _orc_builtin (TYPE a, TYPE b) \
48 { \
49 return vec_orc (a, b); \
50 } \
52 TYPE PREFIX ## _orc_arith1 (TYPE a, TYPE b) \
53 { \
54 return (~ a) | b; \
55 } \
57 TYPE PREFIX ## _orc_arith2 (TYPE a, TYPE b) \
58 { \
59 return a | (~ b); \
62 #define DOIT_FLOAT(TYPE, PREFIX) \
63 TYPE PREFIX ## _eqv_builtin (TYPE a, TYPE b) \
64 { \
65 return vec_eqv (a, b); \
66 } \
68 TYPE PREFIX ## _nand_builtin (TYPE a, TYPE b) \
69 { \
70 return vec_nand (a, b); \
71 } \
73 TYPE PREFIX ## _orc_builtin (TYPE a, TYPE b) \
74 { \
75 return vec_orc (a, b); \
78 typedef vector signed char sign_char_vec;
79 typedef vector short sign_short_vec;
80 typedef vector int sign_int_vec;
81 typedef vector long long sign_llong_vec;
83 typedef vector unsigned char uns_char_vec;
84 typedef vector unsigned short uns_short_vec;
85 typedef vector unsigned int uns_int_vec;
86 typedef vector unsigned long long uns_llong_vec;
88 typedef vector float float_vec;
89 typedef vector double double_vec;
91 DOIT(sign_char_vec, sign_char)
92 DOIT(sign_short_vec, sign_short)
93 DOIT(sign_int_vec, sign_int)
94 DOIT(sign_llong_vec, sign_llong)
96 DOIT(uns_char_vec, uns_char)
97 DOIT(uns_short_vec, uns_short)
98 DOIT(uns_int_vec, uns_int)
99 DOIT(uns_llong_vec, uns_llong)
101 DOIT_FLOAT(float_vec, float)
102 DOIT_FLOAT(double_vec, double)
104 /* { dg-final { scan-assembler-times "xxleqv" 18 } } */
105 /* { dg-final { scan-assembler-times "xxlnand" 26 } } */
106 /* { dg-final { scan-assembler-times "xxlorc" 26 } } */