[Hexagon] Resubmission of 220427
Modified library structure to deal with circular dependency between HexagonInstPrinter and HexagonMCInst.
Adding encoding bits for add opcode.
Adding llvm-mc tests.
Removing unit tests.

http://reviews.llvm.org/D5624

llvm-svn: 220584
diff --git a/llvm/lib/Target/Hexagon/Disassembler/HexagonDisassembler.cpp b/llvm/lib/Target/Hexagon/Disassembler/HexagonDisassembler.cpp
index 24dbf2a..b709c83 100644
--- a/llvm/lib/Target/Hexagon/Disassembler/HexagonDisassembler.cpp
+++ b/llvm/lib/Target/Hexagon/Disassembler/HexagonDisassembler.cpp
@@ -48,6 +48,40 @@
 };

 }

 

+static const uint16_t IntRegDecoderTable[] = {

+    Hexagon::R0,  Hexagon::R1,  Hexagon::R2,  Hexagon::R3,  Hexagon::R4,

+    Hexagon::R5,  Hexagon::R6,  Hexagon::R7,  Hexagon::R8,  Hexagon::R9,

+    Hexagon::R10, Hexagon::R11, Hexagon::R12, Hexagon::R13, Hexagon::R14,

+    Hexagon::R15, Hexagon::R16, Hexagon::R17, Hexagon::R18, Hexagon::R19,

+    Hexagon::R20, Hexagon::R21, Hexagon::R22, Hexagon::R23, Hexagon::R24,

+    Hexagon::R25, Hexagon::R26, Hexagon::R27, Hexagon::R28, Hexagon::R29,

+    Hexagon::R30, Hexagon::R31};

+

+static const uint16_t PredRegDecoderTable[] = {Hexagon::P0, Hexagon::P1,

+                                               Hexagon::P2, Hexagon::P3};

+

+static DecodeStatus DecodeIntRegsRegisterClass(MCInst &Inst, unsigned RegNo,

+                                               uint64_t /*Address*/,

+                                               void const *Decoder) {

+  if (RegNo > 31)

+    return MCDisassembler::Fail;

+

+  unsigned Register = IntRegDecoderTable[RegNo];

+  Inst.addOperand(MCOperand::CreateReg(Register));

+  return MCDisassembler::Success;

+}

+

+static DecodeStatus DecodePredRegsRegisterClass(MCInst &Inst, unsigned RegNo,

+                                                uint64_t /*Address*/,

+                                                void const *Decoder) {

+  if (RegNo > 3)

+    return MCDisassembler::Fail;

+

+  unsigned Register = PredRegDecoderTable[RegNo];

+  Inst.addOperand(MCOperand::CreateReg(Register));

+  return MCDisassembler::Success;

+}

+

 #include "HexagonGenDisassemblerTables.inc"

 

 static MCDisassembler *createHexagonDisassembler(Target const &T,