| Index: src/ia32/macro-assembler-ia32.cc
|
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
|
| index 33044bac733474e53c1aafaf219d2eff9f5c39fd..c3364b19018fb3a28dfb228712de9ef9d5d1f6f1 100644
|
| --- a/src/ia32/macro-assembler-ia32.cc
|
| +++ b/src/ia32/macro-assembler-ia32.cc
|
| @@ -1130,8 +1130,10 @@ void MacroAssembler::LeaveFrame(StackFrame::Type type) {
|
| leave();
|
| }
|
|
|
| +void MacroAssembler::EnterExitFramePrologue(StackFrame::Type frame_type) {
|
| + DCHECK(frame_type == StackFrame::EXIT ||
|
| + frame_type == StackFrame::BUILTIN_EXIT);
|
|
|
| -void MacroAssembler::EnterExitFramePrologue() {
|
| // Set up the frame structure on the stack.
|
| DCHECK_EQ(+2 * kPointerSize, ExitFrameConstants::kCallerSPDisplacement);
|
| DCHECK_EQ(+1 * kPointerSize, ExitFrameConstants::kCallerPCOffset);
|
| @@ -1140,7 +1142,7 @@ void MacroAssembler::EnterExitFramePrologue() {
|
| mov(ebp, esp);
|
|
|
| // Reserve room for entry stack pointer and push the code object.
|
| - push(Immediate(Smi::FromInt(StackFrame::EXIT)));
|
| + push(Immediate(Smi::FromInt(frame_type)));
|
| DCHECK_EQ(-2 * kPointerSize, ExitFrameConstants::kSPOffset);
|
| push(Immediate(0)); // Saved entry sp, patched before call.
|
| DCHECK_EQ(-3 * kPointerSize, ExitFrameConstants::kCodeOffset);
|
| @@ -1182,9 +1184,9 @@ void MacroAssembler::EnterExitFrameEpilogue(int argc, bool save_doubles) {
|
| mov(Operand(ebp, ExitFrameConstants::kSPOffset), esp);
|
| }
|
|
|
| -
|
| -void MacroAssembler::EnterExitFrame(int argc, bool save_doubles) {
|
| - EnterExitFramePrologue();
|
| +void MacroAssembler::EnterExitFrame(int argc, bool save_doubles,
|
| + StackFrame::Type frame_type) {
|
| + EnterExitFramePrologue(frame_type);
|
|
|
| // Set up argc and argv in callee-saved registers.
|
| int offset = StandardFrameConstants::kCallerSPOffset - kPointerSize;
|
| @@ -1197,7 +1199,7 @@ void MacroAssembler::EnterExitFrame(int argc, bool save_doubles) {
|
|
|
|
|
| void MacroAssembler::EnterApiExitFrame(int argc) {
|
| - EnterExitFramePrologue();
|
| + EnterExitFramePrologue(StackFrame::EXIT);
|
| EnterExitFrameEpilogue(argc, false);
|
| }
|
|
|
| @@ -2201,11 +2203,12 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) {
|
| JumpToExternalReference(ExternalReference(fid, isolate()));
|
| }
|
|
|
| -
|
| -void MacroAssembler::JumpToExternalReference(const ExternalReference& ext) {
|
| +void MacroAssembler::JumpToExternalReference(const ExternalReference& ext,
|
| + bool builtin_exit_frame) {
|
| // Set the entry point and jump to the C entry runtime stub.
|
| mov(ebx, Immediate(ext));
|
| - CEntryStub ces(isolate(), 1);
|
| + CEntryStub ces(isolate(), 1, kDontSaveFPRegs, kArgvOnStack,
|
| + builtin_exit_frame);
|
| jmp(ces.GetCode(), RelocInfo::CODE_TARGET);
|
| }
|
|
|
|
|