1// RUN: %clang_builtins %s %librt -o %t && %run %t
2// REQUIRES: librt_has_fixunstfsi
3
4#include <stdio.h>
5
6#if __LDBL_MANT_DIG__ == 113
7
8#include "fp_test.h"
9
10unsigned int __fixunstfsi(long double a);
11
12int test__fixunstfsi(long double a, unsigned int expected)
13{
14 unsigned int x = __fixunstfsi(a);
15 int ret = (x != expected);
16
17 if (ret)
18 {
19 printf("error in test__fixunstfsi(%.20Lf) = %u, "
20 "expected %u\n", a, x, expected);
21 }
22 return ret;
23}
24
25char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
26
27#endif
28
29int main()
30{
31#if __LDBL_MANT_DIG__ == 113
32 if (test__fixunstfsi(makeInf128(), UINT32_C(0xffffffff)))
33 return 1;
34 if (test__fixunstfsi(0, UINT32_C(0x0)))
35 return 1;
36 if (test__fixunstfsi(0x1.23456789abcdefp+5, UINT32_C(0x24)))
37 return 1;
38 if (test__fixunstfsi(0x1.23456789abcdefp-3, UINT32_C(0x0)))
39 return 1;
40 if (test__fixunstfsi(0x1.23456789abcdefp+20, UINT32_C(0x123456)))
41 return 1;
42 if (test__fixunstfsi(0x1.23456789abcdefp+40, UINT32_C(0xffffffff)))
43 return 1;
44 if (test__fixunstfsi(0x1.23456789abcdefp+256, UINT32_C(0xffffffff)))
45 return 1;
46 if (test__fixunstfsi(-0x1.23456789abcdefp+3, UINT32_C(0x0)))
47 return 1;
48
49 if (test__fixunstfsi(0x1.p+32, 0xFFFFFFFFLL))
50 return 1;
51
52#else
53 printf("skipped\n");
54
55#endif
56 return 0;
57}
58