| Index: src/deoptimizer.cc
|
| diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc
|
| index bfe2e1874150342de272e99683e947db16546580..84f1530d49ac23732cbef05e57c7231c52ca11f1 100644
|
| --- a/src/deoptimizer.cc
|
| +++ b/src/deoptimizer.cc
|
| @@ -900,15 +900,15 @@ void Deoptimizer::DoComputeJSFrame(TranslationIterator* iterator,
|
| // input frame. For all subsequent output frames, it can be read from the
|
| // previous one. This frame's pc can be computed from the non-optimized
|
| // function code and AST id of the bailout.
|
| - output_offset -= kPointerSize;
|
| - input_offset -= kPointerSize;
|
| + output_offset -= kPCOnStackSize;
|
| + input_offset -= kPCOnStackSize;
|
| intptr_t value;
|
| if (is_bottommost) {
|
| value = input_->GetFrameSlot(input_offset);
|
| } else {
|
| value = output_[frame_index - 1]->GetPc();
|
| }
|
| - output_frame->SetFrameSlot(output_offset, value);
|
| + output_frame->SetCallerPc(output_offset, value);
|
| if (trace_) {
|
| PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
|
| V8PRIxPTR " ; caller's pc\n",
|
| @@ -919,14 +919,14 @@ void Deoptimizer::DoComputeJSFrame(TranslationIterator* iterator,
|
| // as in the input frame. For all subsequent output frames, it can be
|
| // read from the previous one. Also compute and set this frame's frame
|
| // pointer.
|
| - output_offset -= kPointerSize;
|
| - input_offset -= kPointerSize;
|
| + output_offset -= kFPOnStackSize;
|
| + input_offset -= kFPOnStackSize;
|
| if (is_bottommost) {
|
| value = input_->GetFrameSlot(input_offset);
|
| } else {
|
| value = output_[frame_index - 1]->GetFp();
|
| }
|
| - output_frame->SetFrameSlot(output_offset, value);
|
| + output_frame->SetCallerFp(output_offset, value);
|
| intptr_t fp_value = top_address + output_offset;
|
| ASSERT(!is_bottommost || (input_->GetRegister(fp_reg.code()) +
|
| has_alignment_padding_ * kPointerSize) == fp_value);
|
| @@ -1049,9 +1049,9 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame(TranslationIterator* iterator,
|
| }
|
|
|
| // Read caller's PC from the previous frame.
|
| - output_offset -= kPointerSize;
|
| + output_offset -= kPCOnStackSize;
|
| intptr_t callers_pc = output_[frame_index - 1]->GetPc();
|
| - output_frame->SetFrameSlot(output_offset, callers_pc);
|
| + output_frame->SetCallerPc(output_offset, callers_pc);
|
| if (trace_) {
|
| PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
|
| V8PRIxPTR " ; caller's pc\n",
|
| @@ -1059,9 +1059,9 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame(TranslationIterator* iterator,
|
| }
|
|
|
| // Read caller's FP from the previous frame, and set this frame's FP.
|
| - output_offset -= kPointerSize;
|
| + output_offset -= kFPOnStackSize;
|
| intptr_t value = output_[frame_index - 1]->GetFp();
|
| - output_frame->SetFrameSlot(output_offset, value);
|
| + output_frame->SetCallerFp(output_offset, value);
|
| intptr_t fp_value = top_address + output_offset;
|
| output_frame->SetFp(fp_value);
|
| if (trace_) {
|
| @@ -1152,9 +1152,9 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator,
|
| }
|
|
|
| // Read caller's PC from the previous frame.
|
| - output_offset -= kPointerSize;
|
| + output_offset -= kPCOnStackSize;
|
| intptr_t callers_pc = output_[frame_index - 1]->GetPc();
|
| - output_frame->SetFrameSlot(output_offset, callers_pc);
|
| + output_frame->SetCallerPc(output_offset, callers_pc);
|
| if (trace_) {
|
| PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
|
| V8PRIxPTR " ; caller's pc\n",
|
| @@ -1162,9 +1162,9 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator,
|
| }
|
|
|
| // Read caller's FP from the previous frame, and set this frame's FP.
|
| - output_offset -= kPointerSize;
|
| + output_offset -= kFPOnStackSize;
|
| intptr_t value = output_[frame_index - 1]->GetFp();
|
| - output_frame->SetFrameSlot(output_offset, value);
|
| + output_frame->SetCallerFp(output_offset, value);
|
| intptr_t fp_value = top_address + output_offset;
|
| output_frame->SetFp(fp_value);
|
| if (trace_) {
|
| @@ -1265,7 +1265,9 @@ void Deoptimizer::DoComputeAccessorStubFrame(TranslationIterator* iterator,
|
| // MacroAssembler::EnterFrame). For a setter stub frame we need one additional
|
| // entry for the implicit return value, see
|
| // StoreStubCompiler::CompileStoreViaSetter.
|
| - unsigned fixed_frame_entries = 1 + 4 + (is_setter_stub_frame ? 1 : 0);
|
| + unsigned fixed_frame_entries = (kPCOnStackSize / kPointerSize) +
|
| + (kFPOnStackSize / kPointerSize) + 3 +
|
| + (is_setter_stub_frame ? 1 : 0);
|
| unsigned fixed_frame_size = fixed_frame_entries * kPointerSize;
|
| unsigned output_frame_size = height_in_bytes + fixed_frame_size;
|
|
|
| @@ -1287,9 +1289,9 @@ void Deoptimizer::DoComputeAccessorStubFrame(TranslationIterator* iterator,
|
| unsigned output_offset = output_frame_size;
|
|
|
| // Read caller's PC from the previous frame.
|
| - output_offset -= kPointerSize;
|
| + output_offset -= kPCOnStackSize;
|
| intptr_t callers_pc = output_[frame_index - 1]->GetPc();
|
| - output_frame->SetFrameSlot(output_offset, callers_pc);
|
| + output_frame->SetCallerPc(output_offset, callers_pc);
|
| if (trace_) {
|
| PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
|
| " ; caller's pc\n",
|
| @@ -1297,9 +1299,9 @@ void Deoptimizer::DoComputeAccessorStubFrame(TranslationIterator* iterator,
|
| }
|
|
|
| // Read caller's FP from the previous frame, and set this frame's FP.
|
| - output_offset -= kPointerSize;
|
| + output_offset -= kFPOnStackSize;
|
| intptr_t value = output_[frame_index - 1]->GetFp();
|
| - output_frame->SetFrameSlot(output_offset, value);
|
| + output_frame->SetCallerFp(output_offset, value);
|
| intptr_t fp_value = top_address + output_offset;
|
| output_frame->SetFp(fp_value);
|
| if (trace_) {
|
| @@ -1435,10 +1437,10 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
|
| output_frame->SetTop(top_address);
|
|
|
| // Read caller's PC (JSFunction continuation) from the input frame.
|
| - unsigned input_frame_offset = input_frame_size - kPointerSize;
|
| - unsigned output_frame_offset = output_frame_size - kPointerSize;
|
| + unsigned input_frame_offset = input_frame_size - kPCOnStackSize;
|
| + unsigned output_frame_offset = output_frame_size - kFPOnStackSize;
|
| intptr_t value = input_->GetFrameSlot(input_frame_offset);
|
| - output_frame->SetFrameSlot(output_frame_offset, value);
|
| + output_frame->SetCallerPc(output_frame_offset, value);
|
| if (trace_) {
|
| PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
|
| V8PRIxPTR " ; caller's pc\n",
|
| @@ -1446,10 +1448,10 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
|
| }
|
|
|
| // Read caller's FP from the input frame, and set this frame's FP.
|
| - input_frame_offset -= kPointerSize;
|
| + input_frame_offset -= kFPOnStackSize;
|
| value = input_->GetFrameSlot(input_frame_offset);
|
| - output_frame_offset -= kPointerSize;
|
| - output_frame->SetFrameSlot(output_frame_offset, value);
|
| + output_frame_offset -= kFPOnStackSize;
|
| + output_frame->SetCallerFp(output_frame_offset, value);
|
| intptr_t frame_ptr = input_->GetRegister(fp_reg.code());
|
| output_frame->SetRegister(fp_reg.code(), frame_ptr);
|
| output_frame->SetFp(frame_ptr);
|
|
|