diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/torture')
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c | 36 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/builtin-round-roundevenf128.c | 21 |
2 files changed, 57 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c b/gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c new file mode 100644 index 0000000..a39ab0c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c @@ -0,0 +1,36 @@ +/* { dg-do link } */ + +extern int link_error (int); + +#define TEST(FN, VALUE, RESULT) \ + if (__builtin_##FN (VALUE) != RESULT) link_error (__LINE__); + +int +main (void) +{ + TEST(roundeven, 0, 0); + TEST(roundeven, 0.5, 0); + TEST(roundeven, -0.5, 0); + TEST(roundeven, 6, 6); + TEST(roundeven, -8, -8); + TEST(roundeven, 2.5, 2); + TEST(roundeven, 3.5, 4); + TEST(roundeven, -1.5, -2); + TEST(roundeven, 3.499, 3); + TEST(roundeven, 3.501, 4); + + if (__builtin_copysign (1, __builtin_roundeven (-0.5)) != -1) + link_error (__LINE__); + if (__builtin_copysign (1, __builtin_roundeven (-0.0)) != -1) + link_error (__LINE__); + if (__builtin_copysign (-1, __builtin_roundeven (0.5)) != 1) + link_error (__LINE__); + if (__builtin_copysign (-1, __builtin_roundeven (0.0)) != 1) + link_error (__LINE__); + if (__builtin_copysign (1, __builtin_roundeven (-0.25)) != -1) + link_error (__LINE__); + if (__builtin_copysign (-1, __builtin_roundeven (0.25)) != 1) + link_error (__LINE__); + return 0; +} + diff --git a/gcc/testsuite/gcc.dg/torture/builtin-round-roundevenf128.c b/gcc/testsuite/gcc.dg/torture/builtin-round-roundevenf128.c new file mode 100644 index 0000000..85a8cbf --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/builtin-round-roundevenf128.c @@ -0,0 +1,21 @@ +/* { dg-do link } */ +/* { dg-add-options float128 } */ +/* { dg-require-effective-target float128 } */ + +extern int link_error (int); + +#define TEST(FN, VALUE, RESULT) \ + if (__builtin_##FN##f128 (VALUE) != RESULT) link_error (__LINE__); + +int +main (void) +{ + TEST(roundeven, (0x1p64+0.5f128), (0x1p64f128)); + TEST(roundeven, (0x1p63+0.5f128), (0x1p63f128)); + TEST(roundeven, (0x1p63-0.5f128), (0x1p63f128)); + TEST(roundeven, (0x1p64-0.5f128), (0x1p64f128)); + TEST(roundeven, (0x1p64+0.501f128), (0x1p64+1.0f128)); + TEST(roundeven, (0x1.C00000000000039A5653p1f128), (0x1p2f128)) + return 0; +} + |