| Index: src/arm/lithium-codegen-arm.cc | 
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc | 
| index 207dd8cdaa40550343a1d7a7a31fc6ff5bbc5bc7..de9123d5c4ce0d2d1688b8f40d862f3c586540da 100644 | 
| --- a/src/arm/lithium-codegen-arm.cc | 
| +++ b/src/arm/lithium-codegen-arm.cc | 
| @@ -509,17 +509,36 @@ Operand LCodeGen::ToOperand(LOperand* op) { | 
| } | 
|  | 
|  | 
| +static int ArgumentsOffsetWithoutFrame(int index) { | 
| +  ASSERT(index < 0); | 
| +  return -(index + 1) * kPointerSize; | 
| +} | 
| + | 
| + | 
| MemOperand LCodeGen::ToMemOperand(LOperand* op) const { | 
| ASSERT(!op->IsRegister()); | 
| ASSERT(!op->IsDoubleRegister()); | 
| ASSERT(op->IsStackSlot() || op->IsDoubleStackSlot()); | 
| -  return MemOperand(fp, StackSlotOffset(op->index())); | 
| +  if (NeedsEagerFrame()) { | 
| +    return MemOperand(fp, StackSlotOffset(op->index())); | 
| +  } else { | 
| +    // Retrieve parameter without eager stack-frame relative to the | 
| +    // stack-pointer. | 
| +    return MemOperand(sp, ArgumentsOffsetWithoutFrame(op->index())); | 
| +  } | 
| } | 
|  | 
|  | 
| MemOperand LCodeGen::ToHighMemOperand(LOperand* op) const { | 
| ASSERT(op->IsDoubleStackSlot()); | 
| -  return MemOperand(fp, StackSlotOffset(op->index()) + kPointerSize); | 
| +  if (NeedsEagerFrame()) { | 
| +    return MemOperand(fp, StackSlotOffset(op->index()) + kPointerSize); | 
| +  } else { | 
| +    // Retrieve parameter without eager stack-frame relative to the | 
| +    // stack-pointer. | 
| +    return MemOperand( | 
| +        sp, ArgumentsOffsetWithoutFrame(op->index()) + kPointerSize); | 
| +  } | 
| } | 
|  | 
|  | 
| @@ -4107,7 +4126,12 @@ void LCodeGen::DoCallFunction(LCallFunction* instr) { | 
|  | 
| int arity = instr->arity(); | 
| CallFunctionStub stub(arity, NO_CALL_FUNCTION_FLAGS); | 
| -  CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); | 
| +  if (instr->hydrogen()->IsTailCall()) { | 
| +    if (NeedsEagerFrame()) __ mov(sp, fp); | 
| +    __ Jump(stub.GetCode(isolate()), RelocInfo::CODE_TARGET); | 
| +  } else { | 
| +    CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); | 
| +  } | 
| } | 
|  | 
|  | 
|  |