Index: src/safepoint-table.cc |
diff --git a/src/safepoint-table.cc b/src/safepoint-table.cc |
index 39b211cd925e4d52ad66aa7c8d56c9b9f98ad700..e79dcff09a2ccb9504cac4fc3cefc496456d5527 100644 |
--- a/src/safepoint-table.cc |
+++ b/src/safepoint-table.cc |
@@ -125,6 +125,7 @@ Safepoint SafepointTableBuilder::DefineSafepoint(Assembler* assembler, |
pc_and_deoptimization_index.deoptimization_index = deoptimization_index; |
pc_and_deoptimization_index.pc_after_gap = assembler->pc_offset(); |
pc_and_deoptimization_index.arguments = 0; |
+ pc_and_deoptimization_index.has_doubles = false; |
deoptimization_info_.Add(pc_and_deoptimization_index); |
indexes_.Add(new ZoneList<int>(8)); |
registers_.Add(NULL); |
@@ -141,6 +142,7 @@ Safepoint SafepointTableBuilder::DefineSafepointWithRegisters( |
pc_and_deoptimization_index.deoptimization_index = deoptimization_index; |
pc_and_deoptimization_index.pc_after_gap = assembler->pc_offset(); |
pc_and_deoptimization_index.arguments = arguments; |
+ pc_and_deoptimization_index.has_doubles = false; |
deoptimization_info_.Add(pc_and_deoptimization_index); |
indexes_.Add(new ZoneList<int>(8)); |
registers_.Add(new ZoneList<int>(4)); |
@@ -148,6 +150,22 @@ Safepoint SafepointTableBuilder::DefineSafepointWithRegisters( |
} |
+Safepoint SafepointTableBuilder::DefineSafepointWithRegistersAndDoubles( |
+ Assembler* assembler, int arguments, int deoptimization_index) { |
+ ASSERT(deoptimization_index != -1); |
+ ASSERT(arguments >= 0); |
+ DeoptimizationInfo pc_and_deoptimization_index; |
+ pc_and_deoptimization_index.pc = assembler->pc_offset(); |
+ pc_and_deoptimization_index.deoptimization_index = deoptimization_index; |
+ pc_and_deoptimization_index.pc_after_gap = assembler->pc_offset(); |
+ pc_and_deoptimization_index.arguments = arguments; |
+ pc_and_deoptimization_index.has_doubles = true; |
+ deoptimization_info_.Add(pc_and_deoptimization_index); |
+ indexes_.Add(new ZoneList<int>(8)); |
+ registers_.Add(new ZoneList<int>(4)); |
+ return Safepoint(indexes_.last(), registers_.last()); |
+} |
+ |
unsigned SafepointTableBuilder::GetCodeOffset() const { |
ASSERT(emitted_); |
return offset_; |
@@ -227,6 +245,7 @@ uint32_t SafepointTableBuilder::EncodeExceptPC(const DeoptimizationInfo& info) { |
uint32_t encoding = SafepointEntry::DeoptimizationIndexField::encode(index); |
encoding |= SafepointEntry::GapCodeSizeField::encode(gap_size); |
encoding |= SafepointEntry::ArgumentsField::encode(info.arguments); |
+ encoding |= SafepointEntry::SaveDoublesField::encode(info.has_doubles); |
return encoding; |
} |