1 //===- ARMDisassembler.h - Disassembler for ARM/Thumb ISA -------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is part of the ARM Disassembler.
11 // It contains the header for ARMDisassembler and ThumbDisassembler, both are
12 // subclasses of MCDisassembler.
14 //===----------------------------------------------------------------------===//
16 #ifndef ARMDISASSEMBLER_H
17 #define ARMDISASSEMBLER_H
19 #include "llvm/MC/MCDisassembler.h"
27 /// ARMDisassembler - ARM disassembler for all ARM platforms.
28 class ARMDisassembler : public MCDisassembler {
30 /// Constructor - Initializes the disassembler.
39 /// getInstruction - See MCDisassembler.
40 bool getInstruction(MCInst &instr,
42 const MemoryObject ®ion,
44 raw_ostream &vStream) const;
48 // Forward declaration.
49 class ARMBasicMCBuilder;
51 /// Session - Keep track of the IT Block progression.
53 friend class ARMBasicMCBuilder;
55 Session() : ITCounter(0), ITState(0) {}
57 /// InitIT - Initializes ITCounter/ITState.
58 void InitIT(unsigned short bits7_0);
59 /// UpdateIT - Updates ITCounter/ITState as IT Block progresses.
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.
67 /// ThumbDisassembler - Thumb disassembler for all ARM platforms.
68 class ThumbDisassembler : public MCDisassembler {
70 /// Constructor - Initializes the disassembler.
73 MCDisassembler(), SO() {
76 ~ThumbDisassembler() {
79 /// getInstruction - See MCDisassembler.
80 bool getInstruction(MCInst &instr,
82 const MemoryObject ®ion,
84 raw_ostream &vStream) const;