diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-07-20 18:55:04 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-07-20 18:55:04 +0000 |
commit | a3af370dc12f6d5100da5d614ab0a62da135569a (patch) | |
tree | 12a7fc0c9734320b9a29dfe69613b04a4b435dc5 /tools/llvm-mc | |
parent | 4d20c24fe678595b5e08639a5bd9440abb746e4b (diff) | |
download | llvm-a3af370dc12f6d5100da5d614ab0a62da135569a.tar.gz llvm-a3af370dc12f6d5100da5d614ab0a62da135569a.tar.bz2 llvm-a3af370dc12f6d5100da5d614ab0a62da135569a.tar.xz |
Add MCAsmParser interface.
- This provides the AsmParser interface to the target specific assembly
parsers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76453 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-mc')
-rw-r--r-- | tools/llvm-mc/AsmParser.cpp | 4 | ||||
-rw-r--r-- | tools/llvm-mc/AsmParser.h | 12 | ||||
-rw-r--r-- | tools/llvm-mc/llvm-mc.cpp | 5 |
3 files changed, 15 insertions, 6 deletions
diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp index 4629cfc34b..066879ff48 100644 --- a/tools/llvm-mc/AsmParser.cpp +++ b/tools/llvm-mc/AsmParser.cpp @@ -20,6 +20,7 @@ #include "llvm/MC/MCSymbol.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Target/TargetAsmParser.h" using namespace llvm; void AsmParser::Warning(SMLoc L, const char *Msg) { @@ -548,7 +549,8 @@ bool AsmParser::ParseStatement() { } MCInst Inst; - if (ParseX86InstOperands(IDVal, Inst)) + if (ParseX86InstOperands(IDVal, Inst) && + getTargetParser().ParseInstruction(*this, IDVal, Inst)) return true; if (Lexer.isNot(asmtok::EndOfStatement)) diff --git a/tools/llvm-mc/AsmParser.h b/tools/llvm-mc/AsmParser.h index 62aa4ef44c..b996758508 100644 --- a/tools/llvm-mc/AsmParser.h +++ b/tools/llvm-mc/AsmParser.h @@ -15,6 +15,7 @@ #define ASMPARSER_H #include "AsmLexer.h" +#include "llvm/MC/MCAsmParser.h" #include "llvm/MC/MCStreamer.h" namespace llvm { @@ -24,7 +25,7 @@ class MCInst; class MCStreamer; class MCValue; -class AsmParser { +class AsmParser : MCAsmParser { public: struct X86Operand; @@ -32,14 +33,19 @@ private: AsmLexer Lexer; MCContext &Ctx; MCStreamer &Out; + TargetAsmParser &TargetParser; public: - AsmParser(SourceMgr &SM, MCContext &ctx, MCStreamer &OutStr) - : Lexer(SM), Ctx(ctx), Out(OutStr) {} + AsmParser(SourceMgr &_SM, MCContext &_Ctx, MCStreamer &_Out, + TargetAsmParser &_TargetParser) + : Lexer(_SM), Ctx(_Ctx), Out(_Out), TargetParser(_TargetParser) {} ~AsmParser() {} bool Run(); +public: + TargetAsmParser &getTargetParser() const { return TargetParser; } + private: bool ParseStatement(); diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp index 6855a830e8..ffc9b559f0 100644 --- a/tools/llvm-mc/llvm-mc.cpp +++ b/tools/llvm-mc/llvm-mc.cpp @@ -186,9 +186,10 @@ static int AssembleInput(const char *ProgName) { OwningPtr<MCStreamer> Str(createAsmStreamer(Ctx, outs())); // FIXME: Target hook & command line option for initial section. - Str.get()->SwitchSection(Ctx.GetSection("__TEXT,__text,regular,pure_instructions")); + Str.get()->SwitchSection(Ctx.GetSection("__TEXT,__text," + "regular,pure_instructions")); - AsmParser Parser(SrcMgr, Ctx, *Str.get()); + AsmParser Parser(SrcMgr, Ctx, *Str.get(), *TAP); return Parser.Run(); } |