1 //= X86IntelInstPrinter.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 Intel style .s file syntax. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H 15 #define LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H 16 17 #include "llvm/MC/MCInstPrinter.h" 18 #include "llvm/Support/raw_ostream.h" 19 20 namespace llvm { 21 22 class MCOperand; 23 24 class X86IntelInstPrinter final : public MCInstPrinter { 25 public: 26 X86IntelInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 27 const MCRegisterInfo &MRI) 28 : MCInstPrinter(MAI, MII, MRI) {} 29 30 void printRegName(raw_ostream &OS, unsigned RegNo) const override; 31 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot, 32 const MCSubtargetInfo &STI) override; 33 34 // Autogenerated by tblgen. 35 void printInstruction(const MCInst *MI, raw_ostream &O); 36 static const char *getRegisterName(unsigned RegNo); 37 38 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 39 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O); 40 void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O); 41 void printXOPCC(const MCInst *MI, unsigned Op, raw_ostream &O); 42 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O); 43 void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O); 44 void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O); 45 void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O); 46 void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS); 47 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O); 48 49 void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 50 printMemReference(MI, OpNo, O); 51 } 52 53 void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 54 O << "opaque ptr "; 55 printMemReference(MI, OpNo, O); 56 } 57 58 void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 59 O << "byte ptr "; 60 printMemReference(MI, OpNo, O); 61 } 62 void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 63 O << "word ptr "; 64 printMemReference(MI, OpNo, O); 65 } 66 void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 67 O << "dword ptr "; 68 printMemReference(MI, OpNo, O); 69 } 70 void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 71 O << "qword ptr "; 72 printMemReference(MI, OpNo, O); 73 } 74 void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 75 O << "xmmword ptr "; 76 printMemReference(MI, OpNo, O); 77 } 78 void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 79 O << "ymmword ptr "; 80 printMemReference(MI, OpNo, O); 81 } 82 void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 83 O << "zmmword ptr "; 84 printMemReference(MI, OpNo, O); 85 } 86 void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 87 O << "dword ptr "; 88 printMemReference(MI, OpNo, O); 89 } 90 void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 91 O << "qword ptr "; 92 printMemReference(MI, OpNo, O); 93 } 94 void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 95 O << "xword ptr "; 96 printMemReference(MI, OpNo, O); 97 } 98 void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 99 O << "xmmword ptr "; 100 printMemReference(MI, OpNo, O); 101 } 102 void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 103 O << "ymmword ptr "; 104 printMemReference(MI, OpNo, O); 105 } 106 void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 107 O << "zmmword ptr "; 108 printMemReference(MI, OpNo, O); 109 } 110 111 112 void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 113 O << "byte ptr "; 114 printSrcIdx(MI, OpNo, O); 115 } 116 void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 117 O << "word ptr "; 118 printSrcIdx(MI, OpNo, O); 119 } 120 void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 121 O << "dword ptr "; 122 printSrcIdx(MI, OpNo, O); 123 } 124 void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 125 O << "qword ptr "; 126 printSrcIdx(MI, OpNo, O); 127 } 128 void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 129 O << "byte ptr "; 130 printDstIdx(MI, OpNo, O); 131 } 132 void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 133 O << "word ptr "; 134 printDstIdx(MI, OpNo, O); 135 } 136 void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 137 O << "dword ptr "; 138 printDstIdx(MI, OpNo, O); 139 } 140 void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 141 O << "qword ptr "; 142 printDstIdx(MI, OpNo, O); 143 } 144 void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 145 O << "byte ptr "; 146 printMemOffset(MI, OpNo, O); 147 } 148 void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 149 O << "word ptr "; 150 printMemOffset(MI, OpNo, O); 151 } 152 void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 153 O << "dword ptr "; 154 printMemOffset(MI, OpNo, O); 155 } 156 void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 157 O << "qword ptr "; 158 printMemOffset(MI, OpNo, O); 159 } 160 }; 161 162 } 163 164 #endif 165