5#ifndef V8_CODEGEN_SAFEPOINT_TABLE_H_
6#define V8_CODEGEN_SAFEPOINT_TABLE_H_
69#if V8_ENABLE_WEBASSEMBLY
102 DCHECK(trampoline_pc >= 0 ||
105 int tagged_register_indexes =
110 uint8_t* tagged_slots_start =
reinterpret_cast<uint8_t*
>(
128 void Print(std::ostream&)
const;
134#define FIELD_LIST(V) \
135 V(kStackSlotsOffset, sizeof(SafepointTableStackSlotsField_t)) \
136 V(kLengthOffset, kIntSize) \
137 V(kEntryConfigurationOffset, kUInt32Size) \
177 for (
int b = 0; b < bytes; ++b, ++*ptr) {
178 result |= uint32_t{*
reinterpret_cast<uint8_t*
>(*ptr)} << (8 * b);
180 return static_cast<int>(
result);
201 int deopt_index = SafepointEntry::kNoDeoptIndex;
202 int trampoline = SafepointEntry::kNoTrampolinePC;
204 uint32_t register_indexes = 0;
223 table_->UpdateMinMaxStackIndex(index);
229 entry_->register_indexes |= 1u << reg_code;
252 int UpdateDeoptimizationInfo(
int pc,
int trampoline,
int start,
257 void RemoveDuplicates();
261 if (index > max_stack_index_) max_stack_index_ =
index;
263 if (index < min_stack_index_) min_stack_index_ =
index;
267 return min_stack_index_ == std::numeric_limits<int>::max()
277 int max_stack_index_ = 0;
279 int min_stack_index_ = std::numeric_limits<int>::max();
#define DISALLOW_GARBAGE_COLLECTION(name)
static constexpr T decode(U value)
constexpr T * data() const
static constexpr int kNoDeoptIndex
bool operator==(const SafepointEntryBase &other) const
int trampoline_pc() const
bool is_initialized() const
static constexpr int kNoTrampolinePC
bool operator==(const SafepointEntry &other) const
SafepointEntry(int pc, int deopt_index, uint32_t tagged_register_indexes, base::Vector< uint8_t > tagged_slots, int trampoline_pc)
base::Vector< uint8_t > tagged_slots_
uint32_t tagged_register_indexes_
base::Vector< const uint8_t > tagged_slots() const
uint32_t tagged_register_indexes() const
Safepoint(EntryBuilder *entry, SafepointTableBuilder *table)
SafepointTableBuilder *const table_
void DefineTaggedRegister(int reg_code)
EntryBuilder *const entry_
void DefineTaggedStackSlot(int index)
SafepointTableBuilder(const SafepointTableBuilder &)=delete
int min_stack_index() const
void UpdateMinMaxStackIndex(int index)
SafepointTableBuilder(Zone *zone)
SafepointTableBuilder & operator=(const SafepointTableBuilder &)=delete
ZoneDeque< EntryBuilder > entries_
void Print(std::ostream &) const
SafepointEntry TryFindEntry(Address pc) const
int tagged_slots_bytes() const
int deopt_index_size() const
SafepointTable & operator=(const SafepointTable &)=delete
SafepointTable(const SafepointTable &)=delete
const Address instruction_start_
const SafepointTableStackSlotsField_t stack_slots_
static int read_bytes(Address *ptr, int bytes)
bool has_deopt_data() const
int register_indexes_size() const
SafepointEntry FindEntry(Address pc) const
friend class SafepointEntry
const uint32_t entry_configuration_
int find_return_pc(int pc_offset)
SafepointTable(Isolate *isolate, Address pc, Tagged< InstructionStream > code)
SafepointEntry GetEntry(int index) const
const Address safepoint_table_address_
DisallowGarbageCollection no_gc_
ZoneVector< RpoNumber > & result
std::vector< EntryBuilder > entries_
constexpr int kBitsPerByte
uint32_t SafepointTableStackSlotsField_t
constexpr int kSafepointTableStackSlotsOffset
SourcePositionTable *const table_
#define DCHECK_NOT_NULL(val)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_GT(v1, v2)
#define V8_EXPORT_PRIVATE
EntryBuilder(Zone *zone, int pc)
GrowableBitVector * stack_indexes
#define DEFINE_FIELD_OFFSET_CONSTANTS(StartOffset, LIST_MACRO)