29#define DEBUG_TYPE "msp430-disassembler"
60 return new MSP430Disassembler(STI, Ctx);
70 MSP430::PCB, MSP430::SPB, MSP430::SRB, MSP430::CGB,
71 MSP430::R4B, MSP430::R5B, MSP430::R6B, MSP430::R7B,
72 MSP430::R8B, MSP430::R9B, MSP430::R10B, MSP430::R11B,
73 MSP430::R12B, MSP430::R13B, MSP430::R14B, MSP430::R15B
88 MSP430::PC, MSP430::SP, MSP430::SR, MSP430::CG,
89 MSP430::R4, MSP430::R5, MSP430::R6, MSP430::R7,
90 MSP430::R8, MSP430::R9, MSP430::R10, MSP430::R11,
91 MSP430::R12, MSP430::R13, MSP430::R14, MSP430::R15
111 case 0x22: Imm = 4;
break;
112 case 0x32: Imm = 8;
break;
113 case 0x03: Imm = 0;
break;
114 case 0x13: Imm = 1;
break;
115 case 0x23: Imm = 2;
break;
116 case 0x33: Imm = -1;
break;
125 unsigned Reg = Bits & 15;
126 unsigned Imm = Bits >> 4;
136#include "MSP430GenDisassemblerTables.inc"
202 assert(0 < Words && Words < 4 &&
"Incorrect number of words");
207 assert(Words < 3 &&
"Incorrect number of words");
208 return Words == 2 ? DecoderTableAlpha32 : DecoderTableAlpha16;
210 assert(Words < 3 &&
"Incorrect number of words");
211 return Words == 2 ? DecoderTableBeta32 : DecoderTableBeta16;
216 assert(Words > 1 &&
"Incorrect number of words");
217 return Words == 2 ? DecoderTableGamma32 : DecoderTableGamma48;
220 assert(Words < 3 &&
"Incorrect number of words");
221 return Words == 2 ? DecoderTableDelta32 : DecoderTableDelta16;
243 if (Bytes.
size() < (Words + 1) * 2) {
245 return DecodeStatus::Fail;
257 if (Bytes.
size() < (Words + 1) * 2) {
259 return DecodeStatus::Fail;
277 return DecodeStatus::Fail;
281 ArrayRef<uint8_t> Bytes,
283 raw_ostream &CStream)
const {
297 if (Bytes.
size() < (Words + 1) * 2) {
299 return DecodeStatus::Fail;
308 const uint8_t *DecoderTable = Words == 2 ? DecoderTable32 : DecoderTable16;
317 return DecodeStatus::Fail;
336 ArrayRef<uint8_t> Bytes,
338 raw_ostream &CStream)
const {
346 MI.setOpcode(MSP430::JMP);
348 MI.setOpcode(MSP430::JCC);
353 return DecodeStatus::Success;
357 ArrayRef<uint8_t> Bytes,
359 raw_ostream &CStream)
const {
360 if (Bytes.
size() < 2) {
MCDisassembler::DecodeStatus DecodeStatus
static SDValue getCondCode(SelectionDAG &DAG, AArch64CC::CondCode CC)
Like SelectionDAG::getCondCode(), but for AArch64 condition codes.
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static const uint8_t * getDecoderTable(uint64_t Size)
#define LLVM_EXTERNAL_VISIBILITY
static DecodeStatus DecodeCGImm(MCInst &MI, uint64_t Bits, uint64_t Address, const MCDisassembler *Decoder)
static const unsigned GR16DecoderTable[]
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeMSP430Disassembler()
static DecodeStatus DecodeMemOperand(MCInst &MI, uint64_t Bits, uint64_t Address, const MCDisassembler *Decoder)
static AddrMode DecodeSrcAddrModeII(unsigned Insn)
static const uint8_t * getDecoderTable(AddrMode SrcAM, unsigned Words)
static AddrMode DecodeDstAddrMode(unsigned Insn)
static MCDisassembler * createMSP430Disassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
static AddrMode DecodeSrcAddrMode(unsigned Rs, unsigned As)
static AddrMode DecodeSrcAddrModeI(unsigned Insn)
static const unsigned GR8DecoderTable[]
static DecodeStatus DecodeGR8RegisterClass(MCInst &MI, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGR16RegisterClass(MCInst &MI, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
const SmallVectorImpl< MachineOperand > & Cond
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
size - Get the array size.
Context object for machine code objects.
Superclass for all disassemblers.
DecodeStatus
Ternary decode status.
Instances of this class represent a single low-level machine instruction.
static MCOperand createReg(MCRegister Reg)
static MCOperand createImm(int64_t Val)
Generic base class for all target subtargets.
Target - Wrapper for Target specific information.
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
std::enable_if_t< std::is_integral_v< IntType >, IntType > fieldFromInstruction(const IntType &Insn, unsigned StartBit, unsigned NumBits)
uint16_t read16le(const void *P)
This is an optimization pass for GlobalISel generic memory operations.
Target & getTheMSP430Target()
constexpr int32_t SignExtend32(uint32_t X)
Sign-extend the number in the bottom B bits of X to a 32-bit integer.
static void RegisterMCDisassembler(Target &T, Target::MCDisassemblerCtorTy Fn)
RegisterMCDisassembler - Register a MCDisassembler implementation for the given target.