Index: src/arm64/macro-assembler-arm64.cc |
diff --git a/src/arm64/macro-assembler-arm64.cc b/src/arm64/macro-assembler-arm64.cc |
index 5f1e5c3795948bc5c8e17974f0998d35d7c0b932..ac7d799fddf6f118100dc703703b8485404a7c0a 100644 |
--- a/src/arm64/macro-assembler-arm64.cc |
+++ b/src/arm64/macro-assembler-arm64.cc |
@@ -1759,14 +1759,14 @@ void MacroAssembler::CallExternalReference(const ExternalReference& ext, |
CallStub(&stub); |
} |
- |
-void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) { |
+void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, |
+ bool builtin_exit_frame) { |
Mov(x1, builtin); |
- CEntryStub stub(isolate(), 1); |
+ CEntryStub stub(isolate(), 1, kDontSaveFPRegs, kArgvOnStack, |
+ builtin_exit_frame); |
Jump(stub.GetCode(), RelocInfo::CODE_TARGET); |
} |
- |
void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { |
const Runtime::Function* function = Runtime::FunctionForId(fid); |
DCHECK_EQ(1, function->result_size); |
@@ -2823,16 +2823,17 @@ void MacroAssembler::ExitFrameRestoreFPRegs() { |
} |
} |
- |
-void MacroAssembler::EnterExitFrame(bool save_doubles, |
- const Register& scratch, |
- int extra_space) { |
+void MacroAssembler::EnterExitFrame(bool save_doubles, const Register& scratch, |
+ int extra_space, |
+ StackFrame::Type frame_type) { |
DCHECK(jssp.Is(StackPointer())); |
+ DCHECK(frame_type == StackFrame::EXIT || |
+ frame_type == StackFrame::BUILTIN_EXIT); |
// Set up the new stack frame. |
Push(lr, fp); |
Mov(fp, StackPointer()); |
- Mov(scratch, Smi::FromInt(StackFrame::EXIT)); |
+ Mov(scratch, Smi::FromInt(frame_type)); |
Push(scratch); |
Push(xzr); |
Mov(scratch, Operand(CodeObject())); |