X86AsmPrinter.h revision 243830
125401Sjb//===-- X86AsmPrinter.h - Convert X86 LLVM code to assembly -----*- C++ -*-===// 250476Speter// 31573Srgrimes// The LLVM Compiler Infrastructure 41573Srgrimes// 5107052Sru// This file is distributed under the University of Illinois Open Source 61573Srgrimes// License. See LICENSE.TXT for details. 7136609Stjr// 8122145Sdavidxu//===----------------------------------------------------------------------===// 9102697Stjr// 10102697Stjr// AT&T assembly code printer class. 11136609Stjr// 12132497Stjr//===----------------------------------------------------------------------===// 13139922Stjr 14139922Stjr#ifndef X86ASMPRINTER_H 15136609Stjr#define X86ASMPRINTER_H 16121845Stjr 17136604Stjr#include "X86.h" 18132497Stjr#include "X86MachineFunctionInfo.h" 19112177Stjr#include "X86TargetMachine.h" 20112177Stjr#include "llvm/CodeGen/AsmPrinter.h" 21103218Stjr#include "llvm/CodeGen/MachineModuleInfo.h" 22103793Stjr#include "llvm/CodeGen/ValueTypes.h" 23103793Stjr#include "llvm/Support/Compiler.h" 241573Srgrimes 25156613Sdeischennamespace llvm { 26156613Sdeischen 27101305Sbdeclass MCStreamer; 28101305Sbde 29127608Stjrclass LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public AsmPrinter { 30127608Stjr const X86Subtarget *Subtarget; 31123222Stjr public: 32123222Stjr explicit X86AsmPrinter(TargetMachine &TM, MCStreamer &Streamer) 33136609Stjr : AsmPrinter(TM, Streamer) { 34123222Stjr Subtarget = &TM.getSubtarget<X86Subtarget>(); 35139922Stjr } 36104406Stjr 37104406Stjr virtual const char *getPassName() const LLVM_OVERRIDE { 38103218Stjr return "X86 AT&T-Style Assembly Printer"; 39123222Stjr } 40102167Stjr 41136604Stjr const X86Subtarget &getSubtarget() const { return *Subtarget; } 4230624Sbde 43101305Sbde virtual void EmitStartOfAsmFile(Module &M) LLVM_OVERRIDE; 4489255Sbde 45101408Stjr virtual void EmitEndOfAsmFile(Module &M) LLVM_OVERRIDE; 46101408Stjr 47127590Stjr virtual void EmitInstruction(const MachineInstr *MI) LLVM_OVERRIDE; 48101408Stjr 49101408Stjr void printSymbolOperand(const MachineOperand &MO, raw_ostream &O); 50101408Stjr 51101408Stjr // These methods are used by the tablegen'erated instruction printer. 5289255Sbde void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O, 53132497Stjr const char *Modifier = 0, unsigned AsmVariant = 0); 54132497Stjr void printPCRelImm(const MachineInstr *MI, unsigned OpNo, raw_ostream &O); 55112177Stjr 56103793Stjr bool printAsmMRegister(const MachineOperand &MO, char Mode, raw_ostream &O); 57103793Stjr virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 58101313Stjr unsigned AsmVariant, const char *ExtraCode, 59101253Stjr raw_ostream &OS) LLVM_OVERRIDE; 60 virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 61 unsigned AsmVariant, const char *ExtraCode, 62 raw_ostream &OS) LLVM_OVERRIDE; 63 64 void printMemReference(const MachineInstr *MI, unsigned Op, raw_ostream &O, 65 const char *Modifier=NULL); 66 void printLeaMemReference(const MachineInstr *MI, unsigned Op, raw_ostream &O, 67 const char *Modifier=NULL); 68 69 void printIntelMemReference(const MachineInstr *MI, unsigned Op, 70 raw_ostream &O, const char *Modifier=NULL, 71 unsigned AsmVariant = 1); 72 73 virtual bool runOnMachineFunction(MachineFunction &F) LLVM_OVERRIDE; 74 75 void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS); 76 77 virtual MachineLocation 78 getDebugValueLocation(const MachineInstr *MI) const LLVM_OVERRIDE; 79}; 80 81} // end namespace llvm 82 83#endif 84