5#ifndef V8_BASE_DIVISION_BY_CONSTANT_H_
6#define V8_BASE_DIVISION_BY_CONSTANT_H_
25struct EXPORT_TEMPLATE_DECLARE(V8_BASE_EXPORT) MagicNumbersForDivision {
26 static_assert(std::is_integral_v<T>);
27 MagicNumbersForDivision(T
m,
unsigned s,
bool a)
28 : multiplier(
m), shift(s), add(a) {}
29 bool operator==(
const MagicNumbersForDivision& rhs)
const {
30 return multiplier == rhs.multiplier && shift == rhs.shift && add == rhs.add;
41 requires std::unsigned_integral<T>
46 requires std::signed_integral<T>
48 using Unsigned = std::make_unsigned_t<T>;
49 MagicNumbersForDivision<Unsigned> magic =
51 return {
static_cast<T
>(magic.multiplier), magic.shift, magic.add};
60MagicNumbersForDivision<T> UnsignedDivisionByConstant(
61 T d,
unsigned leading_zeros = 0);
65 MagicNumbersForDivision<uint32_t>;
67 MagicNumbersForDivision<uint64_t>;
76 uint32_t d,
unsigned leading_zeros);
79 uint64_t d,
unsigned leading_zeros);
#define EXPORT_TEMPLATE_DECLARE(export)
MagicNumbersForDivision< T > UnsignedDivisionByConstant(T d, unsigned leading_zeros)
MagicNumbersForDivision< T > SignedDivisionByConstant(T d)
bool operator==(PointerWithPayload< PointerType, PayloadType, NumPayloadBits > lhs, PointerWithPayload< PointerType, PayloadType, NumPayloadBits > rhs)