194b9550a32d189704a8eae55505edf62662c0534Evan Cheng//===-- llvm/MC/MCTargetAsmParser.h - Target Assembly Parser ----*- C++ -*-===// 2092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar// 3092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar// The LLVM Compiler Infrastructure 4092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar// 5092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar// This file is distributed under the University of Illinois Open Source 6092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar// License. See LICENSE.TXT for details. 7092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar// 8092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar//===----------------------------------------------------------------------===// 9092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar 10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#ifndef LLVM_MC_MCPARSER_MCTARGETASMPARSER_H 11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#define LLVM_MC_MCPARSER_MCTARGETASMPARSER_H 12092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar 1366b7139b1be1ddce410d97499d5831231c6be267Joerg Sonnenberger#include "llvm/MC/MCExpr.h" 1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/MC/MCParser/MCAsmParserExtension.h" 15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/MC/MCTargetOptions.h" 16c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <memory> 17c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 18092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbarnamespace llvm { 19f007e853e26845cd6866b52d646455fc69f4e0afChris Lattnerclass AsmToken; 2019cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbachclass MCInst; 21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCParsedAsmOperand; 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCStreamer; 23f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarclass MCSubtargetInfo; 24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass SMLoc; 25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass StringRef; 269898671a74d3fc924347e679c45edaa685b3fe6eChris Lattnertemplate <typename T> class SmallVectorImpl; 27092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar 28c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinestypedef SmallVectorImpl<std::unique_ptr<MCParsedAsmOperand>> OperandVector; 29c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 306a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosierenum AsmRewriteKind { 31f16b08de8a57b921ef10f96d5e233027530db448Chad Rosier AOK_Delete = 0, // Rewrite should be ignored. 32f16b08de8a57b921ef10f96d5e233027530db448Chad Rosier AOK_Align, // Rewrite align as .align. 33f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AOK_EVEN, // Rewrite even as .even. 34efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_DotOperator, // Rewrite a dot operator expression as an immediate. 35efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier // E.g., [eax].foo.bar -> [eax].8 36efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_Emit, // Rewrite _emit as .byte. 37efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_Imm, // Rewrite as $$N. 38efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_ImmPrefix, // Add $$ before a parsed Imm. 39efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_Input, // Rewrite in terms of $N. 40efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_Output, // Rewrite in terms of $N. 41efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_SizeDirective, // Add a sizing directive (e.g., dword ptr). 4237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines AOK_Label, // Rewrite local labels. 43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar AOK_EndOfStatement, // Add EndOfStatement (e.g., "\n\t"). 44efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AOK_Skip // Skip emission (e.g., offset/type operators). 456a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier}; 466a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier 476b369ceb582f2deba9c252af301667975456ff86Chad Rosierconst char AsmRewritePrecedence [] = { 48f16b08de8a57b921ef10f96d5e233027530db448Chad Rosier 0, // AOK_Delete 4937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2, // AOK_Align 50f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 2, // AOK_EVEN 5137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2, // AOK_DotOperator 5237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2, // AOK_Emit 5337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4, // AOK_Imm 5437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4, // AOK_ImmPrefix 5537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3, // AOK_Input 5637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3, // AOK_Output 5737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 5, // AOK_SizeDirective 5837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1, // AOK_Label 59de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 5, // AOK_EndOfStatement 6037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2 // AOK_Skip 616b369ceb582f2deba9c252af301667975456ff86Chad Rosier}; 626b369ceb582f2deba9c252af301667975456ff86Chad Rosier 636a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosierstruct AsmRewrite { 646a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier AsmRewriteKind Kind; 656a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier SMLoc Loc; 666a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier unsigned Len; 676a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier unsigned Val; 6837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef Label; 696a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosierpublic: 70efcb3d9c1cd9410949b4005fbe6f2817f8dfe395Chad Rosier AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len = 0, unsigned val = 0) 716a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier : Kind(kind), Loc(loc), Len(len), Val(val) {} 7237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len, StringRef label) 7337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines : Kind(kind), Loc(loc), Len(len), Val(0), Label(label) {} 746a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier}; 756a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier 766a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosierstruct ParseInstructionInfo { 776a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier 786a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier SmallVectorImpl<AsmRewrite> *AsmRewrites; 796a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier 80dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ParseInstructionInfo() : AsmRewrites(nullptr) {} 816a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier ParseInstructionInfo(SmallVectorImpl<AsmRewrite> *rewrites) 826a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier : AsmRewrites(rewrites) {} 836a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier}; 846a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier 8594b9550a32d189704a8eae55505edf62662c0534Evan Cheng/// MCTargetAsmParser - Generic interface to target specific assembly parsers. 8694b9550a32d189704a8eae55505edf62662c0534Evan Chengclass MCTargetAsmParser : public MCAsmParserExtension { 8747a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbachpublic: 8847a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbach enum MatchResultTy { 8947a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbach Match_InvalidOperand, 9047a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbach Match_MissingFeature, 9147a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbach Match_MnemonicFail, 9219cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach Match_Success, 9319cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach FIRST_TARGET_MATCH_RESULT_TY 9447a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbach }; 9547a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbach 9647a24ab4d72dc0f78c2027327cb9a69d6de2bbcdJim Grosbachprivate: 97ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MCTargetAsmParser(const MCTargetAsmParser &) = delete; 98ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines void operator=(const MCTargetAsmParser &) = delete; 99092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbarprotected: // Can only create subclasses. 100f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCTargetAsmParser(MCTargetOptions const &, const MCSubtargetInfo &STI); 101f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 102f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar /// Create a copy of STI and return a non-const reference to it. 103f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar MCSubtargetInfo ©STI(); 104bb0752b040cfe206afeef7fa60e80dde91594fa1Jim Grosbach 105480cee5d4396a380ada6ffd03551b5700d041fe0Evan Cheng /// AvailableFeatures - The current set of available features. 10637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint64_t AvailableFeatures; 10754074b5f04f5affc77b5c6f3e5d8062b50384831Daniel Dunbar 1089abfbdfc77efe715314f8ed673a7b6d25c00ca48Chad Rosier /// ParsingInlineAsm - Are we parsing ms-style inline assembly? 1099abfbdfc77efe715314f8ed673a7b6d25c00ca48Chad Rosier bool ParsingInlineAsm; 1109abfbdfc77efe715314f8ed673a7b6d25c00ca48Chad Rosier 111faf547053bc097be0e834efd241ccc023777ff38Chad Rosier /// SemaCallback - The Sema callback implementation. Must be set when parsing 112faf547053bc097be0e834efd241ccc023777ff38Chad Rosier /// ms-style inline assembly. 113faf547053bc097be0e834efd241ccc023777ff38Chad Rosier MCAsmParserSemaCallback *SemaCallback; 114faf547053bc097be0e834efd241ccc023777ff38Chad Rosier 115dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// Set of options which affects instrumentation of inline assembly. 116dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCTargetOptions MCOptions; 117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 118f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar /// Current STI. 119f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar const MCSubtargetInfo *STI; 120f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 121092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbarpublic: 1220c7f116bb6950ef819323d855415b2f2b0aad987Pirama Arumuga Nainar ~MCTargetAsmParser() override; 123092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar 124f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar const MCSubtargetInfo &getSTI() const; 125f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 12637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint64_t getAvailableFeatures() const { return AvailableFeatures; } 12737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines void setAvailableFeatures(uint64_t Value) { AvailableFeatures = Value; } 12854074b5f04f5affc77b5c6f3e5d8062b50384831Daniel Dunbar 1299abfbdfc77efe715314f8ed673a7b6d25c00ca48Chad Rosier bool isParsingInlineAsm () { return ParsingInlineAsm; } 1309abfbdfc77efe715314f8ed673a7b6d25c00ca48Chad Rosier void setParsingInlineAsm (bool Value) { ParsingInlineAsm = Value; } 1319abfbdfc77efe715314f8ed673a7b6d25c00ca48Chad Rosier 13237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MCTargetOptions getTargetOptions() const { return MCOptions; } 13337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 134faf547053bc097be0e834efd241ccc023777ff38Chad Rosier void setSemaCallback(MCAsmParserSemaCallback *Callback) { 135faf547053bc097be0e834efd241ccc023777ff38Chad Rosier SemaCallback = Callback; 136faf547053bc097be0e834efd241ccc023777ff38Chad Rosier } 137faf547053bc097be0e834efd241ccc023777ff38Chad Rosier 138480cee5d4396a380ada6ffd03551b5700d041fe0Evan Cheng virtual bool ParseRegister(unsigned &RegNo, SMLoc &StartLoc, 139480cee5d4396a380ada6ffd03551b5700d041fe0Evan Cheng SMLoc &EndLoc) = 0; 140bf7553210ae44f05e7460edeae1ee499d8a22dcbRoman Divacky 14137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// Sets frame register corresponding to the current MachineFunction. 14237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines virtual void SetFrameRegister(unsigned RegNo) {} 14337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 144a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// ParseInstruction - Parse one assembly instruction. 145a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// 146a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// The parser is positioned following the instruction name. The target 147a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// specific instruction parser should parse the entire instruction and 148a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// construct the appropriate MCInst, or emit an error. On success, the entire 149a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// line should be parsed up to and including the end-of-statement token. On 150a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// failure, the parser is not required to read to the end of the line. 151a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar // 152a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// \param Name - The instruction name. 153fb76fe09297ee292129e44d723127f2408602a3dDan Gohman /// \param NameLoc - The source location of the name. 1549898671a74d3fc924347e679c45edaa685b3fe6eChris Lattner /// \param Operands [out] - The list of parsed operands, this returns 1559898671a74d3fc924347e679c45edaa685b3fe6eChris Lattner /// ownership of them to the caller. 156a3af370dc12f6d5100da5d614ab0a62da135569aDaniel Dunbar /// \return True on failure. 1576a020a71173a3ea7738a9df69982e85ddbfe0303Chad Rosier virtual bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name, 158c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines SMLoc NameLoc, OperandVector &Operands) = 0; 159f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar virtual bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name, 160f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar AsmToken Token, OperandVector &Operands) { 161f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar return ParseInstruction(Info, Name, Token.getLoc(), Operands); 162f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 1639c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby 1649c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// ParseDirective - Parse a target specific assembler directive 1659c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// 1669c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// The parser is positioned following the directive name. The target 1679c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// specific directive parser should parse the entire directive doing or 1689c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// recording any target specific work, or return true and do nothing if the 1699c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// directive is not target specific. If the directive is specific for 1709c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// the target, the entire line is parsed up to and including the 1719c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// end-of-statement token and false is returned. 1729c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby /// 173fb76fe09297ee292129e44d723127f2408602a3dDan Gohman /// \param DirectiveID - the identifier token of the directive. 1749c656450d65034c4cd3597fff61ef17376cff090Kevin Enderby virtual bool ParseDirective(AsmToken DirectiveID) = 0; 175bb0752b040cfe206afeef7fa60e80dde91594fa1Jim Grosbach 1767036f8be4df8a1a830ca01afe9497b035a5647d6Chris Lattner /// MatchAndEmitInstruction - Recognize a series of operands of a parsed 1777036f8be4df8a1a830ca01afe9497b035a5647d6Chris Lattner /// instruction as an actual MCInst and emit it to the specified MCStreamer. 1787036f8be4df8a1a830ca01afe9497b035a5647d6Chris Lattner /// This returns false on success and returns true on failure to match. 179f1e29d4c21d15f9e1e3a64f3b92b1aa9908e4f63Daniel Dunbar /// 180f1e29d4c21d15f9e1e3a64f3b92b1aa9908e4f63Daniel Dunbar /// On failure, the target parser is responsible for emitting a diagnostic 181f1e29d4c21d15f9e1e3a64f3b92b1aa9908e4f63Daniel Dunbar /// explaining the match failure. 182c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines virtual bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, 183c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines OperandVector &Operands, MCStreamer &Out, 18437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint64_t &ErrorInfo, 185c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool MatchingInlineAsm) = 0; 186bb0752b040cfe206afeef7fa60e80dde91594fa1Jim Grosbach 18737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// Allows targets to let registers opt out of clobber lists. 18837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines virtual bool OmitRegisterFromClobberLists(unsigned RegNo) { return false; } 18937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 190fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach /// Allow a target to add special case operand matching for things that 191fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach /// tblgen doesn't/can't handle effectively. For example, literal 192fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach /// immediates on ARM. TableGen expects a token operand, but the parser 193fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach /// will recognize them as immediates. 194c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines virtual unsigned validateTargetOperandClass(MCParsedAsmOperand &Op, 195fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach unsigned Kind) { 196fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach return Match_InvalidOperand; 197fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach } 198fa05def52c6bb8266d856a9af2de6fa066d93d44Jim Grosbach 19919cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach /// checkTargetMatchPredicate - Validate the instruction match against 20019cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach /// any complex target predicates not expressible via match classes. 20119cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach virtual unsigned checkTargetMatchPredicate(MCInst &Inst) { 20219cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach return Match_Success; 20319cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach } 20419cb7f491fbc7cb5d0bbd10e201f9d5093e6d4e5Jim Grosbach 20522685876ed7231f32f7d1698c00acab22825b74cChad Rosier virtual void convertToMapAndConstraints(unsigned Kind, 206c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines const OperandVector &Operands) = 0; 20766b7139b1be1ddce410d97499d5831231c6be267Joerg Sonnenberger 208f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar // Return whether this parser uses assignment statements with equals tokens 209f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar virtual bool equalIsAsmAssignment() { return true; }; 210f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar // Return whether this start of statement identifier is a label 211f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar virtual bool isLabel(AsmToken &Token) { return true; }; 212f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 21366b7139b1be1ddce410d97499d5831231c6be267Joerg Sonnenberger virtual const MCExpr *applyModifierToExpr(const MCExpr *E, 21466b7139b1be1ddce410d97499d5831231c6be267Joerg Sonnenberger MCSymbolRefExpr::VariantKind, 21566b7139b1be1ddce410d97499d5831231c6be267Joerg Sonnenberger MCContext &Ctx) { 216dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 21766b7139b1be1ddce410d97499d5831231c6be267Joerg Sonnenberger } 218c8f4e5db29270fc7ed164af973ece7ba5921539bTim Northover 219f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar virtual void onLabelParsed(MCSymbol *Symbol) { } 220092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar}; 221092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar 222092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar} // End llvm namespace 223092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar 224092a9dda2d13918a6410db26f41c7b5aa97ff989Daniel Dunbar#endif 225