aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/safepoint-table.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/safepoint-table.cc')
-rw-r--r--deps/v8/src/safepoint-table.cc19
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;