1faec9a33968acf994892c65901bc6448f0034ecdEli Bendersky//===-- X86AsmPrinter.h - X86 implementation of AsmPrinter ------*- C++ -*-===//
2b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner//
3b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner//                     The LLVM Compiler Infrastructure
4b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner//
8b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner//===----------------------------------------------------------------------===//
9b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
100dc32ea0ef14c7e7f88edb12763a7828052a7fbdChris Lattner#ifndef X86ASMPRINTER_H
110dc32ea0ef14c7e7f88edb12763a7828052a7fbdChris Lattner#define X86ASMPRINTER_H
12b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "X86Subtarget.h"
1475b6882d3cb306d634a854cc97435397ce348938Anton Korobeynikov#include "llvm/CodeGen/AsmPrinter.h"
153d74dea4bddc84d1881efc21eb5eefbddbfa9aedAndrew Trick#include "llvm/CodeGen/StackMaps.h"
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Target/TargetMachine.h"
17b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
18b36cbd0286cf008987737dbcc3b788af902d414bChris Lattnernamespace llvm {
1940e3c7acade9ece77319ce6e340af33d8c61de34Chris Lattnerclass MCStreamer;
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass MCSymbol;
2175b6882d3cb306d634a854cc97435397ce348938Anton Korobeynikov
2216d8f8bd919b72866e687d99f3aa94a140137c59Duncan Sandsclass LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public AsmPrinter {
2375b6882d3cb306d634a854cc97435397ce348938Anton Korobeynikov  const X86Subtarget *Subtarget;
243d74dea4bddc84d1881efc21eb5eefbddbfa9aedAndrew Trick  StackMaps SM;
253d74dea4bddc84d1881efc21eb5eefbddbfa9aedAndrew Trick
26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void GenerateExportDirective(const MCSymbol *Sym, bool IsData);
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
2857f0db833dc30404f1f5d28b23df326e520698ecBill Wendling public:
29b23569aff0a6d2b231cb93cc4acd0ac060ba560fChris Lattner  explicit X86AsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    : AsmPrinter(TM, Streamer), SM(*this) {
3175b6882d3cb306d634a854cc97435397ce348938Anton Korobeynikov    Subtarget = &TM.getSubtarget<X86Subtarget>();
3275b6882d3cb306d634a854cc97435397ce348938Anton Korobeynikov  }
33b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  const char *getPassName() const override {
35faec9a33968acf994892c65901bc6448f0034ecdEli Bendersky    return "X86 Assembly / Object Emitter";
36b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner  }
37a20e1e7ef596842127794372244fd5c646f71296Chad Rosier
388fea32f9ff5cec2165661a3da986abe29c9bddb1Chris Lattner  const X86Subtarget &getSubtarget() const { return *Subtarget; }
39b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void EmitStartOfAsmFile(Module &M) override;
419947bbb2979d9e33366ac767c7677bc69b5252e6Sean Callanan
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void EmitEndOfAsmFile(Module &M) override;
43a01098cc7d8e497aa5b71b8851c28fc38118034aCraig Topper
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void EmitInstruction(const MachineInstr *MI) override;
4575b6882d3cb306d634a854cc97435397ce348938Anton Korobeynikov
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                       unsigned AsmVariant, const char *ExtraCode,
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                       raw_ostream &OS) override;
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                             unsigned AsmVariant, const char *ExtraCode,
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                             raw_ostream &OS) override;
5234448ae39398eeb5339a3dc6c669b4ca6791eadcChad Rosier
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bool runOnMachineFunction(MachineFunction &F) override;
54b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner};
55b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
56b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner} // end namespace llvm
57b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner
58b36cbd0286cf008987737dbcc3b788af902d414bChris Lattner#endif
59