Index: src/mips64/assembler-mips64.cc |
diff --git a/src/mips64/assembler-mips64.cc b/src/mips64/assembler-mips64.cc |
index 981fde07c785d408fe6bca62181071e520a33d49..838c2882af7809c3aa8820d6876a632e4dea029e 100644 |
--- a/src/mips64/assembler-mips64.cc |
+++ b/src/mips64/assembler-mips64.cc |
@@ -460,6 +460,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); |
@@ -473,7 +496,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 && kArchVariant == kMips64r6) { |
// All the 3 variants of POP10 (BOVC, BEQC, BEQZALC) and |
// POP30 (BNVC, BNEC, BNEZALC) are branch ops. |