MCCodeEmitter.h revision 8d31de62680f28ac13594a14dde46216c82a3708
1//===-- llvm/MC/MCCodeEmitter.h - Instruction Encoding ----------*- 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_MCCODEEMITTER_H 11#define LLVM_MC_MCCODEEMITTER_H 12 13#include "llvm/MC/MCFixup.h" 14 15#include <cassert> 16 17namespace llvm { 18class MCExpr; 19class MCInst; 20class raw_ostream; 21template<typename T> class SmallVectorImpl; 22 23/// MCFixupKindInfo - Target independent information on a fixup kind. 24struct MCFixupKindInfo { 25 /// A target specific name for the fixup kind. The names will be unique for 26 /// distinct kinds on any given target. 27 const char *Name; 28 29 /// The bit offset to write the relocation into. 30 // 31 // FIXME: These two fields are under-specified and not general enough, but it 32 // is covers many things, and is enough to let the AsmStreamer pretty-print 33 // the encoding. 34 unsigned TargetOffset; 35 36 /// The number of bits written by this fixup. The bits are assumed to be 37 /// contiguous. 38 unsigned TargetSize; 39}; 40 41/// MCCodeEmitter - Generic instruction encoding interface. 42class MCCodeEmitter { 43private: 44 MCCodeEmitter(const MCCodeEmitter &); // DO NOT IMPLEMENT 45 void operator=(const MCCodeEmitter &); // DO NOT IMPLEMENT 46protected: // Can only create subclasses. 47 MCCodeEmitter(); 48 49public: 50 virtual ~MCCodeEmitter(); 51 52 /// @name Target Independent Fixup Information 53 /// @{ 54 55 /// getNumFixupKinds - Get the number of target specific fixup kinds. 56 virtual unsigned getNumFixupKinds() const = 0; 57 58 /// getFixupKindInfo - Get information on a fixup kind. 59 virtual const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const; 60 61 /// @} 62 63 /// EncodeInstruction - Encode the given \arg Inst to bytes on the output 64 /// stream \arg OS. 65 virtual void EncodeInstruction(const MCInst &Inst, raw_ostream &OS, 66 SmallVectorImpl<MCFixup> &Fixups) const = 0; 67}; 68 69} // End llvm namespace 70 71#endif 72