12758a013SAndrei Safronov //===- XtensaInstPrinter.h - Convert Xtensa MCInst to asm syntax -*- C++ -*-==// 22758a013SAndrei Safronov // 32758a013SAndrei Safronov // The LLVM Compiler Infrastructure 42758a013SAndrei Safronov // 52758a013SAndrei Safronov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 62758a013SAndrei Safronov // See https://llvm.org/LICENSE.txt for license information. 72758a013SAndrei Safronov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 82758a013SAndrei Safronov // 92758a013SAndrei Safronov //===----------------------------------------------------------------------===// 102758a013SAndrei Safronov // 112758a013SAndrei Safronov // This class prints an Xtensa MCInst to a .s file. 122758a013SAndrei Safronov // 132758a013SAndrei Safronov //===----------------------------------------------------------------------===// 142758a013SAndrei Safronov 152758a013SAndrei Safronov #ifndef LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAINSTPRINTER_H 162758a013SAndrei Safronov #define LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAINSTPRINTER_H 172758a013SAndrei Safronov 182758a013SAndrei Safronov #include "llvm/MC/MCInstPrinter.h" 192758a013SAndrei Safronov #include "llvm/Support/Compiler.h" 202758a013SAndrei Safronov 212758a013SAndrei Safronov namespace llvm { 222758a013SAndrei Safronov class MCOperand; 232758a013SAndrei Safronov 242758a013SAndrei Safronov class XtensaInstPrinter : public MCInstPrinter { 252758a013SAndrei Safronov public: 262758a013SAndrei Safronov XtensaInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 272758a013SAndrei Safronov const MCRegisterInfo &MRI) 282758a013SAndrei Safronov : MCInstPrinter(MAI, MII, MRI) {} 292758a013SAndrei Safronov 302758a013SAndrei Safronov // Automatically generated by tblgen. 31eeb987f6SSergei Barannikov std::pair<const char *, uint64_t> 32eeb987f6SSergei Barannikov getMnemonic(const MCInst &MI) const override; 332758a013SAndrei Safronov void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); 346ae84d66SSergei Barannikov static const char *getRegisterName(MCRegister Reg); 352758a013SAndrei Safronov 362758a013SAndrei Safronov // Print the given operand. 372758a013SAndrei Safronov static void printOperand(const MCOperand &MO, raw_ostream &O); 382758a013SAndrei Safronov 392758a013SAndrei Safronov // Override MCInstPrinter. 40facdae62SFangrui Song void printRegName(raw_ostream &O, MCRegister Reg) override; 412758a013SAndrei Safronov void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, 422758a013SAndrei Safronov const MCSubtargetInfo &STI, raw_ostream &O) override; 432758a013SAndrei Safronov 442758a013SAndrei Safronov private: 452758a013SAndrei Safronov // Print various types of operand. 462758a013SAndrei Safronov void printOperand(const MCInst *MI, int OpNum, raw_ostream &O); 474e0c1d98SAndrei Safronov void printMemOperand(const MCInst *MI, int OpNUm, raw_ostream &O); 48ff25800dSAndrei Safronov void printBranchTarget(const MCInst *MI, int OpNum, raw_ostream &O); 49ff25800dSAndrei Safronov void printJumpTarget(const MCInst *MI, int OpNum, raw_ostream &O); 50ff25800dSAndrei Safronov void printCallOperand(const MCInst *MI, int OpNum, raw_ostream &O); 51ff25800dSAndrei Safronov void printL32RTarget(const MCInst *MI, int OpNum, raw_ostream &O); 522758a013SAndrei Safronov 532758a013SAndrei Safronov void printImm8_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 542758a013SAndrei Safronov void printImm8_sh8_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 554e0c1d98SAndrei Safronov void printImm12_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 564e0c1d98SAndrei Safronov void printImm12m_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 574e0c1d98SAndrei Safronov void printUimm4_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 584e0c1d98SAndrei Safronov void printUimm5_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 594e0c1d98SAndrei Safronov void printShimm1_31_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 604e0c1d98SAndrei Safronov void printImm1_16_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 61*c6967efeSAndrei Safronov void printImm1n_15_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 62*c6967efeSAndrei Safronov void printImm32n_95_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 634e0c1d98SAndrei Safronov void printOffset8m8_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 644e0c1d98SAndrei Safronov void printOffset8m16_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 654e0c1d98SAndrei Safronov void printOffset8m32_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 664e0c1d98SAndrei Safronov void printOffset4m32_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 67ff25800dSAndrei Safronov void printB4const_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 68ff25800dSAndrei Safronov void printB4constu_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 692758a013SAndrei Safronov }; 702758a013SAndrei Safronov } // end namespace llvm 712758a013SAndrei Safronov 722758a013SAndrei Safronov #endif /* LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAINSTPRINTER_H */ 73