Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 7c37e8ee8b2214ae6f9d901f3613c9e6101c86d7..7372f0c99ea20a456cf438f4b84287cc6c6b7010 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -2764,16 +2764,20 @@ void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { |
Register scratch = scratch0(); |
Register result = ToRegister(instr->result()); |
- // Check if the calling frame is an arguments adaptor frame. |
- Label done, adapted; |
- __ ldr(scratch, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); |
- __ ldr(result, MemOperand(scratch, StandardFrameConstants::kContextOffset)); |
- __ cmp(result, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
+ if (instr->from_inlined()) { |
+ __ sub(result, sp, Operand(2 * kPointerSize)); |
+ } else { |
+ // Check if the calling frame is an arguments adaptor frame. |
+ Label done, adapted; |
+ __ ldr(scratch, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); |
+ __ ldr(result, MemOperand(scratch, StandardFrameConstants::kContextOffset)); |
+ __ cmp(result, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
- // Result is the frame pointer for the frame if not adapted and for the real |
- // frame below the adaptor frame if adapted. |
- __ mov(result, fp, LeaveCC, ne); |
- __ mov(result, scratch, LeaveCC, eq); |
+ // Result is the frame pointer for the frame if not adapted and for the real |
+ // frame below the adaptor frame if adapted. |
+ __ mov(result, fp, LeaveCC, ne); |
+ __ mov(result, scratch, LeaveCC, eq); |
+ } |
} |
@@ -2907,6 +2911,11 @@ void LCodeGen::DoPushArgument(LPushArgument* instr) { |
} |
+void LCodeGen::DoDrop(LDrop* instr) { |
+ __ Drop(instr->count()); |
+} |
+ |
+ |
void LCodeGen::DoThisFunction(LThisFunction* instr) { |
Register result = ToRegister(instr->result()); |
__ LoadHeapObject(result, instr->hydrogen()->closure()); |