Index: src/mips/deoptimizer-mips.cc |
diff --git a/src/mips/deoptimizer-mips.cc b/src/mips/deoptimizer-mips.cc |
index 51c2e4677866aad648c8d69ceffe42574983a75c..62f3155eb34382708e8f3e9cac14e9c3746125c4 100644 |
--- a/src/mips/deoptimizer-mips.cc |
+++ b/src/mips/deoptimizer-mips.cc |
@@ -447,6 +447,8 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame(TranslationIterator* iterator, |
void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
int frame_index) { |
+ Builtins* builtins = isolate_->builtins(); |
+ Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric); |
JSFunction* function = JSFunction::cast(ComputeLiteral(iterator->Next())); |
unsigned height = iterator->Next(); |
unsigned height_in_bytes = height * kPointerSize; |
@@ -454,7 +456,7 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
PrintF(" translating construct stub => height=%d\n", height_in_bytes); |
} |
- unsigned fixed_frame_size = 7 * kPointerSize; |
+ unsigned fixed_frame_size = 8 * kPointerSize; |
unsigned output_frame_size = height_in_bytes + fixed_frame_size; |
// Allocate and store the output frame description. |
@@ -519,6 +521,15 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
top_address + output_offset, output_offset, value); |
} |
+ // The output frame reflects a JSConstructStubGeneric frame. |
+ output_offset -= kPointerSize; |
+ value = reinterpret_cast<intptr_t>(construct_stub); |
+ output_frame->SetFrameSlot(output_offset, value); |
+ if (FLAG_trace_deopt) { |
+ PrintF(" 0x%08x: [top + %d] <- 0x%08x ; code object\n", |
+ top_address + output_offset, output_offset, value); |
+ } |
+ |
// Number of incoming arguments. |
output_offset -= kPointerSize; |
value = reinterpret_cast<uint32_t>(Smi::FromInt(height - 1)); |
@@ -549,8 +560,6 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
ASSERT(0 == output_offset); |
- Builtins* builtins = isolate_->builtins(); |
- Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric); |
uint32_t pc = reinterpret_cast<uint32_t>( |
construct_stub->instruction_start() + |
isolate_->heap()->construct_stub_deopt_pc_offset()->value()); |