#ifndef LLVM_AVR_INST_PRINTER_H
#define LLVM_AVR_INST_PRINTER_H
#include "llvm/MC/MCInstPrinter.h"
#include "MCTargetDesc/AVRMCTargetDesc.h"
namespace llvm {
class AVRInstPrinter : public MCInstPrinter {
public:
AVRInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
const MCRegisterInfo &MRI)
: MCInstPrinter(MAI, MII, MRI) {}
static const char *getPrettyRegisterName(unsigned RegNo,
MCRegisterInfo const &MRI);
void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
const MCSubtargetInfo &STI, raw_ostream &O) override;
private:
static const char *getRegisterName(unsigned RegNo,
unsigned AltIdx = AVR::NoRegAltName);
void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
void printPCRelImm(const MCInst *MI, uint64_t , unsigned OpNo,
raw_ostream &O) {
printPCRelImm(MI, OpNo, O);
}
void printMemri(const MCInst *MI, unsigned OpNo, raw_ostream &O);
void printMemspi(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
printMemri(MI, OpNo, O);
}
std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override;
void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O);
bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &O);
void printCustomAliasOperand(const MCInst *MI, uint64_t Address,
unsigned OpIdx, unsigned PrintMethodIdx,
raw_ostream &O);
};
}
#endif