(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
adds1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 --save-temps -fno-inline" } */
       3  
       4  extern void abort (void);
       5  
       6  int
       7  adds_si_test1 (int a, int b, int c)
       8  {
       9    int d = a + b;
      10  
      11    /* { dg-final { scan-assembler "adds\tw\[0-9\]+, w\[0-9\]+, w\[0-9\]+" } } */
      12    if (d == 0)
      13      return a + c;
      14    else
      15      return d;
      16  }
      17  
      18  int
      19  adds_si_test2 (int a, int b, int c)
      20  {
      21    int d = a + 0xff;
      22  
      23    /* { dg-final { scan-assembler "adds\tw\[0-9\]+, w\[0-9\]+, 255" } } */
      24    if (d == 0)
      25      return a + c;
      26    else
      27      return d;
      28  }
      29  
      30  int
      31  adds_si_test3 (int a, int b, int c)
      32  {
      33    int d = a + (b << 3);
      34  
      35    /* { dg-final { scan-assembler "adds\tw\[0-9\]+, w\[0-9\]+, w\[0-9\]+, lsl 3" } } */
      36    if (d == 0)
      37      return a + c;
      38    else
      39      return d;
      40  }
      41  
      42  typedef long long s64;
      43  
      44  s64
      45  adds_di_test1 (s64 a, s64 b, s64 c)
      46  {
      47    s64 d = a + b;
      48  
      49    /* { dg-final { scan-assembler "adds\tx\[0-9\]+, x\[0-9\]+, x\[0-9\]+" } } */
      50    if (d == 0)
      51      return a + c;
      52    else
      53      return d;
      54  }
      55  
      56  s64
      57  adds_di_test2 (s64 a, s64 b, s64 c)
      58  {
      59    s64 d = a + 0xff;
      60  
      61    /* { dg-final { scan-assembler "adds\tx\[0-9\]+, x\[0-9\]+, 255" } } */
      62    if (d == 0)
      63      return a + c;
      64    else
      65      return d;
      66  }
      67  
      68  s64
      69  adds_di_test3 (s64 a, s64 b, s64 c)
      70  {
      71    s64 d = a + (b << 3);
      72  
      73    /* { dg-final { scan-assembler "adds\tx\[0-9\]+, x\[0-9\]+, x\[0-9\]+, lsl 3" } } */
      74    if (d == 0)
      75      return a + c;
      76    else
      77      return d;
      78  }
      79  
      80  int main ()
      81  {
      82    int x;
      83    s64 y;
      84  
      85    x = adds_si_test1 (29, 4, 5);
      86    if (x != (29 + 4))
      87      abort ();
      88  
      89    x = adds_si_test1 (5, 2, -5);
      90    if (x != 7)
      91      abort ();
      92  
      93    x = adds_si_test2 (29, 4, 5);
      94    if (x != (29 + 0xff))
      95      abort ();
      96  
      97    x = adds_si_test2 (-255, 2, 20);
      98    if (x != -235)
      99      abort ();
     100  
     101    x = adds_si_test3 (35, 4, 5);
     102    if (x != (35 + (4 << 3)))
     103      abort ();
     104  
     105    x = adds_si_test3 (-(2 << 3), 2, 20);
     106    if (x != (20 - (2 << 3)))
     107      abort ();
     108  
     109    y = adds_di_test1 (0x130000029ll,
     110  		     0x320000004ll,
     111  		     0x505050505ll);
     112  
     113    if (y != (0x130000029ll + 0x320000004ll))
     114      abort ();
     115  
     116    y = adds_di_test1 (0x5000500050005ll,
     117  		     -0x5000500050005ll,
     118  		     0x0000000002020ll);
     119    if (y != (0x5000500050005ll + 0x0000000002020ll))
     120      abort ();
     121  
     122    y = adds_di_test2 (0x130000029ll,
     123  		     0x320000004ll,
     124  		     0x505050505ll);
     125    if (y != (0x130000029ll + 0xff))
     126      abort ();
     127  
     128    y = adds_di_test2 (-0xff,
     129  		     0x320000004ll,
     130  		     0x505050505ll);
     131    if (y != (0x505050505ll - 0xff))
     132      abort ();
     133  
     134    y = adds_di_test3 (0x130000029ll,
     135  		     0x064000008ll,
     136  		     0x505050505ll);
     137    if (y != (0x130000029ll + (0x064000008ll << 3)))
     138      abort ();
     139  
     140    y = adds_di_test3 (0x130002900ll,
     141  		     -(0x130002900ll >> 3),
     142  		     0x505050505ll);
     143    if (y != (0x130002900ll + 0x505050505ll))
     144      abort ();
     145  
     146    return 0;
     147  }
     148