Replace the existing ARM disassembler with a new one based on the FixedLenDecoderEmitter.
[oota-llvm.git] / lib / Target / ARM / Disassembler / ARMDisassembler.h
1 //===- ARMDisassembler.h - Disassembler for ARM/Thumb ISA -------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file is part of the ARM Disassembler.
11 // It contains the header for ARMDisassembler and ThumbDisassembler, both are
12 // subclasses of MCDisassembler.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef ARMDISASSEMBLER_H
17 #define ARMDISASSEMBLER_H
18
19 #include "llvm/MC/MCDisassembler.h"
20 #include <vector>
21
22 namespace llvm {
23   
24 class MCInst;
25 class MemoryObject;
26 class raw_ostream;
27
28 struct EDInstInfo;
29
30 /// ARMDisassembler - ARM disassembler for all ARM platforms.
31 class ARMDisassembler : public MCDisassembler {
32 public:
33   /// Constructor     - Initializes the disassembler.
34   ///
35   ARMDisassembler() :
36     MCDisassembler() {
37   }
38
39   ~ARMDisassembler() {
40   }
41
42   /// getInstruction - See MCDisassembler.
43   bool getInstruction(MCInst &instr,
44                       uint64_t &size,
45                       const MemoryObject &region,
46                       uint64_t address,
47                       raw_ostream &vStream) const;
48
49   /// getEDInfo - See MCDisassembler.
50   EDInstInfo *getEDInfo() const;
51 private:
52 };
53
54 /// ARMDisassembler - ARM disassembler for all ARM platforms.
55 class ThumbDisassembler : public MCDisassembler {
56 public:
57   /// Constructor     - Initializes the disassembler.
58   ///
59   ThumbDisassembler() :
60     MCDisassembler() {
61   }
62
63   ~ThumbDisassembler() {
64   }
65
66   /// getInstruction - See MCDisassembler.
67   bool getInstruction(MCInst &instr,
68                       uint64_t &size,
69                       const MemoryObject &region,
70                       uint64_t address,
71                       raw_ostream &vStream) const;
72
73   /// getEDInfo - See MCDisassembler.
74   EDInstInfo *getEDInfo() const;
75 private:
76   mutable std::vector<unsigned> ITBlock;
77   void AddThumbPredicate(MCInst&) const;
78   void UpdateThumbVFPPredicate(MCInst&) const;
79 };
80
81
82 } // namespace llvm
83
84 #endif