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