(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
altivec-13.c
       1  /* { dg-do compile { target powerpc*-*-* } } */
       2  /* { dg-require-effective-target powerpc_altivec_ok } */
       3  /* { dg-options "-maltivec" } */
       4  
       5  /* Author: Ziemowit Laski  <zlaski@apple.com>  */
       6  
       7  /* This test case exercises intrinsic/argument combinations that,
       8     while not in the Motorola AltiVec PIM, have nevertheless crept
       9     into the AltiVec vernacular over the years.  */
      10  
      11  /* Tests requiring VSX support (vector long long and vector double) have
      12     been moved over to vsx-13.c.  */
      13  
      14  #include <altivec.h>
      15  
      16  void foo (void)
      17  {
      18    vector bool int boolVec1 = (vector bool int) vec_splat_u32(3);
      19    vector bool short boolVec2 = (vector bool short) vec_splat_u16(3);
      20    vector bool char boolVec3 = (vector bool char) vec_splat_u8(3);
      21    vector signed char vsc1, vsc2, vscz;
      22    vector unsigned char vuc1, vuc2, vucz;
      23    vector signed short int vssi1, vssi2, vssiz;
      24    vector signed int vsi1, vsi2, vsiz;
      25    vector unsigned int vui1, vui2, vuiz;
      26    vector unsigned short int vusi1, vusi2, vusiz;
      27    vector pixel vp1, vp2, vpz;
      28    vector float vf1, vf2, vfz;
      29    
      30    boolVec1 = vec_sld( boolVec1, boolVec1, 4 );
      31    boolVec2 = vec_sld( boolVec2, boolVec2, 2 );
      32    boolVec3 = vec_sld( boolVec3, boolVec3, 1 );
      33  
      34    vscz = vec_sld( vsc1, vsc2, 1 );
      35    vucz = vec_sld( vuc1, vuc2, 1 );
      36    vsiz = vec_sld( vsi1, vsi2, 1 );
      37    vuiz = vec_sld( vui1, vui2, 1 );
      38    vssiz = vec_sld( vssi1, vssi2, 1 );
      39    vusiz = vec_sld( vusi1, vusi2, 1 );
      40    
      41    vfz = vec_sld( vf1, vf2, 1 );
      42  
      43    vpz = vec_sld( vp1, vp2, 1 );
      44  
      45    vucz = vec_srl(vuc1, vuc2);
      46    vsiz = vec_srl(vsi1, vuc2);
      47    vuiz = vec_srl(vui1, vuc2);
      48    vpz = vec_srl(vp1, vuc2);
      49    vssiz = vec_srl(vssi1, vuc2);
      50    vusiz = vec_srl(vusi1, vuc2);
      51  
      52    vscz = vec_sro(vsc1, vsc2);
      53    vscz = vec_sro(vsc1, vuc2);
      54    vucz = vec_sro(vuc1, vsc2);
      55    vucz = vec_sro(vuc1, vuc2);
      56    vsiz = vec_sro(vsi1, vsc2);
      57    vsiz = vec_sro(vsi1, vuc2);
      58    vuiz = vec_sro(vui1, vsc2);
      59    vuiz = vec_sro(vui1, vuc2);
      60    vpz = vec_sro(vp1, vsc2);
      61    vpz = vec_sro(vp1, vuc2);
      62    vssiz = vec_sro(vssi1, vsc2);
      63    vssiz = vec_sro(vssi1, vuc2);
      64    vusiz = vec_sro(vusi1, vsc2);
      65    vusiz = vec_sro(vusi1, vuc2);
      66    vfz = vec_sro(vf1, vsc2);
      67    vfz = vec_sro(vf1, vuc2);
      68  }
      69  
      70  /* Expected results:
      71     vec_sld          vsldoi
      72     vec_srl          vsr
      73     vec_sro          vsro  */
      74  
      75  /* { dg-final { scan-assembler-times "vsldoi" 11 } } */
      76  /* { dg-final { scan-assembler-times "vsr " 6 } } */
      77  /* { dg-final { scan-assembler-times "vsro" 16 } } */