diff --git a/lib/Target/PIC16/PIC16AsmPrinter.h b/lib/Target/PIC16/PIC16AsmPrinter.h new file mode 100644 index 00000000000..a2b501c8cf4 --- /dev/null +++ b/lib/Target/PIC16/PIC16AsmPrinter.h @@ -0,0 +1,62 @@ +//===-- PIC16AsmPrinter.h - PIC16 LLVM assembly writer ------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains a printer that converts from our internal representation +// of machine-dependent LLVM code to PIC16 assembly language. +// +//===----------------------------------------------------------------------===// + +#ifndef PIC16ASMPRINTER_H +#define PIC16ASMPRINTER_H + +#include "PIC16.h" +#include "PIC16TargetMachine.h" +#include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Target/TargetAsmInfo.h" +#include "llvm/Target/TargetMachine.h" + +namespace llvm { + struct VISIBILITY_HIDDEN PIC16AsmPrinter : public AsmPrinter { + PIC16AsmPrinter(raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T) + : AsmPrinter(O, TM, T) { + CurrentBankselLabelInBasicBlock = ""; + IsRomData = false; + } + private : + virtual const char *getPassName() const { + return "PIC16 Assembly Printer"; + } + + bool runOnMachineFunction(MachineFunction &F); + void printOperand(const MachineInstr *MI, int opNum); + void SwitchToUDataSection(const char *NewSection, + const GlobalValue *GV = NULL); + void SwitchToRomDataSection(const char *NewSection, + const GlobalValue *GV = NULL); + bool printInstruction(const MachineInstr *MI); // definition autogenerated. + bool printMachineInstruction(const MachineInstr *MI); + void EmitInitData (Module &M); + void EmitUnInitData (Module &M); + void EmitRomData (Module &M); + virtual void EmitConstantValueOnly(const Constant *CV); + void emitFunctionData(MachineFunction &MF); + void emitFunctionTempData(MachineFunction &MF); + + protected: + bool doInitialization(Module &M); + bool doFinalization(Module &M); + + private: + std::string CurrentBankselLabelInBasicBlock; + bool IsRomData; + }; +} // end of namespace + +#endif