1 //===- XtensaInstPrinter.h - Convert Xtensa MCInst to asm syntax -*- C++ -*-==// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 6 // See https://llvm.org/LICENSE.txt for license information. 7 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 8 // 9 //===----------------------------------------------------------------------===// 10 // 11 // This class prints an Xtensa MCInst to a .s file. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAINSTPRINTER_H 16 #define LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAINSTPRINTER_H 17 18 #include "llvm/MC/MCInstPrinter.h" 19 #include "llvm/Support/Compiler.h" 20 21 namespace llvm { 22 class MCOperand; 23 24 class XtensaInstPrinter : public MCInstPrinter { 25 public: 26 XtensaInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 27 const MCRegisterInfo &MRI) 28 : MCInstPrinter(MAI, MII, MRI) {} 29 30 // Automatically generated by tblgen. 31 std::pair<const char *, uint64_t> 32 getMnemonic(const MCInst &MI) const override; 33 void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); 34 static const char *getRegisterName(MCRegister Reg); 35 36 // Print the given operand. 37 static void printOperand(const MCOperand &MO, raw_ostream &O); 38 39 // Override MCInstPrinter. 40 void printRegName(raw_ostream &O, MCRegister Reg) override; 41 void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, 42 const MCSubtargetInfo &STI, raw_ostream &O) override; 43 44 private: 45 // Print various types of operand. 46 void printOperand(const MCInst *MI, int OpNum, raw_ostream &O); 47 void printMemOperand(const MCInst *MI, int OpNUm, raw_ostream &O); 48 void printBranchTarget(const MCInst *MI, int OpNum, raw_ostream &O); 49 void printJumpTarget(const MCInst *MI, int OpNum, raw_ostream &O); 50 void printCallOperand(const MCInst *MI, int OpNum, raw_ostream &O); 51 void printL32RTarget(const MCInst *MI, int OpNum, raw_ostream &O); 52 53 void printImm8_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 54 void printImm8_sh8_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 55 void printImm12_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 56 void printImm12m_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 57 void printUimm4_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 58 void printUimm5_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 59 void printShimm1_31_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 60 void printImm1_16_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 61 void printImm1n_15_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 62 void printImm32n_95_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 63 void printOffset8m8_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 64 void printOffset8m16_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 65 void printOffset8m32_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 66 void printOffset4m32_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 67 void printB4const_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 68 void printB4constu_AsmOperand(const MCInst *MI, int OpNum, raw_ostream &O); 69 }; 70 } // end namespace llvm 71 72 #endif /* LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAINSTPRINTER_H */ 73