(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
swaps-p8-5.c
       1  /* { dg-do compile { target le } } */
       2  /* { dg-require-effective-target powerpc_p8vector_ok } */
       3  /* { dg-options "-mdejagnu-cpu=power8 -O3" } */
       4  /* { dg-final { scan-assembler "lxvd2x" } } */
       5  /* { dg-final { scan-assembler "stxvd2x" } } */
       6  /* { dg-final { scan-assembler-not "xxpermdi" } } */
       7  
       8  void abort ();
       9  
      10  #define N 4096
      11  int ca[N] __attribute__((aligned(16)));
      12  int cb[N] __attribute__((aligned(16)));
      13  int cc[N] __attribute__((aligned(16)));
      14  int cd[N] __attribute__((aligned(16)));
      15  
      16  __attribute__((noinline)) void foo ()
      17  {
      18    int i;
      19    for (i = 0; i < N; i++) {
      20      ca[i] = ((cb[i] + cc[i]) * cd[i]) >> 3;
      21    }
      22  }
      23  
      24  __attribute__((noinline)) void init ()
      25  {
      26    int i;
      27    for (i = 0; i < N; ++i) {
      28      cb[i] = 3 * i - 2048;
      29      cc[i] = -5 * i + 93;
      30      cd[i] = i % 2 ? 1 : -1;
      31    }
      32  }
      33  
      34  int main ()
      35  {
      36    int i;
      37    init ();
      38    foo ();
      39    for (i = 0; i < N; ++i)
      40      if (i % 2 == 1 && ca[i] != (-2 * i - 1955) >> 3)
      41        abort ();
      42      else if (i % 2 == 0 && ca[i] != (1955 + 2 * i) >> 3)
      43        abort ();
      44    return 0;
      45  }