Index: src/mips64/macro-assembler-mips64.cc |
diff --git a/src/mips64/macro-assembler-mips64.cc b/src/mips64/macro-assembler-mips64.cc |
index f238c52427ee0eb9e8d0869fa1f9ac0419b37085..f56b6420ff65c7ff9f65ad477297dcc6d5afac41 100644 |
--- a/src/mips64/macro-assembler-mips64.cc |
+++ b/src/mips64/macro-assembler-mips64.cc |
@@ -5873,11 +5873,12 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { |
JumpToExternalReference(ExternalReference(fid, isolate())); |
} |
- |
void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, |
- BranchDelaySlot bd) { |
+ BranchDelaySlot bd, |
+ bool builtin_exit_frame) { |
PrepareCEntryFunction(builtin); |
- CEntryStub stub(isolate(), 1); |
+ CEntryStub stub(isolate(), 1, kDontSaveFPRegs, kArgvOnStack, |
+ builtin_exit_frame); |
Jump(stub.GetCode(), |
RelocInfo::CODE_TARGET, |
al, |
@@ -5886,7 +5887,6 @@ void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, |
bd); |
} |
- |
void MacroAssembler::SetCounter(StatsCounter* counter, int value, |
Register scratch1, Register scratch2) { |
if (FLAG_native_code_counters && counter->Enabled()) { |
@@ -6142,7 +6142,11 @@ void MacroAssembler::LeaveFrame(StackFrame::Type type) { |
ld(fp, MemOperand(fp, 0 * kPointerSize)); |
} |
-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. |
STATIC_ASSERT(2 * kPointerSize == ExitFrameConstants::kCallerSPDisplacement); |
STATIC_ASSERT(1 * kPointerSize == ExitFrameConstants::kCallerPCOffset); |
@@ -6162,7 +6166,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) { |
daddiu(sp, sp, -2 * kPointerSize - ExitFrameConstants::kFixedFrameSizeFromFp); |
sd(ra, MemOperand(sp, 4 * kPointerSize)); |
sd(fp, MemOperand(sp, 3 * kPointerSize)); |
- li(at, Operand(Smi::FromInt(StackFrame::EXIT))); |
+ li(at, Operand(Smi::FromInt(frame_type))); |
sd(at, MemOperand(sp, 2 * kPointerSize)); |
// Set up new frame pointer. |
daddiu(fp, sp, ExitFrameConstants::kFixedFrameSizeFromFp); |