xref: /llvm-project/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchInstPrinter.h (revision eeb987f6f35aa614ed7a555be33d67c5cb1be230)
133388ae8SLu Weining //===-- LoongArchInstPrinter.h - Convert LoongArch MCInst to asm syntax ---===//
233388ae8SLu Weining //
333388ae8SLu Weining // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
433388ae8SLu Weining // See https://llvm.org/LICENSE.txt for license information.
533388ae8SLu Weining // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
633388ae8SLu Weining //
733388ae8SLu Weining //===----------------------------------------------------------------------===//
833388ae8SLu Weining //
933388ae8SLu Weining // This class prints a LoongArch MCInst to a .s file.
1033388ae8SLu Weining //
1133388ae8SLu Weining //===----------------------------------------------------------------------===//
1233388ae8SLu Weining 
1333388ae8SLu Weining #ifndef LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHINSTPRINTER_H
1433388ae8SLu Weining #define LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHINSTPRINTER_H
1533388ae8SLu Weining 
1633388ae8SLu Weining #include "MCTargetDesc/LoongArchMCTargetDesc.h"
1733388ae8SLu Weining #include "llvm/MC/MCInstPrinter.h"
1833388ae8SLu Weining 
1933388ae8SLu Weining namespace llvm {
2033388ae8SLu Weining 
2133388ae8SLu Weining class LoongArchInstPrinter : public MCInstPrinter {
2233388ae8SLu Weining public:
2333388ae8SLu Weining   LoongArchInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
2433388ae8SLu Weining                        const MCRegisterInfo &MRI)
2533388ae8SLu Weining       : MCInstPrinter(MAI, MII, MRI) {}
2633388ae8SLu Weining 
277fa0a3c9Swanglei   bool applyTargetSpecificCLOption(StringRef Opt) override;
287fa0a3c9Swanglei 
2933388ae8SLu Weining   void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
3033388ae8SLu Weining                  const MCSubtargetInfo &STI, raw_ostream &O) override;
31facdae62SFangrui Song   void printRegName(raw_ostream &O, MCRegister Reg) override;
32899226adSwanglei   void printAtomicMemOp(const MCInst *MI, unsigned OpNo,
33899226adSwanglei                         const MCSubtargetInfo &STI, raw_ostream &O);
3433388ae8SLu Weining 
3533388ae8SLu Weining   // Autogenerated by tblgen.
36*eeb987f6SSergei Barannikov   std::pair<const char *, uint64_t>
37*eeb987f6SSergei Barannikov   getMnemonic(const MCInst &MI) const override;
3833388ae8SLu Weining   void printInstruction(const MCInst *MI, uint64_t Address,
3933388ae8SLu Weining                         const MCSubtargetInfo &STI, raw_ostream &O);
4033388ae8SLu Weining   bool printAliasInstr(const MCInst *MI, uint64_t Address,
4133388ae8SLu Weining                        const MCSubtargetInfo &STI, raw_ostream &O);
4233388ae8SLu Weining   void printCustomAliasOperand(const MCInst *MI, uint64_t Address,
4333388ae8SLu Weining                                unsigned OpIdx, unsigned PrintMethodIdx,
4433388ae8SLu Weining                                const MCSubtargetInfo &STI, raw_ostream &O);
456ae84d66SSergei Barannikov   static const char *getRegisterName(MCRegister Reg);
466ae84d66SSergei Barannikov   static const char *getRegisterName(MCRegister Reg, unsigned AltIdx);
4733388ae8SLu Weining 
4833388ae8SLu Weining private:
4933388ae8SLu Weining   void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
5033388ae8SLu Weining                     raw_ostream &O);
5133388ae8SLu Weining };
52904a87acSWeining Lu } // end namespace llvm
5333388ae8SLu Weining 
5433388ae8SLu Weining #endif // LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHINSTPRINTER_H
55