1 /* { dg-do run { target { vsx_hw } } } */
2 /* { dg-options "-O2 -mvsx -mcpu=power7" } */
4 #include <altivec.h> // vector
28 vector
signed char vsc
;
29 vector
unsigned char vuc
;
30 vector
bool short vbs
;
31 vector
signed short vss
;
32 vector
unsigned short vus
;
35 vector
unsigned int vui
;
36 vector
bool long long vllb
;
37 vector
long long signed int vlli
;
38 vector
long long unsigned int vllui
;
46 int element_size
; // element size in bytes
47 union vector_value vec
;
52 void test_results(struct vector_struct
*vec_result
,
53 struct vector_struct
*vec_expected
)
57 if (vec_result
->element_size
!= vec_expected
->element_size
)
59 printf("vec_result->element_size != vec_expected->element_size\n");
64 if (vec_result
->vector_id
!= vec_expected
->vector_id
)
66 printf("vec_result->vector_id != vec_expected->vector_id\n");
71 num_elements
= 16 / vec_result
->element_size
;
73 for (i
= 0; i
<num_elements
; i
++) {
74 switch (vec_result
->vector_id
) {
76 if (vec_result
->vec
.vbc
[i
] != vec_expected
->vec
.vbc
[i
])
79 printf("vec_result->vec.vbc[%d] (%d) != ",
80 i
, vec_result
->vec
.vbc
[i
]);
81 printf("vec_expected->vec.vbc[%d] (%d)\n",
82 i
, vec_expected
->vec
.vbc
[i
]);
90 if (vec_result
->vec
.vsc
[i
] != vec_expected
->vec
.vsc
[i
])
93 printf("vec_result->vec.vsc[%d] (%d) != ",
94 i
, vec_result
->vec
.vsc
[i
]);
95 printf("vec_expected->vec.vsc[%d] (%d)\n",
96 i
, vec_expected
->vec
.vsc
[i
]);
104 if (vec_result
->vec
.vuc
[i
] != vec_expected
->vec
.vuc
[i
])
107 printf("vec_result->vec.vuc[%d] (%d) != ",
108 i
, vec_result
->vec
.vuc
[i
]);
109 printf("vec_expected->vec.vuc[%d] (%d)\n",
110 i
, vec_expected
->vec
.vuc
[i
]);
118 if (vec_result
->vec
.vbs
[i
] != vec_expected
->vec
.vbs
[i
])
121 printf("vec_result->vec.vbs[%d] (%d) != ",
122 i
, vec_result
->vec
.vbs
[i
]);
123 printf("vec_expected->vec.vbs[%d] (%d)\n",
124 i
, vec_expected
->vec
.vbs
[i
]);
132 if (vec_result
->vec
.vss
[i
] != vec_expected
->vec
.vss
[i
])
135 printf("vec_result->vec.vss[%d] (%d) != ",
136 i
, vec_result
->vec
.vss
[i
]);
137 printf("vec_expected->vec.vss[%d] (%d)\n",
138 i
, vec_expected
->vec
.vss
[i
]);
146 if (vec_result
->vec
.vus
[i
] != vec_expected
->vec
.vus
[i
])
149 printf("vec_result->vec.vus[%d] (%d) != ",
150 i
, vec_expected
->vec
.vus
[i
]);
151 printf("vec_expected->vec.vus[%d] (%d)\n",
152 i
, vec_expected
->vec
.vus
[i
]);
160 if (vec_result
->vec
.vbi
[i
] != vec_expected
->vec
.vbi
[i
])
163 printf("vec_result->vec.vbi[%d] (%d) != ",
164 i
, vec_result
->vec
.vbi
[i
]);
165 printf("vec_expected->vec.vbi[%d] (%d)\n",
166 i
, vec_expected
->vec
.vbi
[i
]);
174 if (vec_result
->vec
.vi
[i
] != vec_expected
->vec
.vi
[i
])
177 printf("vec_result->vec.vi[%d] (%d) != ",
178 i
, vec_result
->vec
.vi
[i
]);
179 printf("vec_expected->vec.vi[%d] (%d)\n",
180 i
, vec_expected
->vec
.vi
[i
]);
188 if (vec_result
->vec
.vui
[i
] != vec_expected
->vec
.vui
[i
])
191 printf("vec_result->vec.vui[%d] (%u) != ",
192 i
, vec_result
->vec
.vui
[i
]);
193 printf("vec_expected->vec.vui[%u] (%d)\n",
194 i
, vec_expected
->vec
.vui
[i
]);
202 if (vec_result
->vec
.vllb
[i
] != vec_expected
->vec
.vllb
[i
])
205 printf("vec_result->vec.vllb[%d] (%lld != ",
206 i
, vec_result
->vec
.vllb
[i
]);
207 printf("vec_expected->vec.vllb[%lld] (%d)\n",
208 i
, vec_expected
->vec
.vllb
[i
]);
216 if (vec_result
->vec
.vlli
[i
] != vec_expected
->vec
.vlli
[i
])
219 printf("vec_result->vec.vlli[%d] (%d) != ",
220 i
, vec_result
->vec
.vlli
[i
]);
221 printf("vec_expected->vec.vlli[%d] (%d)\n",
222 i
, vec_expected
->vec
.vlli
[i
]);
230 if (vec_result
->vec
.vllui
[i
] != vec_expected
->vec
.vllui
[i
])
233 printf("vec_result->vec.vllui[%d] (%llu) != ",
234 i
, vec_result
->vec
.vllui
[i
]);
235 printf("vec_expected->vec.vllui[%d] (%llu)\n",
236 i
, vec_expected
->vec
.vllui
[i
]);
244 if (vec_result
->vec
.vf
[i
] != vec_expected
->vec
.vf
[i
])
247 printf("vec_result->vec.vf[%d] (%f) != ",
248 i
, vec_result
->vec
.vf
[i
]);
249 printf("vec_expected->vec.vf[%d] (%f)\n",
250 i
, vec_expected
->vec
.vf
[i
]);
258 if (vec_result
->vec
.vd
[i
] != vec_expected
->vec
.vd
[i
])
261 printf("vec_result->vec.vd[%d] (%f) != ",
262 i
, vec_result
->vec
.vd
[i
]);
263 printf("vec_expected->vec.vd[%d] (%f)\n",
264 i
, vec_expected
->vec
.vd
[i
]);
273 printf("Unknown case.\n");
284 struct vector_struct vec_src
, vec_expected
, vec_result
;
286 vec_src
.vec
.vbc
= (vector
bool char){ 0, 1, 0, 0, 1, 1, 0, 0,
287 0, 1, 1, 1, 0, 0, 0, 0 };
288 vec_expected
.vec
.vbc
= (vector
bool char){ 0, 0, 0, 0, 1, 1, 1, 0,
289 0, 0, 1, 1, 0, 0, 1, 0 };
290 vec_result
.element_size
= vec_expected
.element_size
= 1;
291 vec_result
.vector_id
= vec_expected
.vector_id
= VBC
;
292 vec_result
.vec
.vbc
= vec_reve (vec_src
.vec
.vbc
);
293 test_results(&vec_result
, &vec_expected
);
295 vec_src
.vec
.vsc
= (vector
signed char){ 0, 1, -2, -3, 4, 5, -6, -7, 8,
296 9, -10, -11, 12, 13, -14, -15 };
297 vec_expected
.vec
.vsc
= (vector
signed char){ -15, -14, 13, 12, -11, -10,
298 9, 8, -7, -6, 5, 4, -3, -2,
300 vec_result
.element_size
= vec_expected
.element_size
= 1;
301 vec_result
.vector_id
= vec_expected
.vector_id
= VSC
;
302 vec_result
.vec
.vsc
= vec_reve (vec_src
.vec
.vsc
);
303 test_results (&vec_result
, &vec_expected
);
305 vec_src
.vec
.vuc
= (vector
unsigned char){ 10, 11, 12, 13, 14, 15, 16, 17,
306 18, 19, 20, 21, 22, 23, 24, 25 };
307 vec_expected
.vec
.vuc
= (vector
unsigned char){ 25, 24, 23, 22, 21, 20,
308 19, 18, 17, 16, 15, 14, 13,
310 vec_result
.element_size
= vec_expected
.element_size
= 1;
311 vec_result
.vector_id
= vec_expected
.vector_id
= VUC
;
312 vec_result
.vec
.vuc
= vec_reve (vec_src
.vec
.vuc
);
313 test_results (&vec_result
, &vec_expected
);
315 vec_src
.vec
.vbs
= (vector
bool short){ 0, 0, 1, 1, 0, 1, 0, 1 };
316 vec_expected
.vec
.vbs
= (vector
bool short){ 1, 0, 1, 0, 1, 1, 0, 0 };
317 vec_result
.element_size
= vec_expected
.element_size
= 2;
318 vec_result
.vector_id
= vec_expected
.vector_id
= VBS
;
319 vec_result
.vec
.vbs
= vec_reve (vec_src
.vec
.vbs
);
320 test_results (&vec_result
, &vec_expected
);
322 vec_src
.vec
.vss
= (vector
signed short){ -1, -2, 3, 4, -5, -6, 7, 8 };
323 vec_expected
.vec
.vss
= (vector
signed short){ 8, 7, -6, -5, 4, 3, -2, -1 };
324 vec_result
.element_size
= vec_expected
.element_size
= 2;
325 vec_result
.vector_id
= vec_expected
.vector_id
= VSS
;
326 vec_result
.vec
.vss
= vec_reve (vec_src
.vec
.vss
);
327 test_results (&vec_result
, &vec_expected
);
329 vec_src
.vec
.vus
= (vector
unsigned short){ 11, 22, 33, 44, 55, 66, 77, 88 };
330 vec_expected
.vec
.vus
= (vector
unsigned short){ 88, 77, 66, 55,
332 vec_result
.element_size
= vec_expected
.element_size
= 2;
333 vec_result
.vector_id
= vec_expected
.vector_id
= VUS
;
334 vec_result
.vec
.vus
= vec_reve (vec_src
.vec
.vus
);
335 test_results (&vec_result
, &vec_expected
);
337 vec_src
.vec
.vbi
= (vector
bool int){ 0, 1, 1, 1 };
338 vec_expected
.vec
.vbi
= (vector
bool int){ 1, 1, 1, 0 };
339 vec_result
.element_size
= vec_expected
.element_size
= 4;
340 vec_result
.vector_id
= vec_expected
.vector_id
= VBI
;
341 vec_result
.vec
.vbi
= vec_reve (vec_src
.vec
.vbi
);
342 test_results (&vec_result
, &vec_expected
);
344 vec_src
.vec
.vi
= (vector
signed int){ -1, 3, -5, 1234567 };
345 vec_expected
.vec
.vi
= (vector
signed int){1234567, -5, 3, -1};
346 vec_result
.element_size
= vec_expected
.element_size
= 4;
347 vec_result
.vector_id
= vec_expected
.vector_id
= VI
;
348 vec_result
.vec
.vi
= vec_reve (vec_src
.vec
.vi
);
349 test_results (&vec_result
, &vec_expected
);
351 vec_src
.vec
.vui
= (vector
unsigned int){ 9, 11, 15, 2468013579 };
352 vec_expected
.vec
.vui
= (vector
unsigned int){2468013579, 15, 11, 9};
353 vec_result
.element_size
= vec_expected
.element_size
= 4;
354 vec_result
.vector_id
= vec_expected
.vector_id
= VUI
;
355 vec_result
.vec
.vui
= vec_reve (vec_src
.vec
.vui
);
356 test_results (&vec_result
, &vec_expected
);
358 vec_src
.vec
.vllb
= (vector
bool long long ){ 0, 1 };
359 vec_expected
.vec
.vllb
= (vector
bool long long){1, 0};
360 vec_result
.element_size
= vec_expected
.element_size
= 8;
361 vec_result
.vector_id
= vec_expected
.vector_id
= VLLB
;
362 vec_result
.vec
.vllb
= vec_reve (vec_src
.vec
.vllb
);
363 test_results (&vec_result
, &vec_expected
);
365 vec_src
.vec
.vlli
= (vector
long long int){ -12, -12345678901234 };
366 vec_expected
.vec
.vlli
= (vector
long long int){-12345678901234, -12};
367 vec_result
.element_size
= vec_expected
.element_size
= 8;
368 vec_result
.vector_id
= vec_expected
.vector_id
= VLLI
;
369 vec_result
.vec
.vlli
= vec_reve (vec_src
.vec
.vlli
);
370 test_results (&vec_result
, &vec_expected
);
372 vec_src
.vec
.vllui
= (vector
unsigned long long int){ 102, 9753108642 };
373 vec_expected
.vec
.vllui
= (vector
unsigned long long int){9753108642, 102};
374 vec_result
.element_size
= vec_expected
.element_size
= 8;
375 vec_result
.vector_id
= vec_expected
.vector_id
= VLLUI
;
376 vec_result
.vec
.vllui
= vec_reve (vec_src
.vec
.vllui
);
377 test_results (&vec_result
, &vec_expected
);
379 vec_src
.vec
.vf
= (vector
float){ -21., 3.5, -53., 78. };
380 vec_expected
.vec
.vf
= (vector
float){78., -53, 3.5, -21};
381 vec_result
.element_size
= vec_expected
.element_size
= 4;
382 vec_result
.vector_id
= vec_expected
.vector_id
= VF
;
383 vec_result
.vec
.vf
= vec_reve (vec_src
.vec
.vf
);
384 test_results (&vec_result
, &vec_expected
);
386 vec_src
.vec
.vd
= (vector
double){ 34.0, 97.0 };
387 vec_expected
.vec
.vd
= (vector
double){97.0, 34.0};
388 vec_result
.element_size
= vec_expected
.element_size
= 8;
389 vec_result
.vector_id
= vec_expected
.vector_id
= VD
;
390 vec_result
.vec
.vd
= vec_reve (vec_src
.vec
.vd
);
391 test_results (&vec_result
, &vec_expected
);