1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 // REQUIRES: librt_has_floatuntisf
3 //===-- floatuntisf.c - Test __floatuntisf --------------------------------===//
5 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
6 // See https://llvm.org/LICENSE.txt for license information.
7 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9 //===----------------------------------------------------------------------===//
11 // This file tests __floatuntisf for the compiler_rt library.
13 //===----------------------------------------------------------------------===//
19 #if defined(CRT_HAS_128BIT) && HAS_80_BIT_LONG_DOUBLE
21 // Returns: convert a to a float, rounding toward even.
23 // Assumption: float is a IEEE 32 bit floating point type
24 // tu_int is a 128 bit integral type
26 // seee eeee emmm mmmm mmmm mmmm mmmm mmmm
28 COMPILER_RT_ABI
float __floatuntisf(tu_int a
);
30 int test__floatuntisf(tu_int a
, float expected
)
32 float x
= __floatuntisf(a
);
37 printf("error in __floatuntisf(0x%.16llX%.16llX) = %a, expected %a\n",
38 at
.s
.high
, at
.s
.low
, x
, expected
);
43 COMPILE_TIME_ASSERT(sizeof(tu_int
) == 2*sizeof(du_int
));
44 COMPILE_TIME_ASSERT(sizeof(tu_int
)*CHAR_BIT
== 128);
45 COMPILE_TIME_ASSERT(sizeof(float)*CHAR_BIT
== 32);
51 #if defined(CRT_HAS_128BIT) && HAS_80_BIT_LONG_DOUBLE
52 if (test__floatuntisf(0, 0.0F
))
55 if (test__floatuntisf(1, 1.0F
))
57 if (test__floatuntisf(2, 2.0F
))
59 if (test__floatuntisf(20, 20.0F
))
62 if (test__floatuntisf(0x7FFFFF8000000000LL
, 0x1.FFFFFEp
+62F
))
64 if (test__floatuntisf(0x7FFFFF0000000000LL
, 0x1.FFFFFCp
+62F
))
67 if (test__floatuntisf(make_ti(0x8000008000000000LL
, 0), 0x1.000001p
+127F
))
69 if (test__floatuntisf(make_ti(0x8000000000000800LL
, 0), 0x1.0p
+127F
))
71 if (test__floatuntisf(make_ti(0x8000010000000000LL
, 0), 0x1.000002p
+127F
))
74 if (test__floatuntisf(make_ti(0x8000000000000000LL
, 0), 0x1.000000p
+127F
))
77 if (test__floatuntisf(0x0007FB72E8000000LL
, 0x1.FEDCBAp
+50F
))
80 if (test__floatuntisf(0x0007FB72EA000000LL
, 0x1.FEDCBA8p
+50F
))
82 if (test__floatuntisf(0x0007FB72EB000000LL
, 0x1.FEDCBACp
+50F
))
85 if (test__floatuntisf(0x0007FB72EC000000LL
, 0x1.FEDCBBp
+50F
))
88 if (test__floatuntisf(0x0007FB72E6000000LL
, 0x1.FEDCB98p
+50F
))
90 if (test__floatuntisf(0x0007FB72E7000000LL
, 0x1.FEDCB9Cp
+50F
))
92 if (test__floatuntisf(0x0007FB72E4000000LL
, 0x1.FEDCB9p
+50F
))
95 if (test__floatuntisf(0xFFFFFFFFFFFFFFFELL
, 0x1p
+64F
))
97 if (test__floatuntisf(0xFFFFFFFFFFFFFFFFLL
, 0x1p
+64F
))
100 if (test__floatuntisf(0x0007FB72E8000000LL
, 0x1.FEDCBAp
+50F
))
103 if (test__floatuntisf(0x0007FB72EA000000LL
, 0x1.FEDCBAp
+50F
))
105 if (test__floatuntisf(0x0007FB72EB000000LL
, 0x1.FEDCBAp
+50F
))
107 if (test__floatuntisf(0x0007FB72EBFFFFFFLL
, 0x1.FEDCBAp
+50F
))
109 if (test__floatuntisf(0x0007FB72EC000000LL
, 0x1.FEDCBCp
+50F
))
111 if (test__floatuntisf(0x0007FB72E8000001LL
, 0x1.FEDCBAp
+50F
))
114 if (test__floatuntisf(0x0007FB72E6000000LL
, 0x1.FEDCBAp
+50F
))
116 if (test__floatuntisf(0x0007FB72E7000000LL
, 0x1.FEDCBAp
+50F
))
118 if (test__floatuntisf(0x0007FB72E7FFFFFFLL
, 0x1.FEDCBAp
+50F
))
120 if (test__floatuntisf(0x0007FB72E4000001LL
, 0x1.FEDCBAp
+50F
))
122 if (test__floatuntisf(0x0007FB72E4000000LL
, 0x1.FEDCB8p
+50F
))
125 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCB90000000000001LL
),
128 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBA0000000000000LL
),
131 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBAFFFFFFFFFFFFFLL
),
134 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBB0000000000000LL
),
137 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBB0000000000001LL
),
140 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBBFFFFFFFFFFFFFLL
),
143 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBC0000000000000LL
),
146 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBC0000000000001LL
),
149 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBD0000000000000LL
),
152 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBD0000000000001LL
),
155 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBDFFFFFFFFFFFFFLL
),
158 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBE0000000000000LL
),