X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmem.c;h=432151924b415ecbfe5d3b022a84110529a3b0be;hb=c42e9051755428d14eb620abc9eda86d43479a1a;hp=ddf5ce66bb7e202d10356bfb47f01cf28402a2ac;hpb=fbccf8c34a545513634c74ff2218b3e1441b3324;p=fw%2Fsdcc diff --git a/src/SDCCmem.c b/src/SDCCmem.c index ddf5ce66..43215192 100644 --- a/src/SDCCmem.c +++ b/src/SDCCmem.c @@ -296,6 +296,8 @@ allocIntoSeg (symbol * sym) { memmap *segment = SPEC_OCLS (sym->etype); addSet (&segment->syms, sym); + if (segment == pdata) + sym->iaccess = 1; } /*-----------------------------------------------------------------*/ @@ -416,10 +418,10 @@ allocGlobal (symbol * sym) } /* 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; + SPEC_OCLS (sym->type) = bit; allocIntoSeg (sym); return; } @@ -531,20 +533,27 @@ allocParms (value * val) continue; } - /* 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 */ + /* 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); } @@ -663,10 +672,10 @@ allocLocal (symbol * sym) } /* if this is a bit variable and no storage class */ - if (SPEC_NOUN (sym->etype) == V_BIT) + if (IS_SPEC(sym->type) && SPEC_NOUN (sym->type) == V_BIT) { - SPEC_SCLS (sym->etype) = S_BIT; - SPEC_OCLS (sym->etype) = bit; + SPEC_SCLS (sym->type) = S_BIT; + SPEC_OCLS (sym->type) = bit; allocIntoSeg (sym); return; }