blob: e418b2ba51eff46faa2c928842df6d72f7d21aed [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
Sean Callanan9899f702010-04-13 21:21:57 +000027struct EDInstInfo;
28
Johnny Chenb68a3ee2010-04-02 22:27:38 +000029/// ARMDisassembler - ARM disassembler for all ARM platforms.
30class ARMDisassembler : public MCDisassembler {
31public:
32 /// Constructor - Initializes the disassembler.
33 ///
34 ARMDisassembler() :
35 MCDisassembler() {
36 }
37
38 ~ARMDisassembler() {
39 }
40
41 /// getInstruction - See MCDisassembler.
42 bool getInstruction(MCInst &instr,
43 uint64_t &size,
44 const MemoryObject &region,
45 uint64_t address,
46 raw_ostream &vStream) const;
Sean Callanan9899f702010-04-13 21:21:57 +000047
48 /// getEDInfo - See MCDisassembler.
49 EDInstInfo *getEDInfo() const;
Johnny Chenb68a3ee2010-04-02 22:27:38 +000050private:
51};
52
53// Forward declaration.
54class ARMBasicMCBuilder;
55
56/// Session - Keep track of the IT Block progression.
57class Session {
58 friend class ARMBasicMCBuilder;
59public:
60 Session() : ITCounter(0), ITState(0) {}
61 ~Session() {}
62 /// InitIT - Initializes ITCounter/ITState.
63 void InitIT(unsigned short bits7_0);
64 /// UpdateIT - Updates ITCounter/ITState as IT Block progresses.
65 void UpdateIT();
66
67private:
68 unsigned ITCounter; // Possible values: 0, 1, 2, 3, 4.
69 unsigned ITState; // A2.5.2 Consists of IT[7:5] and IT[4:0] initially.
70};
71
72/// ThumbDisassembler - Thumb disassembler for all ARM platforms.
73class ThumbDisassembler : public MCDisassembler {
74public:
75 /// Constructor - Initializes the disassembler.
76 ///
77 ThumbDisassembler() :
78 MCDisassembler(), SO() {
79 }
80
81 ~ThumbDisassembler() {
82 }
83
84 /// getInstruction - See MCDisassembler.
85 bool getInstruction(MCInst &instr,
86 uint64_t &size,
87 const MemoryObject &region,
88 uint64_t address,
89 raw_ostream &vStream) const;
Sean Callanan9899f702010-04-13 21:21:57 +000090
91 /// getEDInfo - See MCDisassembler.
92 EDInstInfo *getEDInfo() const;
Johnny Chenb68a3ee2010-04-02 22:27:38 +000093private:
94 Session SO;
95};
96
97} // namespace llvm
98
99#endif