X86ATTInstPrinter.h revision 360784
1//=- X86ATTInstPrinter.h - Convert X86 MCInst to assembly syntax --*- C++ -*-=//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This class prints an X86 MCInst to AT&T style .s file syntax.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86ATTINSTPRINTER_H
14#define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86ATTINSTPRINTER_H
15
16#include "X86InstPrinterCommon.h"
17
18namespace llvm {
19
20class X86ATTInstPrinter final : public X86InstPrinterCommon {
21public:
22  X86ATTInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
23                    const MCRegisterInfo &MRI)
24      : X86InstPrinterCommon(MAI, MII, MRI), HasCustomInstComment(false) {}
25
26  void printRegName(raw_ostream &OS, unsigned RegNo) const override;
27  void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
28                 const MCSubtargetInfo &STI, raw_ostream &OS) override;
29  bool printVecCompareInstr(const MCInst *MI, raw_ostream &OS);
30
31  // Autogenerated by tblgen, returns true if we successfully printed an
32  // alias.
33  bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
34  void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
35                               unsigned PrintMethodIdx, raw_ostream &O);
36
37  // Autogenerated by tblgen.
38  void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &OS);
39  static const char *getRegisterName(unsigned RegNo);
40
41  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS) override;
42  void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &OS);
43  void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
44  void printSrcIdx(const MCInst *MI, unsigned Op, raw_ostream &O);
45  void printDstIdx(const MCInst *MI, unsigned Op, raw_ostream &O);
46  void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &OS);
47  void printSTiRegOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
48
49  void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
50    printMemReference(MI, OpNo, O);
51  }
52  void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
53    printMemReference(MI, OpNo, O);
54  }
55
56  void printbytemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
57    printMemReference(MI, OpNo, O);
58  }
59  void printwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
60    printMemReference(MI, OpNo, O);
61  }
62  void printdwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
63    printMemReference(MI, OpNo, O);
64  }
65  void printqwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
66    printMemReference(MI, OpNo, O);
67  }
68  void printxmmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
69    printMemReference(MI, OpNo, O);
70  }
71  void printymmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
72    printMemReference(MI, OpNo, O);
73  }
74  void printzmmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
75    printMemReference(MI, OpNo, O);
76  }
77  void printtbytemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
78    printMemReference(MI, OpNo, O);
79  }
80
81  void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
82    printSrcIdx(MI, OpNo, O);
83  }
84  void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
85    printSrcIdx(MI, OpNo, O);
86  }
87  void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
88    printSrcIdx(MI, OpNo, O);
89  }
90  void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
91    printSrcIdx(MI, OpNo, O);
92  }
93  void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
94    printDstIdx(MI, OpNo, O);
95  }
96  void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
97    printDstIdx(MI, OpNo, O);
98  }
99  void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
100    printDstIdx(MI, OpNo, O);
101  }
102  void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
103    printDstIdx(MI, OpNo, O);
104  }
105  void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
106    printMemOffset(MI, OpNo, O);
107  }
108  void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
109    printMemOffset(MI, OpNo, O);
110  }
111  void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
112    printMemOffset(MI, OpNo, O);
113  }
114  void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
115    printMemOffset(MI, OpNo, O);
116  }
117
118private:
119  bool HasCustomInstComment;
120};
121
122} // end namespace llvm
123
124#endif // LLVM_LIB_TARGET_X86_MCTARGETDESC_X86ATTINSTPRINTER_H
125