}
/* if already has a asmop then continue */
- if (op->aop && aop->size == getSize(sym->type))
+ if (op->aop)
return;
/* if the underlying symbol has a aop */
}
/* else spill location */
+ if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+ /* force a new aop if sizes differ */
+ sym->usl.spillLoc->aop = NULL;
+ }
sym->aop = op->aop = aop =
aopForSym (ic, sym->usl.spillLoc, result);
aop->size = getSize (sym->type);
}
/* if already has a asmop then continue */
- if (op->aop && aop->size == getSize(sym->type))
+ if (op->aop)
return;
/* if the underlying symbol has a aop */
}
/* else spill location */
+ if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+ /* force a new aop if sizes differ */
+ sym->usl.spillLoc->aop = NULL;
+ }
sym->aop = op->aop = aop =
aopForSym (ic, sym->usl.spillLoc, result, useDP2);
aop->size = getSize (sym->type);
}
/* if already has a asmop then continue */
- if (op->aop && aop->size == getSize(sym->type))
+ if (op->aop )
return;
/* if the underlying symbol has a aop */
}
/* else spill location */
+ if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+ /* force a new aop if sizes differ */
+ sym->usl.spillLoc->aop = NULL;
+ }
sym->aop = op->aop = aop =
aopForSym (ic, sym->usl.spillLoc, result);
aop->size = getSize (sym->type);
}
/* if already has a asmop then continue */
- if (op->aop && aop->size == getSize(sym->type))
+ if (op->aop)
return ;
/* if the underlying symbol has a aop */
}
/* else spill location */
+ if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+ /* force a new aop if sizes differ */
+ sym->usl.spillLoc->aop = NULL;
+ }
DEBUGpic14_emitcode(";","%s %d %s",__FUNCTION__,__LINE__,sym->usl.spillLoc->rname);
sym->aop = op->aop = aop =
aopForSym(ic,sym->usl.spillLoc,result);
}
/* if already has a asmop then continue */
- if (op->aop && aop->size == getSize(sym->type))
+ if (op->aop)
{
return;
}
}
/* else spill location */
+ if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+ /* force a new aop if sizes differ */
+ sym->usl.spillLoc->aop = NULL;
+ }
op->aop = aop =
aopForSym (ic, sym->usl.spillLoc, result, requires_a);
wassertl (aop->size >= getSize (sym->type), "Operand doesn't fit in the spill location");