Index: src/s390/macro-assembler-s390.cc |
diff --git a/src/s390/macro-assembler-s390.cc b/src/s390/macro-assembler-s390.cc |
index 0b5bbb4d1a23409bb50bf94da92de26f7aa035eb..746265235a768603442a61eb80921edc86896402 100644 |
--- a/src/s390/macro-assembler-s390.cc |
+++ b/src/s390/macro-assembler-s390.cc |
@@ -1024,7 +1024,10 @@ int MacroAssembler::LeaveFrame(StackFrame::Type type, int stack_adjustment) { |
// gaps |
// Args |
// ABIRes <- newSP |
-void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) { |
+void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, |
+ StackFrame::Type frame_type) { |
+ DCHECK(frame_type == StackFrame::EXIT || |
+ frame_type == StackFrame::BUILTIN_EXIT); |
// Set up the frame structure on the stack. |
DCHECK_EQ(2 * kPointerSize, ExitFrameConstants::kCallerSPDisplacement); |
DCHECK_EQ(1 * kPointerSize, ExitFrameConstants::kCallerPCOffset); |
@@ -1035,7 +1038,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) { |
// all of the pushes that have happened inside of V8 |
// since we were called from C code |
CleanseP(r14); |
- LoadSmiLiteral(r1, Smi::FromInt(StackFrame::EXIT)); |
+ LoadSmiLiteral(r1, Smi::FromInt(frame_type)); |
PushCommonFrame(r1); |
// Reserve room for saved entry sp and code object. |
lay(sp, MemOperand(fp, -ExitFrameConstants::kFixedFrameSizeFromFp)); |
@@ -2614,9 +2617,11 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { |
JumpToExternalReference(ExternalReference(fid, isolate())); |
} |
-void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) { |
+void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, |
+ bool builtin_exit_frame) { |
mov(r3, Operand(builtin)); |
- CEntryStub stub(isolate(), 1); |
+ CEntryStub stub(isolate(), 1, kDontSaveFPRegs, kArgvOnStack, |
+ builtin_exit_frame); |
Jump(stub.GetCode(), RelocInfo::CODE_TARGET); |
} |