Support a common idiom on how to build an Attributes class with a single attribute.
[oota-llvm.git] / include / llvm / MC / MCTargetAsmParser.h
index 91b604b716e058b68e0f74b900c5ed876d1baca5..a966a6b8b32cae12e42a7b83cfcd23ff62562a80 100644 (file)
@@ -25,7 +25,6 @@ template <typename T> class SmallVectorImpl;
 class MCTargetAsmParser : public MCAsmParserExtension {
 public:
   enum MatchResultTy {
-    Match_ConversionFail,
     Match_InvalidOperand,
     Match_MissingFeature,
     Match_MnemonicFail,
@@ -34,8 +33,8 @@ public:
   };
 
 private:
-  MCTargetAsmParser(const MCTargetAsmParser &);   // DO NOT IMPLEMENT
-  void operator=(const MCTargetAsmParser &);  // DO NOT IMPLEMENT
+  MCTargetAsmParser(const MCTargetAsmParser &) LLVM_DELETED_FUNCTION;
+  void operator=(const MCTargetAsmParser &) LLVM_DELETED_FUNCTION;
 protected: // Can only create subclasses.
   MCTargetAsmParser();
 
@@ -51,6 +50,12 @@ public:
   virtual bool ParseRegister(unsigned &RegNo, SMLoc &StartLoc,
                              SMLoc &EndLoc) = 0;
 
+  /// MapAndConstraints - Map inline assembly operands to MCInst operands
+  /// and an associated constraint.
+  typedef std::pair< unsigned, std::string > MapAndConstraint;
+  typedef SmallVector<MapAndConstraint, 4> MatchInstMapAndConstraints;
+  typedef SmallVectorImpl<MapAndConstraint> MatchInstMapAndConstraintsImpl;
+
   /// ParseInstruction - Parse one assembly instruction.
   ///
   /// The parser is positioned following the instruction name. The target
@@ -79,6 +84,10 @@ public:
   /// \param DirectiveID - the identifier token of the directive.
   virtual bool ParseDirective(AsmToken DirectiveID) = 0;
 
+  /// mnemonicIsValid - This returns true if this is a valid mnemonic and false
+  /// otherwise.
+  virtual bool mnemonicIsValid(StringRef Mnemonic) = 0;
+
   /// MatchInstruction - Recognize a series of operands of a parsed instruction
   /// as an actual MCInst.  This returns false on success and returns true on
   /// failure to match.
@@ -86,11 +95,11 @@ public:
   /// On failure, the target parser is responsible for emitting a diagnostic
   /// explaining the match failure.
   virtual bool
-  MatchInstruction(SMLoc IDLoc,
+  MatchInstruction(SMLoc IDLoc, 
                    SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                   SmallVectorImpl<MCInst> &MCInsts,
-                   unsigned &OrigErrorInfo,
-                   bool matchingInlineAsm = false) {
+                   MCStreamer &Out, unsigned &Kind, unsigned &Opcode,
+                   MatchInstMapAndConstraintsImpl &MapAndConstraints,
+                   unsigned &OrigErrorInfo, bool matchingInlineAsm = false) {
     OrigErrorInfo = ~0x0;
     return true;
   }
@@ -112,6 +121,9 @@ public:
     return Match_Success;
   }
 
+  virtual void convertToMapAndConstraints(unsigned Kind,
+                           const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
+                         MatchInstMapAndConstraintsImpl &MapAndConstraints) = 0;
 };
 
 } // End llvm namespace