cleanup; moved extern's from .c to .h files for double check
[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     unsigned char  pageno;    /* page no for this variable  */
14     const char     *sname;    /*   character prefix for map */
15     char     dbName ;         /* debugger address space name */
16     int      ptrType;         /* pointer Type for this space */
17     int      slbl ;           /* label counter for space    */
18     unsigned sloc    ;        /* starting location          */
19     unsigned fmap : 1;        /* 1 = 16bit addressing reqd  */
20     unsigned paged : 1;       /* this is a paged mem space  */
21     unsigned direct: 1;       /* 1= indirect access only    */
22     unsigned bitsp: 1;        /* 1 = bit addressable space  */
23     unsigned codesp:1;        /* 1 = code space             */
24     unsigned regsp: 1;        /* 1= sfr space               */
25     FILE    *oFile   ;        /* object file associated     */
26     struct  set *syms;        /* symbols defined in this segment */
27 } memmap ;
28
29 extern FILE     *junkFile ;     
30
31 /* memory map prefixes  MOF added the DATA,CODE,XDATA,BIT */
32 #define  XSTACK_NAME   port->mem.xstack_name
33 #define  ISTACK_NAME   port->mem.istack_name
34 #define  CODE_NAME     port->mem.code_name
35 #define  DATA_NAME     port->mem.data_name
36 #define  IDATA_NAME    port->mem.idata_name
37 #define  XDATA_NAME    port->mem.xdata_name
38 #define  BIT_NAME      port->mem.bit_name
39 #define  REG_NAME      port->mem.reg_name
40 #define  STATIC_NAME   port->mem.static_name
41 #define  HOME_NAME     port->mem.home_name
42  
43 /* forward definition for variables */
44 extern   memmap  *xstack;    /* xternal stack data         */
45 extern   memmap  *istack;    /* internal stack             */
46 extern   memmap  *code  ;    /* code segment               */
47 extern   memmap  *data  ;    /* internal data upto 128     */
48 extern   memmap  *xdata ;    /* external data              */
49 extern   memmap  *idata ;    /* internal data upto 256     */
50 extern   memmap  *bit   ;    /* bit addressable space      */
51 extern   memmap  *statsg;    /* static code segment        */
52 extern   memmap  *sfr   ;    /* register space             */
53 extern   memmap  *sfrbit;    /* sfr bit space              */
54 extern   memmap  *reg   ;    /* register space             */
55 extern   memmap  *_const;    /* constant segment           */
56 extern   memmap  *generic;   /* unknown                    */
57 extern   memmap  *overlay;   /* the overlay segment        */
58 extern   memmap  *eeprom;    /* eepromp space              */
59 extern   memmap  *eeprom;    /* eepromp space              */
60 extern   memmap  *home;      /* Non-banked home space      */
61
62 extern int fatalError;
63
64 extern   struct  set     *ovrSetSets;
65
66 extern int maxRegBank;
67
68 /* easy access macros */
69 #define IN_BITSPACE(map)        (map && map->bitsp)
70 #define IN_STACK(x)  (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
71 #define IN_FARSPACE(map)        (map && map->fmap)
72 #define IN_DIRSPACE(map)        (map && map->direct)
73 #define IN_PAGEDSPACE(map)      (map && map->paged )
74 #define IN_CODESPACE(map)       (map && map->codesp)
75 #define IN_REGSP(map)           (map && map->regsp)
76 #define PTR_TYPE(map)           (map ? (map->ptrType ? map->ptrType : POINTER)\
77                                      : GPOINTER)
78
79 /* forward decls for functions    */
80 memmap     *allocMap       (char,char,char,char,char,char,unsigned, const char *,char,int );
81 void        initMem        (                                );
82 void        allocGlobal    (struct symbol  *                );
83 void        allocLocal     (struct symbol  *                );
84 void        allocParms     (struct value   *                );
85 void        deallocParms   (struct value   *                );
86 void        deallocLocal   (struct symbol  *                );
87 int         allocVariables (struct symbol  *                );
88 void        overlay2Set    (                                );
89 void        overlay2data   (                                );
90 void        redoStackOffsets(                               );
91 void        printAllocInfo (struct symbol *, FILE *         );
92 void        doOverlays     (struct eBBlock **, int count    );
93 #endif