(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
sat-1.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target arm_arm_ok } */
       3  /* { dg-require-effective-target arm_arch_v6_ok } */
       4  /* { dg-options "-O2 -marm" } */
       5  /* { dg-add-options arm_arch_v6 } */
       6  
       7  
       8  static inline int sat1 (int a, int amin, int amax)
       9  {
      10    if      (a < amin) return amin;
      11    else if (a > amax) return amax;
      12    else               return a;
      13  }
      14  
      15  static inline int sat2 (int a, int amin, int amax)
      16  {
      17    if      (a > amax) return amax;
      18    else if (a < amin) return amin;
      19    else               return a;
      20  }
      21  
      22  int u1 (int x)
      23  {
      24    return sat1 (x, 0, 63);
      25  }
      26  
      27  int us1 (int x)
      28  {
      29    return sat1 (x >> 5, 0, 63);
      30  }
      31  
      32  int s1 (int x)
      33  {
      34    return sat1 (x, -64, 63);
      35  }
      36  
      37  int ss1 (int x)
      38  {
      39    return sat1 (x >> 5, -64, 63);
      40  }
      41  
      42  int u2 (int x)
      43  {
      44    return sat2 (x, 0, 63);
      45  }
      46  
      47  int us2 (int x)
      48  {
      49    return sat2 (x >> 5, 0, 63);
      50  }
      51  
      52  int s2 (int x)
      53  {
      54    return sat2 (x, -64, 63);
      55  }
      56  
      57  int ss2 (int x)
      58  {
      59    return sat2 (x >> 5, -64, 63);
      60  }
      61  
      62  /* { dg-final { scan-assembler-times "usat" 4 } } */
      63  /* { dg-final { scan-assembler-times "ssat" 4 } } */
      64