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