Chromium Code Reviews| Index: src/ia32/lithium-codegen-ia32.cc |
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
| index 35a48b14c23759502fc0b9b632ac13fd9c04367f..6da2c624da1a68ce4ef7d7efc0669a1cdbaa348e 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)); |
|
fschneider
2012/03/22 10:30:19
Maybe it would be nicer to have the result of argu
Vyacheslav Egorov (Chromium)
2012/03/22 12:24:53
discussed over chat, agreed not to change it for n
|
| + } 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::DoPop(LPop* instr) { |
| + __ Drop(instr->count()); |
| +} |
| + |
| + |
| void LCodeGen::DoThisFunction(LThisFunction* instr) { |
| Register result = ToRegister(instr->result()); |
| __ LoadHeapObject(result, instr->hydrogen()->closure()); |