diff options
author | Yi Kong <yikong@google.com> | 2019-09-05 01:05:05 +0000 |
---|---|---|
committer | Yi Kong <yikong@google.com> | 2019-09-05 01:05:05 +0000 |
commit | 2dd05b302ecefead0c849efdadbe3a48b2492b94 (patch) | |
tree | a2042c378f07cd4808682471bd263cda8afeeaca /test | |
parent | 155ed45405e7ed61cd2e10fc114b31ca9525b8aa (diff) | |
download | compiler-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.c | 33 | ||||
-rw-r--r-- | test/builtins/Unit/subtf3_test.c | 30 |
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"); |