(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
adds3.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 --save-temps -fno-inline" } */
       3  
       4  extern void abort (void);
       5  typedef long long s64;
       6  
       7  int
       8  adds_ext (s64 a, int b, int c)
       9  {
      10   s64 d = a + b;
      11  
      12    if (d == 0)
      13      return a + c;
      14    else
      15      return d;
      16  }
      17  
      18  int
      19  adds_shift_ext (s64 a, int b, int c)
      20  {
      21   s64 d = (a + ((s64)b << 3));
      22  
      23    if (d == 0)
      24      return a + c;
      25    else
      26      return d;
      27  }
      28  
      29  int main ()
      30  {
      31    int x;
      32    s64 y;
      33  
      34    x = adds_ext (0x13000002ll, 41, 15);
      35    if (x != (int)(0x13000002ll + 41))
      36      abort ();
      37  
      38    x = adds_ext (0x50505050ll, -0x50505050ll, 4);
      39    if (x != (int)(0x50505050ll + 4))
      40      abort ();
      41  
      42    x = adds_ext (0x12121212121ll, 2, 14);
      43    if (x != (int)(0x12121212121ll + 2))
      44      abort ();
      45  
      46    x = adds_shift_ext (0x123456789ll, 4, 12);
      47    if (x != (int)(0x123456789ll + (4 << 3)))
      48      abort ();
      49  
      50    x = adds_shift_ext (-(0x02020202ll << 3), 0x02020202ll, 8);
      51    if (x != (int)(8 - (0x02020202ll << 3)))
      52      abort ();
      53  
      54    x = adds_shift_ext (0x987987987987ll, 23, 41);
      55    if (x != (int)(0x987987987987ll + (23 << 3)))
      56      abort ();
      57  
      58    return 0;
      59  }
      60  
      61  /* { dg-final { scan-assembler-times "adds\tx\[0-9\]+, x\[0-9\]+, w\[0-9\]+, sxtw" 2 } } */