14a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar//===-- llvm/MC/MCCodeEmitter.h - Instruction Encoding ----------*- C++ -*-===// 24a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar// 34a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar// The LLVM Compiler Infrastructure 44a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar// 54a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar// This file is distributed under the University of Illinois Open Source 64a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar// License. See LICENSE.TXT for details. 74a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar// 84a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar//===----------------------------------------------------------------------===// 94a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar 104a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar#ifndef LLVM_MC_MCCODEEMITTER_H 114a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar#define LLVM_MC_MCCODEEMITTER_H 124a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar 131f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper#include "llvm/Support/Compiler.h" 141f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper 154a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbarnamespace llvm { 16f1d0f7781e766df878bec4e7977fa3204374f394Craig Topperclass MCFixup; 178dcf70080280dcf8d6861f2da9f8f9dd1a61aed6Daniel Dunbarclass MCInst; 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MCSubtargetInfo; 198dcf70080280dcf8d6861f2da9f8f9dd1a61aed6Daniel Dunbarclass raw_ostream; 2073c557458c0e28899f37c557bcaf36c2b6701260Daniel Dunbartemplate<typename T> class SmallVectorImpl; 2173c557458c0e28899f37c557bcaf36c2b6701260Daniel Dunbar 224a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar/// MCCodeEmitter - Generic instruction encoding interface. 234a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbarclass MCCodeEmitter { 2473c557458c0e28899f37c557bcaf36c2b6701260Daniel Dunbarprivate: 251f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper MCCodeEmitter(const MCCodeEmitter &) LLVM_DELETED_FUNCTION; 261f7210e808373fa92be3a2d4fa653a6f79d5088bCraig Topper void operator=(const MCCodeEmitter &) LLVM_DELETED_FUNCTION; 274a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbarprotected: // Can only create subclasses. 284a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar MCCodeEmitter(); 2973c557458c0e28899f37c557bcaf36c2b6701260Daniel Dunbar 304a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbarpublic: 314a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar virtual ~MCCodeEmitter(); 324a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar 3399cbdde6198623ff014c776743caec2cf48f4840Pedro Artigas /// Lifetime management 3499cbdde6198623ff014c776743caec2cf48f4840Pedro Artigas virtual void reset() { } 3599cbdde6198623ff014c776743caec2cf48f4840Pedro Artigas 36c5252da873d547a19069eaf9030fec203f128f66Dmitri Gribenko /// EncodeInstruction - Encode the given \p Inst to bytes on the output 37c5252da873d547a19069eaf9030fec203f128f66Dmitri Gribenko /// stream \p OS. 3873c557458c0e28899f37c557bcaf36c2b6701260Daniel Dunbar virtual void EncodeInstruction(const MCInst &Inst, raw_ostream &OS, 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines SmallVectorImpl<MCFixup> &Fixups, 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const MCSubtargetInfo &STI) const = 0; 414a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar}; 424a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar 434a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar} // End llvm namespace 444a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar 454a0abd80f18f9c2a10bf5b14cd6731d51972a426Daniel Dunbar#endif 46