blob: 44592e0f15672ec862cf1be3ba9298722e12b37f [file] [log] [blame]
Johnny Chenb68a3ee2010-04-02 22:27:38 +00001//===- 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
21namespace llvm {
22
23class MCInst;
24class MemoryObject;
25class raw_ostream;
26
27/// ARMDisassembler - ARM disassembler for all ARM platforms.
28class ARMDisassembler : public MCDisassembler {
29public:
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;
45private:
46};
47
48// Forward declaration.
49class ARMBasicMCBuilder;
50
51/// Session - Keep track of the IT Block progression.
52class Session {
53 friend class ARMBasicMCBuilder;
54public:
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
62private:
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.
68class ThumbDisassembler : public MCDisassembler {
69public:
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;
85private:
86 Session SO;
87};
88
89} // namespace llvm
90
91#endif