| Index: src/mips64/macro-assembler-mips64.cc
|
| diff --git a/src/mips64/macro-assembler-mips64.cc b/src/mips64/macro-assembler-mips64.cc
|
| index 154276672216da103507f4a92f2ad689bde09ac8..8ba46cb750ec60b335fea15d5dc07c86031f6f18 100644
|
| --- a/src/mips64/macro-assembler-mips64.cc
|
| +++ b/src/mips64/macro-assembler-mips64.cc
|
| @@ -1651,7 +1651,7 @@ void MacroAssembler::BranchFCommon(SecondaryField sizeField, Label* target,
|
| c(UN, D, cmp1, cmp2);
|
| bc1f(&skip);
|
| nop();
|
| - Jr(nan, bd);
|
| + J(nan, bd);
|
| bind(&skip);
|
| } else {
|
| c(UN, D, cmp1, cmp2);
|
| @@ -1670,7 +1670,7 @@ void MacroAssembler::BranchFCommon(SecondaryField sizeField, Label* target,
|
| cmp(UN, L, kDoubleCompareReg, cmp1, cmp2);
|
| bc1eqz(&skip, kDoubleCompareReg);
|
| nop();
|
| - Jr(nan, bd);
|
| + J(nan, bd);
|
| bind(&skip);
|
| } else {
|
| cmp(UN, L, kDoubleCompareReg, cmp1, cmp2);
|
| @@ -1689,7 +1689,7 @@ void MacroAssembler::BranchFCommon(SecondaryField sizeField, Label* target,
|
| Label skip;
|
| Condition neg_cond = NegateFpuCondition(cond);
|
| BranchShortF(sizeField, &skip, neg_cond, cmp1, cmp2, bd);
|
| - Jr(target, bd);
|
| + J(target, bd);
|
| bind(&skip);
|
| } else {
|
| BranchShortF(sizeField, target, cond, cmp1, cmp2, bd);
|
| @@ -2125,11 +2125,11 @@ void MacroAssembler::Branch(Label* L, BranchDelaySlot bdslot) {
|
| if (is_near(L)) {
|
| BranchShort(L, bdslot);
|
| } else {
|
| - Jr(L, bdslot);
|
| + J(L, bdslot);
|
| }
|
| } else {
|
| if (is_trampoline_emitted()) {
|
| - Jr(L, bdslot);
|
| + J(L, bdslot);
|
| } else {
|
| BranchShort(L, bdslot);
|
| }
|
| @@ -2148,10 +2148,10 @@ void MacroAssembler::Branch(Label* L, Condition cond, Register rs,
|
| Label skip;
|
| Condition neg_cond = NegateCondition(cond);
|
| BranchShort(&skip, neg_cond, rs, rt);
|
| - Jr(L, bdslot);
|
| + J(L, bdslot);
|
| bind(&skip);
|
| } else {
|
| - Jr(L, bdslot);
|
| + J(L, bdslot);
|
| }
|
| }
|
| } else {
|
| @@ -2160,10 +2160,10 @@ void MacroAssembler::Branch(Label* L, Condition cond, Register rs,
|
| Label skip;
|
| Condition neg_cond = NegateCondition(cond);
|
| BranchShort(&skip, neg_cond, rs, rt);
|
| - Jr(L, bdslot);
|
| + J(L, bdslot);
|
| bind(&skip);
|
| } else {
|
| - Jr(L, bdslot);
|
| + J(L, bdslot);
|
| }
|
| } else {
|
| BranchShort(L, cond, rs, rt, bdslot);
|
| @@ -2729,11 +2729,11 @@ void MacroAssembler::BranchAndLink(Label* L, BranchDelaySlot bdslot) {
|
| if (is_near(L)) {
|
| BranchAndLinkShort(L, bdslot);
|
| } else {
|
| - Jalr(L, bdslot);
|
| + Jal(L, bdslot);
|
| }
|
| } else {
|
| if (is_trampoline_emitted()) {
|
| - Jalr(L, bdslot);
|
| + Jal(L, bdslot);
|
| } else {
|
| BranchAndLinkShort(L, bdslot);
|
| }
|
| @@ -2751,7 +2751,7 @@ void MacroAssembler::BranchAndLink(Label* L, Condition cond, Register rs,
|
| Label skip;
|
| Condition neg_cond = NegateCondition(cond);
|
| BranchShort(&skip, neg_cond, rs, rt);
|
| - Jalr(L, bdslot);
|
| + J(L, bdslot);
|
| bind(&skip);
|
| }
|
| } else {
|
| @@ -2759,7 +2759,7 @@ void MacroAssembler::BranchAndLink(Label* L, Condition cond, Register rs,
|
| Label skip;
|
| Condition neg_cond = NegateCondition(cond);
|
| BranchShort(&skip, neg_cond, rs, rt);
|
| - Jalr(L, bdslot);
|
| + Jal(L, bdslot);
|
| bind(&skip);
|
| } else {
|
| BranchAndLinkShort(L, cond, rs, rt, bdslot);
|
| @@ -3187,6 +3187,40 @@ void MacroAssembler::Ret(Condition cond,
|
| }
|
|
|
|
|
| +void MacroAssembler::J(Label* L, BranchDelaySlot bdslot) {
|
| + BlockTrampolinePoolScope block_trampoline_pool(this);
|
| +
|
| + uint64_t imm28;
|
| + imm28 = jump_address(L);
|
| + {
|
| + BlockGrowBufferScope block_buf_growth(this);
|
| + // Buffer growth (and relocation) must be blocked for internal references
|
| + // until associated instructions are emitted and available to be patched.
|
| + RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE_ENCODED);
|
| + j(imm28);
|
| + }
|
| + // Emit a nop in the branch delay slot if required.
|
| + if (bdslot == PROTECT) nop();
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::Jal(Label* L, BranchDelaySlot bdslot) {
|
| + BlockTrampolinePoolScope block_trampoline_pool(this);
|
| +
|
| + uint64_t imm28;
|
| + imm28 = jump_address(L);
|
| + {
|
| + BlockGrowBufferScope block_buf_growth(this);
|
| + // Buffer growth (and relocation) must be blocked for internal references
|
| + // until associated instructions are emitted and available to be patched.
|
| + RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE_ENCODED);
|
| + jal(imm28);
|
| + }
|
| + // Emit a nop in the branch delay slot if required.
|
| + if (bdslot == PROTECT) nop();
|
| +}
|
| +
|
| +
|
| void MacroAssembler::Jr(Label* L, BranchDelaySlot bdslot) {
|
| BlockTrampolinePoolScope block_trampoline_pool(this);
|
|
|
|
|