1//==- X86ATTInstPrinter.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 AT&T style .s file syntax.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86_ATT_INST_PRINTER_H
15#define X86_ATT_INST_PRINTER_H
16
17#include "llvm/MC/MCInstPrinter.h"
18
19namespace llvm {
20
21class MCOperand;
22
23class X86ATTInstPrinter final : public MCInstPrinter {
24public:
25  X86ATTInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
26                    const MCRegisterInfo &MRI)
27    : MCInstPrinter(MAI, MII, MRI) {}
28
29  void printRegName(raw_ostream &OS, unsigned RegNo) const override;
30  void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot) override;
31
32  // Autogenerated by tblgen, returns true if we successfully printed an
33  // alias.
34  bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
35  void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
36                               unsigned PrintMethodIdx, raw_ostream &O);
37
38  // Autogenerated by tblgen.
39  void printInstruction(const MCInst *MI, raw_ostream &OS);
40  static const char *getRegisterName(unsigned RegNo);
41
42  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
43  void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &OS);
44  void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &OS);
45  void printAVXCC(const MCInst *MI, unsigned Op, raw_ostream &OS);
46  void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
47  void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
48  void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
49  void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
50  void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
51
52  void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
53    printMemReference(MI, OpNo, O);
54  }
55
56  void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
57    printMemReference(MI, OpNo, O);
58  }
59  void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
60    printMemReference(MI, OpNo, O);
61  }
62  void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
63    printMemReference(MI, OpNo, O);
64  }
65  void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
66    printMemReference(MI, OpNo, O);
67  }
68  void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
69    printMemReference(MI, OpNo, O);
70  }
71  void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
72    printMemReference(MI, OpNo, O);
73  }
74  void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
75    printMemReference(MI, OpNo, O);
76  }
77  void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
78    printMemReference(MI, OpNo, O);
79  }
80  void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
81    printMemReference(MI, OpNo, O);
82  }
83  void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
84    printMemReference(MI, OpNo, O);
85  }
86  void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
87    printMemReference(MI, OpNo, O);
88  }
89  void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
90    printMemReference(MI, OpNo, O);
91  }
92  void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
93    printMemReference(MI, OpNo, O);
94  }
95
96  void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
97    printSrcIdx(MI, OpNo, O);
98  }
99  void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
100    printSrcIdx(MI, OpNo, O);
101  }
102  void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
103    printSrcIdx(MI, OpNo, O);
104  }
105  void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
106    printSrcIdx(MI, OpNo, O);
107  }
108  void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
109    printDstIdx(MI, OpNo, O);
110  }
111  void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
112    printDstIdx(MI, OpNo, O);
113  }
114  void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
115    printDstIdx(MI, OpNo, O);
116  }
117  void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
118    printDstIdx(MI, OpNo, O);
119  }
120  void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
121    printMemOffset(MI, OpNo, O);
122  }
123  void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
124    printMemOffset(MI, OpNo, O);
125  }
126  void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
127    printMemOffset(MI, OpNo, O);
128  }
129  void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
130    printMemOffset(MI, OpNo, O);
131  }
132};
133
134}
135
136#endif
137