Index: src/mips64/macro-assembler-mips64.cc |
diff --git a/src/mips64/macro-assembler-mips64.cc b/src/mips64/macro-assembler-mips64.cc |
index d8bdbfac648bb51e02ff9559c8adf1c4450f83f2..475262a8affb1ad9ff0ae16319313954acdfef47 100644 |
--- a/src/mips64/macro-assembler-mips64.cc |
+++ b/src/mips64/macro-assembler-mips64.cc |
@@ -5915,11 +5915,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, |
@@ -5928,7 +5929,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()) { |
@@ -6184,7 +6184,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); |
@@ -6204,7 +6208,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); |