diff options
| author | Wesley Peck <peckw@wesleypeck.com> | 2011-11-27 05:16:58 +0000 |
|---|---|---|
| committer | Wesley Peck <peckw@wesleypeck.com> | 2011-11-27 05:16:58 +0000 |
| commit | 4c729f115212f6d9a7781745598ddcbd38959521 (patch) | |
| tree | d88fbb3580472d7563c2076422a7c593c7d6111b /lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp | |
| parent | fed700da6028af2ca5fd4a1ecfec3572db5b0023 (diff) | |
| download | external_llvm-4c729f115212f6d9a7781745598ddcbd38959521.zip external_llvm-4c729f115212f6d9a7781745598ddcbd38959521.tar.gz external_llvm-4c729f115212f6d9a7781745598ddcbd38959521.tar.bz2 | |
Add several new instructions supported by the latest MicroBlaze.
These instructions are not generated by the backend yet, this will come in a later commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145161 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp')
| -rw-r--r-- | lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp b/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp index 3087317..ccc3a05 100644 --- a/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp +++ b/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp @@ -123,6 +123,7 @@ static unsigned decodeSEXT(uint32_t insn) { case 0x41: return MBlaze::SRL; case 0x21: return MBlaze::SRC; case 0x01: return MBlaze::SRA; + case 0xE0: return MBlaze::CLZ; } } @@ -176,6 +177,13 @@ static unsigned decodeBR(uint32_t insn) { } static unsigned decodeBRI(uint32_t insn) { + switch (insn&0x3FFFFFF) { + default: break; + case 0x0020004: return MBlaze::IDMEMBAR; + case 0x0220004: return MBlaze::DMEMBAR; + case 0x0420004: return MBlaze::IMEMBAR; + } + switch ((insn>>16)&0x1F) { default: return UNSUPPORTED; case 0x00: return MBlaze::BRI; @@ -531,6 +539,9 @@ MCDisassembler::DecodeStatus MBlazeDisassembler::getInstruction(MCInst &instr, default: return Fail; + case MBlazeII::FC: + break; + case MBlazeII::FRRRR: if (RD == UNSUPPORTED || RA == UNSUPPORTED || RB == UNSUPPORTED) return Fail; @@ -547,6 +558,13 @@ MCDisassembler::DecodeStatus MBlazeDisassembler::getInstruction(MCInst &instr, instr.addOperand(MCOperand::CreateReg(RB)); break; + case MBlazeII::FRR: + if (RD == UNSUPPORTED || RA == UNSUPPORTED) + return Fail; + instr.addOperand(MCOperand::CreateReg(RD)); + instr.addOperand(MCOperand::CreateReg(RA)); + break; + case MBlazeII::FRI: switch (opcode) { default: |
