xref: /llvm-project/compiler-rt/test/builtins/Unit/floatunsitf_test.c (revision d2ce3e9621411f3391def327f89e3a650918989f)
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 
14 COMPILER_RT_ABI tf_float __floatunsitf(su_int a);
15 
test__floatunsitf(su_int a,uint64_t expectedHi,uint64_t expectedLo)16 int test__floatunsitf(su_int a, uint64_t expectedHi, uint64_t expectedLo) {
17   tf_float x = __floatunsitf(a);
18   int ret = compareResultF128(x, expectedHi, expectedLo);
19 
20   if (ret) {
21     printf("error in test__floatunsitf(%u) = %.20Lf, "
22            "expected %.20Lf\n",
23            a, x, fromRep128(expectedHi, expectedLo));
24   }
25   return ret;
26 }
27 
28 char assumption_1[sizeof(tf_float) * CHAR_BIT == 128] = {0};
29 
30 #endif
31 
main()32 int main() {
33 #if defined(CRT_HAS_IEEE_TF)
34   if (test__floatunsitf(0x7fffffff, UINT64_C(0x401dfffffffc0000),
35                         UINT64_C(0x0)))
36     return 1;
37   if (test__floatunsitf(0, UINT64_C(0x0), UINT64_C(0x0)))
38     return 1;
39   if (test__floatunsitf(0xffffffff, UINT64_C(0x401efffffffe0000),
40                         UINT64_C(0x0)))
41     return 1;
42   if (test__floatunsitf(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