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