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