From: MaartenBrock Date: Tue, 4 Sep 2007 15:46:07 +0000 (+0000) Subject: * src/pic16/glue.c, X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=df0c2dc7b4500ed3ca07ed80663f2c9ce25c3f79;p=fw%2Fsdcc * src/pic16/glue.c, * src/pic/glue.c, * src/SDCCmem.h: removed maxRegBank * src/SDCCmem.c (allocVariables): removed maxRegBank and moved setting RegBankUsed[] to checkFunction() in SDCCsymt.c to fix bug 1759839 * src/SDCCsymt.c (checkFunction): set RegBankUsed[] here git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4909 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index bf0217c5..83c5d08f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2007-09-04 Maarten Brock + * src/pic16/glue.c, + * src/pic/glue.c, + * src/SDCCmem.h: removed maxRegBank + * src/SDCCmem.c (allocVariables): removed maxRegBank and moved setting + RegBankUsed[] to checkFunction() in SDCCsymt.c to fix bug 1759839 + * src/SDCCsymt.c (checkFunction): set RegBankUsed[] here * src/mcs51/peep.c (isCallerSaveFunc, termScanAtFunc): changed function name and behaviour to handle banked functions (scan4op): and use it to fix bug 1786213 diff --git a/src/SDCCmem.c b/src/SDCCmem.c index 183c572e..5bc6bb92 100644 --- a/src/SDCCmem.c +++ b/src/SDCCmem.c @@ -33,7 +33,6 @@ memmap *home = NULL; /* Unswitchable code bank */ symbols in a single overlay */ set *ovrSetSets = NULL; -int maxRegBank = 0; int fatalError = 0; /* fatal error flag */ /*-----------------------------------------------------------------*/ @@ -915,9 +914,9 @@ allocVariables (symbol * symChain) SPEC_EXTR (sym->etype) = 0; addSym (TypedefTab, sym, sym->name, sym->level, sym->block, 0); - continue; /* go to the next one */ + continue; /* go to the next one */ } - /* make sure it already exist */ + /* make sure it already exists */ csym = findSymWithLevel (SymbolTab, sym); if (!csym || (csym && csym->level != sym->level)) csym = sym; @@ -925,21 +924,15 @@ allocVariables (symbol * symChain) /* check the declaration */ checkDecl (csym,0); - /* if this is a function or a pointer to function */ - /* then args processing */ + /* if this is a function or a pointer to a */ + /* function then do args processing */ if (funcInChain (csym->type)) { processFuncArgs (csym); - - /* if register bank specified then update maxRegBank */ - if (maxRegBank < FUNC_REGBANK (csym->type)) - maxRegBank = FUNC_REGBANK (csym->type); - /*JCF: Mark the register bank as used*/ - RegBankUsed[FUNC_REGBANK(csym->type)]=1; } /* if this is a extern variable then change the */ - /* level to zero temporarily */ + /* level to zero temporarily */ if (IS_EXTERN (csym->etype) || IS_FUNC (csym->type)) { saveLevel = csym->level; @@ -951,7 +944,7 @@ allocVariables (symbol * symChain) if (IS_LITERAL (sym->etype)) continue; - /* generate the actual declaration */ + /* generate the actual declaration */ if (csym->level) { allocLocal (csym); diff --git a/src/SDCCmem.h b/src/SDCCmem.h index c97e1913..c0f0633d 100644 --- a/src/SDCCmem.h +++ b/src/SDCCmem.h @@ -13,20 +13,20 @@ struct eBBlock; typedef struct memmap { - unsigned char pageno; /* page no for this variable */ - const char *sname; /* character prefix for map */ - char dbName; /* debugger address space name */ - int ptrType; /* pointer Type for this space */ - int slbl; /* label counter for space */ - unsigned sloc; /* starting location */ - unsigned fmap:1; /* 1 = 16bit addressing reqd */ - unsigned paged:1; /* this is a paged mem space */ - unsigned direct:1; /* 1= indirect access only */ - unsigned bitsp:1; /* 1 = bit addressable space */ - unsigned codesp:1; /* 1 = code space */ - unsigned regsp:1; /* 1= sfr space */ - struct dbuf_s oBuf; /* object buffer associated */ - struct set *syms; /* symbols defined in this segment */ + unsigned char pageno; /* page no for this variable */ + const char *sname; /* character prefix for map */ + char dbName; /* debugger address space name */ + int ptrType; /* pointer Type for this space */ + int slbl; /* label counter for space */ + unsigned sloc; /* starting location */ + unsigned fmap:1; /* 1 = 16bit addressing reqd */ + unsigned paged:1; /* this is a paged mem space */ + unsigned direct:1; /* 1 = indirect access only */ + unsigned bitsp:1; /* 1 = bit addressable space */ + unsigned codesp:1; /* 1 = code space */ + unsigned regsp:1; /* 1 = sfr space */ + struct dbuf_s oBuf; /* object buffer associated */ + struct set *syms; /* symbols defined in this segment */ } memmap; @@ -45,7 +45,7 @@ extern FILE *junkFile; #define BIT_NAME port->mem.bit_name #define REG_NAME port->mem.reg_name #define STATIC_NAME port->mem.static_name -#define HOME_NAME port->mem.home_name +#define HOME_NAME port->mem.home_name #define OVERLAY_NAME port->mem.overlay_name #define CONST_NAME port->mem.const_name #define CABS_NAME port->mem.cabs_name @@ -53,43 +53,41 @@ extern FILE *junkFile; #define IABS_NAME port->mem.iabs_name /* forward definition for variables */ -extern memmap *xstack; /* xternal stack data */ -extern memmap *istack; /* internal stack */ -extern memmap *code; /* code segment */ -extern memmap *data; /* internal data upto 128 */ -extern memmap *pdata; /* paged external data upto 256 */ -extern memmap *xdata; /* external data */ +extern memmap *xstack; /* xternal stack data */ +extern memmap *istack; /* internal stack */ +extern memmap *code; /* code segment */ +extern memmap *data; /* internal data upto 128 */ +extern memmap *pdata; /* paged external data upto 256 */ +extern memmap *xdata; /* external data */ extern memmap *xidata; /* the initialized xdata */ extern memmap *xinit; /* the initializers for xidata */ -extern memmap *idata; /* internal data upto 256 */ -extern memmap *bit; /* bit addressable space */ -extern memmap *statsg; /* static code segment */ -extern memmap *c_abs; /* constant absolute data */ -extern memmap *x_abs; /* absolute xdata/pdata */ -extern memmap *i_abs; /* absolute idata upto 256 */ -extern memmap *d_abs; /* absolute data upto 128 */ -extern memmap *sfr; /* register space */ -extern memmap *sfrbit; /* sfr bit space */ -extern memmap *reg; /* register space */ -extern memmap *generic; /* unknown */ -extern memmap *overlay; /* the overlay segment */ -extern memmap *eeprom; /* eeprom space */ -extern memmap *home; /* Non-banked home space */ +extern memmap *idata; /* internal data upto 256 */ +extern memmap *bit; /* bit addressable space */ +extern memmap *statsg; /* static code segment */ +extern memmap *c_abs; /* constant absolute data */ +extern memmap *x_abs; /* absolute xdata/pdata */ +extern memmap *i_abs; /* absolute idata upto 256 */ +extern memmap *d_abs; /* absolute data upto 128 */ +extern memmap *sfr; /* register space */ +extern memmap *sfrbit; /* sfr bit space */ +extern memmap *reg; /* register space */ +extern memmap *generic; /* unknown */ +extern memmap *overlay; /* the overlay segment */ +extern memmap *eeprom; /* eeprom space */ +extern memmap *home; /* Non-banked home space */ extern int fatalError; extern struct set *ovrSetSets; -extern int maxRegBank; - /* easy access macros */ -#define IN_BITSPACE(map) (map && map->bitsp) +#define IN_BITSPACE(map) (map && map->bitsp) #define IN_STACK(x) (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack )) #define IN_FARSPACE(map) (map && map->fmap) #define IN_DIRSPACE(map) (map && map->direct) #define IN_PAGEDSPACE(map) (map && map->paged ) #define IN_CODESPACE(map) (map && map->codesp) -#define IN_REGSP(map) (map && map->regsp) +#define IN_REGSP(map) (map && map->regsp) #define PTR_TYPE(map) (map ? (map->ptrType ? map->ptrType : POINTER)\ : port->unqualified_pointer) diff --git a/src/SDCCsymt.c b/src/SDCCsymt.c index e686c296..1565d695 100644 --- a/src/SDCCsymt.c +++ b/src/SDCCsymt.c @@ -2356,8 +2356,8 @@ inCalleeSaveList(char *s) } /*-----------------------------------------------------------------*/ -/* aggregateToPointer: change an agggregate type function */ -/* argument to a pointer to that type. */ +/* aggregateToPointer: change an aggregate type function */ +/* argument to a pointer to that type. */ /*-----------------------------------------------------------------*/ value * aggregateToPointer (value * val) @@ -2486,7 +2486,6 @@ checkFunction (symbol * sym, symbol *csym) werror (E_SHADOWREGS_NO_ISR, sym->name); } - for (argCnt=1, acargs = FUNC_ARGS(sym->type); acargs; acargs=acargs->next, argCnt++) { @@ -2539,6 +2538,9 @@ checkFunction (symbol * sym, symbol *csym) werror (E_PREV_DEF_CONFLICT, csym->name, "using"); } + /*JCF: Mark the register bank as used*/ + RegBankUsed[FUNC_REGBANK (sym->type)] = 1; + if (IFFUNC_ISNAKED (csym->type) != IFFUNC_ISNAKED (sym->type)) { werror (E_PREV_DEF_CONFLICT, csym->name, "_naked"); diff --git a/src/pic/glue.c b/src/pic/glue.c index b3d2f4da..5a92bcef 100644 --- a/src/pic/glue.c +++ b/src/pic/glue.c @@ -48,7 +48,6 @@ extern int noAlloc; extern set *publics; extern set *externs; extern unsigned maxInterrupts; -extern int maxRegBank; extern symbol *mainf; extern char *VersionString; extern struct dbuf_s *codeOutBuf; diff --git a/src/pic16/glue.c b/src/pic16/glue.c index 158aa8a5..b7cf7b08 100644 --- a/src/pic16/glue.c +++ b/src/pic16/glue.c @@ -40,7 +40,6 @@ extern int noAlloc; extern set *publics; extern set *externs; extern unsigned maxInterrupts; -extern int maxRegBank; extern symbol *mainf; extern char *VersionString; extern struct dbuf_s *codeOutBuf;