aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp
diff options
context:
space:
mode:
authorWesley Peck <peckw@wesleypeck.com>2011-11-27 05:16:58 +0000
committerWesley Peck <peckw@wesleypeck.com>2011-11-27 05:16:58 +0000
commit4c729f115212f6d9a7781745598ddcbd38959521 (patch)
treed88fbb3580472d7563c2076422a7c593c7d6111b /lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp
parentfed700da6028af2ca5fd4a1ecfec3572db5b0023 (diff)
downloadexternal_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.cpp18
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: