xref: /aosp_15_r20/external/compiler-rt/test/builtins/Unit/fixunstfsi_test.c (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot //===--------------- fixunstfsi_test.c - Test __fixunstfsi ----------------===//
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot //                     The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot //
5*7c3d14c8STreehugger Robot // This file is dual licensed under the MIT and the University of Illinois Open
6*7c3d14c8STreehugger Robot // Source Licenses. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot //
8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
9*7c3d14c8STreehugger Robot //
10*7c3d14c8STreehugger Robot // This file tests __fixunstfsi for the compiler_rt library.
11*7c3d14c8STreehugger Robot //
12*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
13*7c3d14c8STreehugger Robot 
14*7c3d14c8STreehugger Robot #include <stdio.h>
15*7c3d14c8STreehugger Robot 
16*7c3d14c8STreehugger Robot #if __LDBL_MANT_DIG__ == 113
17*7c3d14c8STreehugger Robot 
18*7c3d14c8STreehugger Robot #include "fp_test.h"
19*7c3d14c8STreehugger Robot 
20*7c3d14c8STreehugger Robot unsigned int __fixunstfsi(long double a);
21*7c3d14c8STreehugger Robot 
test__fixunstfsi(long double a,unsigned int expected)22*7c3d14c8STreehugger Robot int test__fixunstfsi(long double a, unsigned int expected)
23*7c3d14c8STreehugger Robot {
24*7c3d14c8STreehugger Robot     unsigned int x = __fixunstfsi(a);
25*7c3d14c8STreehugger Robot     int ret = (x != expected);
26*7c3d14c8STreehugger Robot 
27*7c3d14c8STreehugger Robot     if (ret)
28*7c3d14c8STreehugger Robot     {
29*7c3d14c8STreehugger Robot         printf("error in test__fixunstfsi(%.20Lf) = %u, "
30*7c3d14c8STreehugger Robot                "expected %u\n", a, x, expected);
31*7c3d14c8STreehugger Robot     }
32*7c3d14c8STreehugger Robot     return ret;
33*7c3d14c8STreehugger Robot }
34*7c3d14c8STreehugger Robot 
35*7c3d14c8STreehugger Robot char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
36*7c3d14c8STreehugger Robot 
37*7c3d14c8STreehugger Robot #endif
38*7c3d14c8STreehugger Robot 
main()39*7c3d14c8STreehugger Robot int main()
40*7c3d14c8STreehugger Robot {
41*7c3d14c8STreehugger Robot #if __LDBL_MANT_DIG__ == 113
42*7c3d14c8STreehugger Robot     if (test__fixunstfsi(makeInf128(), UINT32_C(0xffffffff)))
43*7c3d14c8STreehugger Robot         return 1;
44*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0, UINT32_C(0x0)))
45*7c3d14c8STreehugger Robot         return 1;
46*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0x1.23456789abcdefp+5, UINT32_C(0x24)))
47*7c3d14c8STreehugger Robot         return 1;
48*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0x1.23456789abcdefp-3, UINT32_C(0x0)))
49*7c3d14c8STreehugger Robot         return 1;
50*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0x1.23456789abcdefp+20, UINT32_C(0x123456)))
51*7c3d14c8STreehugger Robot         return 1;
52*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0x1.23456789abcdefp+40, UINT32_C(0xffffffff)))
53*7c3d14c8STreehugger Robot         return 1;
54*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0x1.23456789abcdefp+256, UINT32_C(0xffffffff)))
55*7c3d14c8STreehugger Robot         return 1;
56*7c3d14c8STreehugger Robot     if (test__fixunstfsi(-0x1.23456789abcdefp+3, UINT32_C(0x0)))
57*7c3d14c8STreehugger Robot         return 1;
58*7c3d14c8STreehugger Robot 
59*7c3d14c8STreehugger Robot     if (test__fixunstfsi(0x1.p+32, 0xFFFFFFFFLL))
60*7c3d14c8STreehugger Robot         return 1;
61*7c3d14c8STreehugger Robot 
62*7c3d14c8STreehugger Robot #else
63*7c3d14c8STreehugger Robot     printf("skipped\n");
64*7c3d14c8STreehugger Robot 
65*7c3d14c8STreehugger Robot #endif
66*7c3d14c8STreehugger Robot     return 0;
67*7c3d14c8STreehugger Robot }
68