c++: normalizing ttp constraints [PR115656]
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / builtins-mergew-mergow.c
blobe17f20092de556b4f58d5cdce74abc345ea47c1a
1 /* { dg-do run } */
2 /* { dg-require-effective-target p8vector_hw } */
3 /* { dg-options "-mvsx" } */
4 /* { dg-additional-options "-mdejagnu-cpu=power8" { target { ! has_arch_pwr8 } } } */
6 #include <altivec.h> // vector
7 #include <stdlib.h>
9 #ifdef DEBUG
10 #include <stdio.h>
11 #endif
13 void abort (void);
15 int main() {
16 vector signed int vec_si_arg1, vec_si_arg2;
17 vector signed int vec_si_expected, vec_si_result;
18 vector unsigned int vec_ui_arg1, vec_ui_arg2;
19 vector unsigned int vec_ui_expected, vec_ui_result;
20 vector signed long long vec_sll_arg1, vec_sll_arg2;
21 vector signed long long vec_sll_expected, vec_sll_result;
22 vector unsigned long long vec_ull_arg1, vec_ull_arg2;
23 vector unsigned long long vec_ull_expected, vec_ull_result;
24 vector bool long long vec_bll_arg1, vec_bll_arg2;
25 vector bool long long vec_bll_expected, vec_bll_result;
26 vector float vec_f_arg1, vec_f_arg2;
27 vector float vec_f_expected, vec_f_result;
28 vector double vec_d_arg1, vec_d_arg2;
29 vector double vec_d_expected, vec_d_result;
30 int i;
31 unsigned long long int value;
33 /* Tests for vec_mergeo, Merges the odd-numbered halves of two vectors. */
34 vec_si_arg1 = (vector int){-100, -101, 102, 103};
35 vec_si_arg2 = (vector int){200, 201, 202, 203};
37 vec_si_result = vec_mergeo (vec_si_arg1, vec_si_arg2);
39 vec_si_expected = (vector int){-101, 201, 103, 203};
41 for (i = 0; i < 4; i++)
42 if (vec_si_result[i] != vec_si_expected[i])
43 #ifdef DEBUG
44 printf("ERROR vec_mergeo(): vec_si_result[%d] = %d, vec_si_expected[%d] = %d\n",
45 i, vec_si_result[i], i, vec_si_expected[i]);
46 #else
47 abort();
48 #endif
50 vec_ui_arg1 = (vector unsigned int){100, 101, 102, 103};
51 vec_ui_arg2 = (vector unsigned int){200, 201, 202, 203};
53 vec_ui_result = vec_mergeo (vec_ui_arg1, vec_ui_arg2);
55 vec_ui_expected = (vector unsigned int){101, 201, 103, 203};
57 for (i = 0; i < 4; i++)
58 if (vec_ui_result[i] != vec_ui_expected[i])
59 #ifdef DEBUG
60 printf("ERROR vec_mergeo(): vec_ui_result[%d] = %d, vec_ui_expected[%d] = %d\n",
61 i, vec_ui_result[i], i, vec_ui_expected[i]);
62 #else
63 abort();
64 #endif
66 vec_sll_arg1 = (vector long long int){-300, -301};
67 vec_sll_arg2 = (vector long long int){400, 401};
69 vec_sll_result = vec_mergeo (vec_sll_arg1, vec_sll_arg2);
71 vec_sll_expected = (vector long long int){-301, 401};
73 for (i = 0; i < 2; i++)
74 if (vec_sll_result[i] != vec_sll_expected[i])
75 #ifdef DEBUG
76 printf("ERROR vec_mergeo(): vec_sll_result[%d] = %lld, vec_sll_expected[%d] = %lld\n",
77 i, (long long int)vec_sll_result[i],
78 i, (long long int)vec_sll_expected[i]);
79 #else
80 abort();
81 #endif
83 vec_ull_arg1 = (vector unsigned long long int){500, 501};
84 vec_ull_arg2 = (vector unsigned long long int){600, 601};
86 vec_ull_result = vec_mergeo (vec_ull_arg1, vec_ull_arg2);
88 vec_ull_expected = (vector unsigned long long int){501, 601};
90 for (i = 0; i < 2; i++)
91 if (vec_ull_result[i] != vec_ull_expected[i])
92 #ifdef DEBUG
93 printf("ERROR vec_mergeo(): vec_ull_result[%d] = %lld, vec_ull_expected[%d] = %lld\n",
94 i, (unsigned long long int)vec_ull_result[i],
95 i, (unsigned long long int)vec_ull_expected[i]);
96 #else
97 abort();
98 #endif
100 vec_bll_arg1 = (vector bool long long){0, 0};
101 vec_bll_arg2 = (vector bool long long){1, 1};
103 vec_bll_result = vec_mergeo (vec_bll_arg1, vec_bll_arg2);
105 vec_bll_expected = (vector bool long long){0, 1};
107 for (i = 0; i < 2; i++)
108 if (vec_bll_result[i] != vec_bll_expected[i])
109 #ifdef DEBUG
110 printf("ERROR vec_mergeo(): vec_bll_result[%d] = %lld, vec_bll_expected[%d] = %lld\n",
111 i, vec_ull_result[i],
112 i, vec_ull_expected[i]);
113 #else
114 abort();
115 #endif
117 vec_f_arg1 = (vector float){100.0, 101.1, 102.2, 103.3};
118 vec_f_arg2 = (vector float){200.0, 201.1, 202.2, 203.3};
120 vec_f_result = vec_mergeo (vec_f_arg1, vec_f_arg2);
122 vec_f_expected = (vector float){101.1, 201.1, 103.3, 203.3};
124 for (i = 0; i < 4; i++)
125 if (vec_f_result[i] != vec_f_expected[i])
126 #ifdef DEBUG
127 printf("ERROR vec_mergeo(): vec_f_result[%d] = %f, vec_f_expected[%d] = %f\n",
128 i, vec_f_result[i], i, vec_f_expected[i]);
129 #else
130 abort();
131 #endif
133 vec_d_arg1 = (vector double){300.0, 301.1};
134 vec_d_arg2 = (vector double){400.0, 401.1};
136 vec_d_result = vec_mergeo (vec_d_arg1, vec_d_arg2);
138 vec_d_expected = (vector double){301.1, 401.1};
140 for (i = 0; i < 2; i++)
141 if (vec_d_result[i] != vec_d_expected[i])
142 #ifdef DEBUG
143 printf("ERROR vec_mergeo(): vec_d_result[%d] = %f, vec_d_expected[%d] = %f\n",
144 i, vec_d_result[i], i, vec_d_expected[i]);
145 #else
146 abort();
147 #endif
149 /* Tests for vec_mergee, Merges the even-numbered halves of two vectors. */
150 vec_si_arg1 = (vector int){-100, -101, 102, 103};
151 vec_si_arg2 = (vector int){200, 201, 202, 203};
153 vec_si_result = vec_mergee (vec_si_arg1, vec_si_arg2);
155 vec_si_expected = (vector int){-100, 200, 102, 202};
157 for (i = 0; i < 4; i++)
158 if (vec_si_result[i] != vec_si_expected[i])
159 #ifdef DEBUG
160 printf("ERROR vec_mergee(): vec_si_result[%d] = %d, vec_si_expected[%d] = %d\n",
161 i, vec_si_result[i], i, vec_si_expected[i]);
162 #else
163 abort();
164 #endif
166 vec_ui_arg1 = (vector unsigned int){100, 101, 102, 103};
167 vec_ui_arg2 = (vector unsigned int){200, 201, 202, 203};
169 vec_ui_result = vec_mergee (vec_ui_arg1, vec_ui_arg2);
171 vec_ui_expected = (vector unsigned int){100, 200, 102, 202};
173 for (i = 0; i < 4; i++)
174 if (vec_ui_result[i] != vec_ui_expected[i])
175 #ifdef DEBUG
176 printf("ERROR vec_mergee(): vec_ui_result[%d] = %d, vec_ui_expected[%d] = %d\n",
177 i, vec_ui_result[i], i, vec_ui_expected[i]);
178 #else
179 abort();
180 #endif
182 vec_sll_arg1 = (vector signed long long int){-300, -301};
183 vec_sll_arg2 = (vector signed long long int){400, 401};
185 vec_sll_result = vec_mergee (vec_sll_arg1, vec_sll_arg2);
187 vec_sll_expected = (vector signed long long int){-300, 400};
189 for (i = 0; i < 2; i++)
190 if (vec_sll_result[i] != vec_sll_expected[i])
191 #ifdef DEBUG
192 printf("ERROR vec_mergee(): vec_sll_result[%d] = %lld, vec_sll_expected[%d] = %lld\n",
193 i, (signed long long int)vec_sll_result[i],
194 i, (signed long long int)vec_sll_expected[i]);
195 #else
196 abort();
197 #endif
199 vec_ull_arg1 = (vector unsigned long long int){500, 501};
200 vec_ull_arg2 = (vector unsigned long long int){600, 601};
202 vec_ull_result = vec_mergee (vec_ull_arg1, vec_ull_arg2);
204 vec_ull_expected = (vector unsigned long long int){500, 600};
206 for (i = 0; i < 2; i++)
207 if (vec_ull_result[i] != vec_ull_expected[i])
208 #ifdef DEBUG
209 printf("ERROR vec_mergee(): vec_ull_result[%d] = %lld, vec_ull_expected[%d] = %lld\n",
210 i, (unsigned long long int)vec_ull_result[i],
211 i, (unsigned long long int)vec_ull_expected[i]);
212 #else
213 abort();
214 #endif
216 vec_bll_arg1 = (vector bool long long){0, 0};
217 vec_bll_arg2 = (vector bool long long){1, 1};
219 vec_bll_result = vec_mergee (vec_bll_arg1, vec_bll_arg2);
221 vec_bll_expected = (vector bool long long){0, 1};
223 for (i = 0; i < 2; i++)
224 if (vec_bll_result[i] != vec_bll_expected[i])
225 #ifdef DEBUG
226 printf("ERROR vec_mergee(): vec_bll_result[%d] = %lld, vec_bll_expected[%d] = %lld\n",
227 i, vec_ull_result[i],
228 i, vec_ull_expected[i]);
229 #else
230 abort();
231 #endif
233 vec_f_arg1 = (vector float){100.0, 101.1, 102.2, 103.3};
234 vec_f_arg2 = (vector float){200.0, 201.1, 202.2, 203.3};
236 vec_f_result = vec_mergee (vec_f_arg1, vec_f_arg2);
238 vec_f_expected = (vector float){100.0, 200.0, 102.2, 202.2};
240 for (i = 0; i < 4; i++)
241 if (vec_f_result[i] != vec_f_expected[i])
242 #ifdef DEBUG
243 printf("ERROR vec_mergee(): vec_f_result[%d] = %f, vec_f_expected[%d] = %f\n",
244 i, vec_f_result[i], i, vec_f_expected[i]);
245 #else
246 abort();
247 #endif
249 vec_d_arg1 = (vector double){300.0, 301.1};
250 vec_d_arg2 = (vector double){400.0, 401.1};
252 vec_d_result = vec_mergee (vec_d_arg1, vec_d_arg2);
254 vec_d_expected = (vector double){300.0, 400.0};
256 for (i = 0; i < 2; i++)
257 if (vec_d_result[i] != vec_d_expected[i])
258 #ifdef DEBUG
259 printf("ERROR vec_mergee(): vec_d_result[%d] = %f, vec_d_expected[%d] = %f\n",
260 i, vec_d_result[i], i, vec_d_expected[i]);
261 #else
262 abort();
263 #endif