diff options
Diffstat (limited to 'lib/Target/ARM/Disassembler')
| -rw-r--r-- | lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 42 | 
1 files changed, 16 insertions, 26 deletions
| diff --git a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index f00142de50dc..2e009e55e3b0 100644 --- a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -9,21 +9,20 @@  #define DEBUG_TYPE "arm-disassembler" +#include "llvm/MC/MCDisassembler.h"  #include "MCTargetDesc/ARMAddressingModes.h" -#include "MCTargetDesc/ARMMCExpr.h"  #include "MCTargetDesc/ARMBaseInfo.h" -#include "llvm/MC/EDInstInfo.h" -#include "llvm/MC/MCInst.h" -#include "llvm/MC/MCInstrDesc.h" -#include "llvm/MC/MCExpr.h" +#include "MCTargetDesc/ARMMCExpr.h"  #include "llvm/MC/MCContext.h" -#include "llvm/MC/MCDisassembler.h" +#include "llvm/MC/MCExpr.h"  #include "llvm/MC/MCFixedLenDisassembler.h" +#include "llvm/MC/MCInst.h" +#include "llvm/MC/MCInstrDesc.h"  #include "llvm/MC/MCSubtargetInfo.h"  #include "llvm/Support/Debug.h" -#include "llvm/Support/MemoryObject.h"  #include "llvm/Support/ErrorHandling.h"  #include "llvm/Support/LEB128.h" +#include "llvm/Support/MemoryObject.h"  #include "llvm/Support/TargetRegistry.h"  #include "llvm/Support/raw_ostream.h"  #include <vector> @@ -105,10 +104,6 @@ public:                                uint64_t address,                                raw_ostream &vStream,                                raw_ostream &cStream) const; - -  /// getEDInfo - See MCDisassembler. -  const EDInstInfo *getEDInfo() const; -private:  };  /// ThumbDisassembler - Thumb disassembler for all Thumb platforms. @@ -131,8 +126,6 @@ public:                                raw_ostream &vStream,                                raw_ostream &cStream) const; -  /// getEDInfo - See MCDisassembler. -  const EDInstInfo *getEDInfo() const;  private:    mutable ITStatus ITBlock;    DecodeStatus AddThumbPredicate(MCInst&) const; @@ -385,7 +378,6 @@ static DecodeStatus DecodeLDR(MCInst &Inst, unsigned Val,  static DecodeStatus DecodeMRRC2(llvm::MCInst &Inst, unsigned Val,                                  uint64_t Address, const void *Decoder);  #include "ARMGenDisassemblerTables.inc" -#include "ARMGenEDInfo.inc"  static MCDisassembler *createARMDisassembler(const Target &T, const MCSubtargetInfo &STI) {    return new ARMDisassembler(STI); @@ -395,14 +387,6 @@ static MCDisassembler *createThumbDisassembler(const Target &T, const MCSubtarge    return new ThumbDisassembler(STI);  } -const EDInstInfo *ARMDisassembler::getEDInfo() const { -  return instInfoARM; -} - -const EDInstInfo *ThumbDisassembler::getEDInfo() const { -  return instInfoARM; -} -  DecodeStatus ARMDisassembler::getInstruction(MCInst &MI, uint64_t &Size,                                               const MemoryObject &Region,                                               uint64_t Address, @@ -1281,7 +1265,13 @@ static DecodeStatus DecodeBitfieldMaskOperand(MCInst &Inst, unsigned Val,    unsigned lsb = fieldFromInstruction(Val, 0, 5);    DecodeStatus S = MCDisassembler::Success; -  if (lsb > msb) Check(S, MCDisassembler::SoftFail); +  if (lsb > msb) { +    Check(S, MCDisassembler::SoftFail); +    // The check above will cause the warning for the "potentially undefined +    // instruction encoding" but we can't build a bad MCOperand value here +    // with a lsb > msb or else printing the MCInst will cause a crash. +    lsb = msb; +  }    uint32_t msb_mask = 0xFFFFFFFF;    if (msb != 31) msb_mask = (1U << (msb+1)) - 1; @@ -3059,9 +3049,9 @@ static DecodeStatus DecodeT2BROperand(MCInst &Inst, unsigned Val,  static DecodeStatus DecodeThumbCmpBROperand(MCInst &Inst, unsigned Val,                                   uint64_t Address, const void *Decoder) { -  if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<7>(Val<<1) + 4, +  if (!tryAddingSymbolicOperand(Address, Address + (Val<<1) + 4,                                  true, 2, Inst, Decoder)) -    Inst.addOperand(MCOperand::CreateImm(SignExtend32<7>(Val << 1))); +    Inst.addOperand(MCOperand::CreateImm(Val << 1));    return MCDisassembler::Success;  } @@ -3288,7 +3278,7 @@ static DecodeStatus DecodeT2LdStPre(MCInst &Inst, unsigned Insn,        return MCDisassembler::Fail;    } -  if (!Check(S, DecoderGPRRegisterClass(Inst, Rt, Address, Decoder))) +  if (!Check(S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))      return MCDisassembler::Fail;    if (load) { | 
