Skip to content

Commit 322ffce

Browse files
authored
Merge pull request #1298 from cppalliance/1205
Replace most binary constant masks
2 parents b850c63 + 2222b4a commit 322ffce

File tree

5 files changed

+50
-47
lines changed

5 files changed

+50
-47
lines changed

include/boost/decimal/decimal128_t.hpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,27 +74,27 @@ BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_snan_mask {UINT64
7474
// s eeeeeeeeeeeeee (0TTT) 110-bits
7575
// s 11 eeeeeeeeeeeeee (100T) 110-bits
7676

77-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_sign_mask {UINT64_C(0b1'00000'00000000'0000000000'0000000000'0000000000'0000000000'0000000000)};
78-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_combination_field_mask = UINT64_C(0b0'11'00000000'000'0000000000'0000000000'0000000000'0000000000'0000000000);
77+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_sign_mask {UINT64_C(0x8000000000000000)};
78+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_combination_field_mask = UINT64_C(0x6000000000000000);
7979

80-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_not_11_exp_mask = UINT64_C(0b0'11111111111111'000000000'0000000000'0000000000'0000000000'0000000000);
80+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_not_11_exp_mask = UINT64_C(0x7FFE000000000000);
8181
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_not_11_exp_high_word_shift {49U};
82-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_11_exp_mask {UINT64_C(0b0'00'11111111111111'0000000'0000000000'0000000000'0000000000'0000000000)};
82+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_11_exp_mask {UINT64_C(0x1FFF800000000000)};
8383
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_11_exp_high_word_shift {47U};
8484

85-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_not_11_significand_mask {UINT64_C(0b0'00000000000000'111111111'1111111111'1111111111'1111111111'1111111111), UINT64_MAX};
86-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_11_significand_mask {UINT64_C(0b0'00'00000000000000'1111111'1111111111'1111111111'1111111111'1111111111), UINT64_MAX};
85+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_not_11_significand_mask {UINT64_C(0x1FFFFFFFFFFFF), UINT64_MAX};
86+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_11_significand_mask {UINT64_C(0x7FFFFFFFFFFF), UINT64_MAX};
8787

8888
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_biggest_no_combination_significand {d128_not_11_significand_mask};
8989

9090
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d128_max_biased_exponent {UINT64_C(12287)};
91-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_max_significand_value {UINT64_C(0b1111011010000100110111110101011011000011111000000), UINT64_C(0b0011011110001101100011100110001111111111111111111111111111111111)};
91+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE int128::uint128_t d128_max_significand_value {UINT64_C(0x1ED09BEAD87C0), UINT64_C(0x378D8E63FFFFFFFF)};
9292

9393
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
9494
constexpr auto to_chars_scientific_impl(char* first, char* last, const TargetDecimalType& value, chars_format fmt) noexcept -> to_chars_result;
9595

9696
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
97-
constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalType& value, const chars_format fmt) noexcept -> to_chars_result;
97+
constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalType& value, chars_format fmt) noexcept -> to_chars_result;
9898

9999
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
100100
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
@@ -621,7 +621,7 @@ constexpr auto decimal128_t::full_significand() const noexcept -> significand_ty
621621

622622
if ((bits_.high & detail::d128_combination_field_mask) == detail::d128_combination_field_mask)
623623
{
624-
constexpr int128::uint128_t implied_bit {UINT64_C(0b10000000000000000000000000000000000000000000000000),0};
624+
constexpr int128::uint128_t implied_bit {UINT64_C(0x2000000000000),0};
625625
significand = implied_bit | (bits_ & detail::d128_11_significand_mask);
626626
}
627627
else
@@ -644,7 +644,7 @@ constexpr auto decimal128_t::to_components() const noexcept -> detail::decimal12
644644

645645
if ((bits_.high & detail::d128_combination_field_mask) == detail::d128_combination_field_mask)
646646
{
647-
constexpr int128::uint128_t implied_bit {UINT64_C(0b10000000000000000000000000000000000000000000000000),0};
647+
constexpr int128::uint128_t implied_bit {UINT64_C(0x2000000000000),0};
648648
significand = implied_bit | (bits_ & detail::d128_11_significand_mask);
649649
expval = (bits_.high & detail::d128_11_exp_mask) >> detail::d128_11_exp_high_word_shift;
650650
}
@@ -889,8 +889,8 @@ class numeric_limits_impl128
889889

890890
// Member functions
891891
static constexpr auto (min) () -> boost::decimal::decimal128_t { return {UINT32_C(1), min_exponent}; }
892-
static constexpr auto (max) () -> boost::decimal::decimal128_t { return {boost::int128::uint128_t{UINT64_C(0b1111011010000100110111110101011011000011111000000), UINT64_C(0b0011011110001101100011100110001111111111111111111111111111111111)}, max_exponent - digits + 1}; }
893-
static constexpr auto lowest () -> boost::decimal::decimal128_t { return {boost::int128::uint128_t{UINT64_C(0b1111011010000100110111110101011011000011111000000), UINT64_C(0b0011011110001101100011100110001111111111111111111111111111111111)}, max_exponent - digits + 1, construction_sign::negative}; }
892+
static constexpr auto (max) () -> boost::decimal::decimal128_t { return {d128_max_significand_value, max_exponent - digits + 1}; }
893+
static constexpr auto lowest () -> boost::decimal::decimal128_t { return {d128_max_significand_value, max_exponent - digits + 1, construction_sign::negative}; }
894894
static constexpr auto epsilon () -> boost::decimal::decimal128_t { return {UINT32_C(1), -digits + 1}; }
895895
static constexpr auto round_error () -> boost::decimal::decimal128_t { return epsilon(); }
896896
static constexpr auto infinity () -> boost::decimal::decimal128_t { return boost::decimal::from_bits(boost::decimal::detail::d128_inf_mask); }

include/boost/decimal/decimal32_t.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,20 @@ BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_snan_mask = UINT32_C(0
7676
//
7777
// Only is the type different in steering 11 which yields significand 100 + 21 bits giving us our 24 total bits of precision
7878

79-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_sign_mask = UINT32_C(0b10000000000000000000000000000000);
80-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_combination_field_mask = UINT32_C(0b01100000000000000000000000000000);
79+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_sign_mask = UINT32_C(0x80000000);
80+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_combination_field_mask = UINT32_C(0x60000000);
8181

82-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_comb_11_mask = UINT32_C(0b0'11000'000000'0000000000'0000000000);
82+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_comb_11_mask = d32_combination_field_mask;
8383

84-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_not_11_exp_mask = UINT32_C(0b01111111100000000000000000000000);
84+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_not_11_exp_mask = UINT32_C(0x7F800000);
8585
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_not_11_exp_shift = UINT32_C(23);
86-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_11_exp_mask = UINT32_C(0b00011111111000000000000000000000);
86+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_11_exp_mask = UINT32_C(0x1FE00000);
8787
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_11_exp_shift = UINT32_C(21);
8888

89-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_not_11_significand_mask = UINT32_C(0b00000000011111111111111111111111);
90-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_11_significand_mask = UINT32_C(0b00000000000111111111111111111111);
89+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_not_11_significand_mask = UINT32_C(0x7FFFFF);
90+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_11_significand_mask = UINT32_C(0x1FFFFF); // 21 bits
9191

92-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_biggest_no_combination_significand = UINT32_C(0b11111111111111111111111); // 23 bits
92+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_biggest_no_combination_significand = d32_not_11_significand_mask; // 23 bits
9393

9494
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_max_biased_exponent = UINT32_C(191);
9595
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint32_t d32_max_significand_value = UINT32_C(9'999'999);
@@ -1531,7 +1531,7 @@ constexpr auto decimal32_t::full_significand() const noexcept -> significand_typ
15311531

15321532
if ((bits_ & detail::d32_comb_11_mask) == detail::d32_comb_11_mask)
15331533
{
1534-
constexpr std::uint32_t implied_bit {UINT32_C(0b100000000000000000000000)};
1534+
constexpr std::uint32_t implied_bit {UINT32_C(0x800000)};
15351535
significand = implied_bit | (bits_ & detail::d32_11_significand_mask);
15361536
}
15371537
else
@@ -1601,7 +1601,7 @@ constexpr auto decimal32_t::to_components() const noexcept -> detail::decimal32_
16011601

16021602
if ((bits_ & detail::d32_comb_11_mask) == detail::d32_comb_11_mask)
16031603
{
1604-
constexpr std::uint32_t implied_bit {UINT32_C(0b100000000000000000000000)};
1604+
constexpr std::uint32_t implied_bit {UINT32_C(0x800000)};
16051605
significand = implied_bit | (bits_ & detail::d32_11_significand_mask);
16061606
expval = (bits_ & detail::d32_11_exp_mask) >> detail::d32_11_exp_shift;
16071607
}

include/boost/decimal/decimal64_t.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,16 @@ BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_snan_mask = UINT64_C(0
7676
// s eeeeeeeeee [ttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
7777
// s 11 eeeeeeeeee [100t][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
7878

79-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_sign_mask = UINT64_C(0b1'00000'00000000'0000000000'0000000000'0000000000'0000000000'0000000000);
80-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_combination_field_mask = UINT64_C(0b0'11'00000000'000'0000000000'0000000000'0000000000'0000000000'0000000000);
79+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_sign_mask = UINT64_C(0x8000000000000000);
80+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_combination_field_mask = UINT64_C(0x6000000000000000);
8181

82-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_not_11_exp_mask = UINT64_C(0b0'11'11111111'000'0000000000'0000000000'0000000000'0000000000'0000000000);
82+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_not_11_exp_mask = UINT64_C(0x7FE0000000000000);
8383
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_not_11_exp_shift = UINT64_C(53);
84-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_11_exp_mask = UINT64_C(0b0'00'1111111111'0'0000000000'0000000000'0000000000'0000000000'0000000000);
84+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_11_exp_mask = UINT64_C(0x1FF8000000000000);
8585
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_11_exp_shift = UINT64_C(51);
8686

87-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_not_11_significand_mask = UINT64_C(0b0'00'00000000'111'1111111111'1111111111'1111111111'1111111111'1111111111);
88-
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_11_significand_mask = UINT64_C(0b0'00'0000000000'1'1111111111'1111111111'1111111111'1111111111'1111111111);
87+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_not_11_significand_mask = UINT64_C(0x1FFFFFFFFFFFFF);
88+
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_11_significand_mask = UINT64_C(0x7FFFFFFFFFFFF);
8989

9090
BOOST_DECIMAL_INLINE_CONSTEXPR_VARIABLE std::uint64_t d64_biggest_no_combination_significand = d64_not_11_significand_mask;
9191

@@ -97,7 +97,7 @@ template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
9797
constexpr auto to_chars_scientific_impl(char* first, char* last, const TargetDecimalType& value, chars_format fmt) noexcept -> to_chars_result;
9898

9999
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
100-
constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalType& value, const chars_format fmt) noexcept -> to_chars_result;
100+
constexpr auto to_chars_fixed_impl(char* first, char* last, const TargetDecimalType& value, chars_format fmt) noexcept -> to_chars_result;
101101

102102
template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE TargetDecimalType>
103103
constexpr auto to_chars_hex_impl(char* first, char* last, const TargetDecimalType& value) noexcept -> to_chars_result;
@@ -1116,7 +1116,7 @@ constexpr auto decimal64_t::full_significand() const noexcept -> significand_typ
11161116

11171117
if ((bits_ & detail::d64_combination_field_mask) == detail::d64_combination_field_mask)
11181118
{
1119-
constexpr std::uint64_t implied_bit {UINT64_C(0b1000'0000000000'0000000000'0000000000'0000000000'0000000000)};
1119+
constexpr std::uint64_t implied_bit {UINT64_C(0x20000000000000)};
11201120
significand = implied_bit | (bits_ & detail::d64_11_significand_mask);
11211121
}
11221122
else
@@ -1141,7 +1141,7 @@ constexpr auto decimal64_t::to_components() const noexcept -> detail::decimal64_
11411141

11421142
if ((bits_ & detail::d64_combination_field_mask) == detail::d64_combination_field_mask)
11431143
{
1144-
constexpr std::uint64_t implied_bit {UINT64_C(0b1000'0000000000'0000000000'0000000000'0000000000'0000000000)};
1144+
constexpr std::uint64_t implied_bit {UINT64_C(0x20000000000000)};
11451145
significand = implied_bit | (bits_ & detail::d64_11_significand_mask);
11461146
expval = (bits_ & detail::d64_11_exp_mask) >> detail::d64_11_exp_shift;
11471147
}

include/boost/decimal/decimal_fast128_t.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -648,8 +648,8 @@ class numeric_limits_impl128f
648648

649649
// Member functions
650650
static constexpr auto (min) () -> boost::decimal::decimal_fast128_t { return {UINT32_C(1), min_exponent}; }
651-
static constexpr auto (max) () -> boost::decimal::decimal_fast128_t { return {boost::int128::uint128_t{UINT64_C(0b1111011010000100110111110101011011000011111000000), UINT64_C(0b0011011110001101100011100110001111111111111111111111111111111111)}, max_exponent - digits + 1}; }
652-
static constexpr auto lowest () -> boost::decimal::decimal_fast128_t { return {boost::int128::uint128_t{UINT64_C(0b1111011010000100110111110101011011000011111000000), UINT64_C(0b0011011110001101100011100110001111111111111111111111111111111111)}, max_exponent - digits + 1, construction_sign::negative}; }
651+
static constexpr auto (max) () -> boost::decimal::decimal_fast128_t { return {boost::int128::uint128_t{UINT64_C(0x1ED09BEAD87C0), UINT64_C(0x378D8E63FFFFFFFF)}, max_exponent - digits + 1}; }
652+
static constexpr auto lowest () -> boost::decimal::decimal_fast128_t { return {boost::int128::uint128_t{UINT64_C(0x1ED09BEAD87C0), UINT64_C(0x378D8E63FFFFFFFF)}, max_exponent - digits + 1, construction_sign::negative}; }
653653
static constexpr auto epsilon () -> boost::decimal::decimal_fast128_t { return {UINT32_C(1), -digits + 1}; }
654654
static constexpr auto round_error () -> boost::decimal::decimal_fast128_t { return epsilon(); }
655655
static constexpr auto infinity () -> boost::decimal::decimal_fast128_t { return boost::decimal::direct_init_d128(boost::decimal::detail::d128_fast_inf, 0, false); }

include/boost/decimal/dpd_conversion.hpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -458,9 +458,9 @@ constexpr auto from_dpd_d32(const std::uint32_t dpd) noexcept
458458
}
459459
}
460460

461-
constexpr std::uint32_t dpd_d32_exponent_mask {UINT32_C(0b0'00000'111111'0000000000'0000000000)};
462-
constexpr std::uint32_t dpd_d32_significand_mask {UINT32_C(0b0'00000'000000'1111111111'1111111111)};
463-
constexpr std::uint32_t dpd_d32_combination_mask {UINT32_C(0b0'11111'000000'0000000000'0000000000)};
461+
constexpr std::uint32_t dpd_d32_exponent_mask {UINT32_C(0x3F00000)};
462+
constexpr std::uint32_t dpd_d32_significand_mask {UINT32_C(0xFFFFF)};
463+
constexpr std::uint32_t dpd_d32_combination_mask {UINT32_C(0x7C000000)};
464464

465465
// The bit lengths are the same as used in the standard bid format
466466
const auto combination_field_bits {(dpd & dpd_d32_combination_mask) >> 26U};
@@ -505,10 +505,11 @@ constexpr auto from_dpd_d32(const std::uint32_t dpd) noexcept
505505
// We can now decode the remainder of the significand to recover the value
506506
std::uint8_t digits[7] {};
507507
digits[0] = static_cast<std::uint8_t>(d0);
508-
const auto significand_low {significand_bits & 0b1111111111};
508+
constexpr std::uint32_t seven_digits_mask {UINT32_C(0x3FF)};
509+
const auto significand_low {significand_bits & seven_digits_mask};
509510
detail::decode_dpd(significand_low, digits[6], digits[5], digits[4]);
510-
const auto significand_high {(significand_bits & 0b11111111110000000000) >> 10U};
511-
BOOST_DECIMAL_ASSERT(significand_high <= 0b1111111111);
511+
const auto significand_high {(significand_bits & UINT32_C(0xFFC00)) >> 10U};
512+
BOOST_DECIMAL_ASSERT(significand_high <= seven_digits_mask);
512513
detail::decode_dpd(significand_high, digits[3], digits[2], digits[1]);
513514

514515
// Now we can assemble the significand
@@ -664,9 +665,9 @@ constexpr auto from_dpd_d64(const std::uint64_t dpd) noexcept
664665

665666
// The bit lengths are the same as used in the standard bid format
666667

667-
constexpr std::uint64_t dpd_d64_combination_field_mask {UINT64_C(0b0'11111'00000000'0000000000'0000000000'0000000000'0000000000'0000000000)};
668-
constexpr std::uint64_t dpd_d64_exponent_field_mask {UINT64_C(0b0'00000'11111111'0000000000'0000000000'0000000000'0000000000'0000000000)};
669-
constexpr std::uint64_t dpd_d64_significand_field_mask {UINT64_C(0b0'00000'00000000'1111111111'1111111111'1111111111'1111111111'1111111111)};
668+
constexpr std::uint64_t dpd_d64_combination_field_mask {UINT64_C(0x7C00000000000000)};
669+
constexpr std::uint64_t dpd_d64_exponent_field_mask {UINT64_C(0x3FC000000000000)};
670+
constexpr std::uint64_t dpd_d64_significand_field_mask {UINT64_C(0x3FFFFFFFFFFFF)};
670671

671672
const auto combination_field_bits {(dpd & dpd_d64_combination_field_mask) >> 58U};
672673
const auto exponent_field_bits {(dpd & dpd_d64_exponent_field_mask) >> 50U};
@@ -712,7 +713,8 @@ constexpr auto from_dpd_d64(const std::uint64_t dpd) noexcept
712713
digits[0] = static_cast<std::uint8_t>(d0);
713714
for (int i = 15; i > 0; i -= 3)
714715
{
715-
const auto declet_bits {static_cast<std::uint32_t>(significand_bits & 0b1111111111)};
716+
constexpr std::uint32_t declet_mask {UINT32_C(0x3FF)};
717+
const auto declet_bits {static_cast<std::uint32_t>(significand_bits & declet_mask)};
716718
significand_bits >>= 10U;
717719
detail::decode_dpd(declet_bits, digits[i], digits[i - 1], digits[i - 2]);
718720
}
@@ -868,9 +870,9 @@ constexpr auto from_dpd_d128(const int128::uint128_t dpd) noexcept
868870
}
869871
}
870872

871-
constexpr std::uint64_t d128_dpd_combination_field_mask_high_bits {UINT64_C(0b0'11111'00000000'0000000000'0000000000'0000000000'0000000000'0000000000)};
872-
constexpr std::uint64_t d128_dpd_exponent_mask_high_bits {UINT64_C(0b0'00000'111111111111'0000000000'0000000000'0000000000'0000000000'000000)};
873-
constexpr int128::uint128_t d128_dpd_significand_mask {UINT64_C(0b1111111111'1111111111'1111111111'1111111111'111111), UINT64_MAX};
873+
constexpr std::uint64_t d128_dpd_combination_field_mask_high_bits {UINT64_C(0x7C00000000000000)};
874+
constexpr std::uint64_t d128_dpd_exponent_mask_high_bits {UINT64_C(0x3FFC00000000000)};
875+
constexpr int128::uint128_t d128_dpd_significand_mask {UINT64_C(0x3FFFFFFFFFFF), UINT64_MAX};
874876

875877
// The bit lengths are the same as used in the standard bid format
876878
const auto combination_field_bits {(dpd.high & d128_dpd_combination_field_mask_high_bits) >> 58U};
@@ -918,7 +920,8 @@ constexpr auto from_dpd_d128(const int128::uint128_t dpd) noexcept
918920
digits[0] = static_cast<std::uint8_t>(d0);
919921
for (int i = num_digits - 1; i > 0; i -= 3)
920922
{
921-
const auto declet_bits {static_cast<std::uint32_t>(significand_bits & 0b1111111111U)};
923+
constexpr std::uint32_t declet_mask {UINT32_C(0x3FF)};
924+
const auto declet_bits {static_cast<std::uint32_t>(significand_bits & declet_mask)};
922925
significand_bits >>= 10U;
923926
detail::decode_dpd(declet_bits, digits[i], digits[i - 1], digits[i - 2]);
924927
}

0 commit comments

Comments
 (0)