if (IS_ITEMP(op1) &&
!IS_ITEMP(op2) &&
sym1->isspilt &&
- (sym1->usl.spillLoc == sym2))
+ (SYM_SPIL_LOC(sym1) == sym2))
return TRUE;
if (IS_ITEMP(op2) &&
!IS_ITEMP(op1) &&
sym2->isspilt &&
sym1->level > 0 &&
- (sym2->usl.spillLoc == sym1))
+ (SYM_SPIL_LOC(sym2) == sym1))
return TRUE ;
return FALSE ;
aop->size = getSize(sym->type);
for ( i = 0 ; i < 1 ; i++ ) {
aop->aopu.aop_str[i] = accUse[i];
-// aop->aopu.pcop = pic16_popRegFromString("WREG", aop->size, sym->usl.spillLoc->offset);
+// aop->aopu.pcop = pic16_popRegFromString("WREG", aop->size, SYM_SPIL_LOC(sym)->offset);
}
fprintf(stderr, "%s:%d allocating AOP_ACC for sym= %s\n", __FILE__, __LINE__, sym->name);
DEBUGpic16_emitcode(";","%d size=%d",__LINE__,aop->size);
if (sym->ruonly) {
/*
sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
- aop->aopu.pcop = pic16_popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
+ aop->aopu.pcop = pic16_popGetImmd(SYM_SPIL_LOC(sym)->rname,0,SYM_SPIL_LOC(sym)->offset);
//pic16_allocDirReg (IC_LEFT(ic));
aop->size = getSize(sym->type);
*/
}
#endif
/* else spill location */
- if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+ if (SYM_SPIL_LOC(sym) && getSize(sym->type) != getSize(SYM_SPIL_LOC(sym)->type)) {
/* force a new aop if sizes differ */
- sym->usl.spillLoc->aop = NULL;
+ SYM_SPIL_LOC(sym)->aop = NULL;
}
#if 0
DEBUGpic16_emitcode(";","%s %d %s sym->rname = %s, offset %d",
__FUNCTION__,__LINE__,
- sym->usl.spillLoc->rname,
- sym->rname, sym->usl.spillLoc->offset);
+ SYM_SPIL_LOC(sym)->rname,
+ sym->rname, SYM_SPIL_LOC(sym)->offset);
#endif
- //aop->aopu.pcop = pic16_popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
- if (sym->usl.spillLoc && sym->usl.spillLoc->rname) {
+ //aop->aopu.pcop = pic16_popGetImmd(SYM_SPIL_LOC(sym)->rname,0,SYM_SPIL_LOC(sym)->offset);
+ if (SYM_SPIL_LOC(sym) && SYM_SPIL_LOC(sym)->rname) {
sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
- aop->aopu.pcop = pic16_popRegFromString(sym->usl.spillLoc->rname,
+ aop->aopu.pcop = pic16_popRegFromString(SYM_SPIL_LOC(sym)->rname,
getSize(sym->type),
- sym->usl.spillLoc->offset, op);
+ SYM_SPIL_LOC(sym)->offset, op);
} else if (getSize(sym->type) <= 1) {
//fprintf (stderr, "%s:%d called for a spillLocation -- assigning WREG instead --- CHECK (size:%u)!\n", __FUNCTION__, __LINE__, getSize(sym->type));
pic16_emitpcomment (";!!! %s:%d called for a spillLocation -- assigning WREG instead --- CHECK", __FUNCTION__, __LINE__);
noSpilLoc (symbol * sym, eBBlock * ebp, iCode * ic)
{
debugLog ("%s\n", __FUNCTION__);
- return (sym->usl.spillLoc ? 0 : 1);
+ return (SYM_SPIL_LOC (sym) ? 0 : 1);
}
/*-----------------------------------------------------------------*/
hasSpilLoc (symbol * sym, eBBlock * ebp, iCode * ic)
{
debugLog ("%s\n", __FUNCTION__);
- return (sym->usl.spillLoc ? 1 : 0);
+ return (SYM_SPIL_LOC (sym) ? 1 : 0);
}
/*-----------------------------------------------------------------*/
directSpilLoc (symbol * sym, eBBlock * ebp, iCode * ic)
{
debugLog ("%s\n", __FUNCTION__);
- if (sym->usl.spillLoc &&
- (IN_DIRSPACE (SPEC_OCLS (sym->usl.spillLoc->etype))))
+ if (SYM_SPIL_LOC (sym) &&
+ (IN_DIRSPACE (SPEC_OCLS (SYM_SPIL_LOC (sym)->etype))))
return 1;
else
return 0;
hasSpilLocnoUptr (symbol * sym, eBBlock * ebp, iCode * ic)
{
debugLog ("%s\n", __FUNCTION__);
- return ((sym->usl.spillLoc && !sym->uptr) ? 1 : 0);
+ return ((SYM_SPIL_LOC (sym) && !sym->uptr) ? 1 : 0);
}
/*-----------------------------------------------------------------*/
if (applyToSet (_G.stackSpil, isFree, &sloc, sym))
{
/* found a free one : just update & return */
- sym->usl.spillLoc = sloc;
+ SYM_SPIL_LOC (sym) = sloc;
sym->stackSpil = 1;
sloc->isFree = 0;
addSetHead (&sloc->usl.itmpStack, sym);
/* add it to the _G.stackSpil set */
addSetHead (&_G.stackSpil, sloc);
- sym->usl.spillLoc = sloc;
+ SYM_SPIL_LOC (sym) = sloc;
sym->stackSpil = 1;
/* add it to the set of itempStack set
/* if (sym->_G.stackSpil) */
/* return TRUE; */
- if (!sym->usl.spillLoc)
+ if (!SYM_SPIL_LOC (sym))
return FALSE;
- etype = getSpec (sym->usl.spillLoc->type);
+ etype = getSpec (SYM_SPIL_LOC (sym)->type);
if (IN_STACK (etype))
return TRUE;
/* if this is rematerializable or has a spillLocation
we are okay, else we need to create a spillLocation
for it */
- if (!(sym->remat || sym->usl.spillLoc))
+ if (!(sym->remat || SYM_SPIL_LOC (sym)))
createStackSpil (sym);
spillLRWithPtrReg (sym);
}
- if (sym->usl.spillLoc && !sym->remat)
- sym->usl.spillLoc->allocreq = 1;
+ if (SYM_SPIL_LOC (sym) && !sym->remat)
+ SYM_SPIL_LOC (sym)->allocreq = 1;
return;
}
if ((selectS = liveRangesWith (lrcs, directSpilLoc, ebp, ic)))
{
sym = leastUsedLR (selectS);
- strcpy (sym->rname, (sym->usl.spillLoc->rname[0] ?
- sym->usl.spillLoc->rname :
- sym->usl.spillLoc->name));
+ strcpy (sym->rname, (SYM_SPIL_LOC (sym)->rname[0] ?
+ SYM_SPIL_LOC (sym)->rname :
+ SYM_SPIL_LOC (sym)->name));
sym->spildir = 1;
/* mark it as allocation required */
- sym->usl.spillLoc->allocreq = 1;
+ SYM_SPIL_LOC (sym)->allocreq = 1;
return sym;
}
sym = leastUsedLR (selectS);
/* mark this as allocation required */
- sym->usl.spillLoc->allocreq = 1;
+ SYM_SPIL_LOC (sym)->allocreq = 1;
return sym;
}
{
sym = leastUsedLR (selectS);
- sym->usl.spillLoc->allocreq = 1;
+ SYM_SPIL_LOC (sym)->allocreq = 1;
return sym;
}
/* return a created spil location */
sym = createStackSpil (leastUsedLR (selectS));
- sym->usl.spillLoc->allocreq = 1;
+ SYM_SPIL_LOC (sym)->allocreq = 1;
return sym;
}
{
if (sym->stackSpil)
{
- sym->usl.spillLoc->isFree = 1;
+ SYM_SPIL_LOC (sym)->isFree = 1;
sym->stackSpil = 0;
}
continue;
int ptrRegSet = 0;
/* Make sure any spill location is definately allocated */
- if (sym->isspilt && !sym->remat && sym->usl.spillLoc &&
- !sym->usl.spillLoc->allocreq)
+ if (sym->isspilt && !sym->remat && SYM_SPIL_LOC (sym) &&
+ !SYM_SPIL_LOC (sym)->allocreq)
{
- sym->usl.spillLoc->allocreq++;
+ SYM_SPIL_LOC (sym)->allocreq++;
}
/* if it does not need or is spilt
/* if it has a spillocation & is used less than
all other live ranges then spill this */
if (willCS) {
- if (sym->usl.spillLoc) {
+ if (SYM_SPIL_LOC (sym)) {
symbol *leastUsed = leastUsedLR (liveRangesWith (spillable,
allLRs, ebbs[i], ic));
if (leastUsed && leastUsed->used > sym->used) {
static symbol *
rematStr (symbol * sym)
{
- char *s = buffer;
iCode *ic = sym->rematiCode;
symbol *psym = NULL;
+ int offset = 0;
debugLog ("%s\n", __FUNCTION__);
- //printf ("%s\n", s);
-
- /* if plus or minus print the right hand side */
-
- if (ic->op == '+' || ic->op == '-') {
-
- iCode *ric = OP_SYMBOL (IC_LEFT (ic))->rematiCode;
-
- sprintf (s, "(%s %c 0x%04x)",
- OP_SYMBOL (IC_LEFT (ric))->rname,
- ic->op,
- (int) operandLitValue (IC_RIGHT (ic)));
+ while (ic->op == '+' || ic->op == '-') {
+ /* if plus or minus print the right hand side */
+ offset += (int) operandLitValue (IC_RIGHT (ic));
+ ic = OP_SYMBOL (IC_LEFT (ic))->rematiCode;
+ } // while
- //fprintf(stderr, "ralloc.c:%d OOPS %s\n",__LINE__,s);
-
- psym = newSymbol (OP_SYMBOL (IC_LEFT (ric))->rname, 1);
- psym->offset = (int) operandLitValue (IC_RIGHT (ic));
-
- return psym;
- }
-
- sprintf (s, "%s", OP_SYMBOL (IC_LEFT (ic))->rname);
psym = newSymbol (OP_SYMBOL (IC_LEFT (ic))->rname, 1);
-
- //printf ("ralloc.c:%d %s\n", __LINE__,buffer);
+ psym->offset = offset;
return psym;
}
psym->psbase = ptrBaseRematSym (OP_SYMBOL (IC_LEFT (ic)));
strcpy (psym->rname, psym->name);
sym->isspilt = 1;
- sym->usl.spillLoc = psym;
+ SYM_SPIL_LOC (sym) = psym;
continue;
}
OP_SYMBOL (IC_RESULT (ic))->remat = 1;
OP_SYMBOL (IC_RESULT (ic))->rematiCode = ic;
- OP_SYMBOL (IC_RESULT (ic))->usl.spillLoc = NULL;
+ SPIL_LOC (IC_RESULT (ic)) = NULL;
}
operandLitValue (IC_RIGHT (ic));
OP_SYMBOL (IC_RESULT (ic))->remat = 1;
OP_SYMBOL (IC_RESULT (ic))->rematiCode = ic;
- OP_SYMBOL (IC_RESULT (ic))->usl.spillLoc = NULL;
+ SPIL_LOC (IC_RESULT (ic)) = NULL;
}