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
diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp
index 4629cfc..066879f 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 @@
   }
 
   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 62aa4ef..b996758 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 MCStreamer;
 class MCValue;
 
-class AsmParser {
+class AsmParser : MCAsmParser {
 public:
   struct X86Operand;
 
@@ -32,14 +33,19 @@
   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 6855a83..ffc9b55 100644
--- a/tools/llvm-mc/llvm-mc.cpp
+++ b/tools/llvm-mc/llvm-mc.cpp
@@ -186,9 +186,10 @@
   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();
 }