| Index: src/mips64/assembler-mips64.cc
|
| diff --git a/src/mips64/assembler-mips64.cc b/src/mips64/assembler-mips64.cc
|
| index f1b6f9bb00cab837075498af3022f8923738e1e1..936b5068b0bf69511ccbe49f518491363a380207 100644
|
| --- a/src/mips64/assembler-mips64.cc
|
| +++ b/src/mips64/assembler-mips64.cc
|
| @@ -462,6 +462,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);
|
| @@ -475,7 +498,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.
|
|
|