MCParsedAsmOperand.h revision 95707c90ccb7309df76ea7f3f0b81495e4f7d0e6
1//===-- llvm/MC/MCParsedAsmOperand.h - Asm Parser Operand -------*- 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_MCASMOPERAND_H 11#define LLVM_MC_MCASMOPERAND_H 12 13namespace llvm { 14class SMLoc; 15class raw_ostream; 16 17/// MCParsedAsmOperand - This abstract class represents a source-level assembly 18/// instruction operand. It should be subclassed by target-specific code. This 19/// base class is used by target-independent clients and is the interface 20/// between parsing an asm instruction and recognizing it. 21class MCParsedAsmOperand { 22public: 23 MCParsedAsmOperand() {} 24 virtual ~MCParsedAsmOperand() {} 25 26 /// isToken - Is this a token operand? 27 virtual bool isToken() const = 0; 28 /// isImm - Is this an immediate operand? 29 virtual bool isImm() const = 0; 30 /// isReg - Is this a register operand? 31 virtual bool isReg() const = 0; 32 virtual unsigned getReg() const = 0; 33 34 /// isMem - Is this a memory operand? 35 virtual bool isMem() const = 0; 36 37 /// isMSAsmWildcard - Is this a wildcard operand? This is specific to 38 /// MS-style inline assembly and should never happen in normal assembly. 39 virtual bool isMSAsmWildcard() const { return false; } 40 41 /// setMSAsmWildcard - Convert the operand into a wildcard. 42 virtual void setMSAsmWildcard(unsigned Size) { } 43 44 /// getStartLoc - Get the location of the first token of this operand. 45 virtual SMLoc getStartLoc() const = 0; 46 /// getEndLoc - Get the location of the last token of this operand. 47 virtual SMLoc getEndLoc() const = 0; 48 49 /// print - Print a debug representation of the operand to the given stream. 50 virtual void print(raw_ostream &OS) const = 0; 51 /// dump - Print to the debug stream. 52 virtual void dump() const; 53}; 54 55//===----------------------------------------------------------------------===// 56// Debugging Support 57 58inline raw_ostream& operator<<(raw_ostream &OS, const MCParsedAsmOperand &MO) { 59 MO.print(OS); 60 return OS; 61} 62 63} // end namespace llvm. 64 65#endif 66