diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index 61e05f8fc8..97ef020af5 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -5683,12 +5683,9 @@ static void CreateArrayDispatch(MacroAssembler* masm, int last_index = GetSequenceIndexFromFastElementsKind( TERMINAL_FAST_ELEMENTS_KIND); for (int i = 0; i <= last_index; ++i) { - Label next; ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); - __ Branch(&next, ne, a3, Operand(kind)); T stub(kind); - __ TailCallStub(&stub); - __ bind(&next); + __ TailCallStub(&stub, eq, a3, Operand(kind)); } // If we reached this point there is a problem. @@ -5764,12 +5761,9 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm, int last_index = GetSequenceIndexFromFastElementsKind( TERMINAL_FAST_ELEMENTS_KIND); for (int i = 0; i <= last_index; ++i) { - Label next; ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); - __ Branch(&next, ne, a3, Operand(kind)); ArraySingleArgumentConstructorStub stub(kind); - __ TailCallStub(&stub); - __ bind(&next); + __ TailCallStub(&stub, eq, a3, Operand(kind)); } // If we reached this point there is a problem. @@ -5911,34 +5905,25 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) { void InternalArrayConstructorStub::GenerateCase( MacroAssembler* masm, ElementsKind kind) { - Label not_zero_case, not_one_case; - Label normal_sequence; - __ Branch(¬_zero_case, ne, a0, Operand(zero_reg)); InternalArrayNoArgumentConstructorStub stub0(kind); - __ TailCallStub(&stub0); + __ TailCallStub(&stub0, lo, a0, Operand(1)); - __ bind(¬_zero_case); - __ Branch(¬_one_case, gt, a0, Operand(1)); + InternalArrayNArgumentsConstructorStub stubN(kind); + __ TailCallStub(&stubN, hi, a0, Operand(1)); if (IsFastPackedElementsKind(kind)) { // We might need to create a holey array // look at the first argument. __ lw(at, MemOperand(sp, 0)); - __ Branch(&normal_sequence, eq, at, Operand(zero_reg)); InternalArraySingleArgumentConstructorStub stub1_holey(GetHoleyElementsKind(kind)); - __ TailCallStub(&stub1_holey); + __ TailCallStub(&stub1_holey, ne, at, Operand(zero_reg)); } - __ bind(&normal_sequence); InternalArraySingleArgumentConstructorStub stub1(kind); __ TailCallStub(&stub1); - - __ bind(¬_one_case); - InternalArrayNArgumentsConstructorStub stubN(kind); - __ TailCallStub(&stubN); } diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index 4e3ab3291b..d67e58e660 100644 --- a/src/mips/macro-assembler-mips.cc +++ b/src/mips/macro-assembler-mips.cc @@ -3905,8 +3905,12 @@ void MacroAssembler::CallStub(CodeStub* stub, } -void MacroAssembler::TailCallStub(CodeStub* stub) { - Jump(stub->GetCode(isolate()), RelocInfo::CODE_TARGET); +void MacroAssembler::TailCallStub(CodeStub* stub, + Condition cond, + Register r1, + const Operand& r2, + BranchDelaySlot bd) { + Jump(stub->GetCode(isolate()), RelocInfo::CODE_TARGET, cond, r1, r2, bd); } diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h index f1b82ed0e5..4a7d9adf10 100644 --- a/src/mips/macro-assembler-mips.h +++ b/src/mips/macro-assembler-mips.h @@ -1194,16 +1194,18 @@ class MacroAssembler: public Assembler { li(s2, Operand(ref)); } +#define COND_ARGS Condition cond = al, Register rs = zero_reg, \ +const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT + // Call a code stub. void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None(), - Condition cond = cc_always, - Register r1 = zero_reg, - const Operand& r2 = Operand(zero_reg), - BranchDelaySlot bd = PROTECT); + COND_ARGS); // Tail call a code stub (jump). - void TailCallStub(CodeStub* stub); + void TailCallStub(CodeStub* stub, COND_ARGS); + +#undef COND_ARGS void CallJSExitStub(CodeStub* stub);