Index: src/mips64/disasm-mips64.cc |
diff --git a/src/mips64/disasm-mips64.cc b/src/mips64/disasm-mips64.cc |
index ffab261cd11f07c05cb280a95613ae816cd43228..a8fd48e6a204767eddfd2fc344d12ed1861d79ba 100644 |
--- a/src/mips64/disasm-mips64.cc |
+++ b/src/mips64/disasm-mips64.cc |
@@ -1179,7 +1179,16 @@ void Decoder::DecodeTypeRegisterSPECIAL(Instruction* instr) { |
} |
break; |
case MFLO: |
- Format(instr, "mflo 'rd"); |
+ if (instr->Bits(25, 16) == 0) { |
+ Format(instr, "mflo 'rd"); |
+ } else { |
+ if ((instr->FunctionFieldRaw() == DCLZ_R6) && (instr->FdValue() == 1)) { |
+ Format(instr, "dclz 'rd, 'rs"); |
+ } else if ((instr->FunctionFieldRaw() == DCLO_R6) && |
+ (instr->FdValue() == 1)) { |
+ Format(instr, "dclo 'rd, 'rs"); |
+ } |
+ } |
break; |
case D_MUL_MUH_U: // Equals to DMULTU. |
if (kArchVariant != kMips64r6) { |
@@ -1360,6 +1369,11 @@ void Decoder::DecodeTypeRegisterSPECIAL2(Instruction* instr) { |
Format(instr, "clz 'rd, 'rs"); |
} |
break; |
+ case DCLZ: |
+ if (kArchVariant != kMips64r6) { |
+ Format(instr, "dclz 'rd, 'rs"); |
+ } |
+ break; |
default: |
UNREACHABLE(); |
} |