MCTargetAsmParser.h revision 9abfbdfc77efe715314f8ed673a7b6d25c00ca48
1//===-- llvm/MC/MCTargetAsmParser.h - Target Assembly Parser ----*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_MC_TARGETPARSER_H 11#define LLVM_MC_TARGETPARSER_H 12 13#include "llvm/MC/MCParser/MCAsmParserExtension.h" 14 15namespace llvm { 16class MCStreamer; 17class StringRef; 18class SMLoc; 19class AsmToken; 20class MCParsedAsmOperand; 21class MCInst; 22template <typename T> class SmallVectorImpl; 23 24/// MCTargetAsmParser - Generic interface to target specific assembly parsers. 25class MCTargetAsmParser : public MCAsmParserExtension { 26public: 27 enum MatchResultTy { 28 Match_InvalidOperand, 29 Match_MissingFeature, 30 Match_MnemonicFail, 31 Match_Success, 32 FIRST_TARGET_MATCH_RESULT_TY 33 }; 34 35private: 36 MCTargetAsmParser(const MCTargetAsmParser &) LLVM_DELETED_FUNCTION; 37 void operator=(const MCTargetAsmParser &) LLVM_DELETED_FUNCTION; 38protected: // Can only create subclasses. 39 MCTargetAsmParser(); 40 41 /// AvailableFeatures - The current set of available features. 42 unsigned AvailableFeatures; 43 44 /// ParsingInlineAsm - Are we parsing ms-style inline assembly? 45 bool ParsingInlineAsm; 46 47public: 48 virtual ~MCTargetAsmParser(); 49 50 unsigned getAvailableFeatures() const { return AvailableFeatures; } 51 void setAvailableFeatures(unsigned Value) { AvailableFeatures = Value; } 52 53 bool isParsingInlineAsm () { return ParsingInlineAsm; } 54 void setParsingInlineAsm (bool Value) { ParsingInlineAsm = Value; } 55 56 virtual bool ParseRegister(unsigned &RegNo, SMLoc &StartLoc, 57 SMLoc &EndLoc) = 0; 58 59 /// ParseInstruction - Parse one assembly instruction. 60 /// 61 /// The parser is positioned following the instruction name. The target 62 /// specific instruction parser should parse the entire instruction and 63 /// construct the appropriate MCInst, or emit an error. On success, the entire 64 /// line should be parsed up to and including the end-of-statement token. On 65 /// failure, the parser is not required to read to the end of the line. 66 // 67 /// \param Name - The instruction name. 68 /// \param NameLoc - The source location of the name. 69 /// \param Operands [out] - The list of parsed operands, this returns 70 /// ownership of them to the caller. 71 /// \return True on failure. 72 virtual bool ParseInstruction(StringRef Name, SMLoc NameLoc, 73 SmallVectorImpl<MCParsedAsmOperand*> &Operands) = 0; 74 75 /// ParseDirective - Parse a target specific assembler directive 76 /// 77 /// The parser is positioned following the directive name. The target 78 /// specific directive parser should parse the entire directive doing or 79 /// recording any target specific work, or return true and do nothing if the 80 /// directive is not target specific. If the directive is specific for 81 /// the target, the entire line is parsed up to and including the 82 /// end-of-statement token and false is returned. 83 /// 84 /// \param DirectiveID - the identifier token of the directive. 85 virtual bool ParseDirective(AsmToken DirectiveID) = 0; 86 87 /// mnemonicIsValid - This returns true if this is a valid mnemonic and false 88 /// otherwise. 89 virtual bool mnemonicIsValid(StringRef Mnemonic) = 0; 90 91 /// MatchAndEmitInstruction - Recognize a series of operands of a parsed 92 /// instruction as an actual MCInst and emit it to the specified MCStreamer. 93 /// This returns false on success and returns true on failure to match. 94 /// 95 /// On failure, the target parser is responsible for emitting a diagnostic 96 /// explaining the match failure. 97 virtual bool 98 MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, 99 SmallVectorImpl<MCParsedAsmOperand*> &Operands, 100 MCStreamer &Out, unsigned &ErrorInfo, 101 bool MatchingInlineAsm) = 0; 102 103 /// checkTargetMatchPredicate - Validate the instruction match against 104 /// any complex target predicates not expressible via match classes. 105 virtual unsigned checkTargetMatchPredicate(MCInst &Inst) { 106 return Match_Success; 107 } 108 109 virtual void convertToMapAndConstraints(unsigned Kind, 110 const SmallVectorImpl<MCParsedAsmOperand*> &Operands) = 0; 111}; 112 113} // End llvm namespace 114 115#endif 116