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