5#ifndef V8_CODEGEN_ARM64_REGLIST_ARM64_H_
6#define V8_CODEGEN_ARM64_REGLIST_ARM64_H_
16using RegList = RegListBase<Register>;
27 template <
typename... CPURegisters>
29 :
list_(((uint64_t{1} << reg0.code()) | ... |
30 (regs.is_valid() ? uint64_t{1} << regs.code() : 0))),
31 size_(reg0.SizeInBits()),
52 ((type == CPURegister::kVRegister) &&
54 DCHECK(last_reg >= first_reg);
55 list_ = (1ULL << (last_reg + 1)) - 1;
56 list_ &= ~((1ULL << first_reg) - 1);
88 void Remove(
int code);
114 list |= (uint64_t{1} << other1.
code());
116 if (!other2.IsNone() && (other2.type() ==
type_)) {
117 list |= (uint64_t{1} << other2.code());
119 if (!other3.IsNone() && (other3.type() ==
type_)) {
120 list |= (uint64_t{1} << other3.code());
122 if (!other4.IsNone() && (other4.type() ==
type_)) {
123 list |= (uint64_t{1} << other4.code());
125 return (
list_ & list) != 0;
133 int size_in_bits = RegisterSizeInBits();
146 constexpr uint64_t kValidRegisters{0x8000000ffffffff};
147 constexpr uint64_t kValidVRegisters{0x0000000ffffffff};
149 case CPURegister::kRegister:
151 case CPURegister::kVRegister:
153 case CPURegister::kNoRegister:
162#define kCalleeSaved CPURegList::GetCalleeSaved()
163#define kCalleeSavedV CPURegList::GetCalleeSavedV()
166#define kCallerSaved CPURegList::GetCallerSaved()
167#define kCallerSavedV CPURegList::GetCallerSavedV()
bool IncludesAliasOf(const CPURegister &other1, const CPURegister &other2=NoCPUReg, const CPURegister &other3=NoCPUReg, const CPURegister &other4=NoCPUReg) const
static CPURegList GetCallerSavedV(int size=kDRegSizeInBits)
static CPURegList GetCallerSaved(int size=kXRegSizeInBits)
int TotalSizeInBytes() const
static CPURegList GetCalleeSavedV(int size=kDRegSizeInBits)
CPURegList(CPURegister::RegisterType type, int size, int first_reg, int last_reg)
CPURegister PopHighestIndex()
CPURegister::RegisterType type() const
CPURegList(int size, DoubleRegList list)
CPURegister::RegisterType type_
int RegisterSizeInBits() const
void set_bits(uint64_t new_bits)
CPURegister PopLowestIndex()
int RegisterSizeInBytes() const
CPURegList(int size, RegList list)
static CPURegList GetCalleeSaved(int size=kXRegSizeInBits)
CPURegList(CPURegister reg0, CPURegisters... regs)
RegisterType type() const
constexpr int8_t code() const
std::vector< std::string > list_
RegListBase< DoubleRegister > DoubleRegList
V8_EXPORT_PRIVATE int CountSetBits(uint64_t value, int width)
constexpr int kBitsPerByte
RegListBase< Register > RegList
constexpr int kNumberOfRegisters
ContainedInLattice Combine(ContainedInLattice a, ContainedInLattice b)
constexpr int kNumberOfVRegisters
V8_EXPORT_PRIVATE bool AreSameSizeAndType(const CPURegister ®1, const CPURegister ®2=NoCPUReg, const CPURegister ®3=NoCPUReg, const CPURegister ®4=NoCPUReg, const CPURegister ®5=NoCPUReg, const CPURegister ®6=NoCPUReg, const CPURegister ®7=NoCPUReg, const CPURegister ®8=NoCPUReg)
constexpr int kRegListSizeInBits
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define ASSERT_TRIVIALLY_COPYABLE(T)
#define V8_EXPORT_PRIVATE