summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorYi Kong <yikong@google.com>2019-09-05 01:05:05 +0000
committerYi Kong <yikong@google.com>2019-09-05 01:05:05 +0000
commit2dd05b302ecefead0c849efdadbe3a48b2492b94 (patch)
treea2042c378f07cd4808682471bd263cda8afeeaca /test
parent155ed45405e7ed61cd2e10fc114b31ca9525b8aa (diff)
downloadcompiler-rt-2dd05b302ecefead0c849efdadbe3a48b2492b94.tar.gz
Revert "Revert "[builtins] Rounding mode support for addxf3/subxf3""
Test failure fixed. This reverts commit e204d244badb2e9765a1020f41c773f63da208f4. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@371003 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/builtins/Unit/addtf3_test.c33
-rw-r--r--test/builtins/Unit/subtf3_test.c30
2 files changed, 62 insertions, 1 deletions
diff --git a/test/builtins/Unit/addtf3_test.c b/test/builtins/Unit/addtf3_test.c
index 8f00f6de7..492d93bb9 100644
--- a/test/builtins/Unit/addtf3_test.c
+++ b/test/builtins/Unit/addtf3_test.c
@@ -11,11 +11,12 @@
//
//===----------------------------------------------------------------------===//
-#include "int_lib.h"
+#include <fenv.h>
#include <stdio.h>
#if __LDBL_MANT_DIG__ == 113
+#include "int_lib.h"
#include "fp_test.h"
// Returns: a + b
@@ -74,6 +75,36 @@ int main()
UINT64_C(0x61e58dd6c51eb77c)))
return 1;
+#if (defined(__arm__) || defined(__aarch64__)) && defined(__ARM_FP)
+ // Rounding mode tests on supported architectures
+ const long double m = 1234.0L, n = 0.01L;
+
+ fesetround(FE_UPWARD);
+ if (test__addtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d8)))
+ return 1;
+
+ fesetround(FE_DOWNWARD);
+ if (test__addtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d7)))
+ return 1;
+
+
+ fesetround(FE_TOWARDZERO);
+ if (test__addtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d7)))
+ return 1;
+
+ fesetround(FE_TONEAREST);
+ if (test__addtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d7)))
+ return 1;
+#endif
+
#else
printf("skipped\n");
diff --git a/test/builtins/Unit/subtf3_test.c b/test/builtins/Unit/subtf3_test.c
index bcf82e0c6..4953d1ceb 100644
--- a/test/builtins/Unit/subtf3_test.c
+++ b/test/builtins/Unit/subtf3_test.c
@@ -11,6 +11,7 @@
//
//===----------------------------------------------------------------------===//
+#include <fenv.h>
#include <stdio.h>
#if __LDBL_MANT_DIG__ == 113
@@ -67,6 +68,35 @@ int main()
UINT64_C(0xa44a7bca780a166c)))
return 1;
+#if (defined(__arm__) || defined(__aarch64__)) && defined(__ARM_FP)
+ // Rounding mode tests on supported architectures
+ const long double m = 1234.02L, n = 0.01L;
+
+ fesetround(FE_UPWARD);
+ if (test__subtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d7)))
+ return 1;
+
+ fesetround(FE_DOWNWARD);
+ if (test__subtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d6)))
+ return 1;
+
+ fesetround(FE_TOWARDZERO);
+ if (test__subtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d6)))
+ return 1;
+
+ fesetround(FE_TONEAREST);
+ if (test__subtf3(m, n,
+ UINT64_C(0x40093480a3d70a3d),
+ UINT64_C(0x70a3d70a3d70a3d7)))
+ return 1;
+#endif
+
#else
printf("skipped\n");