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); |