Second try of initial ARM/Thumb disassembler check-in. It consists of a tablgen
[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
21 namespace llvm {
22   
23 class MCInst;
24 class MemoryObject;
25 class raw_ostream;
26   
27 /// ARMDisassembler - ARM disassembler for all ARM platforms.
28 class ARMDisassembler : public MCDisassembler {
29 public:
30   /// Constructor     - Initializes the disassembler.
31   ///
32   ARMDisassembler() :
33     MCDisassembler() {
34   }
35
36   ~ARMDisassembler() {
37   }
38
39   /// getInstruction - See MCDisassembler.
40   bool getInstruction(MCInst &instr,
41                       uint64_t &size,
42                       const MemoryObject &region,
43                       uint64_t address,
44                       raw_ostream &vStream) const;
45 private:
46 };
47
48 // Forward declaration.
49 class ARMBasicMCBuilder;
50
51 /// Session - Keep track of the IT Block progression.
52 class Session {
53   friend class ARMBasicMCBuilder;
54 public:
55   Session() : ITCounter(0), ITState(0) {}
56   ~Session() {}
57   /// InitIT - Initializes ITCounter/ITState.
58   void InitIT(unsigned short bits7_0);
59   /// UpdateIT - Updates ITCounter/ITState as IT Block progresses.
60   void UpdateIT();
61
62 private:
63   unsigned ITCounter; // Possible values: 0, 1, 2, 3, 4.
64   unsigned ITState;   // A2.5.2 Consists of IT[7:5] and IT[4:0] initially.
65 };
66
67 /// ThumbDisassembler - Thumb disassembler for all ARM platforms.
68 class ThumbDisassembler : public MCDisassembler {
69 public:
70   /// Constructor     - Initializes the disassembler.
71   ///
72   ThumbDisassembler() :
73     MCDisassembler(), SO() {
74   }
75
76   ~ThumbDisassembler() {
77   }
78
79   /// getInstruction - See MCDisassembler.
80   bool getInstruction(MCInst &instr,
81                       uint64_t &size,
82                       const MemoryObject &region,
83                       uint64_t address,
84                       raw_ostream &vStream) const;
85 private:
86   Session SO;
87 };
88
89 } // namespace llvm
90   
91 #endif