1 /* { dg-do compile } */
2 /* { dg-require-effective-target powerpc_vsx_ok } */
3 /* { dg-options "-mvsx -mno-power8-vector -O2" } */
4
5 #include <altivec.h>
6
7 /* Test VSX built-ins added for version 1.1 of ELFv2 ABI. */
8
9 vector bool long long vbla, vblb, vblc;
10 vector signed long long vsla;
11 vector unsigned long long vula, vulb, vulc;
12 vector double vda, vdb;
13 vector float vfa, vfb;
14
foo(vector bool long long * vblr,vector double * vdr,vector unsigned long long * vulz,vector double * vdz)15 void foo (vector bool long long *vblr,
16 vector double *vdr, vector unsigned long long *vulz, vector double *vdz)
17 {
18 *vblr++ = vec_andc (vbla, vblb);
19 *vdr++ = vec_double (vsla);
20 *vdr++ = vec_double (vula);
21 *vblr++ = vec_mergeh (vbla, vblb);
22 *vblr++ = vec_mergel (vbla, vblb);
23 *vblr++ = vec_nor (vbla, vblb);
24 *vblr++ = vec_or (vbla, vblb);
25 *vblr++ = vec_sel (vbla, vblb, vblc);
26 *vblr++ = vec_sel (vbla, vblb, vulc);
27 *vblr++ = vec_xor (vbla, vblb);
28
29 *vulz++ = vec_sel (vula, vulb, vblc);
30
31 *vdz++ = vec_sel(vda, vdb, vulc);
32 }
33
34 /* { dg-final { scan-assembler-times "xxlandc" 1 } } */
35 /* { dg-final { scan-assembler-times "xvcvsxddp" 1 } } */
36 /* { dg-final { scan-assembler-times "xvcvuxddp" 1 } } */
37 /* { dg-final { scan-assembler-times "xxpermdi .*,.*,.*,3" 1 } } */
38 /* { dg-final { scan-assembler-times "xxpermdi .*,.*,.*,0" 1 } } */
39 /* { dg-final { scan-assembler-times "xxlnor" 1 } } */
40 /* { dg-final { scan-assembler-times "xxlor" 1 } } */
41 /* { dg-final { scan-assembler-times "xxsel" 4 } } */
42 /* { dg-final { scan-assembler-times "xxlxor" 1 } } */
43