1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-options "-mdejagnu-cpu=power8 -mvsx -O2" } */
4 /* { dg-require-effective-target powerpc_vsx } */
7 load_store_sf (unsigned long num
,
10 const unsigned long *in_mask_ptr
,
11 const unsigned long *out_mask_ptr
)
53 unsigned long in_mask
, in_mask2
;
54 unsigned long out_mask
, out_mask2
;
57 for (i
= 0; i
< num
; i
++)
59 in_mask
= *in_mask_ptr
++;
60 in_mask2
= *in_mask_ptr
++;
61 if ((in_mask
& (1L << 0)) != 0L)
62 value00
= *from_ptr
++;
64 if ((in_mask
& (1L << 1)) != 0L)
65 value01
= *from_ptr
++;
67 if ((in_mask
& (1L << 2)) != 0L)
68 value02
= *from_ptr
++;
70 if ((in_mask
& (1L << 3)) != 0L)
71 value03
= *from_ptr
++;
73 if ((in_mask
& (1L << 4)) != 0L)
74 value04
= *from_ptr
++;
76 if ((in_mask
& (1L << 5)) != 0L)
77 value05
= *from_ptr
++;
79 if ((in_mask
& (1L << 6)) != 0L)
80 value06
= *from_ptr
++;
82 if ((in_mask
& (1L << 7)) != 0L)
83 value07
= *from_ptr
++;
85 if ((in_mask
& (1L << 8)) != 0L)
86 value08
= *from_ptr
++;
88 if ((in_mask
& (1L << 9)) != 0L)
89 value09
= *from_ptr
++;
91 if ((in_mask
& (1L << 10)) != 0L)
92 value10
= *from_ptr
++;
94 if ((in_mask
& (1L << 11)) != 0L)
95 value11
= *from_ptr
++;
97 if ((in_mask
& (1L << 12)) != 0L)
98 value12
= *from_ptr
++;
100 if ((in_mask
& (1L << 13)) != 0L)
101 value13
= *from_ptr
++;
103 if ((in_mask
& (1L << 14)) != 0L)
104 value14
= *from_ptr
++;
106 if ((in_mask
& (1L << 15)) != 0L)
107 value15
= *from_ptr
++;
109 if ((in_mask
& (1L << 16)) != 0L)
110 value16
= *from_ptr
++;
112 if ((in_mask
& (1L << 17)) != 0L)
113 value17
= *from_ptr
++;
115 if ((in_mask
& (1L << 18)) != 0L)
116 value18
= *from_ptr
++;
118 if ((in_mask
& (1L << 19)) != 0L)
119 value19
= *from_ptr
++;
121 if ((in_mask2
& (1L << 0)) != 0L)
122 value20
= *from_ptr
++;
124 if ((in_mask2
& (1L << 1)) != 0L)
125 value21
= *from_ptr
++;
127 if ((in_mask2
& (1L << 2)) != 0L)
128 value22
= *from_ptr
++;
130 if ((in_mask2
& (1L << 3)) != 0L)
131 value23
= *from_ptr
++;
133 if ((in_mask2
& (1L << 4)) != 0L)
134 value24
= *from_ptr
++;
136 if ((in_mask2
& (1L << 5)) != 0L)
137 value25
= *from_ptr
++;
139 if ((in_mask2
& (1L << 6)) != 0L)
140 value26
= *from_ptr
++;
142 if ((in_mask2
& (1L << 7)) != 0L)
143 value27
= *from_ptr
++;
145 if ((in_mask2
& (1L << 8)) != 0L)
146 value28
= *from_ptr
++;
148 if ((in_mask2
& (1L << 9)) != 0L)
149 value29
= *from_ptr
++;
151 if ((in_mask2
& (1L << 10)) != 0L)
152 value30
= *from_ptr
++;
154 if ((in_mask2
& (1L << 11)) != 0L)
155 value31
= *from_ptr
++;
157 if ((in_mask2
& (1L << 12)) != 0L)
158 value32
= *from_ptr
++;
160 if ((in_mask2
& (1L << 13)) != 0L)
161 value33
= *from_ptr
++;
163 if ((in_mask2
& (1L << 14)) != 0L)
164 value34
= *from_ptr
++;
166 if ((in_mask2
& (1L << 15)) != 0L)
167 value35
= *from_ptr
++;
169 if ((in_mask2
& (1L << 16)) != 0L)
170 value36
= *from_ptr
++;
172 if ((in_mask2
& (1L << 17)) != 0L)
173 value37
= *from_ptr
++;
175 if ((in_mask2
& (1L << 18)) != 0L)
176 value38
= *from_ptr
++;
178 if ((in_mask2
& (1L << 19)) != 0L)
179 value39
= *from_ptr
++;
181 out_mask
= *out_mask_ptr
++;
182 out_mask2
= *out_mask_ptr
++;
183 if ((out_mask
& (1L << 0)) != 0L)
186 if ((out_mask
& (1L << 1)) != 0L)
189 if ((out_mask
& (1L << 2)) != 0L)
192 if ((out_mask
& (1L << 3)) != 0L)
195 if ((out_mask
& (1L << 4)) != 0L)
198 if ((out_mask
& (1L << 5)) != 0L)
201 if ((out_mask
& (1L << 6)) != 0L)
204 if ((out_mask
& (1L << 7)) != 0L)
207 if ((out_mask
& (1L << 8)) != 0L)
210 if ((out_mask
& (1L << 9)) != 0L)
213 if ((out_mask
& (1L << 10)) != 0L)
216 if ((out_mask
& (1L << 11)) != 0L)
219 if ((out_mask
& (1L << 12)) != 0L)
222 if ((out_mask
& (1L << 13)) != 0L)
225 if ((out_mask
& (1L << 14)) != 0L)
228 if ((out_mask
& (1L << 15)) != 0L)
231 if ((out_mask
& (1L << 16)) != 0L)
234 if ((out_mask
& (1L << 17)) != 0L)
237 if ((out_mask
& (1L << 18)) != 0L)
240 if ((out_mask
& (1L << 19)) != 0L)
243 if ((out_mask2
& (1L << 0)) != 0L)
246 if ((out_mask2
& (1L << 1)) != 0L)
249 if ((out_mask2
& (1L << 2)) != 0L)
252 if ((out_mask2
& (1L << 3)) != 0L)
255 if ((out_mask2
& (1L << 4)) != 0L)
258 if ((out_mask2
& (1L << 5)) != 0L)
261 if ((out_mask2
& (1L << 6)) != 0L)
264 if ((out_mask2
& (1L << 7)) != 0L)
267 if ((out_mask2
& (1L << 8)) != 0L)
270 if ((out_mask2
& (1L << 9)) != 0L)
273 if ((out_mask2
& (1L << 10)) != 0L)
276 if ((out_mask2
& (1L << 11)) != 0L)
279 if ((out_mask2
& (1L << 12)) != 0L)
282 if ((out_mask2
& (1L << 13)) != 0L)
285 if ((out_mask2
& (1L << 14)) != 0L)
288 if ((out_mask2
& (1L << 15)) != 0L)
291 if ((out_mask2
& (1L << 16)) != 0L)
294 if ((out_mask2
& (1L << 17)) != 0L)
297 if ((out_mask2
& (1L << 18)) != 0L)
300 if ((out_mask2
& (1L << 19)) != 0L)
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
);
315 load_store_df (unsigned long num
,
316 const double *from_ptr
,
318 const unsigned long *in_mask_ptr
,
319 const unsigned long *out_mask_ptr
)
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
;
365 for (i
= 0; i
< num
; i
++)
367 in_mask
= *in_mask_ptr
++;
368 in_mask2
= *in_mask_ptr
++;
369 if ((in_mask
& (1L << 0)) != 0L)
370 value00
= *from_ptr
++;
372 if ((in_mask
& (1L << 1)) != 0L)
373 value01
= *from_ptr
++;
375 if ((in_mask
& (1L << 2)) != 0L)
376 value02
= *from_ptr
++;
378 if ((in_mask
& (1L << 3)) != 0L)
379 value03
= *from_ptr
++;
381 if ((in_mask
& (1L << 4)) != 0L)
382 value04
= *from_ptr
++;
384 if ((in_mask
& (1L << 5)) != 0L)
385 value05
= *from_ptr
++;
387 if ((in_mask
& (1L << 6)) != 0L)
388 value06
= *from_ptr
++;
390 if ((in_mask
& (1L << 7)) != 0L)
391 value07
= *from_ptr
++;
393 if ((in_mask
& (1L << 8)) != 0L)
394 value08
= *from_ptr
++;
396 if ((in_mask
& (1L << 9)) != 0L)
397 value09
= *from_ptr
++;
399 if ((in_mask
& (1L << 10)) != 0L)
400 value10
= *from_ptr
++;
402 if ((in_mask
& (1L << 11)) != 0L)
403 value11
= *from_ptr
++;
405 if ((in_mask
& (1L << 12)) != 0L)
406 value12
= *from_ptr
++;
408 if ((in_mask
& (1L << 13)) != 0L)
409 value13
= *from_ptr
++;
411 if ((in_mask
& (1L << 14)) != 0L)
412 value14
= *from_ptr
++;
414 if ((in_mask
& (1L << 15)) != 0L)
415 value15
= *from_ptr
++;
417 if ((in_mask
& (1L << 16)) != 0L)
418 value16
= *from_ptr
++;
420 if ((in_mask
& (1L << 17)) != 0L)
421 value17
= *from_ptr
++;
423 if ((in_mask
& (1L << 18)) != 0L)
424 value18
= *from_ptr
++;
426 if ((in_mask
& (1L << 19)) != 0L)
427 value19
= *from_ptr
++;
429 if ((in_mask2
& (1L << 0)) != 0L)
430 value20
= *from_ptr
++;
432 if ((in_mask2
& (1L << 1)) != 0L)
433 value21
= *from_ptr
++;
435 if ((in_mask2
& (1L << 2)) != 0L)
436 value22
= *from_ptr
++;
438 if ((in_mask2
& (1L << 3)) != 0L)
439 value23
= *from_ptr
++;
441 if ((in_mask2
& (1L << 4)) != 0L)
442 value24
= *from_ptr
++;
444 if ((in_mask2
& (1L << 5)) != 0L)
445 value25
= *from_ptr
++;
447 if ((in_mask2
& (1L << 6)) != 0L)
448 value26
= *from_ptr
++;
450 if ((in_mask2
& (1L << 7)) != 0L)
451 value27
= *from_ptr
++;
453 if ((in_mask2
& (1L << 8)) != 0L)
454 value28
= *from_ptr
++;
456 if ((in_mask2
& (1L << 9)) != 0L)
457 value29
= *from_ptr
++;
459 if ((in_mask2
& (1L << 10)) != 0L)
460 value30
= *from_ptr
++;
462 if ((in_mask2
& (1L << 11)) != 0L)
463 value31
= *from_ptr
++;
465 if ((in_mask2
& (1L << 12)) != 0L)
466 value32
= *from_ptr
++;
468 if ((in_mask2
& (1L << 13)) != 0L)
469 value33
= *from_ptr
++;
471 if ((in_mask2
& (1L << 14)) != 0L)
472 value34
= *from_ptr
++;
474 if ((in_mask2
& (1L << 15)) != 0L)
475 value35
= *from_ptr
++;
477 if ((in_mask2
& (1L << 16)) != 0L)
478 value36
= *from_ptr
++;
480 if ((in_mask2
& (1L << 17)) != 0L)
481 value37
= *from_ptr
++;
483 if ((in_mask2
& (1L << 18)) != 0L)
484 value38
= *from_ptr
++;
486 if ((in_mask2
& (1L << 19)) != 0L)
487 value39
= *from_ptr
++;
489 out_mask
= *out_mask_ptr
++;
490 out_mask2
= *out_mask_ptr
++;
491 if ((out_mask
& (1L << 0)) != 0L)
494 if ((out_mask
& (1L << 1)) != 0L)
497 if ((out_mask
& (1L << 2)) != 0L)
500 if ((out_mask
& (1L << 3)) != 0L)
503 if ((out_mask
& (1L << 4)) != 0L)
506 if ((out_mask
& (1L << 5)) != 0L)
509 if ((out_mask
& (1L << 6)) != 0L)
512 if ((out_mask
& (1L << 7)) != 0L)
515 if ((out_mask
& (1L << 8)) != 0L)
518 if ((out_mask
& (1L << 9)) != 0L)
521 if ((out_mask
& (1L << 10)) != 0L)
524 if ((out_mask
& (1L << 11)) != 0L)
527 if ((out_mask
& (1L << 12)) != 0L)
530 if ((out_mask
& (1L << 13)) != 0L)
533 if ((out_mask
& (1L << 14)) != 0L)
536 if ((out_mask
& (1L << 15)) != 0L)
539 if ((out_mask
& (1L << 16)) != 0L)
542 if ((out_mask
& (1L << 17)) != 0L)
545 if ((out_mask
& (1L << 18)) != 0L)
548 if ((out_mask
& (1L << 19)) != 0L)
551 if ((out_mask2
& (1L << 0)) != 0L)
554 if ((out_mask2
& (1L << 1)) != 0L)
557 if ((out_mask2
& (1L << 2)) != 0L)
560 if ((out_mask2
& (1L << 3)) != 0L)
563 if ((out_mask2
& (1L << 4)) != 0L)
566 if ((out_mask2
& (1L << 5)) != 0L)
569 if ((out_mask2
& (1L << 6)) != 0L)
572 if ((out_mask2
& (1L << 7)) != 0L)
575 if ((out_mask2
& (1L << 8)) != 0L)
578 if ((out_mask2
& (1L << 9)) != 0L)
581 if ((out_mask2
& (1L << 10)) != 0L)
584 if ((out_mask2
& (1L << 11)) != 0L)
587 if ((out_mask2
& (1L << 12)) != 0L)
590 if ((out_mask2
& (1L << 13)) != 0L)
593 if ((out_mask2
& (1L << 14)) != 0L)
596 if ((out_mask2
& (1L << 15)) != 0L)
599 if ((out_mask2
& (1L << 16)) != 0L)
602 if ((out_mask2
& (1L << 17)) != 0L)
605 if ((out_mask2
& (1L << 18)) != 0L)
608 if ((out_mask2
& (1L << 19)) != 0L)
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
);
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" } } */