PAGED - YES
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'A'
POINTER-TYPE - FPOINTER
*/
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'B'
POINTER-TYPE - POINTER
*/
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - YES
+ CODE-ACCESS - YES
DEBUG-NAME - 'C'
POINTER-TYPE - CPOINTER
*/
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - YES
+ CODE-ACCESS - YES
DEBUG-NAME - 'C'
POINTER-TYPE - CPOINTER
*/
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - YES
+ CODE-ACCESS - YES
DEBUG-NAME - 'D'
POINTER-TYPE - CPOINTER
*/
PAGED - NO
DIRECT-ACCESS - YES
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'E'
POINTER-TYPE - POINTER
*/
PAGED - NO
DIRECT-ACCESS - YES
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'E'
POINTER-TYPE - POINTER
*/
/* Xternal paged segment ;
SFRSPACE - NO
- FAR-SPACE - YES
+ FAR-SPACE - NO
PAGED - YES
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'P'
POINTER-TYPE - PPOINTER
*/
if (PDATA_NAME) {
- pdata = allocMap (0, 1, 1, 0, 0, 0, options.xstack_loc, PDATA_NAME, 'P', PPOINTER);
+ pdata = allocMap (0, 0, 1, 0, 0, 0, options.xstack_loc, PDATA_NAME, 'P', PPOINTER);
} else {
pdata = NULL;
}
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'F'
POINTER-TYPE - FPOINTER
*/
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'G'
POINTER-TYPE - IPOINTER
*/
idata=NULL;
}
- /* Static segment (code for variables );
+ /* Bit space ;
SFRSPACE - NO
FAR-SPACE - NO
PAGED - NO
DIRECT-ACCESS - YES
BIT-ACCESS - YES
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'H'
POINTER-TYPE - _NONE_
*/
PAGED - NO
DIRECT-ACCESS - YES
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'I'
POINTER-TYPE - _NONE_
*/
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - ' '
POINTER-TYPE - _NONE_
*/
PAGED - NO
DIRECT-ACCESS - YES
BIT-ACCESS - YES
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'J'
POINTER-TYPE - _NONE_
*/
sfrbit = allocMap (1, 0, 0, 1, 1, 0, 0, REG_NAME, 'J', 0);
- /* EEPROM bit space
+ /* EEPROM space
SFRSPACE - NO
FAR-SPACE - YES
PAGED - NO
DIRECT-ACCESS - NO
BIT-ACCESS - NO
- CODE-ACESS - NO
+ CODE-ACCESS - NO
DEBUG-NAME - 'K'
POINTER-TYPE - EEPPOINTER
*/
{
memmap *segment = SPEC_OCLS (sym->etype);
addSet (&segment->syms, sym);
+ if (segment == pdata)
+ sym->iaccess = 1;
}
/*-----------------------------------------------------------------*/
}
}
+/*-----------------------------------------------------------------*/
+/* allocDefault - assigns the output segment based on SCLASS */
+/*-----------------------------------------------------------------*/
+bool
+allocDefault (symbol * sym)
+{
+ switch (SPEC_SCLS (sym->etype))
+ {
+ case S_SFR:
+ SPEC_OCLS (sym->etype) = sfr;
+ break;
+ case S_SBIT:
+ SPEC_OCLS (sym->etype) = sfrbit;
+ break;
+ case S_CODE:
+ if (sym->_isparm)
+ return FALSE;
+ /* if code change to constant */
+ SPEC_OCLS (sym->etype) = statsg;
+ break;
+ case S_XDATA:
+ // should we move this to the initialized data segment?
+ if (port->genXINIT &&
+ sym->ival && (sym->level==0) && !SPEC_ABSA(sym->etype)) {
+ SPEC_OCLS(sym->etype) = xidata;
+ } else {
+ SPEC_OCLS (sym->etype) = xdata;
+ }
+ break;
+ case S_DATA:
+ SPEC_OCLS (sym->etype) = data;
+ break;
+ case S_IDATA:
+ SPEC_OCLS (sym->etype) = idata;
+ sym->iaccess = 1;
+ break;
+ case S_PDATA:
+ SPEC_OCLS (sym->etype) = pdata;
+ sym->iaccess = 1;
+ break;
+ case S_BIT:
+ SPEC_OCLS (sym->etype) = bit;
+ break;
+ case S_EEPROM:
+ SPEC_OCLS (sym->etype) = eeprom;
+ break;
+ default:
+ return FALSE;
+ }
+ allocIntoSeg (sym);
+ return TRUE;
+}
/*-----------------------------------------------------------------*/
/* allocGlobal - assigns the output segment to a global var */
return;
}
- /* if this is a SFR or SBIT */
- if (SPEC_SCLS (sym->etype) == S_SFR ||
- SPEC_SCLS (sym->etype) == S_SBIT)
- {
-
- SPEC_OCLS (sym->etype) =
- (SPEC_SCLS (sym->etype) == S_SFR ? sfr : sfrbit);
-
- allocIntoSeg (sym);
- return;
- }
-
/* if this is a bit variable and no storage class */
- if (SPEC_NOUN (sym->etype) == V_BIT
- && SPEC_SCLS (sym->etype) == S_BIT)
+ if (IS_SPEC(sym->type) && SPEC_NOUN (sym->type) == V_BIT)
+ /*&& SPEC_SCLS (sym->etype) == S_BIT*/
{
- SPEC_OCLS (sym->etype) = bit;
- allocIntoSeg (sym);
- return;
- }
-
- /* if bit storage class */
- if (SPEC_SCLS (sym->etype) == S_SBIT)
- {
- SPEC_OCLS (sym->etype) = bit;
+ SPEC_OCLS (sym->type) = bit;
allocIntoSeg (sym);
return;
}
if (SPEC_SCLS (sym->etype) == S_REGISTER)
SPEC_SCLS (sym->etype) = S_FIXED;
- /* if data specified then */
- if (SPEC_SCLS (sym->etype) == S_DATA)
- {
- /* set the output class */
- SPEC_OCLS (sym->etype) = data;
- /* generate the symbol */
- allocIntoSeg (sym);
- return;
- }
-
/* if it is fixed, then allocate depending on the */
/* current memory model, same for automatics */
if (SPEC_SCLS (sym->etype) == S_FIXED ||
}
}
- /* if code change to constant */
- if (SPEC_SCLS (sym->etype) == S_CODE) {
- SPEC_OCLS (sym->etype) = statsg;
- allocIntoSeg (sym);
- return;
- }
-
- if (SPEC_SCLS (sym->etype) == S_XDATA)
- {
- // should we move this to the initialized data segment?
- if (port->genXINIT &&
- sym->ival && (sym->level==0) && !SPEC_ABSA(sym->etype)) {
- SPEC_OCLS(sym->etype)=xidata;
- } else {
- SPEC_OCLS (sym->etype) = xdata;
- }
- allocIntoSeg (sym);
- return;
- }
-
- if (SPEC_SCLS (sym->etype) == S_IDATA)
- {
- SPEC_OCLS (sym->etype) = idata;
- sym->iaccess = 1;
- allocIntoSeg (sym);
- return;
- }
-
- if (SPEC_SCLS (sym->etype) == S_PDATA)
- {
- SPEC_OCLS (sym->etype) = pdata;
- sym->iaccess = 1;
- allocIntoSeg (sym);
- return;
- }
-
- if (SPEC_SCLS (sym->etype) == S_EEPROM)
- {
- SPEC_OCLS (sym->etype) = eeprom;
- allocIntoSeg (sym);
- return;
- }
-
+ allocDefault (sym);
return;
}
"%s%s_PARM_%d", port->fun_prefix, currFunc->name, pNum);
strncpyz (lval->name, lval->sym->rname, sizeof(lval->name));
- /* if declared in external storage */
- if (SPEC_SCLS (lval->etype) == S_XDATA)
- SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype) = xdata;
- else if (SPEC_SCLS (lval->etype) == S_BIT)
- SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype) = bit;
- else
- /* otherwise depending on the memory model
- note here that we put it into the overlay segment
- first, we will remove it from the overlay segment
- after the overlay determination has been done */
+ /* if declared in specific storage */
+ if (allocDefault (lval->sym))
+ {
+ SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype);
+ continue;
+ }
+
+ /* otherwise depending on the memory model */
+ SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype) =
+ port->mem.default_local_map;
if (options.model == MODEL_SMALL)
{
- SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype) =
- (options.noOverlay ? port->mem.default_local_map
- : overlay);
+ /* note here that we put it into the overlay segment
+ first, we will remove it from the overlay segment
+ after the overlay determination has been done */
+ if (!options.noOverlay)
+ {
+ SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype) =
+ overlay;
+ }
+ }
+ else if (options.model == MODEL_MEDIUM)
+ {
+ SPEC_SCLS (lval->etype) = S_PDATA;
}
else
{
SPEC_SCLS (lval->etype) = S_XDATA;
- SPEC_OCLS (lval->etype) = SPEC_OCLS (lval->sym->etype) = xdata;
}
allocIntoSeg (lval->sym);
}
}
/* else depending on the storage class specified */
- if (SPEC_SCLS (sym->etype) == S_XDATA)
- {
- SPEC_OCLS (sym->etype) = xdata;
- allocIntoSeg (sym);
- return;
- }
-
- if (SPEC_SCLS (sym->etype) == S_CODE && !sym->_isparm) {
- SPEC_OCLS (sym->etype) = statsg;
- allocIntoSeg (sym);
- return;
- }
-
- if (SPEC_SCLS (sym->etype) == S_IDATA)
- {
- SPEC_OCLS (sym->etype) = idata;
- sym->iaccess = 1;
- allocIntoSeg (sym);
- return;
- }
/* if this is a function then assign code space */
if (IS_FUNC (sym->type))
return;
}
- /* if this is a SFR or SBIT */
- if (SPEC_SCLS (sym->etype) == S_SFR ||
- SPEC_SCLS (sym->etype) == S_SBIT)
- {
- SPEC_OCLS (sym->etype) =
- (SPEC_SCLS (sym->etype) == S_SFR ? sfr : sfrbit);
-
- allocIntoSeg (sym);
- return;
- }
-
/* if this is a bit variable and no storage class */
- if (SPEC_NOUN (sym->etype) == V_BIT
- && (SPEC_SCLS (sym->etype) == S_BIT))
+ if (IS_SPEC(sym->type) && SPEC_NOUN (sym->type) == V_BIT)
{
- SPEC_OCLS (sym->etype) = bit;
+ SPEC_SCLS (sym->type) = S_BIT;
+ SPEC_OCLS (sym->type) = bit;
allocIntoSeg (sym);
return;
}
return;
}
- if (SPEC_SCLS (sym->etype) == S_EEPROM)
+ if (allocDefault (sym))
{
- SPEC_OCLS (sym->etype) = eeprom;
- allocIntoSeg (sym);
return;
}