1 /* PR target/85918 */
2 /* { dg-do run } */
3 /* { dg-require-effective-target avx512dq } */
4 /* { dg-require-effective-target avx512vl } */
5 /* { dg-options "-O3 -mavx512dq -mavx512vl -mprefer-vector-width=512 -fno-vect-cost-model" } */
6
7 #define AVX512DQ
8 #define AVX512VL
9 #define DO_TEST avx512dqvl_test
10
11 static void avx512dqvl_test (void);
12
13 #include "avx512-check.h"
14
15 #define N 16
16
17 long long ll[N] __attribute__((aligned (64)));
18 unsigned long long ull[N] __attribute__((aligned (64)));
19 float f[N] __attribute__((aligned (64)));
20 double d[N] __attribute__((aligned (64)));
21
22 __attribute__((noipa)) void
ll2d1(void)23 ll2d1 (void)
24 {
25 int i;
26
27 for (i = 0; i < 4; i++)
28 d[i] = ll[i];
29 }
30
31 __attribute__((noipa)) void
ull2d1(void)32 ull2d1 (void)
33 {
34 int i;
35
36 for (i = 0; i < 4; i++)
37 d[i] = ull[i];
38 }
39
40 __attribute__((noipa)) void
d2ll1(void)41 d2ll1 (void)
42 {
43 int i;
44
45 for (i = 0; i < 4; i++)
46 ll[i] = d[i];
47 }
48
49 __attribute__((noipa)) void
d2ull1(void)50 d2ull1 (void)
51 {
52 int i;
53
54 for (i = 0; i < 4; i++)
55 ull[i] = d[i];
56 }
57
58 __attribute__((noipa)) void
ll2f1(void)59 ll2f1 (void)
60 {
61 int i;
62
63 for (i = 0; i < 4; i++)
64 f[i] = ll[i];
65 }
66
67 __attribute__((noipa)) void
ull2f1(void)68 ull2f1 (void)
69 {
70 int i;
71
72 for (i = 0; i < 4; i++)
73 f[i] = ull[i];
74 }
75
76 __attribute__((noipa)) void
f2ll1(void)77 f2ll1 (void)
78 {
79 int i;
80
81 for (i = 0; i < 4; i++)
82 ll[i] = f[i];
83 }
84
85 __attribute__((noipa)) void
f2ull1(void)86 f2ull1 (void)
87 {
88 int i;
89
90 for (i = 0; i < 4; i++)
91 ull[i] = f[i];
92 }
93
94 __attribute__((noipa)) void
ll2d2(void)95 ll2d2 (void)
96 {
97 int i;
98
99 for (i = 0; i < 8; i++)
100 d[i] = ll[i];
101 }
102
103 __attribute__((noipa)) void
ull2d2(void)104 ull2d2 (void)
105 {
106 int i;
107
108 for (i = 0; i < 8; i++)
109 d[i] = ull[i];
110 }
111
112 __attribute__((noipa)) void
d2ll2(void)113 d2ll2 (void)
114 {
115 int i;
116
117 for (i = 0; i < 8; i++)
118 ll[i] = d[i];
119 }
120
121 __attribute__((noipa)) void
d2ull2(void)122 d2ull2 (void)
123 {
124 int i;
125
126 for (i = 0; i < 8; i++)
127 ull[i] = d[i];
128 }
129
130 __attribute__((noipa)) void
ll2f2(void)131 ll2f2 (void)
132 {
133 int i;
134
135 for (i = 0; i < 8; i++)
136 f[i] = ll[i];
137 }
138
139 __attribute__((noipa)) void
ull2f2(void)140 ull2f2 (void)
141 {
142 int i;
143
144 for (i = 0; i < 8; i++)
145 f[i] = ull[i];
146 }
147
148 __attribute__((noipa)) void
f2ll2(void)149 f2ll2 (void)
150 {
151 int i;
152
153 for (i = 0; i < 8; i++)
154 ll[i] = f[i];
155 }
156
157 __attribute__((noipa)) void
f2ull2(void)158 f2ull2 (void)
159 {
160 int i;
161
162 for (i = 0; i < 8; i++)
163 ull[i] = f[i];
164 }
165
166 __attribute__((noipa)) void
ll2d3(void)167 ll2d3 (void)
168 {
169 int i;
170
171 for (i = 0; i < 16; i++)
172 d[i] = ll[i];
173 }
174
175 __attribute__((noipa)) void
ull2d3(void)176 ull2d3 (void)
177 {
178 int i;
179
180 for (i = 0; i < 16; i++)
181 d[i] = ull[i];
182 }
183
184 __attribute__((noipa)) void
d2ll3(void)185 d2ll3 (void)
186 {
187 int i;
188
189 for (i = 0; i < 16; i++)
190 ll[i] = d[i];
191 }
192
193 __attribute__((noipa)) void
d2ull3(void)194 d2ull3 (void)
195 {
196 int i;
197
198 for (i = 0; i < 16; i++)
199 ull[i] = d[i];
200 }
201
202 __attribute__((noipa)) void
ll2f3(void)203 ll2f3 (void)
204 {
205 int i;
206
207 for (i = 0; i < 16; i++)
208 f[i] = ll[i];
209 }
210
211 __attribute__((noipa)) void
ull2f3(void)212 ull2f3 (void)
213 {
214 int i;
215
216 for (i = 0; i < 16; i++)
217 f[i] = ull[i];
218 }
219
220 __attribute__((noipa)) void
f2ll3(void)221 f2ll3 (void)
222 {
223 int i;
224
225 for (i = 0; i < 16; i++)
226 ll[i] = f[i];
227 }
228
229 __attribute__((noipa)) void
f2ull3(void)230 f2ull3 (void)
231 {
232 int i;
233
234 for (i = 0; i < 16; i++)
235 ull[i] = f[i];
236 }
237
238 unsigned long long ullt[] = {
239 13835058055282163712ULL, 9223653511831486464ULL, 9218868437227405312ULL,
240 1ULL, 9305281255077576704ULL, 1191936ULL, 18446462598732840960ULL, 0ULL,
241 9223372036854775808ULL, 4611686018427387904ULL, 2305843009213693952ULL,
242 9ULL, 9223653511831486464ULL, 0ULL, 65536ULL, 131071ULL
243 };
244 float uft[] = {
245 13835058055282163712.0f, 9223653511831486464.0f, 9218868437227405312.0f,
246 1.0f, 9305281255077576704.0f, 1191936.0f, 18446462598732840960.0f, 0.0f,
247 9223372036854775808.0f, 4611686018427387904.0f, 2305843009213693952.0f,
248 9.0f, 9223653511831486464.0f, 0.0f, 65536.0f, 131071.0f
249 };
250 long long llt[] = {
251 9223090561878065152LL, -9223372036854775807LL - 1, -9223090561878065152LL,
252 -4LL, -8074672656898588672LL, 8074672656898588672LL, 29LL, -15LL,
253 7574773098260463616LL, -7579276697887834112LL, -8615667562136469504LL,
254 148LL, -255LL, 9151595917793558528LL, -9218868437227405312LL, 9LL
255 };
256 float ft[] = {
257 9223090561878065152.0f, -9223372036854775808.0f, -9223090561878065152.0f,
258 -4.0f, -8074672656898588672.0f, 8074672656898588672.0f, 29.0f, -15.0f,
259 7574773098260463616.0f, -7579276697887834112.0f, -8615667562136469504.0f,
260 148.0f, -255.0f, 9151595917793558528.0f, -9218868437227405312.0f, 9.0f
261 };
262
263 static void
avx512dqvl_test(void)264 avx512dqvl_test (void)
265 {
266 int i;
267 for (i = 0; i < 4; i++)
268 {
269 ll[i] = llt[i];
270 ull[i] = ullt[i];
271 }
272 ll2d1 ();
273 for (i = 0; i < 4; i++)
274 if (d[i] != ft[i])
275 abort ();
276 ull2d1 ();
277 for (i = 0; i < 4; i++)
278 if (d[i] != uft[i])
279 abort ();
280 else
281 d[i] = ft[i + 4];
282 d2ll1 ();
283 for (i = 0; i < 4; i++)
284 if (ll[i] != llt[i + 4])
285 abort ();
286 else
287 d[i] = uft[i + 4];
288 d2ull1 ();
289 for (i = 0; i < 4; i++)
290 if (ull[i] != ullt[i + 4])
291 abort ();
292 else
293 {
294 ll[i] = llt[i + 8];
295 ull[i] = ullt[i + 8];
296 }
297 ll2f1 ();
298 for (i = 0; i < 4; i++)
299 if (f[i] != ft[i + 8])
300 abort ();
301 ull2f1 ();
302 for (i = 0; i < 4; i++)
303 if (f[i] != uft[i + 8])
304 abort ();
305 else
306 f[i] = ft[i + 12];
307 f2ll1 ();
308 for (i = 0; i < 4; i++)
309 if (ll[i] != llt[i + 12])
310 abort ();
311 else
312 f[i] = uft[i + 12];
313 f2ull1 ();
314 for (i = 0; i < 4; i++)
315 if (ull[i] != ullt[i + 12])
316 abort ();
317 for (i = 0; i < 8; i++)
318 {
319 ll[i] = llt[i];
320 ull[i] = ullt[i];
321 }
322 ll2d2 ();
323 for (i = 0; i < 8; i++)
324 if (d[i] != ft[i])
325 abort ();
326 ull2d2 ();
327 for (i = 0; i < 8; i++)
328 if (d[i] != uft[i])
329 abort ();
330 else
331 {
332 d[i] = ft[i];
333 ll[i] = 1234567LL;
334 ull[i] = 7654321ULL;
335 }
336 d2ll2 ();
337 for (i = 0; i < 8; i++)
338 if (ll[i] != llt[i])
339 abort ();
340 else
341 d[i] = uft[i];
342 d2ull2 ();
343 for (i = 0; i < 8; i++)
344 if (ull[i] != ullt[i])
345 abort ();
346 else
347 {
348 ll[i] = llt[i + 8];
349 ull[i] = ullt[i + 8];
350 }
351 ll2f2 ();
352 for (i = 0; i < 8; i++)
353 if (f[i] != ft[i + 8])
354 abort ();
355 ull2f2 ();
356 for (i = 0; i < 8; i++)
357 if (f[i] != uft[i + 8])
358 abort ();
359 else
360 {
361 f[i] = ft[i + 8];
362 ll[i] = 1234567LL;
363 ull[i] = 7654321ULL;
364 }
365 f2ll2 ();
366 for (i = 0; i < 8; i++)
367 if (ll[i] != llt[i + 8])
368 abort ();
369 else
370 f[i] = uft[i + 8];
371 f2ull2 ();
372 for (i = 0; i < 8; i++)
373 if (ull[i] != ullt[i + 8])
374 abort ();
375 for (i = 0; i < 16; i++)
376 {
377 ll[i] = llt[i];
378 ull[i] = ullt[i];
379 }
380 ll2d3 ();
381 for (i = 0; i < 16; i++)
382 if (d[i] != ft[i])
383 abort ();
384 ull2d3 ();
385 for (i = 0; i < 16; i++)
386 if (d[i] != uft[i])
387 abort ();
388 else
389 {
390 d[i] = ft[i];
391 ll[i] = 1234567LL;
392 ull[i] = 7654321ULL;
393 }
394 d2ll3 ();
395 for (i = 0; i < 16; i++)
396 if (ll[i] != llt[i])
397 abort ();
398 else
399 d[i] = uft[i];
400 d2ull3 ();
401 for (i = 0; i < 16; i++)
402 if (ull[i] != ullt[i])
403 abort ();
404 else
405 {
406 ll[i] = llt[i];
407 ull[i] = ullt[i];
408 f[i] = 3.0f;
409 d[i] = 4.0;
410 }
411 ll2f3 ();
412 for (i = 0; i < 16; i++)
413 if (f[i] != ft[i])
414 abort ();
415 ull2f3 ();
416 for (i = 0; i < 16; i++)
417 if (f[i] != uft[i])
418 abort ();
419 else
420 {
421 f[i] = ft[i];
422 ll[i] = 1234567LL;
423 ull[i] = 7654321ULL;
424 }
425 f2ll3 ();
426 for (i = 0; i < 16; i++)
427 if (ll[i] != llt[i])
428 abort ();
429 else
430 f[i] = uft[i];
431 f2ull3 ();
432 for (i = 0; i < 16; i++)
433 if (ull[i] != ullt[i])
434 abort ();
435 }
436