(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sisd-shft-neg_1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -fno-inline" } */
       3  
       4  extern void abort (void);
       5  
       6  #define force_simd_si(v) asm volatile ("mov %s0, %1.s[0]" :"=w" (v) :"w" (v) :)
       7  
       8  unsigned int
       9  shft_add (unsigned int a, unsigned int b)
      10  {
      11    unsigned int c;
      12  
      13    force_simd_si (a);
      14    force_simd_si (b);
      15    c = a >> b;
      16    force_simd_si (c);
      17  
      18    return c + b;
      19  }
      20  
      21  int
      22  main (void)
      23  {
      24    unsigned int i = 0;
      25    unsigned int a = 0xdeadbeef;
      26  
      27    for (i = 0; i < 32; i++)
      28    {
      29      unsigned int exp = (a / (1 << i) + i);
      30      unsigned int got = shft_add (a, i);
      31  
      32      if (exp != got)
      33        abort ();
      34    }
      35  
      36    return 0;
      37  }
      38