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 2181ad6265SDimitry Andric const MCSubtargetInfo *Subtarget; 2281ad6265SDimitry Andric const TargetInstrInfo *TII; 23349cc55cSDimitry Andric 2404eeddc0SDimitry Andric bool InConstantPool = false; 2504eeddc0SDimitry Andric 2604eeddc0SDimitry Andric /// Keep a pointer to constantpool entries of the current 2704eeddc0SDimitry Andric /// MachineFunction. 2804eeddc0SDimitry Andric MachineConstantPool *MCP; 2904eeddc0SDimitry Andric 3004eeddc0SDimitry Andric void expandTLSLA(const MachineInstr *MI); 3104eeddc0SDimitry Andric void emitCustomConstantPool(const MachineInstr *MI); 3281ad6265SDimitry Andric void emitAttributes(); 3304eeddc0SDimitry Andric 34349cc55cSDimitry Andric public: 35349cc55cSDimitry Andric explicit CSKYAsmPrinter(TargetMachine &TM, 36349cc55cSDimitry Andric std::unique_ptr<MCStreamer> Streamer); 37349cc55cSDimitry Andric getPassName()38349cc55cSDimitry Andric StringRef getPassName() const override { return "CSKY Assembly Printer"; } 39349cc55cSDimitry Andric 400eae32dcSDimitry Andric void EmitToStreamer(MCStreamer &S, const MCInst &Inst); 410eae32dcSDimitry Andric 42349cc55cSDimitry Andric /// tblgen'erated driver function for lowering simple MI->MC 43349cc55cSDimitry Andric /// pseudo instructions. 44349cc55cSDimitry Andric bool emitPseudoExpansionLowering(MCStreamer &OutStreamer, 45349cc55cSDimitry Andric const MachineInstr *MI); 46349cc55cSDimitry Andric 4704eeddc0SDimitry Andric void emitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) override; 4804eeddc0SDimitry Andric 4904eeddc0SDimitry Andric void emitFunctionBodyEnd() override; 5004eeddc0SDimitry Andric 5181ad6265SDimitry Andric void emitStartOfAsmFile(Module &M) override; 5281ad6265SDimitry Andric 5381ad6265SDimitry Andric void emitEndOfAsmFile(Module &M) override; 5481ad6265SDimitry Andric 55349cc55cSDimitry Andric void emitInstruction(const MachineInstr *MI) override; 56349cc55cSDimitry Andric 57349cc55cSDimitry Andric bool runOnMachineFunction(MachineFunction &MF) override; 5804eeddc0SDimitry Andric 5904eeddc0SDimitry Andric // we emit constant pools customly! emitConstantPool()60*06c3fb27SDimitry Andric void emitConstantPool() override {} 6181ad6265SDimitry Andric 6281ad6265SDimitry Andric bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 6381ad6265SDimitry Andric const char *ExtraCode, raw_ostream &OS) override; 6481ad6265SDimitry Andric 6581ad6265SDimitry Andric bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 6681ad6265SDimitry Andric const char *ExtraCode, raw_ostream &OS) override; 67349cc55cSDimitry Andric }; 68349cc55cSDimitry Andric } // end namespace llvm 69349cc55cSDimitry Andric 70349cc55cSDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 71