Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libc/src/__support/FPUtil/FPBits.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ template <typename T> struct FPBits {
} // namespace fputil
} // namespace LIBC_NAMESPACE

#ifdef SPECIAL_X86_LONG_DOUBLE
#ifdef LIBC_LONG_DOUBLE_IS_X86_FLOAT80
#include "x86_64/LongDoubleBits.h"
#endif

Expand Down
4 changes: 2 additions & 2 deletions libc/src/__support/FPUtil/ManipulationFunctions.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,8 @@ LIBC_INLINE T nextafter(T from, U to) {
} // namespace fputil
} // namespace LIBC_NAMESPACE

#ifdef SPECIAL_X86_LONG_DOUBLE
#ifdef LIBC_LONG_DOUBLE_IS_X86_FLOAT80
#include "x86_64/NextAfterLongDouble.h"
#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

#endif // LLVM_LIBC_SRC___SUPPORT_FPUTIL_MANIPULATIONFUNCTIONS_H
4 changes: 2 additions & 2 deletions libc/src/__support/FPUtil/NormalFloat.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ template <typename T> struct NormalFloat {
}
};

#ifdef SPECIAL_X86_LONG_DOUBLE
#ifdef LIBC_LONG_DOUBLE_IS_X86_FLOAT80
template <>
LIBC_INLINE void
NormalFloat<long double>::init_from_bits(FPBits<long double> bits) {
Expand Down Expand Up @@ -259,7 +259,7 @@ template <> LIBC_INLINE NormalFloat<long double>::operator long double() const {
result.set_implicit_bit(1);
return static_cast<long double>(result);
}
#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

} // namespace fputil
} // namespace LIBC_NAMESPACE
Expand Down
6 changes: 3 additions & 3 deletions libc/src/__support/FPUtil/generic/sqrt.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ template <typename T> struct SpecialLongDouble {
static constexpr bool VALUE = false;
};

#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
template <> struct SpecialLongDouble<long double> {
static constexpr bool VALUE = true;
};
#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

template <typename T>
LIBC_INLINE void normalize(int &exponent,
Expand All @@ -48,7 +48,7 @@ template <>
LIBC_INLINE void normalize<long double>(int &exponent, uint64_t &mantissa) {
normalize<double>(exponent, mantissa);
}
#elif !defined(SPECIAL_X86_LONG_DOUBLE)
#elif !defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
template <>
LIBC_INLINE void normalize<long double>(int &exponent, UInt128 &mantissa) {
const uint64_t hi_bits = static_cast<uint64_t>(mantissa >> 64);
Expand Down
4 changes: 2 additions & 2 deletions libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ LIBC_INLINE long double sqrt(long double x);

// Correctly rounded SQRT for all rounding modes.
// Shift-and-add algorithm.
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
LIBC_INLINE long double sqrt(long double x) {
using UIntType = typename FPBits<long double>::UIntType;
constexpr UIntType ONE = UIntType(1)
Expand Down Expand Up @@ -135,7 +135,7 @@ LIBC_INLINE long double sqrt(long double x) {
return out;
}
}
#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

} // namespace x86
} // namespace fputil
Expand Down
3 changes: 1 addition & 2 deletions libc/src/__support/macros/properties/float.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@
#if (LDBL_MANT_DIG == 53)
#define LIBC_LONG_DOUBLE_IS_FLOAT64
#elif (LDBL_MANT_DIG == 64)
// TODO: Replace with LIBC_LONG_DOUBLE_IS_X86_BIN80
#define SPECIAL_X86_LONG_DOUBLE
#define LIBC_LONG_DOUBLE_IS_X86_FLOAT80
#elif (LDBL_MANT_DIG == 113)
#define LIBC_LONG_DOUBLE_IS_FLOAT128
#endif
Expand Down
4 changes: 2 additions & 2 deletions libc/src/__support/str_to_float.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ template <class T> LIBC_INLINE void set_implicit_bit(fputil::FPBits<T> &) {
return;
}

#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
template <>
LIBC_INLINE void
set_implicit_bit<long double>(fputil::FPBits<long double> &result) {
Expand Down Expand Up @@ -529,7 +529,7 @@ template <> class ClingerConsts<long double> {
static constexpr long double MAX_EXACT_INT =
ClingerConsts<double>::MAX_EXACT_INT;
};
#elif defined(SPECIAL_X86_LONG_DOUBLE)
#elif defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
template <> class ClingerConsts<long double> {
public:
static constexpr long double POWERS_OF_TEN_ARRAY[] = {
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/__support/str_to_float_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ TEST(LlvmLibcStrToFloatTest, SimpleDecimalConversionExtraTypes) {
TEST_F(LlvmLibcStrToFloatTest, EiselLemireFloat64AsLongDouble) {
eisel_lemire_test<long double>(123, 0, 0x1EC00000000000, 1029);
}
#elif defined(SPECIAL_X86_LONG_DOUBLE)
#elif defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
TEST_F(LlvmLibcStrToFloatTest, EiselLemireFloat80Simple) {
eisel_lemire_test<long double>(123, 0, 0xf600000000000000, 16389);
eisel_lemire_test<long double>(12345678901234568192u, 0, 0xab54a98ceb1f0c00,
Expand Down
57 changes: 29 additions & 28 deletions libc/test/src/stdio/sprintf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatHexExpConv) {
// Length Modifier Tests.

written = LIBC_NAMESPACE::sprintf(buff, "%La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.ccccccccccccccdp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.999999999999ap-4");
Expand All @@ -651,7 +651,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatHexExpConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xf.38db1f9dd3dac05p+3318");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand All @@ -660,7 +660,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatHexExpConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e-1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x8.68a9188a89e1467p-3325");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x0p+0");
Expand Down Expand Up @@ -766,7 +766,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatHexExpConv) {
ASSERT_STREQ_LEN(written, buff, "0x0p+0");

written = LIBC_NAMESPACE::sprintf(buff, "%.1La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.dp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.ap-4");
Expand All @@ -775,7 +775,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatHexExpConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%.1La", 0xf.fffffffffffffffp16380L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x1.0p+16384");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand Down Expand Up @@ -1024,7 +1024,8 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {

// Some float128 systems (specifically the ones used for aarch64 buildbots)
// don't respect signs for long double NaNs.
#if defined(SPECIAL_X86_LONG_DOUBLE) || defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80) || \
defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
written = LIBC_NAMESPACE::sprintf(buff, "%LF", -ld_nan);
ASSERT_STREQ_LEN(written, buff, "-NAN");
#endif
Expand All @@ -1042,7 +1043,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {
written = LIBC_NAMESPACE::sprintf(buff, "%.Lf", -2.5L);
ASSERT_STREQ_LEN(written, buff, "-2");

#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)

written = LIBC_NAMESPACE::sprintf(buff, "%Lf", 1e100L);
ASSERT_STREQ_LEN(written, buff,
Expand Down Expand Up @@ -1327,11 +1328,11 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {
"570449525088342437216896462077260223998756027453411520977536701491759878"
"422771447006016890777855573925295187921971811871399320142563330377888532"
"179817332113");
#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

/*
written = LIBC_NAMESPACE::sprintf(buff, "%La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.ccccccccccccccdp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.999999999999ap-4");
Expand All @@ -1340,7 +1341,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xf.38db1f9dd3dac05p+3318");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand All @@ -1349,7 +1350,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e-1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x8.68a9188a89e1467p-3325");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x0p+0");
Expand Down Expand Up @@ -1548,7 +1549,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {

/*
written = LIBC_NAMESPACE::sprintf(buff, "%.1La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.dp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.ap-4");
Expand All @@ -1557,7 +1558,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%.1La",
0xf.fffffffffffffffp16380L); #if defined(SPECIAL_X86_LONG_DOUBLE)
0xf.fffffffffffffffp16380L); #if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x1.0p+16384");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand Down Expand Up @@ -1858,7 +1859,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) {

// Length Modifier Tests.

#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
written = LIBC_NAMESPACE::sprintf(buff, "%.9Le", 1000000000500000000.1L);
ASSERT_STREQ_LEN(written, buff, "1.000000001e+18");

Expand Down Expand Up @@ -1975,7 +1976,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) {
*/
/*
written = LIBC_NAMESPACE::sprintf(buff, "%La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.ccccccccccccccdp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.999999999999ap-4");
Expand All @@ -1984,7 +1985,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xf.38db1f9dd3dac05p+3318");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand All @@ -1993,7 +1994,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e-1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x8.68a9188a89e1467p-3325");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x0p+0");
Expand Down Expand Up @@ -2171,7 +2172,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) {

/*
written = LIBC_NAMESPACE::sprintf(buff, "%.1La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.dp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.ap-4");
Expand All @@ -2180,7 +2181,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%.1La",
0xf.fffffffffffffffp16380L); #if defined(SPECIAL_X86_LONG_DOUBLE)
0xf.fffffffffffffffp16380L); #if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x1.0p+16384");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand Down Expand Up @@ -2499,15 +2500,15 @@ TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) {

// Length Modifier Tests.

#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)

written = LIBC_NAMESPACE::sprintf(buff, "%Lg", 0xf.fffffffffffffffp+16380L);
ASSERT_STREQ_LEN(written, buff, "1.18973e+4932");

written = LIBC_NAMESPACE::sprintf(buff, "%Lg", 0xa.aaaaaaaaaaaaaabp-7L);
ASSERT_STREQ_LEN(written, buff, "0.0833333");

#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

// TODO: Uncomment the below tests after long double support is added
/*
Expand Down Expand Up @@ -2614,7 +2615,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) {
*/
/*
written = LIBC_NAMESPACE::sprintf(buff, "%La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.ccccccccccccccdp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.999999999999ap-4");
Expand All @@ -2623,7 +2624,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xf.38db1f9dd3dac05p+3318");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand All @@ -2632,7 +2633,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%La", 1.0e-1000L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x8.68a9188a89e1467p-3325");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x0p+0");
Expand Down Expand Up @@ -2806,21 +2807,21 @@ TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) {
written = LIBC_NAMESPACE::sprintf(buff, "%.10g", 0x1.0p-1074);
ASSERT_STREQ_LEN(written, buff, "4.940656458e-324");

#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)

written = LIBC_NAMESPACE::sprintf(buff, "%.60Lg", 0xa.aaaaaaaaaaaaaabp-7L);
ASSERT_STREQ_LEN(
written, buff,
"0.0833333333333333333355920878593448009041821933351457118988037");

#endif // SPECIAL_X86_LONG_DOUBLE
#endif // LIBC_LONG_DOUBLE_IS_X86_FLOAT80

// Long double precision tests.
// These are currently commented out because they require long double support
// that isn't ready yet.
/*
written = LIBC_NAMESPACE::sprintf(buff, "%.1La", 0.1L);
#if defined(SPECIAL_X86_LONG_DOUBLE)
#if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0xc.dp-7");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "0x1.ap-4");
Expand All @@ -2829,7 +2830,7 @@ TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) {
#endif

written = LIBC_NAMESPACE::sprintf(buff, "%.1La",
0xf.fffffffffffffffp16380L); #if defined(SPECIAL_X86_LONG_DOUBLE)
0xf.fffffffffffffffp16380L); #if defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
ASSERT_STREQ_LEN(written, buff, "0x1.0p+16384");
#elif defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
ASSERT_STREQ_LEN(written, buff, "inf");
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/stdlib/strtold_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

#if defined(LIBC_LONG_DOUBLE_IS_FLOAT64)
#define SELECT_CONST(val, _, __) val
#elif defined(SPECIAL_X86_LONG_DOUBLE)
#elif defined(LIBC_LONG_DOUBLE_IS_X86_FLOAT80)
#define SELECT_CONST(_, val, __) val
#else
#define SELECT_CONST(_, __, val) val
Expand Down