30#define DEBUG_TYPE "Xtensa-disassembler" 
   43  bool hasDensity()
 const { 
return STI.
hasFeature(Xtensa::FeatureDensity); }
 
   54  return new XtensaDisassembler(STI, Ctx, 
true);
 
 
   63    Xtensa::A0,  Xtensa::SP,  Xtensa::A2,  Xtensa::A3, Xtensa::A4,  Xtensa::A5,
 
   64    Xtensa::A6,  Xtensa::A7,  Xtensa::A8,  Xtensa::A9, Xtensa::A10, Xtensa::A11,
 
   65    Xtensa::A12, Xtensa::A13, Xtensa::A14, Xtensa::A15};
 
 
   69                                          const void *Decoder) {
 
 
   80                                          const void *Decoder) {
 
 
   91                                            const void *Decoder) {
 
 
  102                                            const void *Decoder) {
 
 
  113                                           const void *Decoder) {
 
 
  132  const XtensaDisassembler *Dis =
 
  133      static_cast<const XtensaDisassembler *
>(Decoder);
 
 
  150    {Xtensa::LBEG, 0},         {Xtensa::LEND, 1},
 
  151    {Xtensa::LCOUNT, 2},       {Xtensa::SAR, 3},
 
  152    {Xtensa::BREG, 4},         {Xtensa::LITBASE, 5},
 
  153    {Xtensa::SCOMPARE1, 12},   {Xtensa::ACCLO, 16},
 
  154    {Xtensa::ACCHI, 17},       {Xtensa::M0, 32},
 
  155    {Xtensa::M1, 33},          {Xtensa::M2, 34},
 
  156    {Xtensa::M3, 35},          {Xtensa::WINDOWBASE, 72},
 
  157    {Xtensa::WINDOWSTART, 73}, {Xtensa::IBREAKENABLE, 96},
 
  158    {Xtensa::MEMCTL, 97},      {Xtensa::ATOMCTL, 99},
 
  159    {Xtensa::DDR, 104},        {Xtensa::IBREAKA0, 128},
 
  160    {Xtensa::IBREAKA1, 129},   {Xtensa::DBREAKA0, 144},
 
  161    {Xtensa::DBREAKA1, 145},   {Xtensa::DBREAKC0, 160},
 
  162    {Xtensa::DBREAKC1, 161},   {Xtensa::CONFIGID0, 176},
 
  163    {Xtensa::EPC1, 177},       {Xtensa::EPC2, 178},
 
  164    {Xtensa::EPC3, 179},       {Xtensa::EPC4, 180},
 
  165    {Xtensa::EPC5, 181},       {Xtensa::EPC6, 182},
 
  166    {Xtensa::EPC7, 183},       {Xtensa::DEPC, 192},
 
  167    {Xtensa::EPS2, 194},       {Xtensa::EPS3, 195},
 
  168    {Xtensa::EPS4, 196},       {Xtensa::EPS5, 197},
 
  169    {Xtensa::EPS6, 198},       {Xtensa::EPS7, 199},
 
  170    {Xtensa::CONFIGID1, 208},  {Xtensa::EXCSAVE1, 209},
 
  171    {Xtensa::EXCSAVE2, 210},   {Xtensa::EXCSAVE3, 211},
 
  172    {Xtensa::EXCSAVE4, 212},   {Xtensa::EXCSAVE5, 213},
 
  173    {Xtensa::EXCSAVE6, 214},   {Xtensa::EXCSAVE7, 215},
 
  174    {Xtensa::CPENABLE, 224},   {Xtensa::INTERRUPT, 226},
 
  175    {Xtensa::INTCLEAR, 227},   {Xtensa::INTENABLE, 228},
 
  176    {Xtensa::PS, 230},         {Xtensa::VECBASE, 231},
 
  177    {Xtensa::EXCCAUSE, 232},   {Xtensa::DEBUGCAUSE, 233},
 
  178    {Xtensa::CCOUNT, 234},     {Xtensa::PRID, 235},
 
  179    {Xtensa::ICOUNT, 236},     {Xtensa::ICOUNTLEVEL, 237},
 
  180    {Xtensa::EXCVADDR, 238},   {Xtensa::CCOMPARE0, 240},
 
  181    {Xtensa::CCOMPARE1, 241},  {Xtensa::CCOMPARE2, 242},
 
  182    {Xtensa::MISC0, 244},      {Xtensa::MISC1, 245},
 
  183    {Xtensa::MISC2, 246},      {Xtensa::MISC3, 247}};
 
 
  204        Reg = Xtensa::INTSET;
 
 
  221                                          const void *Decoder) {
 
 
  233                                     const void *Decoder) {
 
 
  240                                      int64_t Address, 
const void *Decoder) {
 
 
  248                                      int64_t Address, 
const void *Decoder) {
 
 
  255                                        int64_t Address, 
const void *Decoder) {
 
  263                                  Address, 0, 3, Inst, Decoder))
 
  269                                  Address, 0, 3, Inst, Decoder))
 
 
  276                                      int64_t Address, 
const void *Decoder) {
 
 
  286                                      int64_t Address, 
const void *Decoder) {
 
 
  295                                      int64_t Address, 
const void *Decoder) {
 
 
  303                                          const void *Decoder) {
 
 
  310                                       int64_t Address, 
const void *Decoder) {
 
 
  317                                       int64_t Address, 
const void *Decoder) {
 
 
  324                                       int64_t Address, 
const void *Decoder) {
 
 
  331                                         int64_t Address, 
const void *Decoder) {
 
 
  339                                          const void *Decoder) {
 
 
  350                                           const void *Decoder) {
 
  352  if ((Imm & 0x60) == 0x60)
 
 
  360                                         int64_t Address, 
const void *Decoder) {
 
 
  368                                           const void *Decoder) {
 
 
  376                                             const void *Decoder) {
 
 
  384                                           const void *Decoder) {
 
 
  391                                   8,  10, 12, 16, 32, 64, 128, 256};
 
 
  393                                         int64_t Address, 
const void *Decoder) {
 
 
  401                                    8,     10,    12, 16, 32, 64, 128, 256};
 
 
  404                                          const void *Decoder) {
 
 
  412                                         int64_t Address, 
const void *Decoder) {
 
 
  419                                      int64_t Address, 
const void *Decoder) {
 
 
  427                                       int64_t Address, 
const void *Decoder) {
 
 
  435                                       int64_t Address, 
const void *Decoder) {
 
 
  443                                        int64_t Address, 
const void *Decoder) {
 
 
  454                                      bool IsLittleEndian) {
 
  456  if (Bytes.
size() < 2) {
 
  461  if (!IsLittleEndian) {
 
  464    Insn = (Bytes[1] << 8) | Bytes[0];
 
 
  473                                      bool IsLittleEndian) {
 
  475  if (Bytes.
size() < 3) {
 
  480  if (!IsLittleEndian) {
 
  483    Insn = (Bytes[2] << 16) | (Bytes[1] << 8) | (Bytes[0] << 0);
 
 
  489#include "XtensaGenDisassemblerTables.inc" 
  503    LLVM_DEBUG(
dbgs() << 
"Trying Xtensa 16-bit instruction table :\n");
 
  504    Result = decodeInstruction(DecoderTable16, 
MI, Insn, 
Address, 
this, STI);
 
  515  LLVM_DEBUG(
dbgs() << 
"Trying Xtensa 24-bit instruction table :\n");
 
  516  Result = decodeInstruction(DecoderTable24, 
MI, Insn, 
Address, 
this, STI);
 
unsigned const MachineRegisterInfo * MRI
 
MCDisassembler::DecodeStatus DecodeStatus
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
 
static bool readInstruction16(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint32_t &Insn)
 
#define LLVM_EXTERNAL_VISIBILITY
 
static bool isBranch(unsigned Opcode)
 
static DecodeStatus decodeMem16Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus DecodeMR23RegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
 
static DecodeStatus DecodeMRRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
 
static int64_t TableB4const[16]
 
static DecodeStatus decodeImm1n_15Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus DecodeFPRRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
 
LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaDisassembler()
 
static DecodeStatus DecodeMR01RegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
 
static DecodeStatus readInstruction24(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint64_t &Insn, bool IsLittleEndian)
Read three bytes from the ArrayRef and return 24 bit data.
 
static DecodeStatus decodeImm8_sh8Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeImm8Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeL32ROperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeEntry_Imm12OpValue(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeMem32nOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeImm12Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus DecodeARRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
 
static bool tryAddingSymbolicOperand(int64_t Value, bool isBranch, uint64_t Address, uint64_t Offset, uint64_t InstSize, MCInst &MI, const void *Decoder)
 
const MCPhysReg ARDecoderTable[]
 
static DecodeStatus decodeMem32Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeUimm4Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus DecodeURRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
 
static DecodeStatus decodeImm64n_4nOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeImm1_16Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeMem8Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeImm7_22Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeUimm5Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeImm32n_95Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus readInstruction16(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint64_t &Insn, bool IsLittleEndian)
Read two bytes from the ArrayRef and return 16 bit data sorted according to the given endianness.
 
static MCDisassembler * createXtensaDisassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
 
static DecodeStatus decodeCallOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeB4constuOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeB4constOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeImm8n_7Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static int64_t TableB4constu[16]
 
static DecodeStatus DecodeSRRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
 
static DecodeStatus DecodeBRRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
 
static DecodeStatus decodeShimm1_31Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeLoopOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeJumpOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
static DecodeStatus decodeBranchOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const void *Decoder)
 
const DecodeRegister SRDecoderTable[]
 
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.
 
bool tryAddingSymbolicOperand(MCInst &Inst, int64_t Value, uint64_t Address, bool IsBranch, uint64_t Offset, uint64_t OpSize, uint64_t InstSize) const
 
const MCSubtargetInfo & getSubtargetInfo() const
 
DecodeStatus
Ternary decode status.
 
Instances of this class represent a single low-level machine instruction.
 
unsigned getOpcode() const
 
void addOperand(const MCOperand Op)
 
static MCOperand createReg(MCRegister Reg)
 
static MCOperand createImm(int64_t Val)
 
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
 
Generic base class for all target subtargets.
 
bool hasFeature(unsigned Feature) const
 
const FeatureBitset & getFeatureBits() const
 
Target - Wrapper for Target specific information.
 
LLVM Value Representation.
 
This class implements an extremely fast bulk output stream that can only output to a stream.
 
bool checkRegister(MCRegister RegNo, const FeatureBitset &FeatureBits, RegisterAccessType RA)
 
MCRegister getUserRegister(unsigned Code, const MCRegisterInfo &MRI)
 
This is an optimization pass for GlobalISel generic memory operations.
 
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
 
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
 
constexpr bool isUInt(uint64_t x)
Checks if an unsigned integer fits into the given bit width.
 
Target & getTheXtensaTarget()
 
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
 
constexpr int64_t SignExtend64(uint64_t x)
Sign-extend the number in the bottom B bits of X to a 64-bit integer.
 
static void RegisterMCDisassembler(Target &T, Target::MCDisassemblerCtorTy Fn)
RegisterMCDisassembler - Register a MCDisassembler implementation for the given target.