| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index 72f59d09c46ad50bec4d3135dd043fe043866d14..0003d258d80ce59419eac80ce4d6e5e79e27e71b 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -2543,25 +2543,29 @@ void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) {
|
| void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) {
|
| Register result = ToRegister(instr->result());
|
|
|
| - // Check for arguments adapter frame.
|
| - Label done, adapted;
|
| - __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset));
|
| - __ mov(result, Operand(result, StandardFrameConstants::kContextOffset));
|
| - __ cmp(Operand(result),
|
| - Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
|
| - __ j(equal, &adapted, Label::kNear);
|
| -
|
| - // No arguments adaptor frame.
|
| - __ mov(result, Operand(ebp));
|
| - __ jmp(&done, Label::kNear);
|
| + if (instr->from_inlined()) {
|
| + __ lea(result, Operand(esp, -2 * kPointerSize));
|
| + } else {
|
| + // Check for arguments adapter frame.
|
| + Label done, adapted;
|
| + __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset));
|
| + __ mov(result, Operand(result, StandardFrameConstants::kContextOffset));
|
| + __ cmp(Operand(result),
|
| + Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
|
| + __ j(equal, &adapted, Label::kNear);
|
| +
|
| + // No arguments adaptor frame.
|
| + __ mov(result, Operand(ebp));
|
| + __ jmp(&done, Label::kNear);
|
|
|
| - // Arguments adaptor frame present.
|
| - __ bind(&adapted);
|
| - __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset));
|
| + // Arguments adaptor frame present.
|
| + __ bind(&adapted);
|
| + __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset));
|
|
|
| - // Result is the frame pointer for the frame if not adapted and for the real
|
| - // frame below the adaptor frame if adapted.
|
| - __ bind(&done);
|
| + // Result is the frame pointer for the frame if not adapted and for the real
|
| + // frame below the adaptor frame if adapted.
|
| + __ bind(&done);
|
| + }
|
| }
|
|
|
|
|
| @@ -2683,6 +2687,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());
|
|
|