Chromium Code Reviews| Index: src/mips/assembler-mips-inl.h |
| diff --git a/src/mips/assembler-mips-inl.h b/src/mips/assembler-mips-inl.h |
| index 3cde3c5f128287236dcafe09bf7809ec423b248c..5e12d42667594cc3b1eea60e7853fd14ead7ee39 100644 |
| --- a/src/mips/assembler-mips-inl.h |
| +++ b/src/mips/assembler-mips-inl.h |
| @@ -437,11 +437,23 @@ void Assembler::CheckTrampolinePoolQuick(int extra_instructions) { |
| } |
| -void Assembler::emit(Instr x, CompactBranchType is_compact_branch) { |
| +void Assembler::EmitForbiddenSlotHelper() { |
|
paul.l...
2016/01/12 01:13:40
Maybe CheckForEmitInForbiddenSlot() is a better na
balazs.kilvady
2016/01/12 16:32:11
Done.
|
| if (!is_buffer_growth_blocked()) { |
| CheckBuffer(); |
| } |
| if (IsPrevInstrCompactBranch()) { |
| + // Nop instruction to preceed a CTI in forbidden slot: |
| + Instr nop = SPECIAL | SLL; |
| + *reinterpret_cast<Instr*>(pc_) = nop; |
| + pc_ += kInstrSize; |
| + |
| + ClearCompactBranchState(); |
| + } |
| +} |
| + |
| + |
| +void Assembler::EmitHelper(Instr x, CompactBranchType is_compact_branch) { |
| + if (IsPrevInstrCompactBranch()) { |
| if (Instruction::IsForbiddenAfterBranchInstr(x)) { |
| // Nop instruction to preceed a CTI in forbidden slot: |
| Instr nop = SPECIAL | SLL; |
| @@ -459,6 +471,22 @@ void Assembler::emit(Instr x, CompactBranchType is_compact_branch) { |
| } |
| +template <typename T> |
| +void Assembler::EmitHelper(T x) { |
| + *reinterpret_cast<T*>(pc_) = x; |
| + pc_ += sizeof(x); |
| + CheckTrampolinePoolQuick(); |
| +} |
| + |
| + |
| +void Assembler::emit(Instr x, CompactBranchType is_compact_branch) { |
| + if (!is_buffer_growth_blocked()) { |
| + CheckBuffer(); |
| + } |
| + EmitHelper(x, is_compact_branch); |
| +} |
| + |
| + |
| } // namespace internal |
| } // namespace v8 |