5#ifndef V8_CODEGEN_MAGLEV_SAFEPOINT_TABLE_H_
6#define V8_CODEGEN_MAGLEV_SAFEPOINT_TABLE_H_
94 DCHECK(trampoline_pc >= 0 ||
97 uint8_t num_extra_spill_slots =
read_byte(&entry_ptr);
98 int tagged_register_indexes =
102 num_extra_spill_slots, tagged_register_indexes,
111 void Print(std::ostream&)
const;
117#define FIELD_LIST(V) \
118 V(kStackSlotsOffset, sizeof(SafepointTableStackSlotsField_t)) \
119 V(kLengthOffset, kIntSize) \
120 V(kEntryConfigurationOffset, kUInt32Size) \
123 V(kNumTaggedSlotsOffset, kUInt32Size) \
137 Address safepoint_table_address);
141 const int num_pushed_registers_size = 1;
142 return pc_size() + deopt_data_size + num_pushed_registers_size +
159 for (
int b = 0; b < bytes; ++b) {
162 return static_cast<int>(
result);
166 uint8_t
result = *
reinterpret_cast<uint8_t*
>(*ptr);
190 int deopt_index = MaglevSafepointEntry::kNoDeoptIndex;
191 int trampoline = MaglevSafepointEntry::kNoTrampolinePC;
192 uint8_t num_extra_spill_slots = 0;
193 uint32_t tagged_register_indexes = 0;
207 void DefineTaggedRegister(
int reg_code) {
209 kBitsPerByte *
sizeof(EntryBuilder::tagged_register_indexes));
210 entry_->tagged_register_indexes |= 1u << reg_code;
212 void SetNumExtraSpillSlots(uint8_t num_slots) {
213 entry_->num_extra_spill_slots = num_slots;
223 Safepoint DefineSafepoint(
Assembler* assembler);
232 int UpdateDeoptimizationInfo(
int pc,
int trampoline,
int start,
#define DISALLOW_GARBAGE_COLLECTION(name)
static constexpr T decode(U value)
uint32_t num_tagged_slots() const
uint32_t tagged_register_indexes() const
uint32_t tagged_register_indexes_
uint8_t num_extra_spill_slots_
static constexpr int kNoDeoptIndex
uint32_t num_tagged_slots_
MaglevSafepointEntry(int pc, int deopt_index, uint32_t num_tagged_slots, uint8_t num_extra_spill_slots, uint32_t tagged_register_indexes, int trampoline_pc)
uint8_t num_extra_spill_slots() const
MaglevSafepointEntry()=default
uint32_t register_input_count() const
static constexpr int kNoTrampolinePC
bool operator==(const MaglevSafepointEntry &other) const
const uint32_t entry_configuration_
const Address instruction_start_
int deopt_index_size() const
static int read_bytes(Address *ptr, int bytes)
const Address safepoint_table_address_
static uint8_t read_byte(Address *ptr)
MaglevSafepointEntry FindEntry(Address pc) const
MaglevSafepointTable & operator=(const MaglevSafepointTable &)=delete
MaglevSafepointTable(Isolate *isolate, Address pc, Tagged< Code > code)
MaglevSafepointEntry GetEntry(int index) const
const SafepointTableStackSlotsField_t stack_slots_
friend class MaglevSafepointEntry
bool has_deopt_data() const
friend class MaglevSafepointTableBuilder
int register_indexes_size() const
MaglevSafepointTable(const MaglevSafepointTable &)=delete
int find_return_pc(int pc_offset)
void Print(std::ostream &) const
const uint32_t num_tagged_slots_
bool operator==(const SafepointEntryBase &other) const
int trampoline_pc() const
bool is_initialized() const
DisallowGarbageCollection no_gc_
ZoneVector< RpoNumber > & result
std::vector< EntryBuilder > entries_
constexpr int kBitsPerByte
uint32_t SafepointTableStackSlotsField_t
constexpr int kSafepointTableStackSlotsOffset
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_GT(v1, v2)
#define V8_EXPORT_PRIVATE
#define DEFINE_FIELD_OFFSET_CONSTANTS(StartOffset, LIST_MACRO)