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