1 /* { dg-do compile } */
2 /* { dg-require-effective-target powerpc_p8vector_ok } */
3 /* { dg-options "-mdejagnu-cpu=power8 -O0 -mno-fold-gimple -dp" } */
4 /* { dg-prune-output "gimple folding of rs6000 builtins has been disabled." } */
8 vector
double y
= { 2.0, 4.0 };
13 vector
float fa
= {1.0, 2.0, 3.0, -4.0};
14 vector
float fb
= {-2.0, -3.0, -4.0, -5.0};
15 vector
float fd
= vec_and (fa
, fb
);
16 vector
float fc
= vec_cpsgn (fa
, fb
);
17 vector
float fe
= vec_mergeh (fa
, fb
);
18 vector
float ff
= vec_mergel (fa
, fb
);
20 vector
double da
= {1.0, 2.0};
21 vector
double db
= {-2.0, -3.0};
22 vector
double dz
= vec_and (da
, db
);
24 vector
signed int si_a
= {1, 2, 3, 4};
25 vector
unsigned int ui_a
= {1, 2, 3, 4};
27 vector
long long la
= {5L, 14L};
28 vector
long long lb
= {3L, 86L};
29 vector
long long lc
= vec_and (la
, lb
);
30 vector
bool long long ld
= {0, -1};
31 vector
long long le
= vec_and (la
, ld
);
32 vector
long long lf
= vec_and (ld
, lb
);
34 vector
unsigned long long ua
= {5L, 14L};
35 vector
unsigned long long ub
= {3L, 86L};
36 vector
unsigned long long uc
= vec_and (ua
, ub
);
37 vector
bool long long ud
= {0, -1};
38 vector
unsigned long long ue
= vec_and (ua
, ud
);
39 vector
unsigned long long uf
= vec_and (ud
, ub
);
41 vector
long long lg
= vec_andc (la
, lb
);
42 vector
long long lh
= vec_andc (la
, ld
);
43 vector
long long li
= vec_andc (ld
, lb
);
45 vector
unsigned long long ug
= vec_andc (ua
, ub
);
46 vector
unsigned long long uh
= vec_andc (ua
, ud
);
47 vector
unsigned long long ui
= vec_andc (ud
, ub
);
49 vector
double de
= {1.0, -4.0};
50 vector
double df
= {-2.0, 5.0};
51 vector
double dg
= vec_cpsgn (de
, df
);
52 vector
double dzw
= vec_mergeh (de
, df
);
53 vector
double dze
= vec_mergel (de
, df
);
55 vector
long long lj
= vec_mergeh (la
, lb
);
56 vector
long long lk
= vec_mergeh (la
, ld
);
57 vector
long long ll
= vec_mergeh (ld
, la
);
59 vector
unsigned long long uj
= vec_mergeh (ua
, ub
);
60 vector
unsigned long long uk
= vec_mergeh (ua
, ud
);
61 vector
unsigned long long ul
= vec_mergeh (ud
, ua
);
63 vector pixel pa
= {9, 16, 25, 36, 1, 2, 3, 4};
64 vector pixel pb
= {25, 36, 1, 2, 45, 3, 4, 99};
65 vector pixel pc
= vec_mergeh (pa
, pb
);
66 vector pixel pd
= vec_mergel (pa
, pb
);
68 vector
long long lm
= vec_mergel (la
, lb
);
69 vector
long long ln
= vec_mergel (la
, ld
);
70 vector
long long lo
= vec_mergel (ld
, la
);
72 vector
unsigned long long um
= vec_mergel (ua
, ub
);
73 vector
unsigned long long un
= vec_mergel (ua
, ud
);
74 vector
unsigned long long uo
= vec_mergel (ud
, ua
);
76 vector
long long lp
= vec_nor (la
, lb
);
77 vector
long long lq
= vec_nor (la
, ld
);
78 vector
long long lr
= vec_nor (ld
, la
);
80 vector
unsigned long long up
= vec_nor (ua
, ub
);
81 vector
unsigned long long uq
= vec_nor (ua
, ud
);
82 vector
unsigned long long ur
= vec_nor (ud
, ua
);
84 vector
unsigned char ca
= {0,4,8,1,5,9,2,6,10,3,7,11,15,12,14,13};
85 vector
unsigned char cbb
= {5,4,8,3,1,9,2,6,10,3,7,11,15,12,14,13};
87 vector
unsigned char ucba
= {5,4,8,3,1,9,2,6,10,3,7,11,15,12,14,13};
88 vector
unsigned char ucbb
= {5,4,8,3,1,9,2,6,10,3,7,11,15,12,14,13};
89 vector
unsigned char ucbc
= {5,4,8,3,1,9,2,6,10,3,7,11,15,12,14,13};
91 vector
long long lv
= vec_perm (la
, lb
, ca
);
93 vector
unsigned char ucm
= vec_and (ca
, cbb
);
94 vector
unsigned char ucn
= vec_andc (ca
, cbb
);
95 vector
unsigned char uco
= vec_mergel (ca
, cbb
);
97 vector
unsigned long long uv
= vec_perm (ua
, ub
, ca
);
99 vector
long long lx
= vec_sel (la
, lb
, uc
);
100 vector
long long ly
= vec_sel (la
, lb
, ld
);
102 vector
unsigned long long uw
= vec_sel (ua
, ub
, lc
);
103 vector
unsigned long long ux
= vec_sel (ua
, ub
, uc
);
104 vector
unsigned long long uy
= vec_sel (ua
, ub
, ld
);
106 vector
long long lz
= vec_xor (la
, lb
);
107 vector
long long l0
= vec_xor (la
, ld
);
108 vector
long long l1
= vec_xor (ld
, la
);
110 vector
unsigned long long uz
= vec_xor (ua
, ub
);
111 vector
unsigned long long u0
= vec_xor (ua
, ud
);
112 vector
unsigned long long u1
= vec_xor (ud
, ua
);
114 int ia
= vec_all_eq (ua
, ub
);
115 int ib
= vec_all_ge (ua
, ub
);
116 int ic
= vec_all_gt (ua
, ub
);
117 int id
= vec_all_le (ua
, ub
);
118 int ie
= vec_all_lt (ua
, ub
);
119 int ig
= vec_all_ne (ua
, ub
);
121 int ih
= vec_any_eq (ua
, ub
);
122 int ii
= vec_any_ge (ua
, ub
);
123 int ij
= vec_any_gt (ua
, ub
);
124 int ik
= vec_any_le (ua
, ub
);
125 int il
= vec_any_lt (ua
, ub
);
126 int im
= vec_any_ne (ua
, ub
);
128 vector
short ssa
= {9, 16, 25, 36, 1, 2, 3, 4};
129 vector
short ssb
= {-8, -27, -64, -125, 2, 3, 5, 3};
130 vector
short sscc
= vec_and (ssa
, ssb
);
131 vector
short sscd
= vec_mergeh (ssa
, ssb
);
132 vector
short ssce
= vec_mergel (ssa
, ssb
);
134 vector
int sia
= {9, 16, 25, 36};
135 vector
int sib
= {-8, -27, -64, -125};
136 vector
int sicc
= vec_and (sia
, sib
);
137 vector
int sicd
= vec_andc (sia
, sib
);
138 vector
int sig
= vec_mergel (sia
, sib
);
140 vector
unsigned int uia
= {9, 16, 25, 36};
141 vector
unsigned int uib
= {8, 27, 64, 125};
142 vector
unsigned int uicc
= vec_and (uia
, uib
);
143 vector
unsigned int uidd
= vec_andc (uia
, uib
);
144 vector
unsigned int uig
= vec_mergel (uia
, uib
);
146 vector
bool char bca
= {0, 1, 4, 7};
147 vector
bool char bcb
= {-8, 9, 2, 9};
148 vector
bool char bcc
= vec_and (bca
, bcb
);
149 vector
bool char bcd
= vec_andc (bca
, bcb
);
150 vector
bool char bce
= vec_mergel (bca
, bcb
);
152 vector
bool short bsa
= {0, -1, -1, 0, 3, 4, 6, 7};
153 vector
bool short bsb
= {-1, -1, 0, -1, 0, 0, 0, 0};
154 vector
bool short bscc
= vec_and (bsa
, bsb
);
155 vector
bool short bscd
= vec_andc (bsa
, bsb
);
156 vector
bool short bsce
= vec_mergel (bsa
, bsb
);
158 vector
bool int bia
= {0, -1, -1, 0};
159 vector
bool int bib
= {-1, -1, 0, -1};
160 vector
bool int bicc
= vec_and (bia
, bib
);
161 vector
bool int bicd
= vec_andc (bia
, bib
);
162 vector
bool int bide
= vec_mergel (bia
, bib
);
164 vector
unsigned int uie
= vec_packsu (ua
, ub
);
166 vector
long long l2
= vec_cntlz (la
);
167 vector
unsigned long long u2
= vec_cntlz (ua
);
168 vector
int sie
= vec_cntlz (sia
);
169 vector
unsigned int uif
= vec_cntlz (uia
);
170 vector
short sszz
= vec_cntlz (ssa
);
172 vector
unsigned short usa
= {81, 72, 63, 54, 45, 36, 27, 18};
173 vector
unsigned short usb
= {81, 72, 63, 54, 45, 36, 27, 18};
174 vector
unsigned short usd
= vec_and (usa
, usb
);
175 vector
unsigned short use
= vec_andc (usa
, usb
);
176 vector
unsigned short usc
= vec_cntlz (usa
);
177 vector
unsigned short uscd
= vec_mergeh (usa
, usb
);
178 vector
unsigned short usce
= vec_mergel (usa
, usb
);
180 vector
signed char sca
= {-4, 3, -9, 15, -31, 31, 0, 0,
181 1, 117, -36, 99, 98, 97, 96, 95};
182 vector
signed char scb
= vec_cntlz (sca
);
183 vector
signed char scc
= vec_mergel (sca
, scb
);
185 vector
unsigned char uca
= {4, 3, 9, 15, 30, 31, 0, 0,
186 1, 117, 36, 99, 98, 97, 96, 95};
187 vector
unsigned char cb
= vec_cntlz (ca
);
189 vector
double dd
= vec_xl (0, &y
);
192 vector
double dzz
= vec_round (dd
);
193 vector
double dzz1
= vec_rsqrt (dd
);
194 vector
double dzz2
= vec_rsqrte (dd
);
196 vector
float ff1
= vec_round (fa
);
197 vector
float ff2
= vec_rsqrt (fa
);
198 vector
float ff3
= vec_rsqrte (fa
);
200 vector
double dff
= vec_splat (de
, 0);
201 vector
double dgg
= vec_splat (de
, 1);
202 vector
long long l3
= vec_splat (l2
, 0);
203 vector
long long l4
= vec_splat (l2
, 1);
204 vector
unsigned long long u3
= vec_splat (u2
, 0);
205 vector
unsigned long long u4
= vec_splat (u2
, 1);
206 vector
bool long long l5
= vec_splat (ld
, 0);
207 vector
bool long long l6
= vec_splat (ld
, 1);
208 vector
bool long long l10
= vec_mergee (ld
, ld
);
209 vector
bool long long l11
= vec_mergeo (ld
, ld
);
210 vector
bool long long l15
= vec_and (ld
, ld
);
212 vector
long long l7
= vec_div (l3
, l4
);
213 vector
unsigned long long u5
= vec_div (u3
, u4
);
214 vector
long long l12
= vec_mergee (la
, lb
);
215 vector
long long l13
= vec_mergeo (la
, lb
);
216 vector
unsigned long long u8
= vec_mergee (u3
, u4
);
217 vector
unsigned long long u9
= vec_mergeo (u3
, u4
);
219 vector
long long l8
= vec_mul (l3
, l4
);
220 vector
unsigned long long u6
= vec_mul (u3
, u4
);
222 vector
int sz
= vec_cts (fa
, 0x1F);
223 vector
unsigned int usz
= vec_ctu (fa
, 0x1F);
225 vector
float f1
= vec_mergee (fa
, fb
);
226 vector
float f2
= vec_mergeo (fa
, fb
);
228 vector
double d1
= vec_mergee (da
, db
);
229 vector
double d2
= vec_mergeo (da
, db
);
231 vector
float f3
= vec_ctf (si_a
, 1);
232 vector
float f4
= vec_ctf (ui_a
, 2);
234 vector
bool char z_vbc2
= vec_splat (bca
, 0);
235 vector
signed char z_vsc1
= vec_splat (sca
, 1);
236 vector
unsigned char z_vuc1
= vec_splat (ucbc
, 2);
238 vector
bool int z_vbi1
= vec_splat (bia
, 3);
239 vector
signed int z_vsi1
= vec_splat (sia
, 1);
240 vector
unsigned int z_vui1
= vec_splat (uia
, 2);
242 vector
bool int z_bi2
= vec_mergee (bia
, bib
);
243 vector
signed int z_si2
= vec_mergee (sia
, sib
);
244 vector
unsigned int z_ui2
= vec_mergee (uia
, uib
);
246 vector
bool char z_bc2
= vec_mergeh (bca
, bcb
);
247 vector
signed char z_sc2
= vec_mergeh (sca
, scb
);
248 vector
bool int z_bi3
= vec_mergeh (bia
, bib
);
249 vector
signed int z_si3
= vec_mergeh (sia
, sib
);
250 vector
unsigned int z_ui3
= vec_mergeh (uia
, uib
);
251 vector
bool short z_bs1
= vec_mergeh (bsa
, bsb
);
253 vector
bool int z_bi4
= vec_mergeo (bia
, bib
);
254 vector
signed int z_si4
= vec_mergeo (sia
, sib
);
255 vector
unsigned int z_ui4
= vec_mergeo (uia
, uib
);
257 vector pixel
int z_vp1
= vec_splat (pa
, 1);
258 vector
bool short z_bs2
= vec_splat (bsa
, 0);
259 vector
short signed int z_vss1
= vec_splat (ssa
, 2);
260 vector
unsigned short int z_vuss1
= vec_splat (usa
, 1);
280 vec_cntlz vclzd, vclzb, vclzw, vclzh
285 vec_div divd, divdu | __divdi3(), __udivdi3()
286 vec_mergel vmrghb, vmrghh, xxmrghw
287 vec_mergeh xxmrglw, vmrglh, vmrglb
288 vec_mul mulld | mullw, mulhwu
296 vec_rsqrte xvrsqrtesp
299 vec_splat xxspltb, xxspltw, vsplth
300 vec_mergee xxmrgld, vmrgow
301 vec_mergeo xxmrghd, vmrgew */
303 /* { dg-final { scan-assembler-times "vcmpequd" 8 } } */
304 /* { dg-final { scan-assembler-times "vcmpgtud" 16 } } */
305 /* { dg-final { scan-assembler-times "xxland" 30 } } */
306 /* { dg-final { scan-assembler-times "xxlandc" 13 } } */
307 /* { dg-final { scan-assembler-times "vclzb" 2 } } */
308 /* { dg-final { scan-assembler-times "vclzd" 2 } } */
309 /* { dg-final { scan-assembler-times "vclzw" 2 } } */
310 /* { dg-final { scan-assembler-times "vclzh" 2 } } */
311 /* { dg-final { scan-assembler-times "xvcpsgnsp" 1 } } */
312 /* { dg-final { scan-assembler-times "xvcpsgndp" 1 } } */
313 /* { dg-final { scan-assembler-times "xvmuldp" 2 } } */
314 /* { dg-final { scan-assembler-times "xvcvdpsxds" 0 } } */
315 /* { dg-final { scan-assembler-times "vctsxs" 2 } } */
316 /* { dg-final { scan-assembler-times "xvcvdpuxds" 0 } } */
317 /* { dg-final { scan-assembler-times "vctuxs" 2 } } */
319 /* { dg-final { scan-assembler-times "vmrghb" 4 { target be } } } */
320 /* { dg-final { scan-assembler-times "vmrghb" 5 { target le } } } */
321 /* { dg-final { scan-assembler-times "vmrghh" 8 } } */
322 /* { dg-final { scan-assembler-times "xxmrghw" 8 } } */
323 /* { dg-final { scan-assembler-times "xxmrglw" 8 } } */
324 /* { dg-final { scan-assembler-times "vmrglh" 8 } } */
325 /* { dg-final { scan-assembler-times "xxlnor" 6 } } */
326 /* { dg-final { scan-assembler-times {\mvpkudus\M} 1 } } */
327 /* { dg-final { scan-assembler-times "vperm" 4 } } */
328 /* { dg-final { scan-assembler-times "xvrdpi" 2 } } */
329 /* { dg-final { scan-assembler-times "xxsel" 10 } } */
330 /* { dg-final { scan-assembler-times "xxlxor" 6 } } */
331 /* { dg-final { scan-assembler-times "divd" 8 { target lp64 } } } */
332 /* { dg-final { scan-assembler-times "divdu" 2 { target lp64 } } } */
333 /* { dg-final { scan-assembler-times "mulld" 4 { target lp64 } } } */
334 /* check for .__divdi3 (AIX), __divdi3 (Linux) and ___divdi3 (Darwin) */
335 /* { dg-final { scan-assembler-times {\mbl \.?_?__divdi3\M} 2 { target { ilp32 } } } } */
336 /* check for both .__udivdi3 (AIX), __udivdi3 (Linux) and ___udivdi3 (Darwin) */
337 /* { dg-final { scan-assembler-times {\mbl \.?_?__udivdi3\M} 2 { target { ilp32 } } } } */
338 /* { dg-final { scan-assembler-times "mullw" 12 { target ilp32 } } } */
339 /* { dg-final { scan-assembler-times "mulhwu" 4 { target ilp32 } } } */
340 /* { dg-final { scan-assembler-times "xxmrgld" 0 } } */
341 /* { dg-final { scan-assembler-times "xxmrghd" 0 } } */
342 /* { dg-final { scan-assembler-times "xvrsqrtesp" 2 } } */
343 /* { dg-final { scan-assembler-times "xvrsqrtedp" 2 } } */
344 /* { dg-final { scan-assembler-times "xxspltd" 8 } } */
345 /* { dg-final { scan-assembler-times "vcfsx" 2 } } */
346 /* { dg-final { scan-assembler-times "vcfux" 2 } } */
347 /* { dg-final { scan-assembler-times "vspltb" 6 } } */
348 /* { dg-final { scan-assembler-times "vspltw" 0 } } */
349 /* { dg-final { scan-assembler-times "vmrgow" 8 } } */
350 /* { dg-final { scan-assembler-times "vmrglb" 5 { target le } } } */
351 /* { dg-final { scan-assembler-times "vmrglb" 6 { target be } } } */
352 /* { dg-final { scan-assembler-times "vmrgew" 8 } } */
353 /* { dg-final { scan-assembler-times "vsplth" 8 } } */
354 /* { dg-final { scan-assembler-times "vcmpequd." 8 } } */
355 /* { dg-final { scan-assembler-times "vcmpgtud." 16 } } */
356 /* { dg-final { scan-assembler-times "vrfin" 2 } } */