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