1349cc55cSDimitry Andric //===-- CSKYAsmPrinter.h - CSKY implementation of AsmPrinter ----*- C++ -*-===// 2349cc55cSDimitry Andric // 3349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6349cc55cSDimitry Andric // 7349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 8349cc55cSDimitry Andric 9349cc55cSDimitry Andric #ifndef LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 10349cc55cSDimitry Andric #define LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 11349cc55cSDimitry Andric 12349cc55cSDimitry Andric #include "CSKYMCInstLower.h" 13349cc55cSDimitry Andric #include "CSKYSubtarget.h" 14349cc55cSDimitry Andric #include "llvm/CodeGen/AsmPrinter.h" 15349cc55cSDimitry Andric #include "llvm/MC/MCDirectives.h" 16349cc55cSDimitry Andric 17349cc55cSDimitry Andric namespace llvm { 18349cc55cSDimitry Andric class LLVM_LIBRARY_VISIBILITY CSKYAsmPrinter : public AsmPrinter { 19349cc55cSDimitry Andric CSKYMCInstLower MCInstLowering; 20349cc55cSDimitry Andric 21349cc55cSDimitry Andric const CSKYSubtarget *Subtarget; 22349cc55cSDimitry Andric 23*04eeddc0SDimitry Andric bool InConstantPool = false; 24*04eeddc0SDimitry Andric 25*04eeddc0SDimitry Andric /// Keep a pointer to constantpool entries of the current 26*04eeddc0SDimitry Andric /// MachineFunction. 27*04eeddc0SDimitry Andric MachineConstantPool *MCP; 28*04eeddc0SDimitry Andric 29*04eeddc0SDimitry Andric void expandTLSLA(const MachineInstr *MI); 30*04eeddc0SDimitry Andric void emitCustomConstantPool(const MachineInstr *MI); 31*04eeddc0SDimitry Andric 32349cc55cSDimitry Andric public: 33349cc55cSDimitry Andric explicit CSKYAsmPrinter(TargetMachine &TM, 34349cc55cSDimitry Andric std::unique_ptr<MCStreamer> Streamer); 35349cc55cSDimitry Andric 36349cc55cSDimitry Andric StringRef getPassName() const override { return "CSKY Assembly Printer"; } 37349cc55cSDimitry Andric 380eae32dcSDimitry Andric void EmitToStreamer(MCStreamer &S, const MCInst &Inst); 390eae32dcSDimitry Andric 40349cc55cSDimitry Andric /// tblgen'erated driver function for lowering simple MI->MC 41349cc55cSDimitry Andric /// pseudo instructions. 42349cc55cSDimitry Andric bool emitPseudoExpansionLowering(MCStreamer &OutStreamer, 43349cc55cSDimitry Andric const MachineInstr *MI); 44349cc55cSDimitry Andric 45*04eeddc0SDimitry Andric void emitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) override; 46*04eeddc0SDimitry Andric 47*04eeddc0SDimitry Andric void emitFunctionBodyEnd() override; 48*04eeddc0SDimitry Andric 49349cc55cSDimitry Andric void emitInstruction(const MachineInstr *MI) override; 50349cc55cSDimitry Andric 51349cc55cSDimitry Andric bool runOnMachineFunction(MachineFunction &MF) override; 52*04eeddc0SDimitry Andric 53*04eeddc0SDimitry Andric // we emit constant pools customly! 54*04eeddc0SDimitry Andric void emitConstantPool() override{}; 55349cc55cSDimitry Andric }; 56349cc55cSDimitry Andric } // end namespace llvm 57349cc55cSDimitry Andric 58349cc55cSDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 59