* gcc.target/powerpc/builtins-1-be.c <vclzb>: Rename duplicate test
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / p8vector-builtin-2.c
blob00260971063a5170217cd908eea7844035c5f15a
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 typedef vector long long v_sign;
10 typedef vector unsigned long long v_uns;
11 typedef vector bool long long v_bool;
12 typedef vector bool char v_bchar;
13 typedef vector bool int v_bint;
14 typedef vector bool short v_bshort;
15 typedef vector signed int v_sint;
16 typedef vector unsigned int v_uint;
17 typedef vector signed char v_schar;
18 typedef vector unsigned char v_uchar;
19 typedef vector float v_float;
21 v_sign sign_add_1 (v_sign a, v_sign b)
23 return __builtin_altivec_vaddudm (a, b);
26 v_sign sign_add_2 (v_sign a, v_sign b)
28 return vec_add (a, b);
31 v_sign sign_add_3 (v_sign a, v_sign b)
33 return vec_vaddudm (a, b);
36 v_sign sign_sub_1 (v_sign a, v_sign b)
38 return __builtin_altivec_vsubudm (a, b);
41 v_sign sign_sub_2 (v_sign a, v_sign b)
43 return vec_sub (a, b);
47 v_sign sign_sub_3 (v_sign a, v_sign b)
49 return vec_vsubudm (a, b);
52 v_sign sign_min_1 (v_sign a, v_sign b)
54 return __builtin_altivec_vminsd (a, b);
57 v_sign sign_min_2 (v_sign a, v_sign b)
59 return vec_min (a, b);
62 v_sign sign_min_3 (v_sign a, v_sign b)
64 return vec_vminsd (a, b);
67 v_sign sign_max_1 (v_sign a, v_sign b)
69 return __builtin_altivec_vmaxsd (a, b);
72 v_sign sign_max_2 (v_sign a, v_sign b)
74 return vec_max (a, b);
77 v_sign sign_max_3 (v_sign a, v_sign b)
79 return vec_vmaxsd (a, b);
82 v_sign sign_abs (v_sign a)
84 return vec_abs (a); /* xor, vsubudm, vmaxsd. */
87 v_bool sign_eq (v_sign a, v_sign b)
89 return vec_cmpeq (a, b);
92 v_bool sign_lt (v_sign a, v_sign b)
94 return vec_cmplt (a, b);
97 v_uns uns_add_2 (v_uns a, v_uns b)
99 return vec_add (a, b);
102 v_uns uns_add_3 (v_uns a, v_uns b)
104 return vec_vaddudm (a, b);
107 v_uns uns_sub_2 (v_uns a, v_uns b)
109 return vec_sub (a, b);
112 v_uns uns_sub_3 (v_uns a, v_uns b)
114 return vec_vsubudm (a, b);
117 v_uns uns_min_2 (v_uns a, v_uns b)
119 return vec_min (a, b);
122 v_uns uns_min_3 (v_uns a, v_uns b)
124 return vec_vminud (a, b);
127 v_uns uns_max_2 (v_uns a, v_uns b)
129 return vec_max (a, b);
132 v_uns uns_max_3 (v_uns a, v_uns b)
134 return vec_vmaxud (a, b);
137 v_bool uns_eq (v_uns a, v_uns b)
139 return vec_cmpeq (a, b);
142 v_bool uns_lt (v_uns a, v_uns b)
144 return vec_cmplt (a, b);
147 v_sign sign_rl_1 (v_sign a, v_sign b)
149 return __builtin_altivec_vrld (a, b);
152 v_sign sign_rl_2 (v_sign a, v_uns b)
154 return vec_rl (a, b);
157 v_uns uns_rl_2 (v_uns a, v_uns b)
159 return vec_rl (a, b);
162 v_sign sign_sl_1 (v_sign a, v_sign b)
164 return __builtin_altivec_vsld (a, b);
167 v_sign sign_sl_2 (v_sign a, v_uns b)
169 return vec_sl (a, b);
172 v_sign sign_sl_3 (v_sign a, v_uns b)
174 return vec_vsld (a, b);
177 v_uns uns_sl_2 (v_uns a, v_uns b)
179 return vec_sl (a, b);
182 v_uns uns_sl_3 (v_uns a, v_uns b)
184 return vec_vsld (a, b);
187 v_sign sign_sra_1 (v_sign a, v_sign b)
189 return __builtin_altivec_vsrad (a, b);
192 v_sign sign_sra_2 (v_sign a, v_uns b)
194 return vec_sra (a, b);
197 v_sign sign_sra_3 (v_sign a, v_uns b)
199 return vec_vsrad (a, b);
202 v_bchar vbchar_eq (v_bchar a, v_bchar b)
204 return vec_cmpeq (a, b);
207 v_bchar vbschar_eq (v_schar a, v_schar b)
209 return vec_cmpeq (a, b);
212 v_bchar vuchar_eq (v_uchar a, v_uchar b)
214 return vec_cmpeq (a, b);
217 v_bint vbint_eq (v_bint a, v_bint b)
219 return vec_cmpeq (a, b);
222 v_bint vsint_eq (v_sint a, v_sint b)
224 return vec_cmpeq (a, b);
227 v_bint vuint_eq (v_uint a, v_uint b)
229 return vec_cmpeq (a, b);
232 v_bool vbool_eq (v_bool a, v_bool b)
234 return vec_cmpeq (a, b);
237 v_bint vbint_ne (v_bint a, v_bint b)
239 return vec_cmpne (a, b);
242 v_bint vsint_ne (v_sint a, v_sint b)
244 return vec_cmpne (a, b);
247 v_bint vuint_ne (v_uint a, v_uint b)
249 return vec_cmpne (a, b);
252 v_bool vbool_ne (v_bool a, v_bool b)
254 return vec_cmpne (a, b);
257 v_bool vsign_ne (v_sign a, v_sign b)
259 return vec_cmpne (a, b);
262 v_bool vuns_ne (v_uns a, v_uns b)
264 return vec_cmpne (a, b);
267 v_bshort vbshort_ne (v_bshort a, v_bshort b)
269 return vec_cmpne (a, b);
273 /* { dg-final { scan-assembler-times "vaddudm" 5 } } */
274 /* { dg-final { scan-assembler-times "vsubudm" 6 } } */
275 /* { dg-final { scan-assembler-times "vmaxsd" 4 } } */
276 /* { dg-final { scan-assembler-times "vminsd" 3 } } */
277 /* { dg-final { scan-assembler-times "vmaxud" 2 } } */
278 /* { dg-final { scan-assembler-times "vminud" 2 } } */
279 /* { dg-final { scan-assembler-times "vcmpequd" 6 } } */
280 /* { dg-final { scan-assembler-times "vcmpgtsd" 1 } } */
281 /* { dg-final { scan-assembler-times "vcmpgtud" 1 } } */
282 /* { dg-final { scan-assembler-times "vrld" 3 } } */
283 /* { dg-final { scan-assembler-times "vsld" 5 } } */
284 /* { dg-final { scan-assembler-times "vsrad" 3 } } */
285 /* { dg-final { scan-assembler-times "vcmpequb" 3 } } */
286 /* { dg-final { scan-assembler-times "vcmpequw" 6 } } */