summaryrefslogtreecommitdiff
path: root/disassembler
diff options
context:
space:
mode:
authorAart Bik <ajcbik@google.com>2017-04-03 21:42:11 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-04-03 21:42:13 +0000
commite2a239560959dafe08c499d61905b69c6f628c02 (patch)
treebfc4889ebe0d83d4a6ccf6392708ff0d6c383e9e /disassembler
parent432fccc4c001fcd822f401aea1a4214b713bd896 (diff)
parent3f44403fb5b6c9c6176339ab5888e97d0b617746 (diff)
Merge "MIPS64: Add ldi.df MSA instruction"
Diffstat (limited to 'disassembler')
-rw-r--r--disassembler/disassembler_mips.cc15
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 << ", ";