1 //===-- CSKYAsmPrinter.h - CSKY implementation of AsmPrinter ----*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 10 #define LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 11 12 #include "CSKYMCInstLower.h" 13 #include "CSKYSubtarget.h" 14 #include "llvm/CodeGen/AsmPrinter.h" 15 #include "llvm/MC/MCDirectives.h" 16 17 namespace llvm { 18 class LLVM_LIBRARY_VISIBILITY CSKYAsmPrinter : public AsmPrinter { 19 CSKYMCInstLower MCInstLowering; 20 21 const MCSubtargetInfo *Subtarget; 22 const TargetInstrInfo *TII; 23 24 bool InConstantPool = false; 25 26 /// Keep a pointer to constantpool entries of the current 27 /// MachineFunction. 28 MachineConstantPool *MCP; 29 30 void expandTLSLA(const MachineInstr *MI); 31 void emitCustomConstantPool(const MachineInstr *MI); 32 void emitAttributes(); 33 34 public: 35 explicit CSKYAsmPrinter(TargetMachine &TM, 36 std::unique_ptr<MCStreamer> Streamer); 37 getPassName()38 StringRef getPassName() const override { return "CSKY Assembly Printer"; } 39 40 void EmitToStreamer(MCStreamer &S, const MCInst &Inst); 41 42 /// tblgen'erated driver function for lowering simple MI->MC 43 /// pseudo instructions. 44 bool emitPseudoExpansionLowering(MCStreamer &OutStreamer, 45 const MachineInstr *MI); 46 47 void emitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) override; 48 49 void emitFunctionBodyEnd() override; 50 51 void emitStartOfAsmFile(Module &M) override; 52 53 void emitEndOfAsmFile(Module &M) override; 54 55 void emitInstruction(const MachineInstr *MI) override; 56 57 bool runOnMachineFunction(MachineFunction &MF) override; 58 59 // we emit constant pools customly! emitConstantPool()60 void emitConstantPool() override {} 61 62 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 63 const char *ExtraCode, raw_ostream &OS) override; 64 65 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 66 const char *ExtraCode, raw_ostream &OS) override; 67 }; 68 } // end namespace llvm 69 70 #endif // LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H 71