1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 // REQUIRES: librt_has_floatuntisf
8 #if defined(CRT_HAS_128BIT) && HAS_80_BIT_LONG_DOUBLE
10 // Returns: convert a to a float, rounding toward even.
12 // Assumption: float is a IEEE 32 bit floating point type
13 // tu_int is a 128 bit integral type
15 // seee eeee emmm mmmm mmmm mmmm mmmm mmmm
17 COMPILER_RT_ABI
float __floatuntisf(tu_int a
);
19 int test__floatuntisf(tu_int a
, float expected
)
21 float x
= __floatuntisf(a
);
26 printf("error in __floatuntisf(0x%.16llX%.16llX) = %a, expected %a\n",
27 at
.s
.high
, at
.s
.low
, x
, expected
);
32 COMPILE_TIME_ASSERT(sizeof(tu_int
) == 2*sizeof(du_int
));
33 COMPILE_TIME_ASSERT(sizeof(tu_int
)*CHAR_BIT
== 128);
34 COMPILE_TIME_ASSERT(sizeof(float)*CHAR_BIT
== 32);
40 #if defined(CRT_HAS_128BIT) && HAS_80_BIT_LONG_DOUBLE
41 if (test__floatuntisf(0, 0.0F
))
44 if (test__floatuntisf(1, 1.0F
))
46 if (test__floatuntisf(2, 2.0F
))
48 if (test__floatuntisf(20, 20.0F
))
51 if (test__floatuntisf(0x7FFFFF8000000000LL
, 0x1.FFFFFEp
+62F
))
53 if (test__floatuntisf(0x7FFFFF0000000000LL
, 0x1.FFFFFCp
+62F
))
56 if (test__floatuntisf(make_ti(0x8000008000000000LL
, 0), 0x1.000001p
+127F
))
58 if (test__floatuntisf(make_ti(0x8000000000000800LL
, 0), 0x1.0p
+127F
))
60 if (test__floatuntisf(make_ti(0x8000010000000000LL
, 0), 0x1.000002p
+127F
))
63 if (test__floatuntisf(make_ti(0x8000000000000000LL
, 0), 0x1.000000p
+127F
))
66 if (test__floatuntisf(0x0007FB72E8000000LL
, 0x1.FEDCBAp
+50F
))
69 if (test__floatuntisf(0x0007FB72EA000000LL
, 0x1.FEDCBA8p
+50F
))
71 if (test__floatuntisf(0x0007FB72EB000000LL
, 0x1.FEDCBACp
+50F
))
74 if (test__floatuntisf(0x0007FB72EC000000LL
, 0x1.FEDCBBp
+50F
))
77 if (test__floatuntisf(0x0007FB72E6000000LL
, 0x1.FEDCB98p
+50F
))
79 if (test__floatuntisf(0x0007FB72E7000000LL
, 0x1.FEDCB9Cp
+50F
))
81 if (test__floatuntisf(0x0007FB72E4000000LL
, 0x1.FEDCB9p
+50F
))
84 if (test__floatuntisf(0xFFFFFFFFFFFFFFFELL
, 0x1p
+64F
))
86 if (test__floatuntisf(0xFFFFFFFFFFFFFFFFLL
, 0x1p
+64F
))
89 if (test__floatuntisf(0x0007FB72E8000000LL
, 0x1.FEDCBAp
+50F
))
92 if (test__floatuntisf(0x0007FB72EA000000LL
, 0x1.FEDCBAp
+50F
))
94 if (test__floatuntisf(0x0007FB72EB000000LL
, 0x1.FEDCBAp
+50F
))
96 if (test__floatuntisf(0x0007FB72EBFFFFFFLL
, 0x1.FEDCBAp
+50F
))
98 if (test__floatuntisf(0x0007FB72EC000000LL
, 0x1.FEDCBCp
+50F
))
100 if (test__floatuntisf(0x0007FB72E8000001LL
, 0x1.FEDCBAp
+50F
))
103 if (test__floatuntisf(0x0007FB72E6000000LL
, 0x1.FEDCBAp
+50F
))
105 if (test__floatuntisf(0x0007FB72E7000000LL
, 0x1.FEDCBAp
+50F
))
107 if (test__floatuntisf(0x0007FB72E7FFFFFFLL
, 0x1.FEDCBAp
+50F
))
109 if (test__floatuntisf(0x0007FB72E4000001LL
, 0x1.FEDCBAp
+50F
))
111 if (test__floatuntisf(0x0007FB72E4000000LL
, 0x1.FEDCB8p
+50F
))
114 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCB90000000000001LL
),
117 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBA0000000000000LL
),
120 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBAFFFFFFFFFFFFFLL
),
123 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBB0000000000000LL
),
126 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBB0000000000001LL
),
129 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBBFFFFFFFFFFFFFLL
),
132 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBC0000000000000LL
),
135 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBC0000000000001LL
),
138 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBD0000000000000LL
),
141 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBD0000000000001LL
),
144 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBDFFFFFFFFFFFFFLL
),
147 if (test__floatuntisf(make_ti(0x0000000000001FEDLL
, 0xCBE0000000000000LL
),