1 /* { dg-do run } */
2 /* { dg-require-effective-target int128 } */
3 /* { dg-require-effective-target p8vector_hw } */
4 /* { dg-options "-mpower8-vector" } */
5 
6 #include <inttypes.h>
7 #include <altivec.h> // vector
8 
9 #ifdef DEBUG
10 #include <stdio.h>
11 #endif
12 
13 void abort (void);
14 
main()15 int main() {
16   int i;
17   __uint128_t data_u128[100];
18   __int128_t data_128[100];
19 
20   vector __int128_t vec_128_expected1, vec_128_result1;
21   vector __uint128_t vec_u128_expected1, vec_u128_result1;
22   signed long long zero = (signed long long) 0;
23 
24   for (i = 0; i < 100; i++)
25     {
26       data_128[i] = i + 12800000;
27       data_u128[i] = i + 12800001;
28     }
29 
30   /* vec_xl() tests */
31 
32   vec_128_expected1 = (vector __int128_t){12800000};
33   vec_128_result1 = vec_xl (zero, data_128);
34 
35   if (vec_128_expected1[0] != vec_128_result1[0])
36     {
37 #ifdef DEBUG
38 	printf("Error: vec_xl(), vec_128_result1[0] = %lld %llu; ",
39 	       vec_128_result1[0] >> 64,
40 	       vec_128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
41 	printf("vec_128_expected1[0] = %lld %llu\n",
42 	       vec_128_expected1[0] >> 64,
43 	       vec_128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
44 #else
45 	abort ();
46 #endif
47     }
48 
49   vec_u128_result1 = vec_xl (zero, data_u128);
50   vec_u128_expected1 = (vector __uint128_t){12800001};
51   if (vec_u128_expected1[0] != vec_u128_result1[0])
52     {
53 #ifdef DEBUG
54 	printf("Error: vec_xl(), vec_u128_result1[0] = %lld; ",
55 	       vec_u128_result1[0] >> 64,
56 	       vec_u128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
57 	printf("vec_u128_expected1[0] = %lld\n",
58 	       vec_u128_expected1[0] >> 64,
59 	       vec_u128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
60 #else
61 	abort ();
62 #endif
63     }
64 
65   /* vec_xl_be() tests */
66 
67   vec_128_result1 = vec_xl_be (zero, data_128);
68 #ifdef __BIG_ENDIAN__
69   vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
70 #else
71   vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
72 #endif
73 
74   if (vec_128_expected1[0] != vec_128_result1[0])
75     {
76 #ifdef DEBUG
77 	printf("Error: vec_xl_be(), vec_128_result1[0] = %llu %llu;",
78 	       vec_128_result1[0] >> 64,
79 	       vec_128_result1[0] & 0xFFFFFFFFFFFFFFFF);
80 	printf(" vec_128_expected1[0] = %llu %llu\n",
81 	       vec_128_expected1[0] >> 64,
82 	       vec_128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
83 #else
84       abort ();
85 #endif
86     }
87 
88 #ifdef __BIG_ENDIAN__
89   vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
90 #else
91   vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
92 #endif
93 
94   vec_u128_result1 = vec_xl_be (zero, data_u128);
95 
96   if (vec_u128_expected1[0] != vec_u128_result1[0])
97     {
98 #ifdef DEBUG
99 	printf("Error: vec_xl_be(), vec_u128_result1[0] = %llu %llu;",
100 	       vec_u128_result1[0] >> 64,
101 	       vec_u128_result1[0] & 0xFFFFFFFFFFFFFFFF);
102 	printf(" vec_u128_expected1[0] = %llu %llu\n",
103 	       vec_u128_expected1[0] >> 64,
104 	       vec_u128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
105 #else
106       abort ();
107 #endif
108     }
109 }
110