xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/CSKY/CSKYAsmPrinter.h (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
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