Index: src/ppc/macro-assembler-ppc.cc |
diff --git a/src/ppc/macro-assembler-ppc.cc b/src/ppc/macro-assembler-ppc.cc |
index 8e55bc670221f254ff990cff19a28f7a8b84cba5..45c35961fd262eb77c19efa7899f97153464f4d5 100644 |
--- a/src/ppc/macro-assembler-ppc.cc |
+++ b/src/ppc/macro-assembler-ppc.cc |
@@ -1089,7 +1089,10 @@ int MacroAssembler::LeaveFrame(StackFrame::Type type, int stack_adjustment) { |
// in the fp register (r31) |
// Then - we buy a new frame |
-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); |
@@ -1100,7 +1103,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 |
- LoadSmiLiteral(ip, Smi::FromInt(StackFrame::EXIT)); |
+ LoadSmiLiteral(ip, Smi::FromInt(frame_type)); |
PushCommonFrame(ip); |
// Reserve room for saved entry sp and code object. |
subi(sp, fp, Operand(ExitFrameConstants::kFixedFrameSizeFromFp)); |
@@ -2754,9 +2757,11 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { |
} |
-void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) { |
+void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, |
+ bool builtin_exit_frame) { |
mov(r4, Operand(builtin)); |
- CEntryStub stub(isolate(), 1); |
+ CEntryStub stub(isolate(), 1, kDontSaveFPRegs, kArgvOnStack, |
+ builtin_exit_frame); |
Jump(stub.GetCode(), RelocInfo::CODE_TARGET); |
} |