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 printExprOperand(raw_ostream &OS, const MCExpr &E) override;
27 void printRegName(raw_ostream &OS, MCRegister Reg) override;
28 void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
29 const MCSubtargetInfo &STI, raw_ostream &OS) override;
30 bool printVecCompareInstr(const MCInst *MI, raw_ostream &OS);
31
32 // Autogenerated by tblgen, returns true if we successfully printed an
33 // alias.
34 bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS);
35 void printCustomAliasOperand(const MCInst *MI, uint64_t Address,
36 unsigned OpIdx, unsigned PrintMethodIdx,
37 raw_ostream &O);
38
39 // Autogenerated by tblgen.
40 std::pair<const char *, uint64_t>
41 getMnemonic(const MCInst &MI) const override;
42 void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &OS);
43 static const char *getRegisterName(MCRegister Reg);
44
45 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS) override;
46 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &OS);
47 void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
48 void printSrcIdx(const MCInst *MI, unsigned Op, raw_ostream &O);
49 void printDstIdx(const MCInst *MI, unsigned Op, raw_ostream &O);
50 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &OS);
51 void printSTiRegOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
52
53 void printbytemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
54 printMemReference(MI, Op: OpNo, OS&: O);
55 }
56 void printwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
57 printMemReference(MI, Op: OpNo, OS&: O);
58 }
59 void printdwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
60 printMemReference(MI, Op: OpNo, OS&: O);
61 }
62 void printqwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
63 printMemReference(MI, Op: OpNo, OS&: O);
64 }
65 void printxmmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
66 printMemReference(MI, Op: OpNo, OS&: O);
67 }
68 void printymmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
69 printMemReference(MI, Op: OpNo, OS&: O);
70 }
71 void printzmmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
72 printMemReference(MI, Op: OpNo, OS&: O);
73 }
74 void printtbytemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
75 printMemReference(MI, Op: OpNo, OS&: O);
76 }
77
78 void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
79 printSrcIdx(MI, Op: OpNo, O);
80 }
81 void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
82 printSrcIdx(MI, Op: OpNo, O);
83 }
84 void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
85 printSrcIdx(MI, Op: OpNo, O);
86 }
87 void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
88 printSrcIdx(MI, Op: OpNo, O);
89 }
90 void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
91 printDstIdx(MI, Op: OpNo, O);
92 }
93 void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
94 printDstIdx(MI, Op: OpNo, O);
95 }
96 void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
97 printDstIdx(MI, Op: OpNo, O);
98 }
99 void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
100 printDstIdx(MI, Op: OpNo, O);
101 }
102 void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
103 printMemOffset(MI, OpNo, OS&: O);
104 }
105 void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
106 printMemOffset(MI, OpNo, OS&: O);
107 }
108 void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
109 printMemOffset(MI, OpNo, OS&: O);
110 }
111 void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
112 printMemOffset(MI, OpNo, OS&: O);
113 }
114
115private:
116 bool HasCustomInstComment;
117};
118
119} // end namespace llvm
120
121#endif // LLVM_LIB_TARGET_X86_MCTARGETDESC_X86ATTINSTPRINTER_H
122