Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 3e286efa5a9622f8c2a6287dd16e5df7055137d4..e2abee38d4b916d0ca1729943067d4ac9910ad9f 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()) { |
+ __ add(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::DoPop(LPop* instr) { |
+ __ Drop(instr->count()); |
+} |
+ |
+ |
void LCodeGen::DoThisFunction(LThisFunction* instr) { |
Register result = ToRegister(instr->result()); |
__ LoadHeapObject(result, instr->hydrogen()->closure()); |