| Index: src/compiler/linkage.cc
|
| diff --git a/src/compiler/linkage.cc b/src/compiler/linkage.cc
|
| index 2c6d2a8ae41430da5d01ed82aea4cb35ffcadcfe..93b9a66ec203016c2f8b6791f935569b5f596ee7 100644
|
| --- a/src/compiler/linkage.cc
|
| +++ b/src/compiler/linkage.cc
|
| @@ -70,7 +70,7 @@
|
| std::ostream& operator<<(std::ostream& os, const CallDescriptor& d) {
|
| // TODO(svenpanne) Output properties etc. and be less cryptic.
|
| return os << d.kind() << ":" << d.debug_name() << ":r" << d.ReturnCount()
|
| - << "s" << d.StackParameterCount() << "i" << d.InputCount() << "f"
|
| + << "j" << d.JSParameterCount() << "i" << d.InputCount() << "f"
|
| << d.FrameStateCount() << "t" << d.SupportsTailCalls();
|
| }
|
|
|
| @@ -189,7 +189,8 @@
|
| }
|
|
|
|
|
| -FrameOffset Linkage::GetFrameOffset(int spill_slot, Frame* frame) const {
|
| +FrameOffset Linkage::GetFrameOffset(int spill_slot, Frame* frame,
|
| + int extra) const {
|
| if (frame->GetSpillSlotCount() > 0 || incoming_->IsJSFunctionCall() ||
|
| incoming_->kind() == CallDescriptor::kCallAddress) {
|
| int offset;
|
| @@ -197,11 +198,12 @@
|
| if (spill_slot >= 0) {
|
| // Local or spill slot. Skip the frame pointer, function, and
|
| // context in the fixed part of the frame.
|
| - offset = -(spill_slot + 1) * kPointerSize - register_save_area_size;
|
| + offset =
|
| + -(spill_slot + 1) * kPointerSize - register_save_area_size + extra;
|
| } else {
|
| // Incoming parameter. Skip the return address.
|
| offset = -(spill_slot + 1) * kPointerSize + kFPOnStackSize +
|
| - frame->PCOnStackSize();
|
| + kPCOnStackSize + extra;
|
| }
|
| return FrameOffset::FromFramePointer(offset);
|
| } else {
|
| @@ -209,7 +211,7 @@
|
| DCHECK(spill_slot < 0); // Must be a parameter.
|
| int register_save_area_size = frame->GetRegisterSaveAreaSize();
|
| int offset = register_save_area_size - (spill_slot + 1) * kPointerSize +
|
| - frame->PCOnStackSize();
|
| + kPCOnStackSize + extra;
|
| return FrameOffset::FromStackPointer(offset);
|
| }
|
| }
|
|
|