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" } */
13 extern void abort (void);
16 main (int argc
, char *argv
[])
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
;
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,
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
)) {
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
]);
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,
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
)) {
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
]);
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,
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,
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
)) {
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
]);
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,
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,
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
)) {
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
]);
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,
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
)) {
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
]);
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,
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
)) {
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
]);
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,
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
)) {
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
]);
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,
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
)) {
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
]);
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,
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
)) {
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
]);
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,
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
)) {
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
]);
293 /* { dg-final { scan-assembler-times {\mxxpermx\M} 10 } } */