Index: src/mips/assembler-mips.cc |
diff --git a/src/mips/assembler-mips.cc b/src/mips/assembler-mips.cc |
index 96750225f4bf834c7f13f488e78af562330414ac..c507432a5827345a183b1480b25ad517e78e438b 100644 |
--- a/src/mips/assembler-mips.cc |
+++ b/src/mips/assembler-mips.cc |
@@ -479,6 +479,29 @@ const int kEndOfChain = -4; |
// Determines the end of the Jump chain (a subset of the label link chain). |
const int kEndOfJumpChain = 0; |
+bool Assembler::IsMsaBranch(Instr instr) { |
+ uint32_t opcode = GetOpcodeField(instr); |
+ uint32_t rs_field = GetRsField(instr); |
+ if (opcode == COP1) { |
+ switch (rs_field) { |
+ case BZ_V: |
+ case BZ_B: |
+ case BZ_H: |
+ case BZ_W: |
+ case BZ_D: |
+ case BNZ_V: |
+ case BNZ_B: |
+ case BNZ_H: |
+ case BNZ_W: |
+ case BNZ_D: |
+ return true; |
+ default: |
+ return false; |
+ } |
+ } else { |
+ return false; |
+ } |
+} |
bool Assembler::IsBranch(Instr instr) { |
uint32_t opcode = GetOpcodeField(instr); |
@@ -492,7 +515,7 @@ bool Assembler::IsBranch(Instr instr) { |
rt_field == BLTZAL || rt_field == BGEZAL)) || |
(opcode == COP1 && rs_field == BC1) || // Coprocessor branch. |
(opcode == COP1 && rs_field == BC1EQZ) || |
- (opcode == COP1 && rs_field == BC1NEZ); |
+ (opcode == COP1 && rs_field == BC1NEZ) || IsMsaBranch(instr); |
if (!isBranch && IsMipsArchVariant(kMips32r6)) { |
// All the 3 variants of POP10 (BOVC, BEQC, BEQZALC) and |
// POP30 (BNVC, BNEC, BNEZALC) are branch ops. |