Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index 37e1876f3decedeb786aeb80834d48e1ff4c53e3..08abcf115f7f633a034873386cbf1c9c7e97a25a 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -2425,11 +2425,23 @@ void CEntryStub::Generate(MacroAssembler* masm) { |
// esp: stack pointer (restored after C call) |
// esi: current context (C callee-saved) |
// edi: JS function of the caller (C callee-saved) |
+ // |
+ // If argv_in_register(): |
+ // ecx: pointer to the first argument |
ProfileEntryHookStub::MaybeCallEntryHook(masm); |
// Enter the exit frame that transitions from JavaScript to C++. |
- __ EnterExitFrame(save_doubles()); |
+ if (argv_in_register()) { |
+ DCHECK(!save_doubles()); |
+ __ EnterApiExitFrame(3); |
+ |
+ // Move argc and argv into the correct registers. |
+ __ mov(esi, ecx); |
+ __ mov(edi, eax); |
+ } else { |
+ __ EnterExitFrame(save_doubles()); |
+ } |
// ebx: pointer to C function (C callee-saved) |
// ebp: frame pointer (restored after C call) |
@@ -2474,7 +2486,7 @@ void CEntryStub::Generate(MacroAssembler* masm) { |
} |
// Exit the JavaScript to C++ exit frame. |
- __ LeaveExitFrame(save_doubles()); |
+ __ LeaveExitFrame(save_doubles(), !argv_in_register()); |
__ ret(0); |
// Handling of exception. |