[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / vec-permute-ext-runnable.c
blobf8332652b47070c0fd141a0c3e571b5b39cf6218
1 /* { dg-do run { target { power10_hw } } } */
2 /* { dg-do link { target { ! power10_hw } } } */
3 /* { dg-require-effective-target power10_ok } */
4 /* { dg-options "-mdejagnu-cpu=power10 -save-temps" } */
5 #include <altivec.h>
7 #define DEBUG 0
9 #if DEBUG
10 #include <stdio.h>
11 #endif
13 extern void abort (void);
15 int
16 main (int argc, char *argv [])
18 int i;
19 vector signed char vsrc_a_char, vsrc_b_char;
20 vector signed char vresult_char;
21 vector signed char expected_vresult_char;
23 vector unsigned char vsrc_a_uchar, vsrc_b_uchar, vsrc_c_uchar;
24 vector unsigned char vresult_uchar;
25 vector unsigned char expected_vresult_uchar;
27 vector signed short vsrc_a_short, vsrc_b_short, vsrc_c_short;
28 vector signed short vresult_short;
29 vector signed short expected_vresult_short;
31 vector unsigned short vsrc_a_ushort, vsrc_b_ushort, vsrc_c_ushort;
32 vector unsigned short vresult_ushort;
33 vector unsigned short expected_vresult_ushort;
35 vector int vsrc_a_int, vsrc_b_int, vsrc_c_int;
36 vector int vresult_int;
37 vector int expected_vresult_int;
39 vector unsigned int vsrc_a_uint, vsrc_b_uint, vsrc_c_uint;
40 vector unsigned int vresult_uint;
41 vector unsigned int expected_vresult_uint;
43 vector long long int vsrc_a_ll, vsrc_b_ll, vsrc_c_ll;
44 vector long long int vresult_ll;
45 vector long long int expected_vresult_ll;
47 vector unsigned long long int vsrc_a_ull, vsrc_b_ull, vsrc_c_ull;
48 vector unsigned long long int vresult_ull;
49 vector unsigned long long int expected_vresult_ull;
51 vector float vresult_f;
52 vector float expected_vresult_f;
53 vector float vsrc_a_f, vsrc_b_f;
55 vector double vsrc_a_d, vsrc_b_d;
56 vector double vresult_d;
57 vector double expected_vresult_d;
59 /* Vector permx */
60 vsrc_a_char = (vector signed char) { -1, 3, 5, 7, 9, 11, 13, 15,
61 17, 19, 21, 23, 25, 27, 29 };
62 vsrc_b_char = (vector signed char) { 2, -4, 6, 8, 10, 12, 14, 16,
63 18, 20, 22, 24, 26, 28, 30, 32 };
64 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x7, 0, 0x5, 0, 0x3, 0, 0x1,
65 0, 0x2, 0, 0x4, 0, 0x6, 0, 0x0 };
66 vresult_char = (vector signed char) { 0, 0, 0, 0, 0, 0, 0, 0,
67 0, 0, 0, 0, 0, 0, 0, 0 };
68 expected_vresult_char = (vector signed char) { -1, 15, -1, 11,
69 -1, 7, -1, 3,
70 -1, 5, -1, 9,
71 -1, 13, -1, -1 };
73 vresult_char = vec_permx (vsrc_a_char, vsrc_b_char, vsrc_c_uchar, 0);
75 if (!vec_all_eq (vresult_char, expected_vresult_char)) {
76 #if DEBUG
77 printf("ERROR, vec_permx (vsrc_a_char, vsrc_b_char, vsrc_c_uchar)\n");
78 for(i = 0; i < 16; i++)
79 printf(" vresult_char[%d] = %d, expected_vresult_char[%d] = %d\n",
80 i, vresult_char[i], i, expected_vresult_char[i]);
81 #else
82 abort();
83 #endif
86 vsrc_a_uchar = (vector unsigned char) { 1, 3, 5, 7, 9, 11, 13, 15,
87 17, 19, 21, 23, 25, 27, 29 };
88 vsrc_b_uchar = (vector unsigned char) { 2, 4, 6, 8, 10, 12, 14, 16,
89 18, 20, 22, 24, 26, 28, 30, 32 };
90 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x7, 0, 0x5, 0, 0x3, 0, 0x1,
91 0, 0x2, 0, 0x4, 0, 0x6, 0, 0x0 };
92 vresult_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
93 0, 0, 0, 0, 0, 0, 0, 0 };
94 expected_vresult_uchar = (vector unsigned char) { 1, 15, 1, 11,
95 1, 7, 1, 3,
96 1, 5, 1, 9,
97 1, 13, 1, 1 };
99 vresult_uchar = vec_permx (vsrc_a_uchar, vsrc_b_uchar, vsrc_c_uchar, 0);
101 if (!vec_all_eq (vresult_uchar, expected_vresult_uchar)) {
102 #if DEBUG
103 printf("ERROR, vec_permx (vsrc_a_uchar, vsrc_b_uchar, vsrc_c_uchar)\n");
104 for(i = 0; i < 16; i++)
105 printf(" vresult_uchar[%d] = %d, expected_vresult_uchar[%d] = %d\n",
106 i, vresult_uchar[i], i, expected_vresult_uchar[i]);
107 #else
108 abort();
109 #endif
112 vsrc_a_short = (vector signed short int) { 1, -3, 5, 7, 9, 11, 13, 15 };
113 vsrc_b_short = (vector signed short int) { 2, 4, -6, 8, 10, 12, 14, 16 };
114 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
115 0x4, 0x5, 0x2, 0x3,
116 0x8, 0x9, 0x2, 0x3,
117 0x1E, 0x1F, 0x2, 0x3 };
118 vresult_short = (vector signed short int) { 0, 0, 0, 0, 0, 0, 0, 0 };
119 expected_vresult_short = (vector signed short int) { 1, -3, 5, -3,
120 9, -3, 16, -3 };
122 vresult_short = vec_permx (vsrc_a_short, vsrc_b_short, vsrc_c_uchar, 0);
124 if (!vec_all_eq (vresult_short, expected_vresult_short)) {
125 #if DEBUG
126 printf("ERROR, vec_permx (vsrc_a_short, vsrc_b_short, vsrc_c_uchar)\n");
127 for(i = 0; i < 8; i++)
128 printf(" vresult_short[%d] = %d, expected_vresult_short[%d] = %d\n",
129 i, vresult_short[i], i, expected_vresult_short[i]);
130 #else
131 abort();
132 #endif
135 vsrc_a_ushort = (vector unsigned short int) { 1, 3, 5, 7, 9, 11, 13, 15 };
136 vsrc_b_ushort = (vector unsigned short int) { 2, 4, 6, 8, 10, 12, 14, 16 };
137 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
138 0x4, 0x5, 0x2, 0x3,
139 0x8, 0x9, 0x2, 0x3,
140 0x1E, 0x1F, 0x2, 0x3 };
141 vresult_ushort = (vector unsigned short int) { 0, 0, 0, 0, 0, 0, 0, 0 };
142 expected_vresult_ushort = (vector unsigned short int) { 1, 3, 5, 3,
143 9, 3, 16, 3 };
145 vresult_ushort = vec_permx (vsrc_a_ushort, vsrc_b_ushort, vsrc_c_uchar, 0);
147 if (!vec_all_eq (vresult_ushort, expected_vresult_ushort)) {
148 #if DEBUG
149 printf("ERROR, vec_permx (vsrc_a_ushort, vsrc_b_ushort, vsrc_c_uchar)\n");
150 for(i = 0; i < 8; i++)
151 printf(" vresult_ushort[%d] = %d, expected_vresult_ushort[%d] = %d\n",
152 i, vresult_ushort[i], i, expected_vresult_ushort[i]);
153 #else
154 abort();
155 #endif
158 vsrc_a_int = (vector signed int) { 1, -3, 5, 7 };
159 vsrc_b_int = (vector signed int) { 2, 4, -6, 8 };
160 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
161 0x4, 0x5, 0x6, 0x7,
162 0x18, 0x19, 0x1A, 0x1B,
163 0x1C, 0x1D, 0x1E, 0x1F };
164 vresult_int = (vector signed int) { 0, 0, 0, 0 };
165 expected_vresult_int = (vector signed int) { 1, -3, -6, 8 };
167 vresult_int = vec_permx (vsrc_a_int, vsrc_b_int, vsrc_c_uchar, 0);
169 if (!vec_all_eq (vresult_int, expected_vresult_int)) {
170 #if DEBUG
171 printf("ERROR, vec_permx (vsrc_a_int, vsrc_b_int, vsrc_c_uchar)\n");
172 for(i = 0; i < 4; i++)
173 printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n",
174 i, vresult_int[i], i, expected_vresult_int[i]);
175 #else
176 abort();
177 #endif
180 vsrc_a_uint = (vector unsigned int) { 1, 3, 5, 7 };
181 vsrc_b_uint = (vector unsigned int) { 10, 12, 14, 16 };
182 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
183 0x4, 0x5, 0x6, 0x7,
184 0x18, 0x19, 0x1A, 0x1B,
185 0x1C, 0x1D, 0x1E, 0x1F };
186 vresult_uint = (vector unsigned int) { 0, 0, 0, 0 };
187 expected_vresult_uint = (vector unsigned int) { 1, 3, 14, 16 };
189 vresult_uint = vec_permx (vsrc_a_uint, vsrc_b_uint, vsrc_c_uchar, 0);
191 if (!vec_all_eq (vresult_uint, expected_vresult_uint)) {
192 #if DEBUG
193 printf("ERROR, vec_permx (vsrc_a_uint, vsrc_b_uint, vsrc_c_uchar)\n");
194 for(i = 0; i < 4; i++)
195 printf(" vresult_uint[%d] = %d, expected_vresult_uint[%d] = %d\n",
196 i, vresult_uint[i], i, expected_vresult_uint[i]);
197 #else
198 abort();
199 #endif
202 vsrc_a_ll = (vector signed long long int) { 1, -3 };
203 vsrc_b_ll = (vector signed long long int) { 2, -4 };
204 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
205 0x4, 0x5, 0x6, 0x7,
206 0x18, 0x19, 0x1A, 0x1B,
207 0x1C, 0x1D, 0x1E, 0x1F };
208 vresult_ll = (vector signed long long int) { 0, 0};
209 expected_vresult_ll = (vector signed long long int) { 1, -4 };
211 vresult_ll = vec_permx (vsrc_a_ll, vsrc_b_ll, vsrc_c_uchar, 0);
213 if (!vec_all_eq (vresult_ll, expected_vresult_ll)) {
214 #if DEBUG
215 printf("ERROR, vec_permx (vsrc_a_ll, vsrc_b_ll, vsrc_c_uchar)\n");
216 for(i = 0; i < 2; i++)
217 printf(" vresult_ll[%d] = %lld, expected_vresult_ll[%d] = %lld\n",
218 i, vresult_ll[i], i, expected_vresult_ll[i]);
219 #else
220 abort();
221 #endif
224 vsrc_a_ull = (vector unsigned long long int) { 1, 3 };
225 vsrc_b_ull = (vector unsigned long long int) { 10, 12 };
226 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
227 0x4, 0x5, 0x6, 0x7,
228 0x18, 0x19, 0x1A, 0x1B,
229 0x1C, 0x1D, 0x1E, 0x1F };
230 vresult_ull = (vector unsigned long long int) { 0, 0 };
231 expected_vresult_ull = (vector unsigned long long int) { 1, 12 };
233 vresult_ull = vec_permx (vsrc_a_ull, vsrc_b_ull, vsrc_c_uchar, 0);
235 if (!vec_all_eq (vresult_ull, expected_vresult_ull)) {
236 #if DEBUG
237 printf("ERROR, vec_permx (vsrc_a_ull, vsrc_b_ull, vsrc_c_uchar)\n");
238 for(i = 0; i < 2; i++)
239 printf(" vresult_ull[%d] = %d, expected_vresult_ull[%d] = %d\n",
240 i, vresult_ull[i], i, expected_vresult_ull[i]);
241 #else
242 abort();
243 #endif
246 vsrc_a_f = (vector float) { -3.0, 5.0, 7.0, 9.0 };
247 vsrc_b_f = (vector float) { 2.0, 4.0, 6.0, 8.0 };
248 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
249 0x4, 0x5, 0x6, 0x7,
250 0x18, 0x19, 0x1A, 0x1B,
251 0x1C, 0x1D, 0x1E, 0x1F };
252 vresult_f = (vector float) { 0.0, 0.0, 0.0, 0.0 };
253 expected_vresult_f = (vector float) { -3.0, 5.0, 6.0, 8.0 };
255 vresult_f = vec_permx (vsrc_a_f, vsrc_b_f, vsrc_c_uchar, 0);
257 if (!vec_all_eq (vresult_f, expected_vresult_f)) {
258 #if DEBUG
259 printf("ERROR, vec_permx (vsrc_a_f, vsrc_b_f, vsrc_c_uchar)\n");
260 for(i = 0; i < 4; i++)
261 printf(" vresult_f[%d] = %f, expected_vresult_f[%d] = %f\n",
262 i, vresult_f[i], i, expected_vresult_f[i]);
263 #else
264 abort();
265 #endif
268 vsrc_a_d = (vector double) { 1.0, -3.0 };
269 vsrc_b_d = (vector double) { 2.0, -4.0 };
270 vsrc_c_uchar = (vector unsigned char) { 0x0, 0x1, 0x2, 0x3,
271 0x4, 0x5, 0x6, 0x7,
272 0x1A, 0x1B, 0x1C, 0x1B,
273 0x1C, 0x1D, 0x1E, 0x1F };
274 vresult_d = (vector double) { 0.0, 0.0 };
275 expected_vresult_d = (vector double) { 1.0, -4.0 };
277 vresult_d = vec_permx (vsrc_a_d, vsrc_b_d, vsrc_c_uchar, 0);
279 if (!vec_all_eq (vresult_d, expected_vresult_d)) {
280 #if DEBUG
281 printf("ERROR, vec_permx (vsrc_a_d, vsrc_b_d, vsrc_c_uchar)\n");
282 for(i = 0; i < 2; i++)
283 printf(" vresult_d[%d] = %f, expected_vresult_d[%d] = %f\n",
284 i, vresult_d[i], i, expected_vresult_d[i]);
285 #else
286 abort();
287 #endif
290 return 0;
293 /* { dg-final { scan-assembler-times {\mxxpermx\M} 10 } } */