diff options
author | Aart Bik <ajcbik@google.com> | 2017-04-03 21:42:11 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-04-03 21:42:13 +0000 |
commit | e2a239560959dafe08c499d61905b69c6f628c02 (patch) | |
tree | bfc4889ebe0d83d4a6ccf6392708ff0d6c383e9e /disassembler | |
parent | 432fccc4c001fcd822f401aea1a4214b713bd896 (diff) | |
parent | 3f44403fb5b6c9c6176339ab5888e97d0b617746 (diff) |
Merge "MIPS64: Add ldi.df MSA instruction"
Diffstat (limited to 'disassembler')
-rw-r--r-- | disassembler/disassembler_mips.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/disassembler/disassembler_mips.cc b/disassembler/disassembler_mips.cc index fc6c18b1df..eb57d339af 100644 --- a/disassembler/disassembler_mips.cc +++ b/disassembler/disassembler_mips.cc @@ -448,6 +448,7 @@ static const MipsInstruction gMipsInstructions[] = { { kMsaMask | (0x3ff << 16), kMsa | (0xbe << 16) | 0x19, "move.v", "km" }, { kMsaMask | (0xf << 22), kMsa | (0x1 << 22) | 0x19, "splati", "kX" }, { kMsaMask | (0xff << 18), kMsa | (0xc0 << 18) | 0x1e, "fill", "vkD" }, + { kMsaMask | (0x7 << 23), kMsa | (0x6 << 23) | 0x7, "ldi", "kx" }, { kMsaSpecialMask | (0xf << 2), kMsa | (0x8 << 2), "ld", "kw" }, { kMsaSpecialMask | (0xf << 2), kMsa | (0x9 << 2), "st", "kw" }, }; @@ -697,6 +698,20 @@ size_t DisassemblerMips::Dump(std::ostream& os, const uint8_t* instr_ptr) { } break; } + case 'x': // MSA i10. + { + int32_t df = (instruction >> 21) & 0x3; + int32_t i10 = (instruction >> 11) & 0x3ff; + i10 -= (i10 & 0x200) << 1; // Sign-extend i10. + switch (df) { + case 0: opcode += ".b"; break; + case 1: opcode += ".h"; break; + case 2: opcode += ".w"; break; + case 3: opcode += ".d"; break; + } + args << i10; + break; + } } if (*(args_fmt + 1)) { args << ", "; |