Index: src/ia32/deoptimizer-ia32.cc |
diff --git a/src/ia32/deoptimizer-ia32.cc b/src/ia32/deoptimizer-ia32.cc |
index 3f10c0985ad7152ea759dc33fcf0970696d739e6..73961e1416deb7654e17845bddde94531d821c01 100644 |
--- a/src/ia32/deoptimizer-ia32.cc |
+++ b/src/ia32/deoptimizer-ia32.cc |
@@ -548,6 +548,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; |
@@ -555,7 +557,7 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, |
PrintF(" translating construct stub => height=%d\n", height_in_bytes); |
} |
- unsigned fixed_frame_size = 6 * kPointerSize; |
+ unsigned fixed_frame_size = 7 * kPointerSize; |
unsigned output_frame_size = height_in_bytes + fixed_frame_size; |
// Allocate and store the output frame description. |
@@ -620,6 +622,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)); |
@@ -641,8 +652,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()); |