Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index 8eb93a6b3332b3a2aa853146759b6e1d967d6daf..8ced794daad548e7a170acbc7e76d79169b85b7a 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -1286,13 +1286,16 @@ int MacroAssembler::LeaveFrame(StackFrame::Type type) { |
return frame_ends; |
} |
+void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, |
+ StackFrame::Type frame_type) { |
+ DCHECK(frame_type == StackFrame::EXIT || |
+ frame_type == StackFrame::BUILTIN_EXIT); |
-void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space) { |
// Set up the frame structure on the stack. |
DCHECK_EQ(2 * kPointerSize, ExitFrameConstants::kCallerSPDisplacement); |
DCHECK_EQ(1 * kPointerSize, ExitFrameConstants::kCallerPCOffset); |
DCHECK_EQ(0 * kPointerSize, ExitFrameConstants::kCallerFPOffset); |
- mov(ip, Operand(Smi::FromInt(StackFrame::EXIT))); |
+ mov(ip, Operand(Smi::FromInt(frame_type))); |
PushCommonFrame(ip); |
// Reserve room for saved entry sp and code object. |
sub(sp, fp, Operand(ExitFrameConstants::kFixedFrameSizeFromFp)); |
@@ -2852,18 +2855,18 @@ 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) { |
#if defined(__thumb__) |
// Thumb mode builtin. |
DCHECK((reinterpret_cast<intptr_t>(builtin.address()) & 1) == 1); |
#endif |
mov(r1, Operand(builtin)); |
- CEntryStub stub(isolate(), 1); |
+ CEntryStub stub(isolate(), 1, kDontSaveFPRegs, kArgvOnStack, |
+ builtin_exit_frame); |
Jump(stub.GetCode(), RelocInfo::CODE_TARGET); |
} |
- |
void MacroAssembler::SetCounter(StatsCounter* counter, int value, |
Register scratch1, Register scratch2) { |
if (FLAG_native_code_counters && counter->Enabled()) { |