1 /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_vsx_ok } */
4 /* { dg-options "-O2 -mdejagnu-cpu=power7" } */
5 /* { dg-final { scan-assembler "xxsel" } } */
6 /* { dg-final { scan-assembler "vperm" } } */
7 /* { dg-final { scan-assembler "xvrdpi" } } */
8 /* { dg-final { scan-assembler "xvrdpic" } } */
9 /* { dg-final { scan-assembler "xvrdpim" } } */
10 /* { dg-final { scan-assembler "xvrdpip" } } */
11 /* { dg-final { scan-assembler "xvrdpiz" } } */
12 /* { dg-final { scan-assembler "xvrspi" } } */
13 /* { dg-final { scan-assembler "xvrspic" } } */
14 /* { dg-final { scan-assembler "xvrspim" } } */
15 /* { dg-final { scan-assembler "xvrspip" } } */
16 /* { dg-final { scan-assembler "xvrspiz" } } */
17 /* { dg-final { scan-assembler "xsrdpi" } } */
18 /* { dg-final { scan-assembler "xsrdpic" } } */
19 /* { dg-final { scan-assembler "xsrdpim\|frim" } } */
20 /* { dg-final { scan-assembler "xsrdpip\|frip" } } */
21 /* { dg-final { scan-assembler "xsrdpiz\|friz" } } */
22 /* { dg-final { scan-assembler "xsmaxdp" } } */
23 /* { dg-final { scan-assembler "xsmindp" } } */
24 /* { dg-final { scan-assembler "xxland" } } */
25 /* { dg-final { scan-assembler "xxlandc" } } */
26 /* { dg-final { scan-assembler "xxlnor" } } */
27 /* { dg-final { scan-assembler "xxlor" } } */
28 /* { dg-final { scan-assembler "xxlxor" } } */
29 /* { dg-final { scan-assembler "xvcmpeqdp" } } */
30 /* { dg-final { scan-assembler "xvcmpgtdp" } } */
31 /* { dg-final { scan-assembler "xvcmpgedp" } } */
32 /* { dg-final { scan-assembler "xvcmpeqsp" } } */
33 /* { dg-final { scan-assembler "xvcmpgtsp" } } */
34 /* { dg-final { scan-assembler "xvcmpgesp" } } */
35 /* { dg-final { scan-assembler "xxsldwi" } } */
36 /* { dg-final { scan-assembler-not "call" } } */
37 /* { dg-final { scan-assembler "xvcvsxdsp" } } */
38 /* { dg-final { scan-assembler "xvcvuxdsp" } } */
40 extern __vector
int si
[][4];
41 extern __vector
short ss
[][4];
42 extern __vector
signed char sc
[][4];
43 extern __vector
float f
[][4];
44 extern __vector
unsigned int ui
[][4];
45 extern __vector
unsigned short us
[][4];
46 extern __vector
unsigned char uc
[][4];
47 extern __vector __bool
int bi
[][4];
48 extern __vector __bool
short bs
[][4];
49 extern __vector __bool
char bc
[][4];
50 extern __vector __pixel p
[][4];
52 extern __vector
double d
[][4];
53 extern __vector
long sl
[][4];
54 extern __vector
long long sll
[][4];
55 extern __vector
unsigned long ul
[][4];
56 extern __vector
unsigned long long ull
[][4];
57 extern __vector __bool
long bl
[][4];
64 si
[i
][0] = __builtin_vsx_xxsel_4si (si
[i
][1], si
[i
][2], si
[i
][3]); i
++;
65 ss
[i
][0] = __builtin_vsx_xxsel_8hi (ss
[i
][1], ss
[i
][2], ss
[i
][3]); i
++;
66 sc
[i
][0] = __builtin_vsx_xxsel_16qi (sc
[i
][1], sc
[i
][2], sc
[i
][3]); i
++;
67 f
[i
][0] = __builtin_vsx_xxsel_4sf (f
[i
][1], f
[i
][2], f
[i
][3]); i
++;
68 d
[i
][0] = __builtin_vsx_xxsel_2df (d
[i
][1], d
[i
][2], d
[i
][3]); i
++;
70 si
[i
][0] = __builtin_vsx_xxsel (si
[i
][1], si
[i
][2], bi
[i
][3]); i
++;
71 ss
[i
][0] = __builtin_vsx_xxsel (ss
[i
][1], ss
[i
][2], bs
[i
][3]); i
++;
72 sc
[i
][0] = __builtin_vsx_xxsel (sc
[i
][1], sc
[i
][2], bc
[i
][3]); i
++;
73 f
[i
][0] = __builtin_vsx_xxsel (f
[i
][1], f
[i
][2], bi
[i
][3]); i
++;
74 d
[i
][0] = __builtin_vsx_xxsel (d
[i
][1], d
[i
][2], bl
[i
][3]); i
++;
76 si
[i
][0] = __builtin_vsx_xxsel (si
[i
][1], si
[i
][2], ui
[i
][3]); i
++;
77 ss
[i
][0] = __builtin_vsx_xxsel (ss
[i
][1], ss
[i
][2], us
[i
][3]); i
++;
78 sc
[i
][0] = __builtin_vsx_xxsel (sc
[i
][1], sc
[i
][2], uc
[i
][3]); i
++;
79 f
[i
][0] = __builtin_vsx_xxsel (f
[i
][1], f
[i
][2], ui
[i
][3]); i
++;
80 d
[i
][0] = __builtin_vsx_xxsel (d
[i
][1], d
[i
][2], ul
[i
][3]); i
++;
89 si
[i
][0] = __builtin_vsx_vperm_4si (si
[i
][1], si
[i
][2], uc
[i
][3]); i
++;
90 ss
[i
][0] = __builtin_vsx_vperm_8hi (ss
[i
][1], ss
[i
][2], uc
[i
][3]); i
++;
91 sc
[i
][0] = __builtin_vsx_vperm_16qi (sc
[i
][1], sc
[i
][2], uc
[i
][3]); i
++;
92 f
[i
][0] = __builtin_vsx_vperm_4sf (f
[i
][1], f
[i
][2], uc
[i
][3]); i
++;
93 d
[i
][0] = __builtin_vsx_vperm_2df (d
[i
][1], d
[i
][2], uc
[i
][3]); i
++;
95 si
[i
][0] = __builtin_vsx_vperm (si
[i
][1], si
[i
][2], uc
[i
][3]); i
++;
96 ss
[i
][0] = __builtin_vsx_vperm (ss
[i
][1], ss
[i
][2], uc
[i
][3]); i
++;
97 sc
[i
][0] = __builtin_vsx_vperm (sc
[i
][1], sc
[i
][2], uc
[i
][3]); i
++;
98 f
[i
][0] = __builtin_vsx_vperm (f
[i
][1], f
[i
][2], uc
[i
][3]); i
++;
99 d
[i
][0] = __builtin_vsx_vperm (d
[i
][1], d
[i
][2], uc
[i
][3]); i
++;
108 d
[i
][0] = __builtin_vsx_xxpermdi_2df (d
[i
][1], d
[i
][2], 0); i
++;
109 d
[i
][0] = __builtin_vsx_xxpermdi (d
[i
][1], d
[i
][2], 1); i
++;
114 void do_concat (void)
116 d
[0][0] = __builtin_vsx_concat_2df (x
, y
);
121 d
[0][0] = __builtin_vsx_set_2df (d
[0][1], x
, 0);
122 d
[1][0] = __builtin_vsx_set_2df (d
[1][1], y
, 1);
125 extern double z
[][4];
131 d
[i
][0] = __builtin_vsx_xvrdpi (d
[i
][1]); i
++;
132 d
[i
][0] = __builtin_vsx_xvrdpic (d
[i
][1]); i
++;
133 d
[i
][0] = __builtin_vsx_xvrdpim (d
[i
][1]); i
++;
134 d
[i
][0] = __builtin_vsx_xvrdpip (d
[i
][1]); i
++;
135 d
[i
][0] = __builtin_vsx_xvrdpiz (d
[i
][1]); i
++;
137 f
[i
][0] = __builtin_vsx_xvrspi (f
[i
][1]); i
++;
138 f
[i
][0] = __builtin_vsx_xvrspic (f
[i
][1]); i
++;
139 f
[i
][0] = __builtin_vsx_xvrspim (f
[i
][1]); i
++;
140 f
[i
][0] = __builtin_vsx_xvrspip (f
[i
][1]); i
++;
141 f
[i
][0] = __builtin_vsx_xvrspiz (f
[i
][1]); i
++;
143 z
[i
][0] = __builtin_vsx_xsrdpi (z
[i
][1]); i
++;
144 z
[i
][0] = __builtin_vsx_xsrdpic (z
[i
][1]); i
++;
145 z
[i
][0] = __builtin_vsx_xsrdpim (z
[i
][1]); i
++;
146 z
[i
][0] = __builtin_vsx_xsrdpip (z
[i
][1]); i
++;
147 z
[i
][0] = __builtin_vsx_xsrdpiz (z
[i
][1]); i
++;
148 z
[i
][0] = __builtin_vsx_xsmaxdp (z
[i
][1], z
[i
][0]); i
++;
149 z
[i
][0] = __builtin_vsx_xsmindp (z
[i
][1], z
[i
][0]); i
++;
157 d
[i
][0] = __builtin_vsx_xvcmpeqdp (d
[i
][1], d
[i
][2]); i
++;
158 d
[i
][0] = __builtin_vsx_xvcmpgtdp (d
[i
][1], d
[i
][2]); i
++;
159 d
[i
][0] = __builtin_vsx_xvcmpgedp (d
[i
][1], d
[i
][2]); i
++;
161 f
[i
][0] = __builtin_vsx_xvcmpeqsp (f
[i
][1], f
[i
][2]); i
++;
162 f
[i
][0] = __builtin_vsx_xvcmpgtsp (f
[i
][1], f
[i
][2]); i
++;
163 f
[i
][0] = __builtin_vsx_xvcmpgesp (f
[i
][1], f
[i
][2]); i
++;
167 int do_logical (void)
171 si
[i
][0] = __builtin_vsx_xxland (si
[i
][1], si
[i
][2]); i
++;
172 si
[i
][0] = __builtin_vsx_xxlandc (si
[i
][1], si
[i
][2]); i
++;
173 si
[i
][0] = __builtin_vsx_xxlnor (si
[i
][1], si
[i
][2]); i
++;
174 si
[i
][0] = __builtin_vsx_xxlor (si
[i
][1], si
[i
][2]); i
++;
175 si
[i
][0] = __builtin_vsx_xxlxor (si
[i
][1], si
[i
][2]); i
++;
177 ss
[i
][0] = __builtin_vsx_xxland (ss
[i
][1], ss
[i
][2]); i
++;
178 ss
[i
][0] = __builtin_vsx_xxlandc (ss
[i
][1], ss
[i
][2]); i
++;
179 ss
[i
][0] = __builtin_vsx_xxlnor (ss
[i
][1], ss
[i
][2]); i
++;
180 ss
[i
][0] = __builtin_vsx_xxlor (ss
[i
][1], ss
[i
][2]); i
++;
181 ss
[i
][0] = __builtin_vsx_xxlxor (ss
[i
][1], ss
[i
][2]); i
++;
183 sc
[i
][0] = __builtin_vsx_xxland (sc
[i
][1], sc
[i
][2]); i
++;
184 sc
[i
][0] = __builtin_vsx_xxlandc (sc
[i
][1], sc
[i
][2]); i
++;
185 sc
[i
][0] = __builtin_vsx_xxlnor (sc
[i
][1], sc
[i
][2]); i
++;
186 sc
[i
][0] = __builtin_vsx_xxlor (sc
[i
][1], sc
[i
][2]); i
++;
187 sc
[i
][0] = __builtin_vsx_xxlxor (sc
[i
][1], sc
[i
][2]); i
++;
189 d
[i
][0] = __builtin_vsx_xxland (d
[i
][1], d
[i
][2]); i
++;
190 d
[i
][0] = __builtin_vsx_xxlandc (d
[i
][1], d
[i
][2]); i
++;
191 d
[i
][0] = __builtin_vsx_xxlnor (d
[i
][1], d
[i
][2]); i
++;
192 d
[i
][0] = __builtin_vsx_xxlor (d
[i
][1], d
[i
][2]); i
++;
193 d
[i
][0] = __builtin_vsx_xxlxor (d
[i
][1], d
[i
][2]); i
++;
195 f
[i
][0] = __builtin_vsx_xxland (f
[i
][1], f
[i
][2]); i
++;
196 f
[i
][0] = __builtin_vsx_xxlandc (f
[i
][1], f
[i
][2]); i
++;
197 f
[i
][0] = __builtin_vsx_xxlnor (f
[i
][1], f
[i
][2]); i
++;
198 f
[i
][0] = __builtin_vsx_xxlor (f
[i
][1], f
[i
][2]); i
++;
199 f
[i
][0] = __builtin_vsx_xxlxor (f
[i
][1], f
[i
][2]); i
++;
203 int do_xxsldwi (void)
207 si
[i
][0] = __builtin_vsx_xxsldwi (si
[i
][1], si
[i
][2], 0); i
++;
208 ss
[i
][0] = __builtin_vsx_xxsldwi (ss
[i
][1], ss
[i
][2], 1); i
++;
209 sc
[i
][0] = __builtin_vsx_xxsldwi (sc
[i
][1], sc
[i
][2], 2); i
++;
210 ui
[i
][0] = __builtin_vsx_xxsldwi (ui
[i
][1], ui
[i
][2], 3); i
++;
211 us
[i
][0] = __builtin_vsx_xxsldwi (us
[i
][1], us
[i
][2], 0); i
++;
212 uc
[i
][0] = __builtin_vsx_xxsldwi (uc
[i
][1], uc
[i
][2], 1); i
++;
213 f
[i
][0] = __builtin_vsx_xxsldwi (f
[i
][1], f
[i
][2], 2); i
++;
214 d
[i
][0] = __builtin_vsx_xxsldwi (d
[i
][1], d
[i
][2], 3); i
++;
218 int do_xvcvsxdsp (void)
222 f
[i
][0] = __builtin_vsx_xvcvsxdsp (sll
[i
][1]); i
++;
227 int do_xvcvuxdsp (void)
231 f
[i
][0] = __builtin_vsx_xvcvuxdsp (ull
[i
][1]); i
++;