1 //===- AVRInstPrinter.h - Convert AVR MCInst to assembly syntax -*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This class prints an AVR MCInst to a .s file. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_AVR_INST_PRINTER_H 14 #define LLVM_AVR_INST_PRINTER_H 15 16 #include "llvm/MC/MCInstPrinter.h" 17 18 #include "MCTargetDesc/AVRMCTargetDesc.h" 19 20 namespace llvm { 21 22 /// Prints AVR instructions to a textual stream. 23 class AVRInstPrinter : public MCInstPrinter { 24 public: 25 AVRInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 26 const MCRegisterInfo &MRI) 27 : MCInstPrinter(MAI, MII, MRI) {} 28 29 static const char *getPrettyRegisterName(unsigned RegNo, 30 MCRegisterInfo const &MRI); 31 32 void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, 33 const MCSubtargetInfo &STI, raw_ostream &O) override; 34 35 private: 36 static const char *getRegisterName(unsigned RegNo, 37 unsigned AltIdx = AVR::NoRegAltName); 38 39 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 40 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O); 41 void printPCRelImm(const MCInst *MI, uint64_t /*Address*/, unsigned OpNo, 42 raw_ostream &O) { 43 printPCRelImm(MI, OpNo, O); 44 } 45 void printMemri(const MCInst *MI, unsigned OpNo, raw_ostream &O); 46 47 // Autogenerated by TableGen. 48 std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override; 49 void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); 50 bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &O); 51 void printCustomAliasOperand(const MCInst *MI, uint64_t Address, 52 unsigned OpIdx, unsigned PrintMethodIdx, 53 raw_ostream &O); 54 }; 55 56 } // end namespace llvm 57 58 #endif // LLVM_AVR_INST_PRINTER_H 59