Viewing file: copysign_1.c (1.22 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do run } */ /* { dg-options "-O2 --save-temps" } */
double fabs (double);
double check (double x, double y) { return __builtin_copysign (x, y); }
double check1 (double x) { return __builtin_copysign (x, 1.0); }
double check2 (double x) { return __builtin_copysign (1.0, x); }
double check3 (double x) { return -__builtin_copysign (x, 1.0); }
double check4 (double x, double y) { return x * __builtin_copysign (x, y); }
double check5 (double x, double y) { return __builtin_copysign (-x, -y); }
int main (int argc, char** argv) { double x = 2.0; double y = -5.0; double epsilon = 0.00001;
double expected = -2.0;
if (fabs (check (x, y) - expected) >= epsilon) __builtin_abort ();
expected = 2.0;
if (fabs (check1 (x) - expected) >= epsilon) __builtin_abort ();
expected = 1.0;
if (fabs (check2 (x) - expected) >= epsilon) __builtin_abort ();
expected = -2.0;
if (fabs (check3 (x) - expected) >= epsilon) __builtin_abort ();
expected = -4.0;
if (fabs (check4 (x, y) - expected) >= epsilon) __builtin_abort ();
expected = 2.0;
if (fabs (check5 (x, y) - expected) >= epsilon) __builtin_abort (); }
/* { dg-final { scan-assembler-not "copysign\tw" } } */
|