(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
sh/
pr54089-7.c
       1  /* Check that the rotcr instruction is generated.  */
       2  /* { dg-do compile }  */
       3  /* { dg-options "-O1" } */
       4  /* { dg-final { scan-assembler-times "rotcr" 4 } } */
       5  /* { dg-final { scan-assembler-not "movt" } } */
       6  /* { dg-final { scan-assembler-not "or\t" } } */
       7  /* { dg-final { scan-assembler-not "rotr" } } */
       8  /* { dg-final { scan-assembler-not "and" } } */
       9  
      10  typedef char bool;
      11  
      12  int
      13  test_00 (int* a, int* b)
      14  {
      15    int i;
      16    unsigned int r = 0;
      17    for (i = 0; i < 16; ++i)
      18      {
      19        bool t = a[i] == b[i];
      20        r = (t << 31) | (r >> 1);
      21      }
      22    return r;
      23  }
      24  
      25  int
      26  test_01 (int* a, int* b)
      27  {
      28    int i;
      29    unsigned int r = 0;
      30    for (i = 0; i < 16; ++i)
      31      {
      32        bool t = a[i] == b[i];
      33        r = (t << 31) | (r >> 2);
      34      }
      35    return r;
      36  }
      37  
      38  int
      39  test_02 (int* a, int* b)
      40  {
      41    int i;
      42    unsigned int r = 0;
      43    for (i = 0; i < 16; ++i)
      44      {
      45        bool t = a[i] == b[i];
      46        r = (t << 31) | (r >> 3);
      47      }
      48    return r;
      49  }
      50  
      51  unsigned int
      52  test_03 (const bool* a)
      53  {
      54    int i;
      55    unsigned int r = 0;
      56    for (i = 0; i < 32; ++i)
      57      {
      58        bool t = a[i];
      59        r = (t << 31) | (r >> 1);
      60      }
      61    return r;
      62  }