(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
thumb-16bit-ops.c
       1  /* Check that the compiler properly uses 16-bit encodings where available.  */
       2  /* { dg-do compile } */
       3  /* { dg-require-effective-target arm_thumb2_ok } */
       4  /* { dg-options "-Os -fno-builtin -mthumb" } */
       5  
       6  int
       7  f (int a, int b)
       8  {
       9    return a + b;
      10  }
      11  
      12  /* { dg-final { scan-assembler "add	r0, r0, r1" } } */
      13  
      14  int
      15  f2 (int a, int b, int c)
      16  {
      17    return b + c;
      18  }
      19  
      20  /* { dg-final { scan-assembler "adds	r0, r1, r2" } } */
      21  int
      22  g1 (int a)
      23  {
      24    return a + 255;
      25  }
      26  
      27  /* { dg-final { scan-assembler "adds	r0, r0, #255" } } */
      28  
      29  int
      30  g2 (int a)
      31  {
      32    return a + 256;
      33  }
      34  
      35  /* { dg-final { scan-assembler "add	r0, r0, #256" } } */
      36  
      37  int
      38  g3 (int a)
      39  {
      40    return a - 255;
      41  }
      42  
      43  /* { dg-final { scan-assembler "subs	r0, r0, #255" } } */
      44  
      45  int
      46  g4 (int a)
      47  {
      48    return a - 256;
      49  }
      50  
      51  /* { dg-final { scan-assembler "sub	r0, r0, #256" } } */
      52  
      53  int
      54  h1 (int a, int b)
      55  {
      56    return b + 7;
      57  }
      58  
      59  /* { dg-final { scan-assembler "adds	r0, r1, #7" } } */
      60  
      61  int
      62  h2 (int a, int b)
      63  {
      64    return b + 8;
      65  }
      66  
      67  /* { dg-final { scan-assembler "add	r0, r1, #8" } } */
      68  
      69  int
      70  h3 (int a, int b)
      71  {
      72    return b - 7;
      73  }
      74  
      75  /* { dg-final { scan-assembler "subs	r0, r1, #7" } } */
      76  
      77  int
      78  h4 (int a, int b)
      79  {
      80    return b - 8;
      81  }
      82  
      83  /* { dg-final { scan-assembler "sub	r0, r1, #8" } } */
      84  
      85  int
      86  i (int a, int b)
      87  {
      88    return b;
      89  }
      90  
      91  /* { dg-final { scan-assembler "mov	r0, r1" } } */
      92  
      93  int
      94  j1 ()
      95  {
      96    return 255;
      97  }
      98  
      99  /* { dg-final { scan-assembler "movs	r0, #255" } } */
     100  
     101  int
     102  j2 ()
     103  {
     104    return 256;
     105  }
     106  
     107  /* { dg-final { scan-assembler "mov	r0, #256" } } */
     108  
     109  int
     110  k (int a, int b)
     111  {
     112    return b << 15;
     113  }
     114  
     115  /* { dg-final { scan-assembler "lsls	r0, r1, #15" } } */
     116  
     117  int
     118  l1 (int a, int b)
     119  {
     120    return a << b;
     121  }
     122  
     123  /* { dg-final { scan-assembler "lsls	r0, r0, r1" } } */
     124  
     125  int
     126  l2 (int a, int b, int c)
     127  {
     128    return b << c;
     129  }
     130  
     131  /* { dg-final { scan-assembler "lsl	r0, r1, r2" } } */
     132  
     133  int
     134  m (int a, int b)
     135  {
     136    return b >> 15;
     137  }
     138  
     139  /* { dg-final { scan-assembler "asrs	r0, r1, #15" } } */
     140  
     141  int
     142  n1 (int a, int b)
     143  {
     144    return a >> b;
     145  }
     146  
     147  /* { dg-final { scan-assembler "asrs	r0, r0, r1" } } */
     148  
     149  int
     150  n2 (int a, int b, int c)
     151  {
     152    return b >> c;
     153  }
     154  
     155  /* { dg-final { scan-assembler "asr	r0, r1, r2" } } */
     156  
     157  unsigned int
     158  o (unsigned int a, unsigned int b)
     159  {
     160    return b >> 15;
     161  }
     162  
     163  /* { dg-final { scan-assembler "lsrs	r0, r1, #15" } } */
     164  
     165  unsigned int
     166  p1 (unsigned int a, unsigned int b)
     167  {
     168    return a >> b;
     169  }
     170  
     171  /* { dg-final { scan-assembler "lsrs	r0, r0, r1" } } */
     172  
     173  unsigned int
     174  p2 (unsigned int a, unsigned int b, unsigned int c)
     175  {
     176    return b >> c;
     177  }
     178  
     179  /* { dg-final { scan-assembler "lsr	r0, r1, r2" } } */
     180  
     181  int
     182  q (int a, int b)
     183  {
     184    return b * a;
     185  }
     186  
     187  /* { dg-final { scan-assembler "muls	r0, r1, r0" } } */
     188  
     189  int
     190  r (int a, int b)
     191  {
     192    return ~b;
     193  }
     194  
     195  /* { dg-final { scan-assembler "mvns	r0, r1" } } */
     196  
     197  int
     198  s (int a, int b)
     199  {
     200    return -b;
     201  }
     202  
     203  /* { dg-final { scan-assembler "rsbs	r0, r1, #0" } } */