Home | History | Annotate | Download | only in InstPrinter
      1 //===- AVRInstPrinter.h - Convert AVR 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 AVR MCInst to a .s file.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_AVR_INST_PRINTER_H
     15 #define LLVM_AVR_INST_PRINTER_H
     16 
     17 #include "llvm/MC/MCInstPrinter.h"
     18 
     19 #include "MCTargetDesc/AVRMCTargetDesc.h"
     20 
     21 namespace llvm {
     22 
     23 /// Prints AVR instructions to a textual stream.
     24 class AVRInstPrinter : public MCInstPrinter {
     25 public:
     26   AVRInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
     27                  const MCRegisterInfo &MRI)
     28       : MCInstPrinter(MAI, MII, MRI) {}
     29 
     30   static const char *getPrettyRegisterName(unsigned RegNo,
     31                                            MCRegisterInfo const &MRI);
     32 
     33   void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
     34                  const MCSubtargetInfo &STI) override;
     35 
     36 private:
     37   static const char *getRegisterName(unsigned RegNo,
     38                                      unsigned AltIdx = AVR::NoRegAltName);
     39 
     40   void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
     41   void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
     42   void printMemri(const MCInst *MI, unsigned OpNo, raw_ostream &O);
     43 
     44   // Autogenerated by TableGen.
     45   void printInstruction(const MCInst *MI, raw_ostream &O);
     46   bool printAliasInstr(const MCInst *MI, raw_ostream &O);
     47   void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
     48                                unsigned PrintMethodIdx, raw_ostream &O);
     49 };
     50 
     51 } // end namespace llvm
     52 
     53 #endif // LLVM_AVR_INST_PRINTER_H
     54 
     55