Skip to content

Commit fb4fafa

Browse files
committed
Cleanup
1 parent e51fa8e commit fb4fafa

File tree

1 file changed

+12
-32
lines changed

1 file changed

+12
-32
lines changed

zmij.cc

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,7 @@ inline auto read8(char* buffer) noexcept -> uint64_t {
507507
// buffer[0] may contain '0' after this function if the leading digit is zero.
508508
template <int num_bits, bool use_sse = ZMIJ_USE_SSE != 0 && num_bits == 64>
509509
ZMIJ_INLINE auto write_significand(char* buffer, uint64_t value,
510-
bool extra_digit,
511-
long long value_div10) noexcept -> char* {
510+
bool extra_digit) noexcept -> char* {
512511
if (num_bits == 32) {
513512
buffer = write_if(buffer, value / 100'000'000, extra_digit);
514513
uint64_t bcd = to_bcd8(value % 100'000'000);
@@ -697,14 +696,6 @@ ZMIJ_INLINE auto write_significand(char* buffer, uint64_t value,
697696
struct to_decimal_result {
698697
long long sig;
699698
int exp;
700-
701-
#if ZMIJ_USE_SSE
702-
long long sig_div10;
703-
void set_div10(long long value) { sig_div10 = value; }
704-
#else
705-
static constexpr long long sig_div10 = 0;
706-
void set_div10(long long) {}
707-
#endif
708699
};
709700

710701
template <typename UInt>
@@ -736,11 +727,7 @@ ZMIJ_INLINE auto to_decimal_schubfach(UInt bin_sig, int64_t bin_exp,
736727
// It is less or equal to the upper bound by construction.
737728
long long div10 = (upper >> bound_shift) / 10;
738729
UInt shorter = div10 * 10;
739-
if ((shorter << bound_shift) >= lower) {
740-
to_decimal_result result = {int64_t(shorter), dec_exp};
741-
result.set_div10(div10);
742-
return result;
743-
}
730+
if ((shorter << bound_shift) >= lower) return {int64_t(shorter), dec_exp};
744731

745732
UInt scaled_sig =
746733
umulhi_inexact_to_odd(pow10.hi, pow10.lo, bin_sig_shifted << exp_shift);
@@ -754,9 +741,7 @@ ZMIJ_INLINE auto to_decimal_schubfach(UInt bin_sig, int64_t bin_exp,
754741
bool below_closer = cmp < 0 || (cmp == 0 && (longer_below & 1) == 0);
755742
bool below_in = (longer_below << bound_shift) >= lower;
756743
UInt dec_sig = (below_closer & below_in) ? longer_below : longer_above;
757-
to_decimal_result result = {int64_t(dec_sig), dec_exp};
758-
result.set_div10(dec_sig / 10);
759-
return result;
744+
return {int64_t(dec_sig), dec_exp};
760745
}
761746

762747
// Here be 🐉s.
@@ -857,21 +842,19 @@ ZMIJ_INLINE auto to_decimal_fast(UInt bin_sig, int64_t raw_exp,
857842
}
858843
shorter += round_up * 10;
859844
bool use_shorter = (scaled_sig_mod10 <= scaled_half_ulp) + round_up != 0;
860-
to_decimal_result result = {use_shorter ? shorter : longer, dec_exp};
861-
result.set_div10(div10 + use_shorter * round_up);
862-
return result;
845+
return {use_shorter ? shorter : longer, dec_exp};
863846
}
864847
return to_decimal_schubfach(bin_sig, bin_exp, regular);
865848
}
866849

867850
template <int num_bits>
868-
auto write_fixed(char* buffer, uint64_t dec_sig, int dec_exp, bool extra_digit,
869-
long long dec_sig_div10) noexcept -> char* {
851+
auto write_fixed(char* buffer, uint64_t dec_sig, int dec_exp,
852+
bool extra_digit) noexcept -> char* {
870853
if (dec_exp < 0) {
871854
char* point = buffer + 1;
872855
memcpy(buffer, "0.000000", 8);
873-
buffer = write_significand<num_bits>(buffer + 1 - dec_exp, dec_sig,
874-
extra_digit, dec_sig_div10);
856+
buffer =
857+
write_significand<num_bits>(buffer + 1 - dec_exp, dec_sig, extra_digit);
875858
if (ZMIJ_USE_SSE) *point = '.';
876859
*buffer = '\0';
877860
return buffer;
@@ -881,8 +864,7 @@ auto write_fixed(char* buffer, uint64_t dec_sig, int dec_exp, bool extra_digit,
881864
write8(buffer + (num_bits == 64 ? 16 : 7), 0);
882865

883866
char* start = buffer;
884-
buffer = write_significand<num_bits, false>(buffer, dec_sig, extra_digit,
885-
dec_sig_div10);
867+
buffer = write_significand<num_bits, false>(buffer, dec_sig, extra_digit);
886868

887869
// Branchless move to make space for the '.' without OOB accesses.
888870
char* part1 = start + dec_exp + (dec_exp < 2);
@@ -955,7 +937,6 @@ auto write(Float value, char* buffer) noexcept -> char* {
955937
dec.sig *= 10;
956938
--dec.exp;
957939
}
958-
dec.set_div10(dec.sig / 10);
959940
} else {
960941
dec = to_decimal_fast<Float>(bin_sig | traits::implicit_bit, bin_exp,
961942
bin_sig != 0);
@@ -970,12 +951,11 @@ auto write(Float value, char* buffer) noexcept -> char* {
970951

971952
// Write significand.
972953
if (dec_exp >= -4 && dec_exp < compute_dec_exp(traits::digits + 1)) {
973-
return write_fixed<traits::num_bits>(buffer, dec.sig, dec_exp, extra_digit,
974-
dec.sig_div10);
954+
return write_fixed<traits::num_bits>(buffer, dec.sig, dec_exp, extra_digit);
975955
}
976956
char* start = buffer;
977-
buffer = write_significand<traits::num_bits>(buffer + 1, dec.sig, extra_digit,
978-
dec.sig_div10);
957+
buffer =
958+
write_significand<traits::num_bits>(buffer + 1, dec.sig, extra_digit);
979959
start[0] = start[1];
980960
start[1] = '.';
981961
buffer -= (buffer - 1 == start + 1); // Remove trailing point.

0 commit comments

Comments
 (0)