X86AsmPrinter.h revision 249423
153913Sarchie//===-- X86AsmPrinter.h - X86 implementation of AsmPrinter ------*- C++ -*-===//
253913Sarchie//
3139823Simp//                     The LLVM Compiler Infrastructure
4139823Simp//
5139823Simp// This file is distributed under the University of Illinois Open Source
653913Sarchie// License. See LICENSE.TXT for details.
753913Sarchie//
853913Sarchie//===----------------------------------------------------------------------===//
953913Sarchie
1053913Sarchie#ifndef X86ASMPRINTER_H
1153913Sarchie#define X86ASMPRINTER_H
1253913Sarchie
1353913Sarchie#include "X86.h"
1453913Sarchie#include "X86MachineFunctionInfo.h"
1553913Sarchie#include "X86TargetMachine.h"
1653913Sarchie#include "llvm/CodeGen/AsmPrinter.h"
1753913Sarchie#include "llvm/CodeGen/MachineModuleInfo.h"
1853913Sarchie#include "llvm/CodeGen/ValueTypes.h"
1953913Sarchie#include "llvm/Support/Compiler.h"
2053913Sarchie
2153913Sarchienamespace llvm {
2253913Sarchie
2353913Sarchieclass MCStreamer;
2453913Sarchie
2553913Sarchieclass LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public AsmPrinter {
2653913Sarchie  const X86Subtarget *Subtarget;
2753913Sarchie public:
2853913Sarchie  explicit X86AsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
2953913Sarchie    : AsmPrinter(TM, Streamer) {
3053913Sarchie    Subtarget = &TM.getSubtarget<X86Subtarget>();
3153913Sarchie  }
3253913Sarchie
3353913Sarchie  virtual const char *getPassName() const LLVM_OVERRIDE {
3453913Sarchie    return "X86 Assembly / Object Emitter";
3553913Sarchie  }
3653913Sarchie
3753913Sarchie  const X86Subtarget &getSubtarget() const { return *Subtarget; }
3867506Sjulian
3953913Sarchie  virtual void EmitStartOfAsmFile(Module &M) LLVM_OVERRIDE;
4053913Sarchie
4153913Sarchie  virtual void EmitEndOfAsmFile(Module &M) LLVM_OVERRIDE;
4253913Sarchie
4353913Sarchie  virtual void EmitInstruction(const MachineInstr *MI) LLVM_OVERRIDE;
44122481Sru
45122481Sru  void printSymbolOperand(const MachineOperand &MO, raw_ostream &O);
4653913Sarchie
4753913Sarchie  // These methods are used by the tablegen'erated instruction printer.
4853913Sarchie  void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O,
4953913Sarchie                    const char *Modifier = 0, unsigned AsmVariant = 0);
5053913Sarchie  void printPCRelImm(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
5153998Sarchie
5253998Sarchie  bool printAsmMRegister(const MachineOperand &MO, char Mode, raw_ostream &O);
5353998Sarchie  virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
5453913Sarchie                               unsigned AsmVariant, const char *ExtraCode,
5553998Sarchie                               raw_ostream &OS) LLVM_OVERRIDE;
5653998Sarchie  virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
5753998Sarchie                                     unsigned AsmVariant, const char *ExtraCode,
5853998Sarchie                                     raw_ostream &OS) LLVM_OVERRIDE;
5953998Sarchie
6053998Sarchie  void printMemReference(const MachineInstr *MI, unsigned Op, raw_ostream &O,
6153998Sarchie                         const char *Modifier=NULL);
6253998Sarchie  void printLeaMemReference(const MachineInstr *MI, unsigned Op, raw_ostream &O,
6353998Sarchie                            const char *Modifier=NULL);
6453913Sarchie
6553913Sarchie  void printIntelMemReference(const MachineInstr *MI, unsigned Op,
6653913Sarchie                              raw_ostream &O, const char *Modifier=NULL,
6753913Sarchie                              unsigned AsmVariant = 1);
6853913Sarchie
6953913Sarchie  virtual bool runOnMachineFunction(MachineFunction &F) LLVM_OVERRIDE;
7053913Sarchie
7153913Sarchie  void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);
7253913Sarchie
7353913Sarchie  virtual MachineLocation
7453913Sarchie    getDebugValueLocation(const MachineInstr *MI) const LLVM_OVERRIDE;
7553913Sarchie};
7653913Sarchie
7753913Sarchie} // end namespace llvm
7853913Sarchie
7953913Sarchie#endif
8053913Sarchie