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