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 "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