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