* as/mcs51/asexpr.c (expr): disabled warning "not in .flat24 mode",
[fw/sdcc] / src / SDCCmem.h
1 /*-----------------------------------------------------------------*/
2 /* SDCCmem.h - header file for memory management                    */
3 /*-----------------------------------------------------------------*/
4
5 #ifndef SDCCMEM_H
6 #define SDCCMEM_H
7
8 struct set;
9 struct value;
10 struct eBBlock;
11
12 typedef struct memmap
13   {
14     unsigned char pageno;       /* page no for this variable  */
15     const char *sname;          /*   character prefix for map */
16     char dbName;                /* debugger address space name */
17     int ptrType;                /* pointer Type for this space */
18     int slbl;                   /* label counter for space    */
19     unsigned sloc;              /* starting location          */
20     unsigned fmap:1;            /* 1 = 16bit addressing reqd  */
21     unsigned paged:1;           /* this is a paged mem space  */
22     unsigned direct:1;          /* 1= indirect access only    */
23     unsigned bitsp:1;           /* 1 = bit addressable space  */
24     unsigned codesp:1;          /* 1 = code space             */
25     unsigned regsp:1;           /* 1= sfr space               */
26     FILE *oFile;                /* object file associated     */
27     struct set *syms;           /* symbols defined in this segment */
28   }
29 memmap;
30
31 extern FILE *junkFile;
32
33 /* memory map prefixes  MOF added the DATA,CODE,XDATA,BIT */
34 #define  XSTACK_NAME   port->mem.xstack_name
35 #define  ISTACK_NAME   port->mem.istack_name
36 #define  CODE_NAME     port->mem.code_name
37 #define  DATA_NAME     port->mem.data_name
38 #define  IDATA_NAME    port->mem.idata_name
39 #define  PDATA_NAME    port->mem.pdata_name
40 #define  XDATA_NAME    port->mem.xdata_name
41 #define  XIDATA_NAME   port->mem.xidata_name
42 #define  XINIT_NAME    port->mem.xinit_name
43 #define  BIT_NAME      port->mem.bit_name
44 #define  REG_NAME      port->mem.reg_name
45 #define  STATIC_NAME   port->mem.static_name
46 #define  HOME_NAME     port->mem.home_name
47 #define  OVERLAY_NAME  port->mem.overlay_name
48 #define  CONST_NAME    port->mem.const_name
49
50 /* forward definition for variables */
51 extern memmap *xstack;          /* xternal stack data           */
52 extern memmap *istack;          /* internal stack               */
53 extern memmap *code;            /* code segment                 */
54 extern memmap *data;            /* internal data upto 128       */
55 extern memmap *pdata;           /* paged external data upto 256 */
56 extern memmap *xdata;           /* external data                */
57 extern memmap *xidata;          /* the initialized xdata        */
58 extern memmap *xinit;           /* the initializers for xidata  */
59 extern memmap *idata;           /* internal data upto 256       */
60 extern memmap *bit;             /* bit addressable space        */
61 extern memmap *statsg;          /* static code segment          */
62 extern memmap *sfr;             /* register space               */
63 extern memmap *sfrbit;          /* sfr bit space                */
64 extern memmap *reg;             /* register space               */
65 extern memmap *generic;         /* unknown                      */
66 extern memmap *overlay;         /* the overlay segment          */
67 extern memmap *eeprom;          /* eepromp space                */
68 extern memmap *eeprom;          /* eepromp space                */
69 extern memmap *home;            /* Non-banked home space        */
70
71 extern int fatalError;
72
73 extern struct set *ovrSetSets;
74
75 extern int maxRegBank;
76
77 /* easy access macros */
78 #define IN_BITSPACE(map)        (map && map->bitsp)
79 #define IN_STACK(x)  (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
80 #define IN_FARSPACE(map)        (map && map->fmap)
81 #define IN_DIRSPACE(map)        (map && map->direct)
82 #define IN_PAGEDSPACE(map)      (map && map->paged )
83 #define IN_CODESPACE(map)       (map && map->codesp)
84 #define IN_REGSP(map)           (map && map->regsp)
85 #define PTR_TYPE(map)           (map ? (map->ptrType ? map->ptrType : POINTER)\
86                                      : port->unqualified_pointer)
87
88 /* forward decls for functions    */
89 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
90 void initMem ();
91 void allocGlobal (struct symbol *);
92 void allocLocal (struct symbol *);
93 void allocParms (struct value *);
94 void deallocParms (struct value *);
95 void deallocLocal (struct symbol *);
96 int allocVariables (struct symbol *);
97 void overlay2Set ();
98 void overlay2data ();
99 void redoStackOffsets ();
100 void printAllocInfo (struct symbol *, FILE *);
101 void doOverlays (struct eBBlock **, int count);
102 void deleteFromSeg(struct symbol *);
103 #endif