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
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
;
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);
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
])
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
]);