(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
vsx-vector-7.c
       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 bool char vbca, vbcb, vbcc;
      11  vector bool int vbia, vbib, vbic;
      12  vector signed char vsca, vscb, vscc;
      13  vector unsigned char vuca, vucb, vucc;
      14  vector signed int vsia, vsib, vsic;
      15  vector unsigned int vuia, vuib, vuic;
      16  
      17  vector unsigned long long vulla, vullb, vullc;
      18  vector signed long long vslla, vsllb, vsllc;
      19  vector bool long long vblla, vbllb, vbllc;
      20  vector bool short int vbsia, vbsib, vbsic;
      21  vector signed short int vssia, vssib, vssic;
      22  vector unsigned short int vusia, vusib, vusic;
      23  vector double vda, vdb;
      24  vector float vfa, vfb;
      25  
      26  void foo (vector bool long long *vblr,
      27  	  vector double *vdr, vector unsigned long long *vullz,
      28  	  vector double *vdz, vector bool char *vbcz,
      29  	  vector signed char *vscz, vector unsigned char *vucz,
      30  	  vector bool int *vbiz, vector int *viz,
      31  	  vector unsigned int *vuiz, vector signed long long int *vslliz,
      32  	  vector bool short int *vbsiz, vector signed short int *vssiz,
      33  	  vector unsigned short int *vusiz, vector float *vfz)
      34  {
      35    *vblr++ = vec_andc (vbla, vblb);
      36    *vdr++  = vec_double (vslla);
      37    *vdr++  = vec_double (vulla);
      38  
      39    *vblr++ = vec_mergeh (vbla, vblb);
      40    *vblr++ = vec_mergel (vbla, vblb);
      41    *vblr++ = vec_nor (vbla, vblb);
      42    *vblr++ = vec_or (vbla, vblb);
      43    *vblr++ = vec_sel (vbla, vblb, vblc);
      44    *vblr++ = vec_sel (vbla, vblb, vullc);
      45    *vblr++ = vec_xor (vbla, vblb);
      46  
      47    *vullz++ = vec_sel (vulla, vullb, vbllc);
      48    *vullz++ = vec_sel (vulla, vullb, vullc);
      49  
      50    *vdz++ = vec_sel(vda, vdb, vullc);
      51  
      52    *vbcz++ = vec_sel (vbca, vbcb, vbcc);
      53    *vbcz++ = vec_sel (vbca, vbcb, vucc);
      54    *vbcz++ = vec_xor (vbca, vbcb);
      55    *vscz++ = vec_sel (vsca, vscb, vbcc);
      56    *vscz++ = vec_sel (vsca, vscb, vucc);
      57    *vucz++ = vec_sel (vuca, vucb, vbcc);
      58    *vucz++ = vec_sel (vuca, vucb, vucc);
      59  
      60    *vbiz++ = vec_sel (vbia, vbib, vbic);
      61    *vbiz++ = vec_sel (vbia, vbib, vuic);
      62    *vbiz++ = vec_xor (vbia, vbib);
      63    *viz++ = vec_sel (vsia, vsib, vbic);
      64    *viz++ = vec_sel (vsia, vsib, vuic);
      65    *vuiz++ = vec_sel (vuia, vuib, vbic);
      66    *vuiz++ = vec_sel (vuia, vuib, vuic);
      67  
      68    *vslliz++ = vec_sel(vslla, vsllb, vbllc);
      69    *vslliz++ = vec_sel(vslla, vsllb, vullc);
      70  
      71    *vssiz++ = vec_sel(vssia, vssib, vbsic);
      72    *vssiz++ = vec_sel(vssia, vssib, vusic);
      73    *vusiz++ = vec_sel(vusia, vusib, vbsic);
      74    *vusiz++ = vec_sel(vusia, vusib, vusic);
      75  
      76    *vbsiz++ = vec_sel (vbsia, vbsib, vbsic);
      77    *vbsiz++ = vec_sel (vbsia, vbsib, vusic);
      78    *vbsiz++ = vec_xor (vbsia, vbsib);
      79  
      80    *vdz++ = vec_sel (vda, vdb, vbllc);
      81    *vfz++ = vec_sel (vfa, vfb, vbic);
      82    *vfz++ = vec_sel (vfa, vfb, vuic);
      83    *vfz++ = vec_xor (vfa, vfb);
      84  }
      85  
      86  /* { dg-final { scan-assembler-times "xxlandc" 1 } } */
      87  /* { dg-final { scan-assembler-times "xvcvsxddp" 1 } } */
      88  /* { dg-final { scan-assembler-times "xvcvuxddp" 1 } } */
      89  /* { dg-final { scan-assembler-times "xxpermdi .*,.*,.*,3" 1 } } */
      90  /* { dg-final { scan-assembler-times "xxpermdi .*,.*,.*,0" 1 } } */
      91  /* { dg-final { scan-assembler-times "xxlnor" 1 } } */
      92  /* { dg-final { scan-assembler-times "xxlor" 1 } } */
      93  /* { dg-final { scan-assembler-times "xxsel" 28 } } */
      94  /* { dg-final { scan-assembler-times "xxlxor" 5 } } */