LLVM  7.0.0svn
X86IntelInstPrinter.h
Go to the documentation of this file.
1 //= X86IntelInstPrinter.h - Convert X86 MCInst to assembly syntax -*- C++ -*-=//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This class prints an X86 MCInst to Intel style .s file syntax.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H
15 #define LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H
16 
17 #include "llvm/MC/MCInstPrinter.h"
19 
20 namespace llvm {
21 
22 class X86IntelInstPrinter final : public MCInstPrinter {
23 public:
25  const MCRegisterInfo &MRI)
26  : MCInstPrinter(MAI, MII, MRI) {}
27 
28  void printRegName(raw_ostream &OS, unsigned RegNo) const override;
29  void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
30  const MCSubtargetInfo &STI) override;
31 
32  // Autogenerated by tblgen.
33  void printInstruction(const MCInst *MI, raw_ostream &O);
34  static const char *getRegisterName(unsigned RegNo);
35 
36  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
37  void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O);
38  void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O);
39  void printXOPCC(const MCInst *MI, unsigned Op, raw_ostream &O);
40  void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
41  void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
42  void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
43  void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
44  void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
45  void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O);
46 
47  void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
48  printMemReference(MI, OpNo, O);
49  }
50 
51  void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
52  O << "opaque ptr ";
53  printMemReference(MI, OpNo, O);
54  }
55 
56  void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
57  O << "byte ptr ";
58  printMemReference(MI, OpNo, O);
59  }
60  void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
61  O << "word ptr ";
62  printMemReference(MI, OpNo, O);
63  }
64  void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
65  O << "dword ptr ";
66  printMemReference(MI, OpNo, O);
67  }
68  void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
69  O << "qword ptr ";
70  printMemReference(MI, OpNo, O);
71  }
72  void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
73  O << "xmmword ptr ";
74  printMemReference(MI, OpNo, O);
75  }
76  void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
77  O << "ymmword ptr ";
78  printMemReference(MI, OpNo, O);
79  }
80  void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
81  O << "zmmword ptr ";
82  printMemReference(MI, OpNo, O);
83  }
84  void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
85  O << "dword ptr ";
86  printMemReference(MI, OpNo, O);
87  }
88  void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
89  O << "qword ptr ";
90  printMemReference(MI, OpNo, O);
91  }
92  void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
93  O << "xword ptr ";
94  printMemReference(MI, OpNo, O);
95  }
96  void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
97  O << "xmmword ptr ";
98  printMemReference(MI, OpNo, O);
99  }
100  void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
101  O << "ymmword ptr ";
102  printMemReference(MI, OpNo, O);
103  }
104  void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
105  O << "zmmword ptr ";
106  printMemReference(MI, OpNo, O);
107  }
108 
109 
110  void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
111  O << "byte ptr ";
112  printSrcIdx(MI, OpNo, O);
113  }
114  void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
115  O << "word ptr ";
116  printSrcIdx(MI, OpNo, O);
117  }
118  void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
119  O << "dword ptr ";
120  printSrcIdx(MI, OpNo, O);
121  }
122  void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
123  O << "qword ptr ";
124  printSrcIdx(MI, OpNo, O);
125  }
126  void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
127  O << "byte ptr ";
128  printDstIdx(MI, OpNo, O);
129  }
130  void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
131  O << "word ptr ";
132  printDstIdx(MI, OpNo, O);
133  }
134  void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
135  O << "dword ptr ";
136  printDstIdx(MI, OpNo, O);
137  }
138  void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
139  O << "qword ptr ";
140  printDstIdx(MI, OpNo, O);
141  }
142  void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
143  O << "byte ptr ";
144  printMemOffset(MI, OpNo, O);
145  }
146  void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
147  O << "word ptr ";
148  printMemOffset(MI, OpNo, O);
149  }
150  void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
151  O << "dword ptr ";
152  printMemOffset(MI, OpNo, O);
153  }
154  void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
155  O << "qword ptr ";
156  printMemOffset(MI, OpNo, O);
157  }
158 };
159 
160 } // end namespace llvm
161 
162 #endif // LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H
void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot, const MCSubtargetInfo &STI) override
Print the specified MCInst to the specified raw_ostream.
void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O)
void printInstruction(const MCInst *MI, raw_ostream &O)
void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printRegName(raw_ostream &OS, unsigned RegNo) const override
Print the assembler register name.
void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS)
void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printXOPCC(const MCInst *MI, unsigned Op, raw_ostream &O)
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:159
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:24
static const char * getRegisterName(unsigned RegNo)
void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O)
void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O)
void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O)
X86IntelInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
const MCAsmInfo & MAI
Definition: MCInstPrinter.h:47
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Definition: MCInstPrinter.h:41
void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
MCSubtargetInfo - Generic base class for all target subtargets.
const MCInstrInfo & MII
Definition: MCInstPrinter.h:48
void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O)
printPCRelImm - This is used to print an immediate value that ends up being encoded as a pc-relative ...
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:44
IRTranslator LLVM IR MI
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
const MCRegisterInfo & MRI
Definition: MCInstPrinter.h:49
void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O)