summaryrefslogtreecommitdiff
path: root/test/builtins/Unit/fixtfti_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/builtins/Unit/fixtfti_test.c')
-rw-r--r--test/builtins/Unit/fixtfti_test.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/builtins/Unit/fixtfti_test.c b/test/builtins/Unit/fixtfti_test.c
new file mode 100644
index 0000000000000..52184ca624e19
--- /dev/null
+++ b/test/builtins/Unit/fixtfti_test.c
@@ -0,0 +1,83 @@
+//===--------------- fixtfti_test.c - Test __fixtfti ----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file tests __fixtfti for the compiler_rt library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "int_lib.h"
+#include <stdio.h>
+
+#if __LDBL_MANT_DIG__ == 113
+
+#include "fp_test.h"
+
+ti_int __fixtfti(long double a);
+
+int test__fixtfti(long double a, ti_int expected)
+{
+ ti_int x = __fixtfti(a);
+ int ret = (x != expected);
+
+ if (ret)
+ {
+ twords xt;
+ xt.all = x;
+
+ twords expectedt;
+ expectedt.all = expected;
+
+ printf("error in test__fixtfti(%.20Lf) = 0x%.16llX%.16llX, "
+ "expected 0x%.16llX%.16llX\n",
+ a, xt.s.high, xt.s.low, expectedt.s.high, expectedt.s.low);
+ }
+ return ret;
+}
+
+char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
+
+#endif
+
+int main()
+{
+#if __LDBL_MANT_DIG__ == 113
+ if (test__fixtfti(makeInf128(), make_ti(0x7fffffffffffffffLL,
+ 0xffffffffffffffffLL)))
+ return 1;
+ if (test__fixtfti(0, make_ti(0x0LL, 0x0LL)))
+ return 1;
+ if (test__fixtfti(0x1.23456789abcdefp+5L, make_ti(0x0LL, 0x24LL)))
+ return 1;
+ if (test__fixtfti(0x1.23456789abcdefp-3L, make_ti(0x0LL, 0x0LL)))
+ return 1;
+ if (test__fixtfti(0x1.23456789abcdef12345678p+20L,
+ make_ti(0x0LL, 0x123456LL)))
+ return 1;
+ if (test__fixtfti(0x1.23456789abcdef123456789abcdep+112L,
+ make_ti(0x123456789abcdLL, 0xef123456789abcdeLL)))
+ return 1;
+ if (test__fixtfti(-0x1.23456789abcdef123456789abcdep+112L,
+ make_ti(0xFFFEDCBA98765432LL, 0x10EDCBA987654322LL)))
+ return 1;
+ if (test__fixtfti(0x1.23456789abcdefp+256L, make_ti(0x7fffffffffffffffLL,
+ 0xffffffffffffffffLL)))
+ return 1;
+ if (test__fixtfti(-0x1.23456789abcdefp+20L, make_ti(0xffffffffffffffffLL,
+ 0xffffffffffedcbaaLL)))
+ return 1;
+ if (test__fixtfti(-0x1.23456789abcdefp+256L, make_ti(0x8000000000000000LL,
+ 0x0)))
+ return 1;
+
+#else
+ printf("skipped\n");
+
+#endif
+ return 0;
+}