1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-options "-mdejagnu-cpu=power8 -O2" } */
5 
6 float
load_store_sf(unsigned long num,const float * from_ptr,float * to_ptr,const unsigned long * in_mask_ptr,const unsigned long * out_mask_ptr)7 load_store_sf (unsigned long num,
8 	       const float *from_ptr,
9 	       float *to_ptr,
10 	       const unsigned long *in_mask_ptr,
11 	       const unsigned long *out_mask_ptr)
12 {
13   float value00	= 0.0f;
14   float value01	= 0.0f;
15   float value02	= 0.0f;
16   float value03	= 0.0f;
17   float value04	= 0.0f;
18   float value05	= 0.0f;
19   float value06	= 0.0f;
20   float value07	= 0.0f;
21   float value08	= 0.0f;
22   float value09	= 0.0f;
23   float value10	= 0.0f;
24   float value11	= 0.0f;
25   float value12	= 0.0f;
26   float value13	= 0.0f;
27   float value14	= 0.0f;
28   float value15	= 0.0f;
29   float value16	= 0.0f;
30   float value17	= 0.0f;
31   float value18	= 0.0f;
32   float value19	= 0.0f;
33   float value20	= 0.0f;
34   float value21	= 0.0f;
35   float value22	= 0.0f;
36   float value23	= 0.0f;
37   float value24	= 0.0f;
38   float value25	= 0.0f;
39   float value26	= 0.0f;
40   float value27	= 0.0f;
41   float value28	= 0.0f;
42   float value29	= 0.0f;
43   float value30	= 0.0f;
44   float value31	= 0.0f;
45   float value32	= 0.0f;
46   float value33	= 0.0f;
47   float value34	= 0.0f;
48   float value35	= 0.0f;
49   float value36	= 0.0f;
50   float value37	= 0.0f;
51   float value38	= 0.0f;
52   float value39	= 0.0f;
53   unsigned long in_mask, in_mask2;
54   unsigned long out_mask, out_mask2;
55   unsigned long i;
56 
57   for (i = 0; i < num; i++)
58     {
59       in_mask = *in_mask_ptr++;
60       in_mask2 = *in_mask_ptr++;
61       if ((in_mask & (1L <<  0)) != 0L)
62 	value00 = *from_ptr++;
63 
64       if ((in_mask & (1L <<  1)) != 0L)
65 	value01 = *from_ptr++;
66 
67       if ((in_mask & (1L <<  2)) != 0L)
68 	value02 = *from_ptr++;
69 
70       if ((in_mask & (1L <<  3)) != 0L)
71 	value03 = *from_ptr++;
72 
73       if ((in_mask & (1L <<  4)) != 0L)
74 	value04 = *from_ptr++;
75 
76       if ((in_mask & (1L <<  5)) != 0L)
77 	value05 = *from_ptr++;
78 
79       if ((in_mask & (1L <<  6)) != 0L)
80 	value06 = *from_ptr++;
81 
82       if ((in_mask & (1L <<  7)) != 0L)
83 	value07 = *from_ptr++;
84 
85       if ((in_mask & (1L <<  8)) != 0L)
86 	value08 = *from_ptr++;
87 
88       if ((in_mask & (1L <<  9)) != 0L)
89 	value09 = *from_ptr++;
90 
91       if ((in_mask & (1L << 10)) != 0L)
92 	value10 = *from_ptr++;
93 
94       if ((in_mask & (1L << 11)) != 0L)
95 	value11 = *from_ptr++;
96 
97       if ((in_mask & (1L << 12)) != 0L)
98 	value12 = *from_ptr++;
99 
100       if ((in_mask & (1L << 13)) != 0L)
101 	value13 = *from_ptr++;
102 
103       if ((in_mask & (1L << 14)) != 0L)
104 	value14 = *from_ptr++;
105 
106       if ((in_mask & (1L << 15)) != 0L)
107 	value15 = *from_ptr++;
108 
109       if ((in_mask & (1L << 16)) != 0L)
110 	value16 = *from_ptr++;
111 
112       if ((in_mask & (1L << 17)) != 0L)
113 	value17 = *from_ptr++;
114 
115       if ((in_mask & (1L << 18)) != 0L)
116 	value18 = *from_ptr++;
117 
118       if ((in_mask & (1L << 19)) != 0L)
119 	value19 = *from_ptr++;
120 
121       if ((in_mask2 & (1L << 0)) != 0L)
122 	value20 = *from_ptr++;
123 
124       if ((in_mask2 & (1L << 1)) != 0L)
125 	value21 = *from_ptr++;
126 
127       if ((in_mask2 & (1L << 2)) != 0L)
128 	value22 = *from_ptr++;
129 
130       if ((in_mask2 & (1L << 3)) != 0L)
131 	value23 = *from_ptr++;
132 
133       if ((in_mask2 & (1L << 4)) != 0L)
134 	value24 = *from_ptr++;
135 
136       if ((in_mask2 & (1L << 5)) != 0L)
137 	value25 = *from_ptr++;
138 
139       if ((in_mask2 & (1L << 6)) != 0L)
140 	value26 = *from_ptr++;
141 
142       if ((in_mask2 & (1L << 7)) != 0L)
143 	value27 = *from_ptr++;
144 
145       if ((in_mask2 & (1L << 8)) != 0L)
146 	value28 = *from_ptr++;
147 
148       if ((in_mask2 & (1L << 9)) != 0L)
149 	value29 = *from_ptr++;
150 
151       if ((in_mask2 & (1L << 10)) != 0L)
152 	value30 = *from_ptr++;
153 
154       if ((in_mask2 & (1L << 11)) != 0L)
155 	value31 = *from_ptr++;
156 
157       if ((in_mask2 & (1L << 12)) != 0L)
158 	value32 = *from_ptr++;
159 
160       if ((in_mask2 & (1L << 13)) != 0L)
161 	value33 = *from_ptr++;
162 
163       if ((in_mask2 & (1L << 14)) != 0L)
164 	value34 = *from_ptr++;
165 
166       if ((in_mask2 & (1L << 15)) != 0L)
167 	value35 = *from_ptr++;
168 
169       if ((in_mask2 & (1L << 16)) != 0L)
170 	value36 = *from_ptr++;
171 
172       if ((in_mask2 & (1L << 17)) != 0L)
173 	value37 = *from_ptr++;
174 
175       if ((in_mask2 & (1L << 18)) != 0L)
176 	value38 = *from_ptr++;
177 
178       if ((in_mask2 & (1L << 19)) != 0L)
179 	value39 = *from_ptr++;
180 
181       out_mask = *out_mask_ptr++;
182       out_mask2 = *out_mask_ptr++;
183       if ((out_mask & (1L <<  0)) != 0L)
184 	*to_ptr++ = value00;
185 
186       if ((out_mask & (1L <<  1)) != 0L)
187 	*to_ptr++ = value01;
188 
189       if ((out_mask & (1L <<  2)) != 0L)
190 	*to_ptr++ = value02;
191 
192       if ((out_mask & (1L <<  3)) != 0L)
193 	*to_ptr++ = value03;
194 
195       if ((out_mask & (1L <<  4)) != 0L)
196 	*to_ptr++ = value04;
197 
198       if ((out_mask & (1L <<  5)) != 0L)
199 	*to_ptr++ = value05;
200 
201       if ((out_mask & (1L <<  6)) != 0L)
202 	*to_ptr++ = value06;
203 
204       if ((out_mask & (1L <<  7)) != 0L)
205 	*to_ptr++ = value07;
206 
207       if ((out_mask & (1L <<  8)) != 0L)
208 	*to_ptr++ = value08;
209 
210       if ((out_mask & (1L <<  9)) != 0L)
211 	*to_ptr++ = value09;
212 
213       if ((out_mask & (1L << 10)) != 0L)
214 	*to_ptr++ = value10;
215 
216       if ((out_mask & (1L << 11)) != 0L)
217 	*to_ptr++ = value11;
218 
219       if ((out_mask & (1L << 12)) != 0L)
220 	*to_ptr++ = value12;
221 
222       if ((out_mask & (1L << 13)) != 0L)
223 	*to_ptr++ = value13;
224 
225       if ((out_mask & (1L << 14)) != 0L)
226 	*to_ptr++ = value14;
227 
228       if ((out_mask & (1L << 15)) != 0L)
229 	*to_ptr++ = value15;
230 
231       if ((out_mask & (1L << 16)) != 0L)
232 	*to_ptr++ = value16;
233 
234       if ((out_mask & (1L << 17)) != 0L)
235 	*to_ptr++ = value17;
236 
237       if ((out_mask & (1L << 18)) != 0L)
238 	*to_ptr++ = value18;
239 
240       if ((out_mask & (1L << 19)) != 0L)
241 	*to_ptr++ = value19;
242 
243       if ((out_mask2 & (1L << 0)) != 0L)
244 	*to_ptr++ = value20;
245 
246       if ((out_mask2 & (1L << 1)) != 0L)
247 	*to_ptr++ = value21;
248 
249       if ((out_mask2 & (1L << 2)) != 0L)
250 	*to_ptr++ = value22;
251 
252       if ((out_mask2 & (1L << 3)) != 0L)
253 	*to_ptr++ = value23;
254 
255       if ((out_mask2 & (1L << 4)) != 0L)
256 	*to_ptr++ = value24;
257 
258       if ((out_mask2 & (1L << 5)) != 0L)
259 	*to_ptr++ = value25;
260 
261       if ((out_mask2 & (1L << 6)) != 0L)
262 	*to_ptr++ = value26;
263 
264       if ((out_mask2 & (1L << 7)) != 0L)
265 	*to_ptr++ = value27;
266 
267       if ((out_mask2 & (1L << 8)) != 0L)
268 	*to_ptr++ = value28;
269 
270       if ((out_mask2 & (1L << 9)) != 0L)
271 	*to_ptr++ = value29;
272 
273       if ((out_mask2 & (1L << 10)) != 0L)
274 	*to_ptr++ = value30;
275 
276       if ((out_mask2 & (1L << 11)) != 0L)
277 	*to_ptr++ = value31;
278 
279       if ((out_mask2 & (1L << 12)) != 0L)
280 	*to_ptr++ = value32;
281 
282       if ((out_mask2 & (1L << 13)) != 0L)
283 	*to_ptr++ = value33;
284 
285       if ((out_mask2 & (1L << 14)) != 0L)
286 	*to_ptr++ = value34;
287 
288       if ((out_mask2 & (1L << 15)) != 0L)
289 	*to_ptr++ = value35;
290 
291       if ((out_mask2 & (1L << 16)) != 0L)
292 	*to_ptr++ = value36;
293 
294       if ((out_mask2 & (1L << 17)) != 0L)
295 	*to_ptr++ = value37;
296 
297       if ((out_mask2 & (1L << 18)) != 0L)
298 	*to_ptr++ = value38;
299 
300       if ((out_mask2 & (1L << 19)) != 0L)
301 	*to_ptr++ = value39;
302     }
303 
304   return (  value00 + value01 + value02 + value03 + value04
305 	  + value05 + value06 + value07 + value08 + value09
306 	  + value10 + value11 + value12 + value13 + value14
307 	  + value15 + value16 + value17 + value18 + value19
308 	  + value20 + value21 + value22 + value23 + value24
309 	  + value25 + value26 + value27 + value28 + value29
310 	  + value30 + value31 + value32 + value33 + value34
311 	  + value35 + value36 + value37 + value38 + value39);
312 }
313 
314 double
load_store_df(unsigned long num,const double * from_ptr,double * to_ptr,const unsigned long * in_mask_ptr,const unsigned long * out_mask_ptr)315 load_store_df (unsigned long num,
316 	       const double *from_ptr,
317 	       double *to_ptr,
318 	       const unsigned long *in_mask_ptr,
319 	       const unsigned long *out_mask_ptr)
320 {
321   double value00	= 0.0;
322   double value01	= 0.0;
323   double value02	= 0.0;
324   double value03	= 0.0;
325   double value04	= 0.0;
326   double value05	= 0.0;
327   double value06	= 0.0;
328   double value07	= 0.0;
329   double value08	= 0.0;
330   double value09	= 0.0;
331   double value10	= 0.0;
332   double value11	= 0.0;
333   double value12	= 0.0;
334   double value13	= 0.0;
335   double value14	= 0.0;
336   double value15	= 0.0;
337   double value16	= 0.0;
338   double value17	= 0.0;
339   double value18	= 0.0;
340   double value19	= 0.0;
341   double value20	= 0.0;
342   double value21	= 0.0;
343   double value22	= 0.0;
344   double value23	= 0.0;
345   double value24	= 0.0;
346   double value25	= 0.0;
347   double value26	= 0.0;
348   double value27	= 0.0;
349   double value28	= 0.0;
350   double value29	= 0.0;
351   double value30	= 0.0;
352   double value31	= 0.0;
353   double value32	= 0.0;
354   double value33	= 0.0;
355   double value34	= 0.0;
356   double value35	= 0.0;
357   double value36	= 0.0;
358   double value37	= 0.0;
359   double value38	= 0.0;
360   double value39	= 0.0;
361   unsigned long in_mask, in_mask2;
362   unsigned long out_mask, out_mask2;
363   unsigned long i;
364 
365   for (i = 0; i < num; i++)
366     {
367       in_mask = *in_mask_ptr++;
368       in_mask2 = *in_mask_ptr++;
369       if ((in_mask & (1L <<  0)) != 0L)
370 	value00 = *from_ptr++;
371 
372       if ((in_mask & (1L <<  1)) != 0L)
373 	value01 = *from_ptr++;
374 
375       if ((in_mask & (1L <<  2)) != 0L)
376 	value02 = *from_ptr++;
377 
378       if ((in_mask & (1L <<  3)) != 0L)
379 	value03 = *from_ptr++;
380 
381       if ((in_mask & (1L <<  4)) != 0L)
382 	value04 = *from_ptr++;
383 
384       if ((in_mask & (1L <<  5)) != 0L)
385 	value05 = *from_ptr++;
386 
387       if ((in_mask & (1L <<  6)) != 0L)
388 	value06 = *from_ptr++;
389 
390       if ((in_mask & (1L <<  7)) != 0L)
391 	value07 = *from_ptr++;
392 
393       if ((in_mask & (1L <<  8)) != 0L)
394 	value08 = *from_ptr++;
395 
396       if ((in_mask & (1L <<  9)) != 0L)
397 	value09 = *from_ptr++;
398 
399       if ((in_mask & (1L << 10)) != 0L)
400 	value10 = *from_ptr++;
401 
402       if ((in_mask & (1L << 11)) != 0L)
403 	value11 = *from_ptr++;
404 
405       if ((in_mask & (1L << 12)) != 0L)
406 	value12 = *from_ptr++;
407 
408       if ((in_mask & (1L << 13)) != 0L)
409 	value13 = *from_ptr++;
410 
411       if ((in_mask & (1L << 14)) != 0L)
412 	value14 = *from_ptr++;
413 
414       if ((in_mask & (1L << 15)) != 0L)
415 	value15 = *from_ptr++;
416 
417       if ((in_mask & (1L << 16)) != 0L)
418 	value16 = *from_ptr++;
419 
420       if ((in_mask & (1L << 17)) != 0L)
421 	value17 = *from_ptr++;
422 
423       if ((in_mask & (1L << 18)) != 0L)
424 	value18 = *from_ptr++;
425 
426       if ((in_mask & (1L << 19)) != 0L)
427 	value19 = *from_ptr++;
428 
429       if ((in_mask2 & (1L << 0)) != 0L)
430 	value20 = *from_ptr++;
431 
432       if ((in_mask2 & (1L << 1)) != 0L)
433 	value21 = *from_ptr++;
434 
435       if ((in_mask2 & (1L << 2)) != 0L)
436 	value22 = *from_ptr++;
437 
438       if ((in_mask2 & (1L << 3)) != 0L)
439 	value23 = *from_ptr++;
440 
441       if ((in_mask2 & (1L << 4)) != 0L)
442 	value24 = *from_ptr++;
443 
444       if ((in_mask2 & (1L << 5)) != 0L)
445 	value25 = *from_ptr++;
446 
447       if ((in_mask2 & (1L << 6)) != 0L)
448 	value26 = *from_ptr++;
449 
450       if ((in_mask2 & (1L << 7)) != 0L)
451 	value27 = *from_ptr++;
452 
453       if ((in_mask2 & (1L << 8)) != 0L)
454 	value28 = *from_ptr++;
455 
456       if ((in_mask2 & (1L << 9)) != 0L)
457 	value29 = *from_ptr++;
458 
459       if ((in_mask2 & (1L << 10)) != 0L)
460 	value30 = *from_ptr++;
461 
462       if ((in_mask2 & (1L << 11)) != 0L)
463 	value31 = *from_ptr++;
464 
465       if ((in_mask2 & (1L << 12)) != 0L)
466 	value32 = *from_ptr++;
467 
468       if ((in_mask2 & (1L << 13)) != 0L)
469 	value33 = *from_ptr++;
470 
471       if ((in_mask2 & (1L << 14)) != 0L)
472 	value34 = *from_ptr++;
473 
474       if ((in_mask2 & (1L << 15)) != 0L)
475 	value35 = *from_ptr++;
476 
477       if ((in_mask2 & (1L << 16)) != 0L)
478 	value36 = *from_ptr++;
479 
480       if ((in_mask2 & (1L << 17)) != 0L)
481 	value37 = *from_ptr++;
482 
483       if ((in_mask2 & (1L << 18)) != 0L)
484 	value38 = *from_ptr++;
485 
486       if ((in_mask2 & (1L << 19)) != 0L)
487 	value39 = *from_ptr++;
488 
489       out_mask = *out_mask_ptr++;
490       out_mask2 = *out_mask_ptr++;
491       if ((out_mask & (1L <<  0)) != 0L)
492 	*to_ptr++ = value00;
493 
494       if ((out_mask & (1L <<  1)) != 0L)
495 	*to_ptr++ = value01;
496 
497       if ((out_mask & (1L <<  2)) != 0L)
498 	*to_ptr++ = value02;
499 
500       if ((out_mask & (1L <<  3)) != 0L)
501 	*to_ptr++ = value03;
502 
503       if ((out_mask & (1L <<  4)) != 0L)
504 	*to_ptr++ = value04;
505 
506       if ((out_mask & (1L <<  5)) != 0L)
507 	*to_ptr++ = value05;
508 
509       if ((out_mask & (1L <<  6)) != 0L)
510 	*to_ptr++ = value06;
511 
512       if ((out_mask & (1L <<  7)) != 0L)
513 	*to_ptr++ = value07;
514 
515       if ((out_mask & (1L <<  8)) != 0L)
516 	*to_ptr++ = value08;
517 
518       if ((out_mask & (1L <<  9)) != 0L)
519 	*to_ptr++ = value09;
520 
521       if ((out_mask & (1L << 10)) != 0L)
522 	*to_ptr++ = value10;
523 
524       if ((out_mask & (1L << 11)) != 0L)
525 	*to_ptr++ = value11;
526 
527       if ((out_mask & (1L << 12)) != 0L)
528 	*to_ptr++ = value12;
529 
530       if ((out_mask & (1L << 13)) != 0L)
531 	*to_ptr++ = value13;
532 
533       if ((out_mask & (1L << 14)) != 0L)
534 	*to_ptr++ = value14;
535 
536       if ((out_mask & (1L << 15)) != 0L)
537 	*to_ptr++ = value15;
538 
539       if ((out_mask & (1L << 16)) != 0L)
540 	*to_ptr++ = value16;
541 
542       if ((out_mask & (1L << 17)) != 0L)
543 	*to_ptr++ = value17;
544 
545       if ((out_mask & (1L << 18)) != 0L)
546 	*to_ptr++ = value18;
547 
548       if ((out_mask & (1L << 19)) != 0L)
549 	*to_ptr++ = value19;
550 
551       if ((out_mask2 & (1L << 0)) != 0L)
552 	*to_ptr++ = value20;
553 
554       if ((out_mask2 & (1L << 1)) != 0L)
555 	*to_ptr++ = value21;
556 
557       if ((out_mask2 & (1L << 2)) != 0L)
558 	*to_ptr++ = value22;
559 
560       if ((out_mask2 & (1L << 3)) != 0L)
561 	*to_ptr++ = value23;
562 
563       if ((out_mask2 & (1L << 4)) != 0L)
564 	*to_ptr++ = value24;
565 
566       if ((out_mask2 & (1L << 5)) != 0L)
567 	*to_ptr++ = value25;
568 
569       if ((out_mask2 & (1L << 6)) != 0L)
570 	*to_ptr++ = value26;
571 
572       if ((out_mask2 & (1L << 7)) != 0L)
573 	*to_ptr++ = value27;
574 
575       if ((out_mask2 & (1L << 8)) != 0L)
576 	*to_ptr++ = value28;
577 
578       if ((out_mask2 & (1L << 9)) != 0L)
579 	*to_ptr++ = value29;
580 
581       if ((out_mask2 & (1L << 10)) != 0L)
582 	*to_ptr++ = value30;
583 
584       if ((out_mask2 & (1L << 11)) != 0L)
585 	*to_ptr++ = value31;
586 
587       if ((out_mask2 & (1L << 12)) != 0L)
588 	*to_ptr++ = value32;
589 
590       if ((out_mask2 & (1L << 13)) != 0L)
591 	*to_ptr++ = value33;
592 
593       if ((out_mask2 & (1L << 14)) != 0L)
594 	*to_ptr++ = value34;
595 
596       if ((out_mask2 & (1L << 15)) != 0L)
597 	*to_ptr++ = value35;
598 
599       if ((out_mask2 & (1L << 16)) != 0L)
600 	*to_ptr++ = value36;
601 
602       if ((out_mask2 & (1L << 17)) != 0L)
603 	*to_ptr++ = value37;
604 
605       if ((out_mask2 & (1L << 18)) != 0L)
606 	*to_ptr++ = value38;
607 
608       if ((out_mask2 & (1L << 19)) != 0L)
609 	*to_ptr++ = value39;
610     }
611 
612   return (  value00 + value01 + value02 + value03 + value04
613 	  + value05 + value06 + value07 + value08 + value09
614 	  + value10 + value11 + value12 + value13 + value14
615 	  + value15 + value16 + value17 + value18 + value19
616 	  + value20 + value21 + value22 + value23 + value24
617 	  + value25 + value26 + value27 + value28 + value29
618 	  + value30 + value31 + value32 + value33 + value34
619 	  + value35 + value36 + value37 + value38 + value39);
620 }
621 
622 /* { dg-final { scan-assembler "lxsspx"  } } */
623 /* { dg-final { scan-assembler "lxsdx"   } } */
624 /* { dg-final { scan-assembler "stxsspx" } } */
625 /* { dg-final { scan-assembler "stxsdx"  } } */
626 /* { dg-final { scan-assembler "xsaddsp" } } */
627 /* { dg-final { scan-assembler "xsadddp" } } */
628