mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-30 02:32:08 +00:00
b68a3ee82a
backend (ARMDecoderEmitter) which emits the decoder functions for ARM and Thumb, and the disassembler core which invokes the decoder function and builds up the MCInst based on the decoded Opcode. Reviewed by Chris Latter and Bob Wilson. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100233 91177308-0d34-0410-b5e6-96231b3b80d8
92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
//===- ARMDisassembler.h - Disassembler for ARM/Thumb ISA -------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file is part of the ARM Disassembler.
|
|
// It contains the header for ARMDisassembler and ThumbDisassembler, both are
|
|
// subclasses of MCDisassembler.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef ARMDISASSEMBLER_H
|
|
#define ARMDISASSEMBLER_H
|
|
|
|
#include "llvm/MC/MCDisassembler.h"
|
|
|
|
namespace llvm {
|
|
|
|
class MCInst;
|
|
class MemoryObject;
|
|
class raw_ostream;
|
|
|
|
/// ARMDisassembler - ARM disassembler for all ARM platforms.
|
|
class ARMDisassembler : public MCDisassembler {
|
|
public:
|
|
/// Constructor - Initializes the disassembler.
|
|
///
|
|
ARMDisassembler() :
|
|
MCDisassembler() {
|
|
}
|
|
|
|
~ARMDisassembler() {
|
|
}
|
|
|
|
/// getInstruction - See MCDisassembler.
|
|
bool getInstruction(MCInst &instr,
|
|
uint64_t &size,
|
|
const MemoryObject ®ion,
|
|
uint64_t address,
|
|
raw_ostream &vStream) const;
|
|
private:
|
|
};
|
|
|
|
// Forward declaration.
|
|
class ARMBasicMCBuilder;
|
|
|
|
/// Session - Keep track of the IT Block progression.
|
|
class Session {
|
|
friend class ARMBasicMCBuilder;
|
|
public:
|
|
Session() : ITCounter(0), ITState(0) {}
|
|
~Session() {}
|
|
/// InitIT - Initializes ITCounter/ITState.
|
|
void InitIT(unsigned short bits7_0);
|
|
/// UpdateIT - Updates ITCounter/ITState as IT Block progresses.
|
|
void UpdateIT();
|
|
|
|
private:
|
|
unsigned ITCounter; // Possible values: 0, 1, 2, 3, 4.
|
|
unsigned ITState; // A2.5.2 Consists of IT[7:5] and IT[4:0] initially.
|
|
};
|
|
|
|
/// ThumbDisassembler - Thumb disassembler for all ARM platforms.
|
|
class ThumbDisassembler : public MCDisassembler {
|
|
public:
|
|
/// Constructor - Initializes the disassembler.
|
|
///
|
|
ThumbDisassembler() :
|
|
MCDisassembler(), SO() {
|
|
}
|
|
|
|
~ThumbDisassembler() {
|
|
}
|
|
|
|
/// getInstruction - See MCDisassembler.
|
|
bool getInstruction(MCInst &instr,
|
|
uint64_t &size,
|
|
const MemoryObject ®ion,
|
|
uint64_t address,
|
|
raw_ostream &vStream) const;
|
|
private:
|
|
Session SO;
|
|
};
|
|
|
|
} // namespace llvm
|
|
|
|
#endif
|