diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-05-21 06:57:07 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-05-21 06:57:07 +0000 | 
| commit | f03b5bed27d0d2eafd68562ce14f8b5e3f1f0801 (patch) | |
| tree | 311f96478e9fceea407d1f187f9c5cef712f796e /lib/Target/Mips/Disassembler/MipsDisassembler.cpp | |
| parent | b6bcb9a905dec7821221e8ceaf1504c1f329815e (diff) | |
Notes
Diffstat (limited to 'lib/Target/Mips/Disassembler/MipsDisassembler.cpp')
| -rw-r--r-- | lib/Target/Mips/Disassembler/MipsDisassembler.cpp | 43 | 
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/Target/Mips/Disassembler/MipsDisassembler.cpp b/lib/Target/Mips/Disassembler/MipsDisassembler.cpp index da33f3b913cd..d42b948cc615 100644 --- a/lib/Target/Mips/Disassembler/MipsDisassembler.cpp +++ b/lib/Target/Mips/Disassembler/MipsDisassembler.cpp @@ -259,6 +259,11 @@ static DecodeStatus DecodeCacheOp(MCInst &Inst,                                uint64_t Address,                                const void *Decoder); +static DecodeStatus DecodeCacheOpR6(MCInst &Inst, +                                    unsigned Insn, +                                    uint64_t Address, +                                    const void *Decoder); +  static DecodeStatus DecodeCacheOpMM(MCInst &Inst,                                      unsigned Insn,                                      uint64_t Address, @@ -304,6 +309,10 @@ static DecodeStatus DecodeFMem3(MCInst &Inst, unsigned Insn,                                 uint64_t Address,                                 const void *Decoder); +static DecodeStatus DecodeFMemCop2R6(MCInst &Inst, unsigned Insn, +                               uint64_t Address, +                               const void *Decoder); +  static DecodeStatus DecodeSpecial3LlSc(MCInst &Inst,                                         unsigned Insn,                                         uint64_t Address, @@ -1118,6 +1127,23 @@ static DecodeStatus DecodeCacheOpMM(MCInst &Inst,    return MCDisassembler::Success;  } +static DecodeStatus DecodeCacheOpR6(MCInst &Inst, +                                    unsigned Insn, +                                    uint64_t Address, +                                    const void *Decoder) { +  int Offset = fieldFromInstruction(Insn, 7, 9); +  unsigned Hint = fieldFromInstruction(Insn, 16, 5); +  unsigned Base = fieldFromInstruction(Insn, 21, 5); + +  Base = getReg(Decoder, Mips::GPR32RegClassID, Base); + +  Inst.addOperand(MCOperand::CreateReg(Base)); +  Inst.addOperand(MCOperand::CreateImm(Offset)); +  Inst.addOperand(MCOperand::CreateImm(Hint)); + +  return MCDisassembler::Success; +} +  static DecodeStatus DecodeSyncI(MCInst &Inst,                                unsigned Insn,                                uint64_t Address, @@ -1354,6 +1380,23 @@ static DecodeStatus DecodeFMem3(MCInst &Inst,    return MCDisassembler::Success;  } +static DecodeStatus DecodeFMemCop2R6(MCInst &Inst, +                                    unsigned Insn, +                                    uint64_t Address, +                                    const void *Decoder) { +  int Offset = SignExtend32<11>(Insn & 0x07ff); +  unsigned Reg = fieldFromInstruction(Insn, 16, 5); +  unsigned Base = fieldFromInstruction(Insn, 11, 5); + +  Reg = getReg(Decoder, Mips::COP2RegClassID, Reg); +  Base = getReg(Decoder, Mips::GPR32RegClassID, Base); + +  Inst.addOperand(MCOperand::CreateReg(Reg)); +  Inst.addOperand(MCOperand::CreateReg(Base)); +  Inst.addOperand(MCOperand::CreateImm(Offset)); + +  return MCDisassembler::Success; +}  static DecodeStatus DecodeSpecial3LlSc(MCInst &Inst,                                         unsigned Insn,                                         uint64_t Address,  | 
