diff options
Diffstat (limited to 'include/llvm/MC/MCTargetAsmParser.h')
-rw-r--r-- | include/llvm/MC/MCTargetAsmParser.h | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/include/llvm/MC/MCTargetAsmParser.h b/include/llvm/MC/MCTargetAsmParser.h deleted file mode 100644 index 03b2dc9a282c..000000000000 --- a/include/llvm/MC/MCTargetAsmParser.h +++ /dev/null @@ -1,222 +0,0 @@ -//===-- llvm/MC/MCTargetAsmParser.h - Target Assembly Parser ----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_MC_MCTARGETASMPARSER_H -#define LLVM_MC_MCTARGETASMPARSER_H - -#include "llvm/MC/MCExpr.h" -#include "llvm/MC/MCParser/MCAsmParserExtension.h" -#include "llvm/MC/MCTargetOptions.h" -#include <memory> - -namespace llvm { -class AsmToken; -class MCInst; -class MCParsedAsmOperand; -class MCStreamer; -class MCSubtargetInfo; -class SMLoc; -class StringRef; -template <typename T> class SmallVectorImpl; - -typedef SmallVectorImpl<std::unique_ptr<MCParsedAsmOperand>> OperandVector; - -enum AsmRewriteKind { - AOK_Delete = 0, // Rewrite should be ignored. - AOK_Align, // Rewrite align as .align. - AOK_EVEN, // Rewrite even as .even. - AOK_DotOperator, // Rewrite a dot operator expression as an immediate. - // E.g., [eax].foo.bar -> [eax].8 - AOK_Emit, // Rewrite _emit as .byte. - AOK_Imm, // Rewrite as $$N. - AOK_ImmPrefix, // Add $$ before a parsed Imm. - AOK_Input, // Rewrite in terms of $N. - AOK_Output, // Rewrite in terms of $N. - AOK_SizeDirective, // Add a sizing directive (e.g., dword ptr). - AOK_Label, // Rewrite local labels. - AOK_Skip // Skip emission (e.g., offset/type operators). -}; - -const char AsmRewritePrecedence [] = { - 0, // AOK_Delete - 2, // AOK_Align - 2, // AOK_EVEN - 2, // AOK_DotOperator - 2, // AOK_Emit - 4, // AOK_Imm - 4, // AOK_ImmPrefix - 3, // AOK_Input - 3, // AOK_Output - 5, // AOK_SizeDirective - 1, // AOK_Label - 2 // AOK_Skip -}; - -struct AsmRewrite { - AsmRewriteKind Kind; - SMLoc Loc; - unsigned Len; - unsigned Val; - StringRef Label; -public: - AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len = 0, unsigned val = 0) - : Kind(kind), Loc(loc), Len(len), Val(val) {} - AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len, StringRef label) - : Kind(kind), Loc(loc), Len(len), Val(0), Label(label) {} -}; - -struct ParseInstructionInfo { - - SmallVectorImpl<AsmRewrite> *AsmRewrites; - - ParseInstructionInfo() : AsmRewrites(nullptr) {} - ParseInstructionInfo(SmallVectorImpl<AsmRewrite> *rewrites) - : AsmRewrites(rewrites) {} -}; - -/// MCTargetAsmParser - Generic interface to target specific assembly parsers. -class MCTargetAsmParser : public MCAsmParserExtension { -public: - enum MatchResultTy { - Match_InvalidOperand, - Match_MissingFeature, - Match_MnemonicFail, - Match_Success, - FIRST_TARGET_MATCH_RESULT_TY - }; - -private: - MCTargetAsmParser(const MCTargetAsmParser &) = delete; - void operator=(const MCTargetAsmParser &) = delete; -protected: // Can only create subclasses. - MCTargetAsmParser(MCTargetOptions const &, const MCSubtargetInfo &STI); - - /// Create a copy of STI and return a non-const reference to it. - MCSubtargetInfo ©STI(); - - /// AvailableFeatures - The current set of available features. - uint64_t AvailableFeatures; - - /// ParsingInlineAsm - Are we parsing ms-style inline assembly? - bool ParsingInlineAsm; - - /// SemaCallback - The Sema callback implementation. Must be set when parsing - /// ms-style inline assembly. - MCAsmParserSemaCallback *SemaCallback; - - /// Set of options which affects instrumentation of inline assembly. - MCTargetOptions MCOptions; - - /// Current STI. - const MCSubtargetInfo *STI; - -public: - ~MCTargetAsmParser() override; - - const MCSubtargetInfo &getSTI() const; - - uint64_t getAvailableFeatures() const { return AvailableFeatures; } - void setAvailableFeatures(uint64_t Value) { AvailableFeatures = Value; } - - bool isParsingInlineAsm () { return ParsingInlineAsm; } - void setParsingInlineAsm (bool Value) { ParsingInlineAsm = Value; } - - MCTargetOptions getTargetOptions() const { return MCOptions; } - - void setSemaCallback(MCAsmParserSemaCallback *Callback) { - SemaCallback = Callback; - } - - virtual bool ParseRegister(unsigned &RegNo, SMLoc &StartLoc, - SMLoc &EndLoc) = 0; - - /// Sets frame register corresponding to the current MachineFunction. - virtual void SetFrameRegister(unsigned RegNo) {} - - /// ParseInstruction - Parse one assembly instruction. - /// - /// The parser is positioned following the instruction name. The target - /// specific instruction parser should parse the entire instruction and - /// construct the appropriate MCInst, or emit an error. On success, the entire - /// line should be parsed up to and including the end-of-statement token. On - /// failure, the parser is not required to read to the end of the line. - // - /// \param Name - The instruction name. - /// \param NameLoc - The source location of the name. - /// \param Operands [out] - The list of parsed operands, this returns - /// ownership of them to the caller. - /// \return True on failure. - virtual bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name, - SMLoc NameLoc, OperandVector &Operands) = 0; - virtual bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name, - AsmToken Token, OperandVector &Operands) { - return ParseInstruction(Info, Name, Token.getLoc(), Operands); - } - - /// ParseDirective - Parse a target specific assembler directive - /// - /// The parser is positioned following the directive name. The target - /// specific directive parser should parse the entire directive doing or - /// recording any target specific work, or return true and do nothing if the - /// directive is not target specific. If the directive is specific for - /// the target, the entire line is parsed up to and including the - /// end-of-statement token and false is returned. - /// - /// \param DirectiveID - the identifier token of the directive. - virtual bool ParseDirective(AsmToken DirectiveID) = 0; - - /// MatchAndEmitInstruction - Recognize a series of operands of a parsed - /// instruction as an actual MCInst and emit it to the specified MCStreamer. - /// This returns false on success and returns true on failure to match. - /// - /// On failure, the target parser is responsible for emitting a diagnostic - /// explaining the match failure. - virtual bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, - OperandVector &Operands, MCStreamer &Out, - uint64_t &ErrorInfo, - bool MatchingInlineAsm) = 0; - - /// Allows targets to let registers opt out of clobber lists. - virtual bool OmitRegisterFromClobberLists(unsigned RegNo) { return false; } - - /// Allow a target to add special case operand matching for things that - /// tblgen doesn't/can't handle effectively. For example, literal - /// immediates on ARM. TableGen expects a token operand, but the parser - /// will recognize them as immediates. - virtual unsigned validateTargetOperandClass(MCParsedAsmOperand &Op, - unsigned Kind) { - return Match_InvalidOperand; - } - - /// checkTargetMatchPredicate - Validate the instruction match against - /// any complex target predicates not expressible via match classes. - virtual unsigned checkTargetMatchPredicate(MCInst &Inst) { - return Match_Success; - } - - virtual void convertToMapAndConstraints(unsigned Kind, - const OperandVector &Operands) = 0; - - // Return whether this parser uses assignment statements with equals tokens - virtual bool equalIsAsmAssignment() { return true; }; - // Return whether this start of statement identifier is a label - virtual bool isLabel(AsmToken &Token) { return true; }; - - virtual const MCExpr *applyModifierToExpr(const MCExpr *E, - MCSymbolRefExpr::VariantKind, - MCContext &Ctx) { - return nullptr; - } - - virtual void onLabelParsed(MCSymbol *Symbol) { } -}; - -} // End llvm namespace - -#endif |