aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/ARM/Disassembler/ARMDisassembler.h
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-08-09 20:55:18 +0000
committerOwen Anderson <resistor@mac.com>2011-08-09 20:55:18 +0000
commit8d7d2e1238fac58c01ccfb719d0cc5680a079561 (patch)
tree3cf4ccfcd58d5969d7e2d9307486637382cd3fff /lib/Target/ARM/Disassembler/ARMDisassembler.h
parent0dc8b42987d091fafe9fc53f0159db8d0ecced4d (diff)
downloadexternal_llvm-8d7d2e1238fac58c01ccfb719d0cc5680a079561.tar.gz
external_llvm-8d7d2e1238fac58c01ccfb719d0cc5680a079561.tar.bz2
external_llvm-8d7d2e1238fac58c01ccfb719d0cc5680a079561.zip
Replace the existing ARM disassembler with a new one based on the FixedLenDecoderEmitter.
This new disassembler can correctly decode all the testcases that the old one did, though some "expected failure" testcases are XFAIL'd for now because it is not (yet) as strict in operand checking as the old one was. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137144 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/Disassembler/ARMDisassembler.h')
-rw-r--r--lib/Target/ARM/Disassembler/ARMDisassembler.h39
1 files changed, 12 insertions, 27 deletions
diff --git a/lib/Target/ARM/Disassembler/ARMDisassembler.h b/lib/Target/ARM/Disassembler/ARMDisassembler.h
index 0a74a3866e..1d7ab46352 100644
--- a/lib/Target/ARM/Disassembler/ARMDisassembler.h
+++ b/lib/Target/ARM/Disassembler/ARMDisassembler.h
@@ -17,15 +17,16 @@
#define ARMDISASSEMBLER_H
#include "llvm/MC/MCDisassembler.h"
+#include <vector>
namespace llvm {
class MCInst;
class MemoryObject;
class raw_ostream;
-
+
struct EDInstInfo;
-
+
/// ARMDisassembler - ARM disassembler for all ARM platforms.
class ARMDisassembler : public MCDisassembler {
public:
@@ -44,38 +45,19 @@ public:
const MemoryObject &region,
uint64_t address,
raw_ostream &vStream) const;
-
+
/// getEDInfo - See MCDisassembler.
EDInstInfo *getEDInfo() 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.
- bool 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.
+/// ARMDisassembler - ARM disassembler for all ARM platforms.
class ThumbDisassembler : public MCDisassembler {
public:
/// Constructor - Initializes the disassembler.
///
ThumbDisassembler() :
- MCDisassembler(), SO() {
+ MCDisassembler() {
}
~ThumbDisassembler() {
@@ -87,13 +69,16 @@ public:
const MemoryObject &region,
uint64_t address,
raw_ostream &vStream) const;
-
+
/// getEDInfo - See MCDisassembler.
EDInstInfo *getEDInfo() const;
private:
- Session SO;
+ mutable std::vector<unsigned> ITBlock;
+ void AddThumbPredicate(MCInst&) const;
+ void UpdateThumbVFPPredicate(MCInst&) const;
};
+
} // namespace llvm
-
+
#endif