| Index: src/mips/macro-assembler-mips.h
|
| diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h
|
| index c171f8f47f2ba6d2df895b25f780f63e0c708335..7b973a6b55ee7275d9b6fc7e76722083f1bb0d85 100644
|
| --- a/src/mips/macro-assembler-mips.h
|
| +++ b/src/mips/macro-assembler-mips.h
|
| @@ -193,10 +193,14 @@ class MacroAssembler: public Assembler {
|
| Register reg = no_reg,
|
| const Operand& op = Operand(no_reg));
|
|
|
| - void DropAndRet(int drop = 0,
|
| - Condition cond = cc_always,
|
| - Register reg = no_reg,
|
| - const Operand& op = Operand(no_reg));
|
| + // Trivial case of DropAndRet that utilizes the delay slot and only emits
|
| + // 2 instructions.
|
| + void DropAndRet(int drop);
|
| +
|
| + void DropAndRet(int drop,
|
| + Condition cond,
|
| + Register reg,
|
| + const Operand& op);
|
|
|
| // Swap two registers. If the scratch register is omitted then a slightly
|
| // less efficient form using xor instead of mov is emitted.
|
| @@ -773,7 +777,9 @@ class MacroAssembler: public Assembler {
|
| int stack_space = 0);
|
|
|
| // Leave the current exit frame.
|
| - void LeaveExitFrame(bool save_doubles, Register arg_count);
|
| + void LeaveExitFrame(bool save_doubles,
|
| + Register arg_count,
|
| + bool do_return = false);
|
|
|
| // Get the actual activation frame alignment for target environment.
|
| static int ActivationFrameAlignment();
|
| @@ -1083,9 +1089,22 @@ class MacroAssembler: public Assembler {
|
| // -------------------------------------------------------------------------
|
| // Runtime calls.
|
|
|
| + // See comments at the beginning of CEntryStub::Generate.
|
| + inline void PrepareCEntryArgs(int num_args) {
|
| + li(s0, num_args);
|
| + li(s1, (num_args - 1) * kPointerSize);
|
| + }
|
| +
|
| + inline void PrepareCEntryFunction(const ExternalReference& ref) {
|
| + li(s2, Operand(ref));
|
| + }
|
| +
|
| // Call a code stub.
|
| - void CallStub(CodeStub* stub, Condition cond = cc_always,
|
| - Register r1 = zero_reg, const Operand& r2 = Operand(zero_reg));
|
| + void CallStub(CodeStub* stub,
|
| + Condition cond = cc_always,
|
| + Register r1 = zero_reg,
|
| + const Operand& r2 = Operand(zero_reg),
|
| + BranchDelaySlot bd = PROTECT);
|
|
|
| // Tail call a code stub (jump).
|
| void TailCallStub(CodeStub* stub);
|
| @@ -1101,7 +1120,8 @@ class MacroAssembler: public Assembler {
|
|
|
| // Convenience function: call an external reference.
|
| void CallExternalReference(const ExternalReference& ext,
|
| - int num_arguments);
|
| + int num_arguments,
|
| + BranchDelaySlot bd = PROTECT);
|
|
|
| // Tail call of a runtime routine (jump).
|
| // Like JumpToExternalReference, but also takes care of passing the number
|
| @@ -1167,7 +1187,8 @@ class MacroAssembler: public Assembler {
|
| void CallApiFunctionAndReturn(ExternalReference function, int stack_space);
|
|
|
| // Jump to the builtin routine.
|
| - void JumpToExternalReference(const ExternalReference& builtin);
|
| + void JumpToExternalReference(const ExternalReference& builtin,
|
| + BranchDelaySlot bd = PROTECT);
|
|
|
| // Invoke specified builtin JavaScript function. Adds an entry to
|
| // the unresolved list if the name does not resolve.
|
|
|