1 //=====-- PIC16TargetAsmInfo.h - PIC16 asm properties ---------*- C++ -*--====//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains the declaration of the PIC16TargetAsmInfo class.
12 //===----------------------------------------------------------------------===//
14 #ifndef PIC16TARGETASMINFO_H
15 #define PIC16TARGETASMINFO_H
18 #include "llvm/Target/TargetAsmInfo.h"
20 #include "llvm/Module.h"
21 #define DataBankSize 80
24 // Forward declaration.
25 class PIC16TargetMachine;
28 // PIC16 Splits the global data into mulitple udata and idata sections.
29 // Each udata and idata section needs to contain a list of globals that
30 // they contain, in order to avoid scanning over all the global values
31 // again and printing only those that match the current section.
32 // Keeping values inside the sections make printing a section much easier.
34 const Section *S_; // Connection to actual Section.
35 unsigned Size; // Total size of the objects contained.
37 std::vector<const GlobalVariable*> Items;
39 PIC16Section (const Section *s) { S_ = s; Size = 0;
40 SectionPrinted = false;}
41 bool isPrinted() { return SectionPrinted ; }
42 void setPrintedStatus(bool status) { SectionPrinted = status ;}
45 struct PIC16TargetAsmInfo : public TargetAsmInfo {
46 std::string getSectionNameForSym(const std::string &Sym) const;
47 PIC16TargetAsmInfo(const PIC16TargetMachine &TM);
48 mutable std::vector<PIC16Section *> BSSSections;
49 mutable std::vector<PIC16Section *> IDATASections;
50 mutable std::vector<PIC16Section *> AutosSections;
51 mutable PIC16Section *ROSection;
52 mutable PIC16Section *ExternalVarDecls;
53 mutable PIC16Section *ExternalVarDefs;
54 virtual ~PIC16TargetAsmInfo();
57 const char *RomData8bitsDirective;
58 const char *RomData16bitsDirective;
59 const char *RomData32bitsDirective;
60 const char *getRomDirective(unsigned size) const;
61 virtual const char *getASDirective(unsigned size, unsigned AS) const;
62 const Section *getBSSSectionForGlobal(const GlobalVariable *GV) const;
63 const Section *getIDATASectionForGlobal(const GlobalVariable *GV) const;
64 const Section *getSectionForAuto(const GlobalVariable *GV) const;
65 virtual const Section *SelectSectionForGlobal(const GlobalValue *GV) const;
69 void SetSectionForGVs(Module &M);
70 std::vector<PIC16Section *> getBSSSections() const {
73 std::vector<PIC16Section *> getIDATASections() const {
76 std::vector<PIC16Section *> getAutosSections() const {