aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2010-04-03 04:10:56 +0000
committerJohnny Chen <johnny.chen@apple.com>2010-04-03 04:10:56 +0000
commit7fed809484195c5ae1ab7ab7b706320af2f35cf5 (patch)
treef5a08170dbe8963cf577a61fd14f36bb216c7bd8 /lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
parent49c283fd3f8f81e04b84dc848981b4bf17b2d706 (diff)
Get rid of the middleman (ARMAlgorithm), which causes more trouble than the
abstraction it brings. And also get rid of the atexit() handler, it does not belong in the lib directory. :-) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100265 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/Disassembler/ARMDisassemblerCore.h')
-rw-r--r--lib/Target/ARM/Disassembler/ARMDisassemblerCore.h55
1 files changed, 9 insertions, 46 deletions
diff --git a/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h b/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
index 6d742512f8..3075230370 100644
--- a/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
+++ b/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
@@ -13,8 +13,8 @@
// specifies the encoding used by the instruction, as well as a helper function
// to convert the enums to printable char strings.
//
-// It also contains code to represent the concepts of Builder, Builder Factory,
-// as well as the Algorithm to solve the problem of disassembling an ARM instr.
+// It also contains code to represent the concepts of Builder and DisassembleFP
+// to solve the problem of disassembling an ARM instr.
//
//===----------------------------------------------------------------------===//
@@ -171,60 +171,23 @@ typedef ARMBasicMCBuilder *BO;
typedef bool (*DisassembleFP)(MCInst &MI, unsigned Opcode, uint32_t insn,
unsigned short NumOps, unsigned &NumOpsAdded, BO Builder);
-/// ARMAlgorithm - ARMAlgorithm implements the ARM/Thumb disassembly by solving
-/// the problem of building the MCOperands of an MCInst. Construction of
-/// ARMAlgorithm requires passing in a function pointer with the DisassembleFP
-/// data type.
-class ARMAlgorithm {
-public:
- /// GetInstance - GetInstance returns an instance of ARMAlgorithm given the
- /// encoding Format. API clients should not free up the returned instance.
- static ARMAlgorithm *GetInstance(ARMFormat Format);
-
- /// DoCleanup - DoCleanup is meant to be called upon exit as an exit handler.
- static void DoCleanup();
-
- /// Return true if this algorithm successfully disassembles the instruction.
- /// NumOpsAdded is updated to reflect the number of operands added by the
- /// algorithm. NumOpsAdded may be less than NumOps, in which case, there are
- /// operands unaccounted for which need to be dealt with by the API client.
- bool Solve(MCInst &MI, unsigned Opcode, uint32_t insn, unsigned short NumOps,
- unsigned &NumOpsAdded, BO Builder) const {
- if (Disassemble == NULL)
- return false;
-
- return (*Disassemble)(MI, Opcode, insn, NumOps, NumOpsAdded, Builder);
- }
-
-private:
- ARMAlgorithm(DisassembleFP fp) : Disassemble(fp) {}
- ARMAlgorithm(ARMAlgorithm &AA) : Disassemble(AA.Disassemble) {}
-
- virtual ~ARMAlgorithm() {}
-
- DisassembleFP Disassemble;
-};
-
/// ARMBasicMCBuilder - ARMBasicMCBuilder represents an ARM MCInst builder that
/// knows how to build up the MCOperand list.
class ARMBasicMCBuilder {
unsigned Opcode;
ARMFormat Format;
unsigned short NumOps;
- const ARMAlgorithm &Algo;
+ DisassembleFP Disasm;
Session *SP;
public:
ARMBasicMCBuilder(ARMBasicMCBuilder &B)
- : Opcode(B.Opcode), Format(B.Format), NumOps(B.NumOps), Algo(B.Algo),
+ : Opcode(B.Opcode), Format(B.Format), NumOps(B.NumOps), Disasm(B.Disasm),
SP(B.SP)
{}
- /// Opcode, Format, NumOperands, and Algo make an ARM Basic MCBuilder.
- ARMBasicMCBuilder(unsigned opc, ARMFormat format, unsigned short num,
- const ARMAlgorithm &algo)
- : Opcode(opc), Format(format), NumOps(num), Algo(algo), SP(0)
- {}
+ /// Opcode, Format, and NumOperands make up an ARM Basic MCBuilder.
+ ARMBasicMCBuilder(unsigned opc, ARMFormat format, unsigned short num);
virtual ~ARMBasicMCBuilder() {}
@@ -256,9 +219,9 @@ public:
/// BuildIt - BuildIt performs the build step for this ARM Basic MC Builder.
/// The general idea is to set the Opcode for the MCInst, followed by adding
/// the appropriate MCOperands to the MCInst. ARM Basic MC Builder delegates
- /// to the Algo (ARM Disassemble Algorithm) object to perform Format-specific
- /// disassembly, followed by class method TryPredicateAndSBitModifier() to do
- /// PredicateOperand and OptionalDefOperand which follow the Dst/Src Operands.
+ /// to the Format-specific disassemble function for disassembly, followed by
+ /// TryPredicateAndSBitModifier() for PredicateOperand and OptionalDefOperand
+ /// which follow the Dst/Src Operands.
virtual bool BuildIt(MCInst &MI, uint32_t insn);
/// RunBuildAfterHook - RunBuildAfterHook performs operations deemed necessary