* gcc.target/powerpc/builtins-1-be.c <vclzb>: Rename duplicate test
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / p8vector-ldst.c
blobe683d614d629de7f674ec4ecd0eb0d8ff9d0fdea
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
5 /* { dg-options "-mcpu=power8 -O2" } */
7 float
8 load_store_sf (unsigned long num,
9 const float *from_ptr,
10 float *to_ptr,
11 const unsigned long *in_mask_ptr,
12 const unsigned long *out_mask_ptr)
14 float value00 = 0.0f;
15 float value01 = 0.0f;
16 float value02 = 0.0f;
17 float value03 = 0.0f;
18 float value04 = 0.0f;
19 float value05 = 0.0f;
20 float value06 = 0.0f;
21 float value07 = 0.0f;
22 float value08 = 0.0f;
23 float value09 = 0.0f;
24 float value10 = 0.0f;
25 float value11 = 0.0f;
26 float value12 = 0.0f;
27 float value13 = 0.0f;
28 float value14 = 0.0f;
29 float value15 = 0.0f;
30 float value16 = 0.0f;
31 float value17 = 0.0f;
32 float value18 = 0.0f;
33 float value19 = 0.0f;
34 float value20 = 0.0f;
35 float value21 = 0.0f;
36 float value22 = 0.0f;
37 float value23 = 0.0f;
38 float value24 = 0.0f;
39 float value25 = 0.0f;
40 float value26 = 0.0f;
41 float value27 = 0.0f;
42 float value28 = 0.0f;
43 float value29 = 0.0f;
44 float value30 = 0.0f;
45 float value31 = 0.0f;
46 float value32 = 0.0f;
47 float value33 = 0.0f;
48 float value34 = 0.0f;
49 float value35 = 0.0f;
50 float value36 = 0.0f;
51 float value37 = 0.0f;
52 float value38 = 0.0f;
53 float value39 = 0.0f;
54 unsigned long in_mask, in_mask2;
55 unsigned long out_mask, out_mask2;
56 unsigned long i;
58 for (i = 0; i < num; i++)
60 in_mask = *in_mask_ptr++;
61 in_mask2 = *in_mask_ptr++;
62 if ((in_mask & (1L << 0)) != 0L)
63 value00 = *from_ptr++;
65 if ((in_mask & (1L << 1)) != 0L)
66 value01 = *from_ptr++;
68 if ((in_mask & (1L << 2)) != 0L)
69 value02 = *from_ptr++;
71 if ((in_mask & (1L << 3)) != 0L)
72 value03 = *from_ptr++;
74 if ((in_mask & (1L << 4)) != 0L)
75 value04 = *from_ptr++;
77 if ((in_mask & (1L << 5)) != 0L)
78 value05 = *from_ptr++;
80 if ((in_mask & (1L << 6)) != 0L)
81 value06 = *from_ptr++;
83 if ((in_mask & (1L << 7)) != 0L)
84 value07 = *from_ptr++;
86 if ((in_mask & (1L << 8)) != 0L)
87 value08 = *from_ptr++;
89 if ((in_mask & (1L << 9)) != 0L)
90 value09 = *from_ptr++;
92 if ((in_mask & (1L << 10)) != 0L)
93 value10 = *from_ptr++;
95 if ((in_mask & (1L << 11)) != 0L)
96 value11 = *from_ptr++;
98 if ((in_mask & (1L << 12)) != 0L)
99 value12 = *from_ptr++;
101 if ((in_mask & (1L << 13)) != 0L)
102 value13 = *from_ptr++;
104 if ((in_mask & (1L << 14)) != 0L)
105 value14 = *from_ptr++;
107 if ((in_mask & (1L << 15)) != 0L)
108 value15 = *from_ptr++;
110 if ((in_mask & (1L << 16)) != 0L)
111 value16 = *from_ptr++;
113 if ((in_mask & (1L << 17)) != 0L)
114 value17 = *from_ptr++;
116 if ((in_mask & (1L << 18)) != 0L)
117 value18 = *from_ptr++;
119 if ((in_mask & (1L << 19)) != 0L)
120 value19 = *from_ptr++;
122 if ((in_mask2 & (1L << 0)) != 0L)
123 value20 = *from_ptr++;
125 if ((in_mask2 & (1L << 1)) != 0L)
126 value21 = *from_ptr++;
128 if ((in_mask2 & (1L << 2)) != 0L)
129 value22 = *from_ptr++;
131 if ((in_mask2 & (1L << 3)) != 0L)
132 value23 = *from_ptr++;
134 if ((in_mask2 & (1L << 4)) != 0L)
135 value24 = *from_ptr++;
137 if ((in_mask2 & (1L << 5)) != 0L)
138 value25 = *from_ptr++;
140 if ((in_mask2 & (1L << 6)) != 0L)
141 value26 = *from_ptr++;
143 if ((in_mask2 & (1L << 7)) != 0L)
144 value27 = *from_ptr++;
146 if ((in_mask2 & (1L << 8)) != 0L)
147 value28 = *from_ptr++;
149 if ((in_mask2 & (1L << 9)) != 0L)
150 value29 = *from_ptr++;
152 if ((in_mask2 & (1L << 10)) != 0L)
153 value30 = *from_ptr++;
155 if ((in_mask2 & (1L << 11)) != 0L)
156 value31 = *from_ptr++;
158 if ((in_mask2 & (1L << 12)) != 0L)
159 value32 = *from_ptr++;
161 if ((in_mask2 & (1L << 13)) != 0L)
162 value33 = *from_ptr++;
164 if ((in_mask2 & (1L << 14)) != 0L)
165 value34 = *from_ptr++;
167 if ((in_mask2 & (1L << 15)) != 0L)
168 value35 = *from_ptr++;
170 if ((in_mask2 & (1L << 16)) != 0L)
171 value36 = *from_ptr++;
173 if ((in_mask2 & (1L << 17)) != 0L)
174 value37 = *from_ptr++;
176 if ((in_mask2 & (1L << 18)) != 0L)
177 value38 = *from_ptr++;
179 if ((in_mask2 & (1L << 19)) != 0L)
180 value39 = *from_ptr++;
182 out_mask = *out_mask_ptr++;
183 out_mask2 = *out_mask_ptr++;
184 if ((out_mask & (1L << 0)) != 0L)
185 *to_ptr++ = value00;
187 if ((out_mask & (1L << 1)) != 0L)
188 *to_ptr++ = value01;
190 if ((out_mask & (1L << 2)) != 0L)
191 *to_ptr++ = value02;
193 if ((out_mask & (1L << 3)) != 0L)
194 *to_ptr++ = value03;
196 if ((out_mask & (1L << 4)) != 0L)
197 *to_ptr++ = value04;
199 if ((out_mask & (1L << 5)) != 0L)
200 *to_ptr++ = value05;
202 if ((out_mask & (1L << 6)) != 0L)
203 *to_ptr++ = value06;
205 if ((out_mask & (1L << 7)) != 0L)
206 *to_ptr++ = value07;
208 if ((out_mask & (1L << 8)) != 0L)
209 *to_ptr++ = value08;
211 if ((out_mask & (1L << 9)) != 0L)
212 *to_ptr++ = value09;
214 if ((out_mask & (1L << 10)) != 0L)
215 *to_ptr++ = value10;
217 if ((out_mask & (1L << 11)) != 0L)
218 *to_ptr++ = value11;
220 if ((out_mask & (1L << 12)) != 0L)
221 *to_ptr++ = value12;
223 if ((out_mask & (1L << 13)) != 0L)
224 *to_ptr++ = value13;
226 if ((out_mask & (1L << 14)) != 0L)
227 *to_ptr++ = value14;
229 if ((out_mask & (1L << 15)) != 0L)
230 *to_ptr++ = value15;
232 if ((out_mask & (1L << 16)) != 0L)
233 *to_ptr++ = value16;
235 if ((out_mask & (1L << 17)) != 0L)
236 *to_ptr++ = value17;
238 if ((out_mask & (1L << 18)) != 0L)
239 *to_ptr++ = value18;
241 if ((out_mask & (1L << 19)) != 0L)
242 *to_ptr++ = value19;
244 if ((out_mask2 & (1L << 0)) != 0L)
245 *to_ptr++ = value20;
247 if ((out_mask2 & (1L << 1)) != 0L)
248 *to_ptr++ = value21;
250 if ((out_mask2 & (1L << 2)) != 0L)
251 *to_ptr++ = value22;
253 if ((out_mask2 & (1L << 3)) != 0L)
254 *to_ptr++ = value23;
256 if ((out_mask2 & (1L << 4)) != 0L)
257 *to_ptr++ = value24;
259 if ((out_mask2 & (1L << 5)) != 0L)
260 *to_ptr++ = value25;
262 if ((out_mask2 & (1L << 6)) != 0L)
263 *to_ptr++ = value26;
265 if ((out_mask2 & (1L << 7)) != 0L)
266 *to_ptr++ = value27;
268 if ((out_mask2 & (1L << 8)) != 0L)
269 *to_ptr++ = value28;
271 if ((out_mask2 & (1L << 9)) != 0L)
272 *to_ptr++ = value29;
274 if ((out_mask2 & (1L << 10)) != 0L)
275 *to_ptr++ = value30;
277 if ((out_mask2 & (1L << 11)) != 0L)
278 *to_ptr++ = value31;
280 if ((out_mask2 & (1L << 12)) != 0L)
281 *to_ptr++ = value32;
283 if ((out_mask2 & (1L << 13)) != 0L)
284 *to_ptr++ = value33;
286 if ((out_mask2 & (1L << 14)) != 0L)
287 *to_ptr++ = value34;
289 if ((out_mask2 & (1L << 15)) != 0L)
290 *to_ptr++ = value35;
292 if ((out_mask2 & (1L << 16)) != 0L)
293 *to_ptr++ = value36;
295 if ((out_mask2 & (1L << 17)) != 0L)
296 *to_ptr++ = value37;
298 if ((out_mask2 & (1L << 18)) != 0L)
299 *to_ptr++ = value38;
301 if ((out_mask2 & (1L << 19)) != 0L)
302 *to_ptr++ = value39;
305 return ( value00 + value01 + value02 + value03 + value04
306 + value05 + value06 + value07 + value08 + value09
307 + value10 + value11 + value12 + value13 + value14
308 + value15 + value16 + value17 + value18 + value19
309 + value20 + value21 + value22 + value23 + value24
310 + value25 + value26 + value27 + value28 + value29
311 + value30 + value31 + value32 + value33 + value34
312 + value35 + value36 + value37 + value38 + value39);
315 double
316 load_store_df (unsigned long num,
317 const double *from_ptr,
318 double *to_ptr,
319 const unsigned long *in_mask_ptr,
320 const unsigned long *out_mask_ptr)
322 double value00 = 0.0;
323 double value01 = 0.0;
324 double value02 = 0.0;
325 double value03 = 0.0;
326 double value04 = 0.0;
327 double value05 = 0.0;
328 double value06 = 0.0;
329 double value07 = 0.0;
330 double value08 = 0.0;
331 double value09 = 0.0;
332 double value10 = 0.0;
333 double value11 = 0.0;
334 double value12 = 0.0;
335 double value13 = 0.0;
336 double value14 = 0.0;
337 double value15 = 0.0;
338 double value16 = 0.0;
339 double value17 = 0.0;
340 double value18 = 0.0;
341 double value19 = 0.0;
342 double value20 = 0.0;
343 double value21 = 0.0;
344 double value22 = 0.0;
345 double value23 = 0.0;
346 double value24 = 0.0;
347 double value25 = 0.0;
348 double value26 = 0.0;
349 double value27 = 0.0;
350 double value28 = 0.0;
351 double value29 = 0.0;
352 double value30 = 0.0;
353 double value31 = 0.0;
354 double value32 = 0.0;
355 double value33 = 0.0;
356 double value34 = 0.0;
357 double value35 = 0.0;
358 double value36 = 0.0;
359 double value37 = 0.0;
360 double value38 = 0.0;
361 double value39 = 0.0;
362 unsigned long in_mask, in_mask2;
363 unsigned long out_mask, out_mask2;
364 unsigned long i;
366 for (i = 0; i < num; i++)
368 in_mask = *in_mask_ptr++;
369 in_mask2 = *in_mask_ptr++;
370 if ((in_mask & (1L << 0)) != 0L)
371 value00 = *from_ptr++;
373 if ((in_mask & (1L << 1)) != 0L)
374 value01 = *from_ptr++;
376 if ((in_mask & (1L << 2)) != 0L)
377 value02 = *from_ptr++;
379 if ((in_mask & (1L << 3)) != 0L)
380 value03 = *from_ptr++;
382 if ((in_mask & (1L << 4)) != 0L)
383 value04 = *from_ptr++;
385 if ((in_mask & (1L << 5)) != 0L)
386 value05 = *from_ptr++;
388 if ((in_mask & (1L << 6)) != 0L)
389 value06 = *from_ptr++;
391 if ((in_mask & (1L << 7)) != 0L)
392 value07 = *from_ptr++;
394 if ((in_mask & (1L << 8)) != 0L)
395 value08 = *from_ptr++;
397 if ((in_mask & (1L << 9)) != 0L)
398 value09 = *from_ptr++;
400 if ((in_mask & (1L << 10)) != 0L)
401 value10 = *from_ptr++;
403 if ((in_mask & (1L << 11)) != 0L)
404 value11 = *from_ptr++;
406 if ((in_mask & (1L << 12)) != 0L)
407 value12 = *from_ptr++;
409 if ((in_mask & (1L << 13)) != 0L)
410 value13 = *from_ptr++;
412 if ((in_mask & (1L << 14)) != 0L)
413 value14 = *from_ptr++;
415 if ((in_mask & (1L << 15)) != 0L)
416 value15 = *from_ptr++;
418 if ((in_mask & (1L << 16)) != 0L)
419 value16 = *from_ptr++;
421 if ((in_mask & (1L << 17)) != 0L)
422 value17 = *from_ptr++;
424 if ((in_mask & (1L << 18)) != 0L)
425 value18 = *from_ptr++;
427 if ((in_mask & (1L << 19)) != 0L)
428 value19 = *from_ptr++;
430 if ((in_mask2 & (1L << 0)) != 0L)
431 value20 = *from_ptr++;
433 if ((in_mask2 & (1L << 1)) != 0L)
434 value21 = *from_ptr++;
436 if ((in_mask2 & (1L << 2)) != 0L)
437 value22 = *from_ptr++;
439 if ((in_mask2 & (1L << 3)) != 0L)
440 value23 = *from_ptr++;
442 if ((in_mask2 & (1L << 4)) != 0L)
443 value24 = *from_ptr++;
445 if ((in_mask2 & (1L << 5)) != 0L)
446 value25 = *from_ptr++;
448 if ((in_mask2 & (1L << 6)) != 0L)
449 value26 = *from_ptr++;
451 if ((in_mask2 & (1L << 7)) != 0L)
452 value27 = *from_ptr++;
454 if ((in_mask2 & (1L << 8)) != 0L)
455 value28 = *from_ptr++;
457 if ((in_mask2 & (1L << 9)) != 0L)
458 value29 = *from_ptr++;
460 if ((in_mask2 & (1L << 10)) != 0L)
461 value30 = *from_ptr++;
463 if ((in_mask2 & (1L << 11)) != 0L)
464 value31 = *from_ptr++;
466 if ((in_mask2 & (1L << 12)) != 0L)
467 value32 = *from_ptr++;
469 if ((in_mask2 & (1L << 13)) != 0L)
470 value33 = *from_ptr++;
472 if ((in_mask2 & (1L << 14)) != 0L)
473 value34 = *from_ptr++;
475 if ((in_mask2 & (1L << 15)) != 0L)
476 value35 = *from_ptr++;
478 if ((in_mask2 & (1L << 16)) != 0L)
479 value36 = *from_ptr++;
481 if ((in_mask2 & (1L << 17)) != 0L)
482 value37 = *from_ptr++;
484 if ((in_mask2 & (1L << 18)) != 0L)
485 value38 = *from_ptr++;
487 if ((in_mask2 & (1L << 19)) != 0L)
488 value39 = *from_ptr++;
490 out_mask = *out_mask_ptr++;
491 out_mask2 = *out_mask_ptr++;
492 if ((out_mask & (1L << 0)) != 0L)
493 *to_ptr++ = value00;
495 if ((out_mask & (1L << 1)) != 0L)
496 *to_ptr++ = value01;
498 if ((out_mask & (1L << 2)) != 0L)
499 *to_ptr++ = value02;
501 if ((out_mask & (1L << 3)) != 0L)
502 *to_ptr++ = value03;
504 if ((out_mask & (1L << 4)) != 0L)
505 *to_ptr++ = value04;
507 if ((out_mask & (1L << 5)) != 0L)
508 *to_ptr++ = value05;
510 if ((out_mask & (1L << 6)) != 0L)
511 *to_ptr++ = value06;
513 if ((out_mask & (1L << 7)) != 0L)
514 *to_ptr++ = value07;
516 if ((out_mask & (1L << 8)) != 0L)
517 *to_ptr++ = value08;
519 if ((out_mask & (1L << 9)) != 0L)
520 *to_ptr++ = value09;
522 if ((out_mask & (1L << 10)) != 0L)
523 *to_ptr++ = value10;
525 if ((out_mask & (1L << 11)) != 0L)
526 *to_ptr++ = value11;
528 if ((out_mask & (1L << 12)) != 0L)
529 *to_ptr++ = value12;
531 if ((out_mask & (1L << 13)) != 0L)
532 *to_ptr++ = value13;
534 if ((out_mask & (1L << 14)) != 0L)
535 *to_ptr++ = value14;
537 if ((out_mask & (1L << 15)) != 0L)
538 *to_ptr++ = value15;
540 if ((out_mask & (1L << 16)) != 0L)
541 *to_ptr++ = value16;
543 if ((out_mask & (1L << 17)) != 0L)
544 *to_ptr++ = value17;
546 if ((out_mask & (1L << 18)) != 0L)
547 *to_ptr++ = value18;
549 if ((out_mask & (1L << 19)) != 0L)
550 *to_ptr++ = value19;
552 if ((out_mask2 & (1L << 0)) != 0L)
553 *to_ptr++ = value20;
555 if ((out_mask2 & (1L << 1)) != 0L)
556 *to_ptr++ = value21;
558 if ((out_mask2 & (1L << 2)) != 0L)
559 *to_ptr++ = value22;
561 if ((out_mask2 & (1L << 3)) != 0L)
562 *to_ptr++ = value23;
564 if ((out_mask2 & (1L << 4)) != 0L)
565 *to_ptr++ = value24;
567 if ((out_mask2 & (1L << 5)) != 0L)
568 *to_ptr++ = value25;
570 if ((out_mask2 & (1L << 6)) != 0L)
571 *to_ptr++ = value26;
573 if ((out_mask2 & (1L << 7)) != 0L)
574 *to_ptr++ = value27;
576 if ((out_mask2 & (1L << 8)) != 0L)
577 *to_ptr++ = value28;
579 if ((out_mask2 & (1L << 9)) != 0L)
580 *to_ptr++ = value29;
582 if ((out_mask2 & (1L << 10)) != 0L)
583 *to_ptr++ = value30;
585 if ((out_mask2 & (1L << 11)) != 0L)
586 *to_ptr++ = value31;
588 if ((out_mask2 & (1L << 12)) != 0L)
589 *to_ptr++ = value32;
591 if ((out_mask2 & (1L << 13)) != 0L)
592 *to_ptr++ = value33;
594 if ((out_mask2 & (1L << 14)) != 0L)
595 *to_ptr++ = value34;
597 if ((out_mask2 & (1L << 15)) != 0L)
598 *to_ptr++ = value35;
600 if ((out_mask2 & (1L << 16)) != 0L)
601 *to_ptr++ = value36;
603 if ((out_mask2 & (1L << 17)) != 0L)
604 *to_ptr++ = value37;
606 if ((out_mask2 & (1L << 18)) != 0L)
607 *to_ptr++ = value38;
609 if ((out_mask2 & (1L << 19)) != 0L)
610 *to_ptr++ = value39;
613 return ( value00 + value01 + value02 + value03 + value04
614 + value05 + value06 + value07 + value08 + value09
615 + value10 + value11 + value12 + value13 + value14
616 + value15 + value16 + value17 + value18 + value19
617 + value20 + value21 + value22 + value23 + value24
618 + value25 + value26 + value27 + value28 + value29
619 + value30 + value31 + value32 + value33 + value34
620 + value35 + value36 + value37 + value38 + value39);
623 /* { dg-final { scan-assembler "lxsspx" } } */
624 /* { dg-final { scan-assembler "lxsdx" } } */
625 /* { dg-final { scan-assembler "stxsspx" } } */
626 /* { dg-final { scan-assembler "stxsdx" } } */
627 /* { dg-final { scan-assembler "xsaddsp" } } */
628 /* { dg-final { scan-assembler "xsadddp" } } */