| 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());
|
|
|