| Index: src/compiler/ia32/code-generator-ia32.cc
|
| diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc
|
| index 447a8e3b1c75d7302a76c97ccf30543b44efbc57..298f53cca6337bcbba9f3cf6182f4a256555aa1f 100644
|
| --- a/src/compiler/ia32/code-generator-ia32.cc
|
| +++ b/src/compiler/ia32/code-generator-ia32.cc
|
| @@ -1273,6 +1273,19 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
|
| __ push(Operand(ebp, StandardFrameConstants::kContextOffset));
|
| __ pop(dst);
|
| }
|
| + } else if (info()->IsOptimizing() &&
|
| + src.is_identical_to(info()->closure())) {
|
| + // Loading the JSFunction from the frame is way cheaper than
|
| + // materializing the actual JSFunction heap object address.
|
| + if (destination->IsRegister()) {
|
| + Register dst = g.ToRegister(destination);
|
| + __ mov(dst, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
|
| + } else {
|
| + DCHECK(destination->IsStackSlot());
|
| + Operand dst = g.ToOperand(destination);
|
| + __ push(Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
|
| + __ pop(dst);
|
| + }
|
| } else if (destination->IsRegister()) {
|
| Register dst = g.ToRegister(destination);
|
| __ LoadHeapObject(dst, src);
|
|
|