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 cad28535ff0d4b660999db2623280b5e44e33966..7272fdee9a3776a9902ffd4f2a375514e8bfd61c 100644 |
--- a/src/compiler/ia32/code-generator-ia32.cc |
+++ b/src/compiler/ia32/code-generator-ia32.cc |
@@ -1339,12 +1339,18 @@ void CodeGenerator::AssembleReturn() { |
__ ret(0); |
} |
} else if (descriptor->IsJSFunctionCall() || needs_frame_) { |
- __ mov(esp, ebp); // Move stack pointer back to frame pointer. |
- __ pop(ebp); // Pop caller's frame pointer. |
- int pop_count = descriptor->IsJSFunctionCall() |
- ? static_cast<int>(descriptor->JSParameterCount()) |
- : 0; |
- __ Ret(pop_count * kPointerSize, ebx); |
+ // Canonicalize JSFunction return sites for now. |
+ if (return_label_.is_bound()) { |
+ __ jmp(&return_label_); |
+ } else { |
+ __ bind(&return_label_); |
+ __ mov(esp, ebp); // Move stack pointer back to frame pointer. |
+ __ pop(ebp); // Pop caller's frame pointer. |
+ int pop_count = descriptor->IsJSFunctionCall() |
+ ? static_cast<int>(descriptor->JSParameterCount()) |
+ : 0; |
+ __ Ret(pop_count * kPointerSize, ebx); |
+ } |
} else { |
__ ret(0); |
} |