| 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..27ec8e5bda9b40fccec4f9218264edea38085927 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::CheckForEmitInForbiddenSlot() {
|
| 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
|
|
|
|
|