(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
fold-vec-extract-short.p9.c
       1  /* Verify that overloaded built-ins for vec_extract() with short
       2     inputs produce the right code for a P9 target.  */
       3  
       4  /* { dg-do compile { target lp64 } } */
       5  /* { dg-require-effective-target powerpc_p9vector_ok } */
       6  /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
       7  
       8  // six tests total. Targeting P9.
       9  // p9 (le) variable offset: slwi, vextuhlx, extsh
      10  // p9 (le) const offset:  li, vextuhlx, extsh
      11  
      12  /* { dg-final { scan-assembler-times {\mslwi\M} 3 } } */
      13  /* { dg-final { scan-assembler-times {\mli\M} 3 } } */
      14  /* { dg-final { scan-assembler-times "vextuhrx" 6 { target le } } } */
      15  /* { dg-final { scan-assembler-times "vextuhlx" 6 { target be } } } */
      16  /* { dg-final { scan-assembler-times {\mextsh\M} 2 } } */
      17  
      18  #include <altivec.h>
      19  
      20  unsigned short
      21  testbi_cst (vector bool short vbs2)
      22  {
      23    return vec_extract (vbs2, 12);
      24  }
      25  
      26  signed short
      27  testsi_cst (vector signed short vss2)
      28  {
      29    return vec_extract (vss2, 12);
      30  }
      31  
      32  unsigned short
      33  testui_cst12 (vector unsigned short vus2)
      34  {
      35    return vec_extract (vus2, 12);
      36  }
      37  
      38  unsigned short
      39  testbi_var (vector bool short vbs2, signed int si)
      40  {
      41    return vec_extract (vbs2, si);
      42  }
      43  
      44  signed short
      45  testsi_var (vector signed short vss2, signed int si)
      46  {
      47  return vec_extract (vss2, si);
      48  }
      49  
      50  unsigned short
      51  testui_var (vector unsigned short vus2, signed int si)
      52  {
      53  return vec_extract (vus2, si);
      54  }
      55