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" } */
8 load_store_sf (unsigned long num
,
11 const unsigned long *in_mask_ptr
,
12 const unsigned long *out_mask_ptr
)
54 unsigned long in_mask
, in_mask2
;
55 unsigned long out_mask
, out_mask2
;
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)
187 if ((out_mask
& (1L << 1)) != 0L)
190 if ((out_mask
& (1L << 2)) != 0L)
193 if ((out_mask
& (1L << 3)) != 0L)
196 if ((out_mask
& (1L << 4)) != 0L)
199 if ((out_mask
& (1L << 5)) != 0L)
202 if ((out_mask
& (1L << 6)) != 0L)
205 if ((out_mask
& (1L << 7)) != 0L)
208 if ((out_mask
& (1L << 8)) != 0L)
211 if ((out_mask
& (1L << 9)) != 0L)
214 if ((out_mask
& (1L << 10)) != 0L)
217 if ((out_mask
& (1L << 11)) != 0L)
220 if ((out_mask
& (1L << 12)) != 0L)
223 if ((out_mask
& (1L << 13)) != 0L)
226 if ((out_mask
& (1L << 14)) != 0L)
229 if ((out_mask
& (1L << 15)) != 0L)
232 if ((out_mask
& (1L << 16)) != 0L)
235 if ((out_mask
& (1L << 17)) != 0L)
238 if ((out_mask
& (1L << 18)) != 0L)
241 if ((out_mask
& (1L << 19)) != 0L)
244 if ((out_mask2
& (1L << 0)) != 0L)
247 if ((out_mask2
& (1L << 1)) != 0L)
250 if ((out_mask2
& (1L << 2)) != 0L)
253 if ((out_mask2
& (1L << 3)) != 0L)
256 if ((out_mask2
& (1L << 4)) != 0L)
259 if ((out_mask2
& (1L << 5)) != 0L)
262 if ((out_mask2
& (1L << 6)) != 0L)
265 if ((out_mask2
& (1L << 7)) != 0L)
268 if ((out_mask2
& (1L << 8)) != 0L)
271 if ((out_mask2
& (1L << 9)) != 0L)
274 if ((out_mask2
& (1L << 10)) != 0L)
277 if ((out_mask2
& (1L << 11)) != 0L)
280 if ((out_mask2
& (1L << 12)) != 0L)
283 if ((out_mask2
& (1L << 13)) != 0L)
286 if ((out_mask2
& (1L << 14)) != 0L)
289 if ((out_mask2
& (1L << 15)) != 0L)
292 if ((out_mask2
& (1L << 16)) != 0L)
295 if ((out_mask2
& (1L << 17)) != 0L)
298 if ((out_mask2
& (1L << 18)) != 0L)
301 if ((out_mask2
& (1L << 19)) != 0L)
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
);
316 load_store_df (unsigned long num
,
317 const double *from_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
;
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)
495 if ((out_mask
& (1L << 1)) != 0L)
498 if ((out_mask
& (1L << 2)) != 0L)
501 if ((out_mask
& (1L << 3)) != 0L)
504 if ((out_mask
& (1L << 4)) != 0L)
507 if ((out_mask
& (1L << 5)) != 0L)
510 if ((out_mask
& (1L << 6)) != 0L)
513 if ((out_mask
& (1L << 7)) != 0L)
516 if ((out_mask
& (1L << 8)) != 0L)
519 if ((out_mask
& (1L << 9)) != 0L)
522 if ((out_mask
& (1L << 10)) != 0L)
525 if ((out_mask
& (1L << 11)) != 0L)
528 if ((out_mask
& (1L << 12)) != 0L)
531 if ((out_mask
& (1L << 13)) != 0L)
534 if ((out_mask
& (1L << 14)) != 0L)
537 if ((out_mask
& (1L << 15)) != 0L)
540 if ((out_mask
& (1L << 16)) != 0L)
543 if ((out_mask
& (1L << 17)) != 0L)
546 if ((out_mask
& (1L << 18)) != 0L)
549 if ((out_mask
& (1L << 19)) != 0L)
552 if ((out_mask2
& (1L << 0)) != 0L)
555 if ((out_mask2
& (1L << 1)) != 0L)
558 if ((out_mask2
& (1L << 2)) != 0L)
561 if ((out_mask2
& (1L << 3)) != 0L)
564 if ((out_mask2
& (1L << 4)) != 0L)
567 if ((out_mask2
& (1L << 5)) != 0L)
570 if ((out_mask2
& (1L << 6)) != 0L)
573 if ((out_mask2
& (1L << 7)) != 0L)
576 if ((out_mask2
& (1L << 8)) != 0L)
579 if ((out_mask2
& (1L << 9)) != 0L)
582 if ((out_mask2
& (1L << 10)) != 0L)
585 if ((out_mask2
& (1L << 11)) != 0L)
588 if ((out_mask2
& (1L << 12)) != 0L)
591 if ((out_mask2
& (1L << 13)) != 0L)
594 if ((out_mask2
& (1L << 14)) != 0L)
597 if ((out_mask2
& (1L << 15)) != 0L)
600 if ((out_mask2
& (1L << 16)) != 0L)
603 if ((out_mask2
& (1L << 17)) != 0L)
606 if ((out_mask2
& (1L << 18)) != 0L)
609 if ((out_mask2
& (1L << 19)) != 0L)
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" } } */