diff options
Diffstat (limited to 'lib/Target/ARM/Disassembler/ARMDisassembler.h')
| -rw-r--r-- | lib/Target/ARM/Disassembler/ARMDisassembler.h | 91 | 
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/Target/ARM/Disassembler/ARMDisassembler.h b/lib/Target/ARM/Disassembler/ARMDisassembler.h new file mode 100644 index 000000000000..44592e0f1567 --- /dev/null +++ b/lib/Target/ARM/Disassembler/ARMDisassembler.h @@ -0,0 +1,91 @@ +//===- ARMDisassembler.h - Disassembler for ARM/Thumb ISA -------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file is part of the ARM Disassembler. +// It contains the header for ARMDisassembler and ThumbDisassembler, both are +// subclasses of MCDisassembler. +// +//===----------------------------------------------------------------------===// + +#ifndef ARMDISASSEMBLER_H +#define ARMDISASSEMBLER_H + +#include "llvm/MC/MCDisassembler.h" + +namespace llvm { +   +class MCInst; +class MemoryObject; +class raw_ostream; +   +/// ARMDisassembler - ARM disassembler for all ARM platforms. +class ARMDisassembler : public MCDisassembler { +public: +  /// Constructor     - Initializes the disassembler. +  /// +  ARMDisassembler() : +    MCDisassembler() { +  } + +  ~ARMDisassembler() { +  } + +  /// getInstruction - See MCDisassembler. +  bool getInstruction(MCInst &instr, +                      uint64_t &size, +                      const MemoryObject ®ion, +                      uint64_t address, +                      raw_ostream &vStream) const; +private: +}; + +// Forward declaration. +class ARMBasicMCBuilder; + +/// Session - Keep track of the IT Block progression. +class Session { +  friend class ARMBasicMCBuilder; +public: +  Session() : ITCounter(0), ITState(0) {} +  ~Session() {} +  /// InitIT - Initializes ITCounter/ITState. +  void InitIT(unsigned short bits7_0); +  /// UpdateIT - Updates ITCounter/ITState as IT Block progresses. +  void UpdateIT(); + +private: +  unsigned ITCounter; // Possible values: 0, 1, 2, 3, 4. +  unsigned ITState;   // A2.5.2 Consists of IT[7:5] and IT[4:0] initially. +}; + +/// ThumbDisassembler - Thumb disassembler for all ARM platforms. +class ThumbDisassembler : public MCDisassembler { +public: +  /// Constructor     - Initializes the disassembler. +  /// +  ThumbDisassembler() : +    MCDisassembler(), SO() { +  } + +  ~ThumbDisassembler() { +  } + +  /// getInstruction - See MCDisassembler. +  bool getInstruction(MCInst &instr, +                      uint64_t &size, +                      const MemoryObject ®ion, +                      uint64_t address, +                      raw_ostream &vStream) const; +private: +  Session SO; +}; + +} // namespace llvm +   +#endif  | 
