Revert "[libc] Add explicit constructor calls to fix compilation when using UInt<T>"
This reverts commit b663993067ffb5800632ad41ea7f2f92caab1093. This caused a regression on aarch64: https://lab.llvm.org/buildbot#builders/138/builds/43983
This commit is contained in:
parent
b663993067
commit
25a2aeb190
@ -136,7 +136,7 @@ LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<T>, T> sqrt(T x) {
|
||||
}
|
||||
|
||||
// We compute one more iteration in order to round correctly.
|
||||
bool lsb = static_cast<bool>(y & 1); // Least significant bit
|
||||
bool lsb = y & 1; // Least significant bit
|
||||
bool rb = false; // Round bit
|
||||
r <<= 2;
|
||||
UIntType tmp = (y << 2) + 1;
|
||||
|
||||
@ -468,11 +468,6 @@ template <size_t Bits> struct UInt {
|
||||
return result;
|
||||
}
|
||||
|
||||
constexpr UInt<Bits> operator/=(const UInt<Bits> &other) {
|
||||
*this = *this / other;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr UInt<Bits> operator%(const UInt<Bits> &other) const {
|
||||
UInt<Bits> result(*this);
|
||||
return *result.div(other);
|
||||
@ -719,12 +714,8 @@ template <size_t Bits> struct UInt {
|
||||
}
|
||||
|
||||
constexpr UInt<Bits> &operator++() {
|
||||
*this = *this + 1;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr UInt<Bits> &operator--() {
|
||||
*this = *this - 1;
|
||||
UInt<Bits> one(1);
|
||||
add(one);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
@ -202,8 +202,8 @@ LIBC_INLINE uint32_t mul_shift_mod_1e9(const MantissaInt mantissa,
|
||||
cpp::UInt<MID_INT_SIZE + MANT_INT_SIZE> val(large);
|
||||
// TODO: Find a better way to force __uint128_t to be UInt<128>
|
||||
cpp::UInt<MANT_INT_SIZE> wide_mant(0);
|
||||
wide_mant[0] = static_cast<uint64_t>(mantissa & (uint64_t(-1)));
|
||||
wide_mant[1] = static_cast<uint64_t>(mantissa >> 64);
|
||||
wide_mant[0] = mantissa & (uint64_t(-1));
|
||||
wide_mant[1] = mantissa >> 64;
|
||||
val = (val * wide_mant) >> shift_amount;
|
||||
return fast_uint_mod_1e9(val);
|
||||
}
|
||||
|
||||
@ -298,11 +298,9 @@ eisel_lemire<long double>(ExpandedFloat<long double> init_num,
|
||||
BitsType msb = final_approx_upper >> (BITS_IN_MANTISSA - 1);
|
||||
BitsType final_mantissa =
|
||||
final_approx_upper >>
|
||||
static_cast<uint64_t>(
|
||||
msb + BITS_IN_MANTISSA -
|
||||
(fputil::FloatProperties<long double>::MANTISSA_WIDTH + 3));
|
||||
exp2 -=
|
||||
static_cast<uint32_t>(1ULL ^ static_cast<uint64_t>(msb)); // same as !msb
|
||||
(msb + BITS_IN_MANTISSA -
|
||||
(fputil::FloatProperties<long double>::MANTISSA_WIDTH + 3));
|
||||
exp2 -= static_cast<uint32_t>(1 ^ msb); // same as !msb
|
||||
|
||||
if (round == RoundDirection::Nearest) {
|
||||
// Half-way ambiguity
|
||||
@ -567,7 +565,7 @@ clinger_fast_path(ExpandedFloat<T> init_num,
|
||||
}
|
||||
|
||||
fputil::FPBits<T> result;
|
||||
T float_mantissa = static_cast<T>(static_cast<uint64_t>(mantissa));
|
||||
T float_mantissa = static_cast<T>(mantissa);
|
||||
|
||||
if (exp10 == 0) {
|
||||
result = fputil::FPBits<T>(float_mantissa);
|
||||
@ -802,7 +800,7 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
|
||||
|
||||
BitsType round_bit_mask = BitsType(1) << (amount_to_shift_right - 1);
|
||||
BitsType sticky_mask = round_bit_mask - 1;
|
||||
bool round_bit = static_cast<bool>(mantissa & round_bit_mask);
|
||||
bool round_bit = mantissa & round_bit_mask;
|
||||
bool sticky_bit = static_cast<bool>(mantissa & sticky_mask) || truncated;
|
||||
|
||||
if (amount_to_shift_right < NUMBITS) {
|
||||
@ -812,7 +810,7 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
|
||||
} else {
|
||||
mantissa = 0;
|
||||
}
|
||||
bool least_significant_bit = static_cast<bool>(mantissa & BitsType(1));
|
||||
bool least_significant_bit = mantissa & BitsType(1);
|
||||
|
||||
// TODO: check that this rounding behavior is correct.
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@ namespace __llvm_libc {
|
||||
namespace printf_core {
|
||||
|
||||
LIBC_INLINE int convert_char(Writer *writer, const FormatSection &to_conv) {
|
||||
char c = static_cast<uint8_t>(to_conv.conv_val_raw);
|
||||
char c = to_conv.conv_val_raw;
|
||||
|
||||
constexpr int string_len = 1;
|
||||
|
||||
|
||||
@ -598,9 +598,8 @@ LIBC_INLINE int convert_float_decimal_typed(Writer *writer,
|
||||
const bool trailingZeros =
|
||||
requiredTwos <= 0 ||
|
||||
(requiredTwos < 60 &&
|
||||
multiple_of_power_of_2(
|
||||
static_cast<uint64_t>(float_bits.get_explicit_mantissa()),
|
||||
static_cast<uint32_t>(requiredTwos)));
|
||||
multiple_of_power_of_2(float_bits.get_explicit_mantissa(),
|
||||
static_cast<uint32_t>(requiredTwos)));
|
||||
switch (fputil::get_round()) {
|
||||
case FE_TONEAREST:
|
||||
// Round to nearest, if it's exactly halfway then round to even.
|
||||
@ -773,9 +772,8 @@ LIBC_INLINE int convert_float_dec_exp_typed(Writer *writer,
|
||||
const bool trailingZeros =
|
||||
requiredTwos <= 0 ||
|
||||
(requiredTwos < 60 &&
|
||||
multiple_of_power_of_2(
|
||||
static_cast<uint64_t>(float_bits.get_explicit_mantissa()),
|
||||
static_cast<uint32_t>(requiredTwos)));
|
||||
multiple_of_power_of_2(float_bits.get_explicit_mantissa(),
|
||||
static_cast<uint32_t>(requiredTwos)));
|
||||
switch (fputil::get_round()) {
|
||||
case FE_TONEAREST:
|
||||
// Round to nearest, if it's exactly halfway then round to even.
|
||||
@ -1022,9 +1020,8 @@ LIBC_INLINE int convert_float_dec_auto_typed(Writer *writer,
|
||||
const bool trailingZeros =
|
||||
requiredTwos <= 0 ||
|
||||
(requiredTwos < 60 &&
|
||||
multiple_of_power_of_2(
|
||||
static_cast<uint64_t>(float_bits.get_explicit_mantissa()),
|
||||
static_cast<uint32_t>(requiredTwos)));
|
||||
multiple_of_power_of_2(float_bits.get_explicit_mantissa(),
|
||||
static_cast<uint32_t>(requiredTwos)));
|
||||
switch (fputil::get_round()) {
|
||||
case FE_TONEAREST:
|
||||
// Round to nearest, if it's exactly halfway then round to even.
|
||||
@ -1150,8 +1147,7 @@ LIBC_INLINE int convert_float_decimal(Writer *writer,
|
||||
float_bits);
|
||||
}
|
||||
} else {
|
||||
fputil::FPBits<double>::UIntType float_raw =
|
||||
static_cast<uint64_t>(to_conv.conv_val_raw);
|
||||
fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
|
||||
fputil::FPBits<double> float_bits(float_raw);
|
||||
if (!float_bits.is_inf_or_nan()) {
|
||||
return convert_float_decimal_typed<double>(writer, to_conv, float_bits);
|
||||
@ -1171,8 +1167,7 @@ LIBC_INLINE int convert_float_dec_exp(Writer *writer,
|
||||
float_bits);
|
||||
}
|
||||
} else {
|
||||
fputil::FPBits<double>::UIntType float_raw =
|
||||
static_cast<uint64_t>(to_conv.conv_val_raw);
|
||||
fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
|
||||
fputil::FPBits<double> float_bits(float_raw);
|
||||
if (!float_bits.is_inf_or_nan()) {
|
||||
return convert_float_dec_exp_typed<double>(writer, to_conv, float_bits);
|
||||
@ -1192,8 +1187,7 @@ LIBC_INLINE int convert_float_dec_auto(Writer *writer,
|
||||
float_bits);
|
||||
}
|
||||
} else {
|
||||
fputil::FPBits<double>::UIntType float_raw =
|
||||
static_cast<uint64_t>(to_conv.conv_val_raw);
|
||||
fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
|
||||
fputil::FPBits<double> float_bits(float_raw);
|
||||
if (!float_bits.is_inf_or_nan()) {
|
||||
return convert_float_dec_auto_typed<double>(writer, to_conv, float_bits);
|
||||
|
||||
@ -51,8 +51,7 @@ LIBC_INLINE int convert_float_hex_exp(Writer *writer,
|
||||
} else {
|
||||
mantissa_width = fputil::MantissaWidth<double>::VALUE;
|
||||
exponent_bias = fputil::FPBits<double>::EXPONENT_BIAS;
|
||||
fputil::FPBits<double>::UIntType float_raw =
|
||||
static_cast<uint64_t>(to_conv.conv_val_raw);
|
||||
fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
|
||||
fputil::FPBits<double> float_bits(float_raw);
|
||||
is_negative = float_bits.get_sign();
|
||||
exponent = float_bits.get_exponent();
|
||||
@ -147,9 +146,8 @@ LIBC_INLINE int convert_float_hex_exp(Writer *writer,
|
||||
size_t mant_cur = mant_len;
|
||||
size_t first_non_zero = 1;
|
||||
for (; mant_cur > 0; --mant_cur, mantissa /= 16) {
|
||||
char new_digit =
|
||||
static_cast<uint8_t>(((mantissa % 16) > 9) ? ((mantissa % 16) - 10 + a)
|
||||
: ((mantissa % 16) + '0'));
|
||||
char new_digit = ((mantissa % 16) > 9) ? ((mantissa % 16) - 10 + a)
|
||||
: ((mantissa % 16) + '0');
|
||||
mant_buffer[mant_cur - 1] = new_digit;
|
||||
if (new_digit != '0' && first_non_zero < mant_cur)
|
||||
first_non_zero = mant_cur;
|
||||
|
||||
@ -36,8 +36,7 @@ LIBC_INLINE int convert_inf_nan(Writer *writer, const FormatSection &to_conv) {
|
||||
is_negative = float_bits.get_sign();
|
||||
mantissa = float_bits.get_explicit_mantissa();
|
||||
} else {
|
||||
fputil::FPBits<double>::UIntType float_raw =
|
||||
static_cast<uint64_t>(to_conv.conv_val_raw);
|
||||
fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
|
||||
fputil::FPBits<double> float_bits(float_raw);
|
||||
is_negative = float_bits.get_sign();
|
||||
mantissa = float_bits.get_explicit_mantissa();
|
||||
|
||||
@ -43,7 +43,7 @@ LIBC_INLINE int convert_int(Writer *writer, const FormatSection &to_conv) {
|
||||
static constexpr size_t BITS_IN_BYTE = 8;
|
||||
static constexpr size_t BITS_IN_NUM = sizeof(uintmax_t) * BITS_IN_BYTE;
|
||||
|
||||
uintmax_t num = static_cast<uint64_t>(to_conv.conv_val_raw);
|
||||
uintmax_t num = to_conv.conv_val_raw;
|
||||
bool is_negative = false;
|
||||
FormatFlags flags = to_conv.flags;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user