1// RUN: %clang_builtins %s %librt -o %t && %run %t
2// REQUIRES: librt_has_floatunsitf
3
4#include "int_lib.h"
5#include <stdio.h>
6
7// The testcase currently assumes IEEE TF format, once that has been
8// fixed the defined(CRT_HAS_IEEE_TF) guard can be removed to enable it for
9// IBM 128 floats as well.
10#if defined(CRT_HAS_IEEE_TF)
11
12# include "fp_test.h"
13
14COMPILER_RT_ABI tf_float __floatunsitf(su_int a);
15
16int test__floatunsitf(su_int a, uint64_t expectedHi, uint64_t expectedLo) {
17 tf_float x = __floatunsitf(a);
18 int ret = compareResultF128(result: x, expectedHi, expectedLo);
19
20 if (ret) {
21 printf(format: "error in test__floatunsitf(%u) = %.20Lf, "
22 "expected %.20Lf\n",
23 a, x, fromRep128(hi: expectedHi, lo: expectedLo));
24 }
25 return ret;
26}
27
28char assumption_1[sizeof(tf_float) * CHAR_BIT == 128] = {0};
29
30#endif
31
32int main() {
33#if defined(CRT_HAS_IEEE_TF)
34 if (test__floatunsitf(a: 0x7fffffff, UINT64_C(0x401dfffffffc0000),
35 UINT64_C(0x0)))
36 return 1;
37 if (test__floatunsitf(a: 0, UINT64_C(0x0), UINT64_C(0x0)))
38 return 1;
39 if (test__floatunsitf(a: 0xffffffff, UINT64_C(0x401efffffffe0000),
40 UINT64_C(0x0)))
41 return 1;
42 if (test__floatunsitf(a: 0x12345678, UINT64_C(0x401b234567800000),
43 UINT64_C(0x0)))
44 return 1;
45
46#else
47 printf("skipped\n");
48
49#endif
50 return 0;
51}
52

source code of compiler-rt/test/builtins/Unit/floatunsitf_test.c