Index: src/mips/assembler-mips-inl.h |
diff --git a/src/mips/assembler-mips-inl.h b/src/mips/assembler-mips-inl.h |
index 0d4576d85cf2881b3c98208521f652e4d5fbf31f..a27e43e6d555330bbca35b956aff1d4374bac09c 100644 |
--- a/src/mips/assembler-mips-inl.h |
+++ b/src/mips/assembler-mips-inl.h |
@@ -449,6 +449,17 @@ void Assembler::emit(Instr x) { |
if (!is_buffer_growth_blocked()) { |
CheckBuffer(); |
} |
+ if (IsPrevInstrCompactBranch()) { |
+ BlockTrampolinePoolFor(1); // For saving forbidden slot. |
paul.l...
2015/10/15 01:51:24
Doesn't this BlockTrampolinePoolFor(1) come too la
balazs.kilvady
2015/10/30 21:11:14
Done.
|
+ if (Instruction::At(reinterpret_cast<byte*>(&x)) |
+ ->IsForbiddenInBranchDelay()) { |
paul.l...
2015/10/15 01:51:24
I think the use of 'Delay' in this name is mis-lea
balazs.kilvady
2015/10/30 21:11:14
Done.
|
+ // Nop instruction to preceed a CTI in forbidden slot: |
+ Instr nop = SPECIAL | SLL; |
+ *reinterpret_cast<Instr*>(pc_) = nop; |
+ pc_ += kInstrSize; |
+ } |
+ ClearCompactBranchState(); |
+ } |
*reinterpret_cast<Instr*>(pc_) = x; |
pc_ += kInstrSize; |
CheckTrampolinePoolQuick(); |