(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
copysign_2.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 --save-temps" } */
       3  
       4  float fabsf (float);
       5  
       6  float
       7  check (float x, float y)
       8  {
       9    return __builtin_copysignf (x, y);
      10  }
      11  
      12  float
      13  check1 (float x)
      14  {
      15    return __builtin_copysignf (x, 1.0);
      16  }
      17  
      18  float
      19  check2 (float x)
      20  {
      21    return __builtin_copysignf (1.0, x);
      22  }
      23  
      24  float
      25  check3 (float x)
      26  {
      27    return -__builtin_copysignf (x, 1.0);
      28  }
      29  
      30  float
      31  check4 (float x, float y)
      32  {
      33    return x * __builtin_copysignf (x, y);
      34  }
      35  
      36  float
      37  check5 (float x, float y)
      38  {
      39    return __builtin_copysignf (-x, -y);
      40  }
      41  
      42  int
      43  main (int argc, char** argv)
      44  {
      45    float x = 2.0f;
      46    float y = -5.0f;
      47    float epsilon = 0.00001f;
      48  
      49    float expected = -2.0f;
      50  
      51    if (fabsf (check (x, y) - expected) >= epsilon)
      52      __builtin_abort ();
      53  
      54    expected = 2.0f;
      55  
      56    if (fabsf (check1 (x) - expected) >= epsilon)
      57      __builtin_abort ();
      58  
      59    expected = 1.0f;
      60  
      61    if (fabsf (check2 (x) - expected) >= epsilon)
      62      __builtin_abort ();
      63  
      64    expected = -2.0f;
      65  
      66    if (fabsf (check3 (x) - expected) >= epsilon)
      67      __builtin_abort ();
      68  
      69    expected = -4.0f;
      70  
      71    if (fabsf (check4 (x, y) - expected) >= epsilon)
      72      __builtin_abort ();
      73  
      74    expected = 2.0f;
      75  
      76    if (fabsf (check5 (x, y) - expected) >= epsilon)
      77      __builtin_abort ();
      78  }
      79  
      80  /* { dg-final { scan-assembler-not "copysign\tw" } } */
      81