2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-maltivec -mvsx" } */
6 #include <altivec.h> // vector
16 signed char data_c
[100];
17 unsigned char data_uc
[100];
19 signed short int data_ssi
[100];
20 unsigned short int data_usi
[100];
22 signed int data_si
[100];
23 unsigned int data_ui
[100];
25 signed long long data_sll
[100];
26 unsigned long long data_ull
[100];
30 signed long long disp
;
32 vector
signed char vec_c_expected1
, vec_c_expected2
, vec_c_result1
, vec_c_result2
;
33 vector
unsigned char vec_uc_expected1
, vec_uc_expected2
,
34 vec_uc_result1
, vec_uc_result2
;
35 vector
signed short int vec_ssi_expected1
, vec_ssi_expected2
,
36 vec_ssi_result1
, vec_ssi_result2
;
37 vector
unsigned short int vec_usi_expected1
, vec_usi_expected2
,
38 vec_usi_result1
, vec_usi_result2
;
39 vector
signed int vec_si_expected1
, vec_si_expected2
, vec_si_result1
,
41 vector
unsigned int vec_ui_expected1
, vec_ui_expected2
, vec_ui_result1
,
43 vector
signed long long vec_sll_expected1
, vec_sll_expected2
,
44 vec_sll_result1
, vec_sll_result2
;
45 vector
unsigned long long vec_ull_expected1
, vec_ull_expected2
,
46 vec_ull_result1
, vec_ull_result2
;
47 vector
float vec_f_expected1
, vec_f_expected2
, vec_f_result1
, vec_f_result2
;
48 vector
double vec_d_expected1
, vec_d_expected2
, vec_d_result1
, vec_d_result2
;
50 signed long long zero
= (signed long long) 0;
52 for (i
= 0; i
< 100; i
++)
62 data_f
[i
] = i
+100000.0;
63 data_d
[i
] = i
+1000000.0;
69 vec_c_expected1
= (vector
signed char){0, 1, 2, 3, 4, 5, 6, 7,
70 8, 9, 10, 11, 12, 13, 14, 15};
71 vec_c_result1
= vec_xl (0, data_c
);
73 vec_c_expected2
= (vector
signed char){1, 2, 3, 4, 5, 6, 7, 8, 9,
74 10, 11, 12, 13, 14, 15, 16};
75 vec_c_result2
= vec_xl (disp
, data_c
);
77 vec_uc_expected1
= (vector
unsigned char){1, 2, 3, 4, 5, 6, 7, 8, 9,
78 10, 11, 12, 13, 14, 15, 16};
79 vec_uc_result1
= vec_xl (0, data_uc
);
81 vec_uc_expected2
= (vector
unsigned char){2, 3, 4, 5, 6, 7, 8, 9, 10,
82 11, 12, 13, 14, 15, 16, 17};
83 vec_uc_result2
= vec_xl (disp
, data_uc
);
85 for (i
= 0; i
< 16; i
++)
87 if (vec_c_result1
[i
] != vec_c_expected1
[i
])
89 printf("Error: vec_xl(), vec_c_result1[%d] = %d; vec_c_expected1[%d] = %d\n",
90 i
, vec_c_result1
[i
], i
, vec_c_expected1
[i
]);
94 if (vec_c_result2
[i
] != vec_c_expected2
[i
])
96 printf("Error: vec_xl(), vec_c_result2[%d] = %d; vec_c_expected2[%d] = %d\n",
97 i
, vec_c_result2
[i
], i
, vec_c_expected2
[i
]);
102 if (vec_uc_result1
[i
] != vec_uc_expected1
[i
])
104 printf("Error: vec_xl(), vec_uc_result1[%d] = %d; vec_uc_expected1[%d] = %d\n",
105 i
, vec_uc_result1
[i
], i
, vec_uc_expected1
[i
]);
110 if (vec_uc_result2
[i
] != vec_uc_expected2
[i
])
112 printf("Error: vec_xl(), vec_uc_result2[%d] = %d; vec_uc_expected2[%d] = %d\n",
113 i
, vec_uc_result2
[i
], i
, vec_uc_expected2
[i
]);
120 vec_ssi_expected1
= (vector
signed short){10, 11, 12, 13, 14, 15, 16, 17};
122 vec_ssi_result1
= vec_xl (0, data_ssi
);
124 vec_ssi_expected2
= (vector
signed short){11, 12, 13, 14, 15, 16, 17, 18};
125 vec_ssi_result2
= vec_xl (disp
, data_ssi
);
127 vec_usi_expected1
= (vector
unsigned short){11, 12, 13, 14, 15, 16, 17, 18};
128 vec_usi_result1
= vec_xl (0, data_usi
);
130 vec_usi_expected2
= (vector
unsigned short){12, 13, 14, 15, 16, 17, 18, 19};
131 vec_usi_result2
= vec_xl (disp
, data_usi
);
134 for (i
= 0; i
< 8; i
++)
136 if (vec_ssi_result1
[i
] != vec_ssi_expected1
[i
])
138 printf("Error: vec_xl(), vec_ssi_result1[%d] = %d; vec_ssi_expected1[%d] = %d\n",
139 i
, vec_ssi_result1
[i
], i
, vec_ssi_expected1
[i
]);
143 if (vec_ssi_result2
[i
] != vec_ssi_expected2
[i
])
145 printf("Error: vec_xl(), vec_ssi_result2[%d] = %d; vec_ssi_expected2[%d] = %d\n",
146 i
, vec_ssi_result2
[i
], i
, vec_ssi_expected2
[i
]);
151 if (vec_usi_result1
[i
] != vec_usi_expected1
[i
])
153 printf("Error: vec_xl(), vec_usi_result1[%d] = %d; vec_usi_expected1[%d] = %d\n",
154 i
, vec_usi_result1
[i
], i
, vec_usi_expected1
[i
]);
159 if (vec_usi_result2
[i
] != vec_usi_expected2
[i
])
161 printf("Error: vec_xl(), vec_usi_result2[%d] = %d; vec_usi_expected2[%d] = %d\n",
162 i
, vec_usi_result2
[i
], i
, vec_usi_expected2
[i
]);
169 vec_si_result1
= vec_xl (zero
, data_si
);
170 vec_si_expected1
= (vector
int){100, 101, 102, 103};
172 vec_si_result2
= vec_xl (disp
, data_si
);
173 vec_si_expected2
= (vector
int){101, 102, 103, 104};
175 vec_ui_result1
= vec_xl (zero
, data_ui
);
176 vec_ui_expected1
= (vector
unsigned int){101, 102, 103, 104};
178 vec_ui_result2
= vec_xl (disp
, data_ui
);
179 vec_ui_expected2
= (vector
unsigned int){102, 103, 104, 105};
181 for (i
= 0; i
< 4; i
++)
183 if (vec_si_result1
[i
] != vec_si_expected1
[i
])
185 printf("Error: vec_xl(), vec_si_result1[%d] = %d; vec_si_expected1[%d] = %d\n",
186 i
, vec_si_result1
[i
], i
, vec_si_expected1
[i
]);
190 if (vec_si_result2
[i
] != vec_si_expected2
[i
])
192 printf("Error: vec_xl(), vec_si_result2[%d] = %d; vec_si_expected2[%d] = %d\n",
193 i
, vec_si_result2
[i
], i
, vec_si_expected2
[i
]);
198 if (vec_ui_result1
[i
] != vec_ui_expected1
[i
])
200 printf("Error: vec_xl(), vec_ui_result1[%d] = %d; vec_ui_expected1[%d] = %d\n",
201 i
, vec_ui_result1
[i
], i
, vec_ui_expected1
[i
]);
206 if (vec_ui_result2
[i
] != vec_ui_expected2
[i
])
208 printf("Error: vec_xl(), vec_ui_result2[%d] = %d; vec_ui_expected1[%d] = %d\n",
209 i
, vec_si_result2
[i
], i
, vec_ui_expected1
[i
]);
216 vec_sll_result1
= vec_xl (zero
, data_sll
);
217 vec_sll_expected1
= (vector
signed long long){1000, 1001};
219 vec_sll_result2
= vec_xl (disp
, data_sll
);
220 vec_sll_expected2
= (vector
signed long long){1001, 1002};
222 vec_ull_result1
= vec_xl (zero
, data_ull
);
223 vec_ull_expected1
= (vector
unsigned long long){1001, 1002};
225 vec_ull_result2
= vec_xl (disp
, data_ull
);
226 vec_ull_expected2
= (vector
unsigned long long){1002, 1003};
228 for (i
= 0; i
< 2; i
++)
230 if (vec_sll_result1
[i
] != vec_sll_expected1
[i
])
232 printf("Error: vec_xl(), vec_sll_result1[%d] = %lld; vec_sll_expected1[%d] = %lld\n",
233 i
, vec_sll_result1
[i
], i
, vec_sll_expected1
[i
]);
238 if (vec_sll_result2
[i
] != vec_sll_expected2
[i
])
240 printf("Error: vec_xl(), vec_sll_result2[%d] = %lld; vec_sll_expected2[%d] = %lld\n",
241 i
, vec_sll_result2
[i
], i
, vec_sll_expected2
[i
]);
246 if (vec_ull_result1
[i
] != vec_ull_expected1
[i
])
248 printf("Error: vec_xl(), vec_ull_result1[%d] = %lld; vec_ull_expected1[%d] = %lld\n",
249 i
, vec_ull_result1
[i
], i
, vec_ull_expected1
[i
]);
254 if (vec_ull_result2
[i
] != vec_ull_expected2
[i
])
256 printf("Error: vec_xl(), vec_ull_result2[%d] = %lld; vec_ull_expected2[%d] = %lld\n",
257 i
, vec_ull_result2
[i
], i
, vec_ull_expected2
[i
]);
264 vec_f_result1
= vec_xl (zero
, data_f
);
265 vec_f_expected1
= (vector
float){100000.0, 100001.0, 100002.0, 100003.0};
267 vec_f_result2
= vec_xl (disp
, data_f
);
268 vec_f_expected2
= (vector
float){100001.0, 100002.0, 100003.0, 100004.0};
270 for (i
= 0; i
< 4; i
++)
272 if (vec_f_result1
[i
] != vec_f_expected1
[i
])
274 printf("Error: vec_xl(), vec_f_result1[%d] = %f; vec_f_expected1[%d] = %f\n",
275 i
, vec_f_result1
[i
], i
, vec_f_expected1
[i
]);
280 if (vec_f_result2
[i
] != vec_f_expected2
[i
])
282 printf("Error: vec_xl(), vec_f_result2[%d] = %f; vec_f_expected2[%d] = %f\n",
283 i
, vec_f_result2
[i
], i
, vec_f_expected2
[i
]);
290 vec_d_result1
= vec_xl (zero
, data_d
);
291 vec_d_expected1
= (vector
double){1000000.0, 1000001.0};
293 vec_d_result2
= vec_xl (disp
, data_d
);
294 vec_d_expected2
= (vector
double){1000001.0, 1000002.0};
296 for (i
= 0; i
< 2; i
++)
298 if (vec_d_result1
[i
] != vec_d_expected1
[i
])
300 printf("Error: vec_xl(), vec_d_result1[%d] = %f; vec_f_expected1[%d] = %f\n",
301 i
, vec_d_result1
[i
], i
, vec_d_expected1
[i
]);
306 if (vec_d_result2
[i
] != vec_d_expected2
[i
])
308 printf("Error: vec_xl(), vec_d_result2[%d] = %f; vec_f_expected2[%d] = %f\n",
309 i
, vec_d_result2
[i
], i
, vec_d_expected2
[i
]);
317 #ifdef __BIG_ENDIAN__
318 vec_c_expected1
= (vector
signed char){0, 1, 2, 3, 4, 5, 6, 7,
319 8, 9, 10, 11, 12, 13, 14, 15};
321 vec_c_expected1
= (vector
signed char){15, 14, 13, 12, 11, 10, 9, 8,
322 7, 6, 5, 4, 3, 2, 1, 0};
324 vec_c_result1
= vec_xl_be (0, data_c
);
328 #ifdef __BIG_ENDIAN__
329 vec_c_expected2
= (vector
signed char){1, 2, 3, 4, 5, 6, 7, 8,
330 9, 10, 11, 12, 13, 14, 15, 16};
332 vec_c_expected2
= (vector
signed char){16, 15, 14, 13, 12, 11, 10, 9,
333 8, 7, 6, 5, 4, 3, 2, 1};
336 vec_c_result2
= vec_xl_be (disp
, data_c
);
338 #ifdef __BIG_ENDIAN__
339 vec_uc_expected1
= (vector
unsigned char){1, 2, 3, 4, 5, 6, 7, 8,
340 9, 10, 11, 12, 13, 14, 15, 16};
342 vec_uc_expected1
= (vector
unsigned char){16, 15, 14, 13, 12, 11, 10, 9,
343 8, 7, 6, 5, 4, 3, 2, 1};
346 vec_uc_result1
= vec_xl_be (0, data_uc
);
348 #ifdef __BIG_ENDIAN__
349 vec_uc_expected2
= (vector
unsigned char){2, 3, 4, 5, 6, 7, 8, 9,
350 10, 11, 12, 13, 14, 15, 16, 17};
352 vec_uc_expected2
= (vector
unsigned char){17, 16, 15, 14, 13, 12, 11, 10,
353 9, 8, 7, 6, 5, 4, 3, 2};
356 vec_uc_result2
= vec_xl_be (disp
, data_uc
);
358 for (i
= 0; i
< 16; i
++)
360 if (vec_c_result1
[i
] != vec_c_expected1
[i
])
362 printf("Error: vec_xl_be(), vec_c_result1[%d] = %d; vec_c_expected1[%d] = %d\n",
363 i
, vec_c_result1
[i
], i
, vec_c_expected1
[i
]);
368 if (vec_c_result2
[i
] != vec_c_expected2
[i
])
370 printf("Error: vec_xl_be(), vec_c_result2[%d] = %d; vec_c_expected2[%d] = %d\n",
371 i
, vec_c_result2
[i
], i
, vec_c_expected2
[i
]);
376 if (vec_uc_result1
[i
] != vec_uc_expected1
[i
])
378 printf("Error: vec_xl_be(), vec_uc_result1[%d] = %d; vec_uc_expected1[%d] = %d\n",
379 i
, vec_uc_result1
[i
], i
, vec_uc_expected1
[i
]);
384 if (vec_uc_result2
[i
] != vec_uc_expected2
[i
])
386 printf("Error: vec_xl_be(), vec_uc_result2[%d] = %d; vec_uc_expected2[%d] = %d\n",
387 i
, vec_uc_result1
[i
], i
, vec_uc_expected1
[i
]);
393 vec_ssi_result1
= vec_xl_be (zero
, data_ssi
);
395 #ifdef __BIG_ENDIAN__
396 vec_ssi_expected1
= (vector
signed short){10, 11, 12, 13, 14, 15, 16, 17};
398 vec_ssi_expected1
= (vector
signed short){17, 16, 15, 14, 13, 12, 11, 10};
402 vec_ssi_result2
= vec_xl_be (disp
, data_ssi
);
404 #ifdef __BIG_ENDIAN__
405 vec_ssi_expected2
= (vector
signed short){11, 12, 13, 14, 15, 16, 17, 18};
407 vec_ssi_expected2
= (vector
signed short){18, 17, 16, 15, 14, 13, 12, 11};
410 vec_usi_result1
= vec_xl_be (zero
, data_usi
);
412 #ifdef __BIG_ENDIAN__
413 vec_usi_expected1
= (vector
unsigned short){11, 12, 13, 14, 15, 16, 17, 18};
415 vec_usi_expected1
= (vector
unsigned short){18, 17, 16, 15, 14, 13, 12, 11};
419 vec_usi_result2
= vec_xl_be (disp
, data_usi
);
421 #ifdef __BIG_ENDIAN__
422 vec_usi_expected2
= (vector
unsigned short){12, 13, 14, 15, 16, 17, 18, 19};
424 vec_usi_expected2
= (vector
unsigned short){19, 18, 17, 16, 15, 14, 13, 12};
427 for (i
= 0; i
< 8; i
++)
429 if (vec_ssi_result1
[i
] != vec_ssi_expected1
[i
])
431 printf("Error: vec_xl_be(), vec_ssi_result1[%d] = %d; vec_ssi_expected1[%d] = %d\n",
432 i
, vec_ssi_result1
[i
], i
, vec_ssi_expected1
[i
]);
437 if (vec_ssi_result2
[i
] != vec_ssi_expected2
[i
])
439 printf("Error: vec_xl_be(), vec_ssi_result2[%d] = %d; vec_ssi_expected2[%d] = %d\n",
440 i
, vec_ssi_result2
[i
], i
, vec_ssi_expected2
[i
]);
445 if (vec_usi_result1
[i
] != vec_usi_expected1
[i
])
447 printf("Error: vec_xl_be(), vec_usi_result1[%d] = %d; vec_usi_expected1[%d] = %d\n",
448 i
, vec_usi_result1
[i
], i
, vec_usi_expected1
[i
]);
453 if (vec_usi_result2
[i
] != vec_usi_expected2
[i
])
455 printf("Error: vec_xl_be(), vec_usi_result2[%d] = %d; vec_usi_expected2[%d] = %d\n",
456 i
, vec_usi_result2
[i
], i
, vec_usi_expected2
[i
]);
462 vec_si_result1
= vec_xl_be (zero
, data_si
);
464 #ifdef __BIG_ENDIAN__
465 vec_si_expected1
= (vector
int){100, 101, 102, 103};
467 vec_si_expected1
= (vector
int){103, 102, 101, 100};
471 vec_si_result2
= vec_xl_be (disp
, data_si
);
473 #ifdef __BIG_ENDIAN__
474 vec_si_expected2
= (vector
int){101, 102, 103, 104};
476 vec_si_expected2
= (vector
int){104, 103, 102, 101};
479 vec_ui_result1
= vec_xl_be (zero
, data_ui
);
481 #ifdef __BIG_ENDIAN__
482 vec_ui_expected1
= (vector
unsigned int){101, 102, 103, 104};
484 vec_ui_expected1
= (vector
unsigned int){104, 103, 102, 101};
488 vec_ui_result2
= vec_xl_be (disp
, data_ui
);
490 #ifdef __BIG_ENDIAN__
491 vec_ui_expected2
= (vector
unsigned int){102, 103, 104, 105};
493 vec_ui_expected2
= (vector
unsigned int){105, 104, 103, 102};
497 for (i
= 0; i
< 4; i
++)
499 if (vec_si_result1
[i
] != vec_si_expected1
[i
])
501 printf("Error: vec_xl_be(), vec_si_result1[%d] = %d; vec_si_expected1[%d] = %d\n",
502 i
, vec_si_result1
[i
], i
, vec_si_expected1
[i
]);
507 if (vec_si_result2
[i
] != vec_si_expected2
[i
])
509 printf("Error: vec_xl_be(), vec_si_result2[%d] = %d; vec_si_expected2[%d] = %d\n",
510 i
, vec_si_result2
[i
], i
, vec_si_expected2
[i
]);
515 if (vec_ui_result1
[i
] != vec_ui_expected1
[i
])
517 printf("Error: vec_xl_be(), vec_ui_result1[%d] = %d; vec_ui_expected1[%d] = %d\n",
518 i
, vec_ui_result1
[i
], i
, vec_ui_expected1
[i
]);
523 if (vec_ui_result2
[i
] != vec_ui_expected2
[i
])
525 printf("Error: vec_xl_be(), vec_ui_result2[%d] = %d; vec_ui_expected2[%d] = %d\n",
526 i
, vec_ui_result2
[i
], i
, vec_ui_expected2
[i
]);
532 vec_sll_result1
= vec_xl_be (zero
, data_sll
);
534 #ifdef __BIG_ENDIAN__
535 vec_sll_expected1
= (vector
signed long long){1000, 1001};
537 vec_sll_expected1
= (vector
signed long long){1001, 1000};
541 vec_sll_result2
= vec_xl_be (disp
, data_sll
);
543 #ifdef __BIG_ENDIAN__
544 vec_sll_expected2
= (vector
signed long long){1001, 1002};
546 vec_sll_expected2
= (vector
signed long long){1002, 1001};
549 vec_ull_result1
= vec_xl_be (zero
, data_ull
);
551 #ifdef __BIG_ENDIAN__
552 vec_ull_expected1
= (vector
unsigned long long){1001, 1002};
554 vec_ull_expected1
= (vector
unsigned long long){1002, 1001};
558 vec_ull_result2
= vec_xl_be (disp
, data_ull
);
560 #ifdef __BIG_ENDIAN__
561 vec_ull_expected2
= (vector
unsigned long long){1002, 1003};
563 vec_ull_expected2
= (vector
unsigned long long){1003, 1002};
567 for (i
= 0; i
< 2; i
++)
569 if (vec_sll_result1
[i
] != vec_sll_expected1
[i
])
571 printf("Error: vec_xl_be(), vec_sll_result1[%d] = %lld; vec_sll_expected1[%d] = %d\n",
572 i
, vec_sll_result1
[i
], i
, vec_sll_expected1
[i
]);
577 if (vec_sll_result2
[i
] != vec_sll_expected2
[i
])
579 printf("Error: vec_xl_be(), vec_sll_result2[%d] = %lld; vec_sll_expected2[%d] = %d\n",
580 i
, vec_sll_result2
[i
], i
, vec_sll_expected2
[i
]);
585 if (vec_ull_result1
[i
] != vec_ull_expected1
[i
])
587 printf("Error: vec_xl_be(), vec_ull_result1[%d] = %lld; vec_ull_expected1[%d] = %d\n",
588 i
, vec_ull_result1
[i
], i
, vec_ull_expected1
[i
]);
593 if (vec_ull_result2
[i
] != vec_ull_expected2
[i
])
595 printf("Error: vec_xl_be(), vec_ull_result2[%d] = %lld; vec_ull_expected2[%d] = %d\n",
596 i
, vec_ull_result2
[i
], i
, vec_sll_expected2
[i
]);
602 vec_f_result1
= vec_xl_be (zero
, data_f
);
604 #ifdef __BIG_ENDIAN__
605 vec_f_expected1
= (vector
float){100000.0, 100001.0, 100002.0, 100003.0};
607 vec_f_expected1
= (vector
float){100003.0, 100002.0, 100001.0, 100000.0};
611 vec_f_result2
= vec_xl_be (disp
, data_f
);
613 #ifdef __BIG_ENDIAN__
614 vec_f_expected2
= (vector
float){100001.0, 100002.0, 100003.0, 100004.0};
616 vec_f_expected2
= (vector
float){100004.0, 100003.0, 100002.0, 100001.0};
619 for (i
= 0; i
< 4; i
++)
621 if (vec_f_result1
[i
] != vec_f_expected1
[i
])
623 printf("Error: vec_xl_be(), vec_f_result1[%d] = %f; vec_f_expected1[%d] = %f\n",
624 i
, vec_f_result1
[i
], i
, vec_f_expected1
[i
]);
629 if (vec_f_result2
[i
] != vec_f_expected2
[i
])
631 printf("Error: vec_xl_be(), vec_f_result2[%d] = %f; vec_f_expected2[%d] = %f\n",
632 i
, vec_f_result2
[i
], i
, vec_f_expected2
[i
]);
638 vec_d_result1
= vec_xl_be (zero
, data_d
);
640 #ifdef __BIG_ENDIAN__
641 vec_d_expected1
= (vector
double){1000000.0, 1000001.0};
643 vec_d_expected1
= (vector
double){1000001.0, 1000000.0};
647 vec_d_result2
= vec_xl_be (disp
, data_d
);
649 #ifdef __BIG_ENDIAN__
650 vec_d_expected2
= (vector
double){1000001.0, 1000002.0};
652 vec_d_expected2
= (vector
double){1000002.0, 1000001.0};
655 for (i
= 0; i
< 2; i
++)
657 if (vec_d_result1
[i
] != vec_d_expected1
[i
])
659 printf("Error: vec_xl_be(), vec_d_result2[%d] = %f; vec_d_expected2[%d] = %f\n",
660 i
, vec_d_result2
[i
], i
, vec_d_expected2
[i
]);
665 if (vec_d_result2
[i
] != vec_d_expected2
[i
])
667 printf("Error: vec_xl_be(), vec_d_result2[%d] = %f; vec_d_expected2[%d] = %f\n",
668 i
, vec_d_result2
[i
], i
, vec_d_expected2
[i
]);