diff options
Diffstat (limited to 'deps/v8/src/safepoint-table.cc')
-rw-r--r-- | deps/v8/src/safepoint-table.cc | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/deps/v8/src/safepoint-table.cc b/deps/v8/src/safepoint-table.cc index 5765038084..f3fc966b20 100644 --- a/deps/v8/src/safepoint-table.cc +++ b/deps/v8/src/safepoint-table.cc @@ -50,7 +50,7 @@ SafepointTable::SafepointTable(Address instruction_start, Safepoint::kNoDeoptimizationIndex); } -SafepointTable::SafepointTable(Code* code) +SafepointTable::SafepointTable(Code code) : SafepointTable(code->InstructionStart(), code->safepoint_table_offset(), code->stack_slots(), true) {} @@ -129,11 +129,9 @@ void Safepoint::DefinePointerRegister(Register reg) { Safepoint SafepointTableBuilder::DefineSafepoint( Assembler* assembler, Safepoint::Kind kind, - int arguments, Safepoint::DeoptMode deopt_mode) { - DCHECK_GE(arguments, 0); deoptimization_info_.push_back( - DeoptimizationInfo(zone_, assembler->pc_offset(), arguments, kind)); + DeoptimizationInfo(zone_, assembler->pc_offset(), kind)); if (deopt_mode == Safepoint::kNoLazyDeopt) { last_lazy_safepoint_ = deoptimization_info_.size(); } @@ -182,11 +180,19 @@ void SafepointTableBuilder::Emit(Assembler* assembler, int bits_per_entry) { RoundUp(bits_per_entry, kBitsPerByte) >> kBitsPerByteLog2; // Emit the table header. + STATIC_ASSERT(SafepointTable::kLengthOffset == 0 * kIntSize); + STATIC_ASSERT(SafepointTable::kEntrySizeOffset == 1 * kIntSize); + STATIC_ASSERT(SafepointTable::kHeaderSize == 2 * kIntSize); int length = static_cast<int>(deoptimization_info_.size()); assembler->dd(length); assembler->dd(bytes_per_entry); - // Emit sorted table of pc offsets together with deoptimization indexes. + // Emit sorted table of pc offsets together with additional info (i.e. the + // deoptimization index or arguments count) and trampoline offsets. + STATIC_ASSERT(SafepointTable::kPcOffset == 0 * kIntSize); + STATIC_ASSERT(SafepointTable::kEncodedInfoOffset == 1 * kIntSize); + STATIC_ASSERT(SafepointTable::kTrampolinePcOffset == 2 * kIntSize); + STATIC_ASSERT(SafepointTable::kFixedEntrySize == 3 * kIntSize); for (const DeoptimizationInfo& info : deoptimization_info_) { assembler->dd(info.pc); assembler->dd(EncodeExceptPC(info)); @@ -234,7 +240,6 @@ void SafepointTableBuilder::Emit(Assembler* assembler, int bits_per_entry) { uint32_t SafepointTableBuilder::EncodeExceptPC(const DeoptimizationInfo& info) { return SafepointEntry::DeoptimizationIndexField::encode(info.deopt_index) | - SafepointEntry::ArgumentsField::encode(info.arguments) | SafepointEntry::SaveDoublesField::encode(info.has_doubles); } @@ -261,9 +266,7 @@ void SafepointTableBuilder::RemoveDuplicates() { bool SafepointTableBuilder::IsIdenticalExceptForPc( const DeoptimizationInfo& info1, const DeoptimizationInfo& info2) const { - if (info1.arguments != info2.arguments) return false; if (info1.has_doubles != info2.has_doubles) return false; - if (info1.deopt_index != info2.deopt_index) return false; ZoneChunkList<int>* indexes1 = info1.indexes; |