1  /* { dg-do compile } */
       2  /* { dg-require-effective-target arm_sat_ok } */
       3  /* { dg-add-options arm_sat } */
       4  
       5  #include <arm_acle.h>
       6  
       7  int32_t
       8  test_ssat (int32_t a)
       9  {
      10    return __ssat (a, 8);
      11  }
      12  
      13  /* { dg-final { scan-assembler-times "ssat\t...?, #8, ...?" 1 } } */
      14  
      15  uint32_t
      16  test_usat (int32_t a)
      17  {
      18    return __usat (a, 24);
      19  }
      20  
      21  /* { dg-final { scan-assembler-times "usat\t...?, #24, ...?" 1 } } */
      22  
      23  /* Test that USAT doesn't get removed as we need its Q-setting behavior.  */
      24  int
      25  test_sat_occur (int32_t a)
      26  {
      27    uint32_t res = __usat (a, 3);
      28    return __saturation_occurred ();
      29  }
      30  
      31  /* { dg-final { scan-assembler-times "usat\t...?, #3, ...?" 1 } } */
      32  /* { dg-final { scan-assembler "mrs\t...?, APSR" } } */
      33  
      34  void
      35  test_set_sat (void)
      36  {
      37    __set_saturation_occurred (0);
      38  }
      39  
      40  /* { dg-final { scan-assembler-times "msr\tAPSR_nzcvq, ...?" 1 } } */