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