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