[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / p8vector-builtin-2.c
blobd3aab195bef12dc9c12e8c8420f857c9943394c8
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_vsx_ok } */
4 /* { dg-options "-mdejagnu-cpu=power8 -mvsx -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */
6 #include <altivec.h>
8 typedef vector long long v_sign;
9 typedef vector unsigned long long v_uns;
10 typedef vector bool long long v_bool;
11 typedef vector bool char v_bchar;
12 typedef vector bool int v_bint;
13 typedef vector bool short v_bshort;
14 typedef vector signed int v_sint;
15 typedef vector unsigned int v_uint;
16 typedef vector signed char v_schar;
17 typedef vector unsigned char v_uchar;
18 typedef vector float v_float;
20 v_sign sign_add_1 (v_sign a, v_sign b)
22 return __builtin_altivec_vaddudm (a, b);
25 v_sign sign_add_2 (v_sign a, v_sign b)
27 return vec_add (a, b);
30 v_sign sign_add_3 (v_sign a, v_sign b)
32 return vec_vaddudm (a, b);
35 v_sign sign_sub_1 (v_sign a, v_sign b)
37 return __builtin_altivec_vsubudm (a, b);
40 v_sign sign_sub_2 (v_sign a, v_sign b)
42 return vec_sub (a, b);
46 v_sign sign_sub_3 (v_sign a, v_sign b)
48 return vec_vsubudm (a, b);
51 v_sign sign_min_1 (v_sign a, v_sign b)
53 return __builtin_altivec_vminsd (a, b);
56 v_sign sign_min_2 (v_sign a, v_sign b)
58 return vec_min (a, b);
61 v_sign sign_min_3 (v_sign a, v_sign b)
63 return vec_vminsd (a, b);
66 v_sign sign_max_1 (v_sign a, v_sign b)
68 return __builtin_altivec_vmaxsd (a, b);
71 v_sign sign_max_2 (v_sign a, v_sign b)
73 return vec_max (a, b);
76 v_sign sign_max_3 (v_sign a, v_sign b)
78 return vec_vmaxsd (a, b);
81 v_sign sign_abs (v_sign a)
83 return vec_abs (a); /* xor, vsubudm, vmaxsd. */
86 v_bool sign_eq (v_sign a, v_sign b)
88 return vec_cmpeq (a, b);
91 v_bool sign_lt (v_sign a, v_sign b)
93 return vec_cmplt (a, b);
96 v_uns uns_add_2 (v_uns a, v_uns b)
98 return vec_add (a, b);
101 v_uns uns_add_3 (v_uns a, v_uns b)
103 return vec_vaddudm (a, b);
106 v_uns uns_sub_2 (v_uns a, v_uns b)
108 return vec_sub (a, b);
111 v_uns uns_sub_3 (v_uns a, v_uns b)
113 return vec_vsubudm (a, b);
116 v_uns uns_min_2 (v_uns a, v_uns b)
118 return vec_min (a, b);
121 v_uns uns_min_3 (v_uns a, v_uns b)
123 return vec_vminud (a, b);
126 v_uns uns_max_2 (v_uns a, v_uns b)
128 return vec_max (a, b);
131 v_uns uns_max_3 (v_uns a, v_uns b)
133 return vec_vmaxud (a, b);
136 v_bool uns_eq (v_uns a, v_uns b)
138 return vec_cmpeq (a, b);
141 v_bool uns_lt (v_uns a, v_uns b)
143 return vec_cmplt (a, b);
146 v_sign sign_rl_1 (v_sign a, v_sign b)
148 return __builtin_altivec_vrld (a, b);
151 v_sign sign_rl_2 (v_sign a, v_uns b)
153 return vec_rl (a, b);
156 v_uns uns_rl_2 (v_uns a, v_uns b)
158 return vec_rl (a, b);
161 v_sign sign_sl_1 (v_sign a, v_sign b)
163 return __builtin_altivec_vsld (a, b);
166 v_sign sign_sl_2 (v_sign a, v_uns b)
168 return vec_sl (a, b);
171 v_sign sign_sl_3 (v_sign a, v_uns b)
173 return vec_vsld (a, b);
176 v_uns uns_sl_2 (v_uns a, v_uns b)
178 return vec_sl (a, b);
181 v_uns uns_sl_3 (v_uns a, v_uns b)
183 return vec_vsld (a, b);
186 v_sign sign_sra_1 (v_sign a, v_sign b)
188 return __builtin_altivec_vsrad (a, b);
191 v_sign sign_sra_2 (v_sign a, v_uns b)
193 return vec_sra (a, b);
196 v_sign sign_sra_3 (v_sign a, v_uns b)
198 return vec_vsrad (a, b);
201 v_bchar vbchar_eq (v_bchar a, v_bchar b)
203 return vec_cmpeq (a, b);
206 v_bchar vbschar_eq (v_schar a, v_schar b)
208 return vec_cmpeq (a, b);
211 v_bchar vuchar_eq (v_uchar a, v_uchar b)
213 return vec_cmpeq (a, b);
216 v_bint vbint_eq (v_bint a, v_bint b)
218 return vec_cmpeq (a, b);
221 v_bint vsint_eq (v_sint a, v_sint b)
223 return vec_cmpeq (a, b);
226 v_bint vuint_eq (v_uint a, v_uint b)
228 return vec_cmpeq (a, b);
231 v_bool vbool_eq (v_bool a, v_bool b)
233 return vec_cmpeq (a, b);
236 v_bint vbint_ne (v_bint a, v_bint b)
238 return vec_cmpne (a, b);
241 v_bint vsint_ne (v_sint a, v_sint b)
243 return vec_cmpne (a, b);
246 v_bint vuint_ne (v_uint a, v_uint b)
248 return vec_cmpne (a, b);
251 v_bool vbool_ne (v_bool a, v_bool b)
253 return vec_cmpne (a, b);
256 v_bool vsign_ne (v_sign a, v_sign b)
258 return vec_cmpne (a, b);
261 v_bool vuns_ne (v_uns a, v_uns b)
263 return vec_cmpne (a, b);
266 v_bshort vbshort_ne (v_bshort a, v_bshort b)
268 return vec_cmpne (a, b);
272 /* { dg-final { scan-assembler-times "vaddudm" 5 } } */
273 /* { dg-final { scan-assembler-times "vsubudm" 6 } } */
274 /* { dg-final { scan-assembler-times "vmaxsd" 4 } } */
275 /* { dg-final { scan-assembler-times "vminsd" 3 } } */
276 /* { dg-final { scan-assembler-times "vmaxud" 2 } } */
277 /* { dg-final { scan-assembler-times "vminud" 2 } } */
278 /* { dg-final { scan-assembler-times "vcmpequd" 6 } } */
279 /* { dg-final { scan-assembler-times "vcmpgtsd" 1 } } */
280 /* { dg-final { scan-assembler-times "vcmpgtud" 1 } } */
281 /* { dg-final { scan-assembler-times "vrld" 3 } } */
282 /* { dg-final { scan-assembler-times "vsld" 5 } } */
283 /* { dg-final { scan-assembler-times "vsrad" 3 } } */
284 /* { dg-final { scan-assembler-times "vcmpequb" 3 } } */
285 /* { dg-final { scan-assembler-times "vcmpequw" 6 } } */