// printf("checking pre-existing\n");
/* if already has a asmop then continue */
- if (op->aop )
+ if (op->aop)
{
op->aop->op = op;
op->aop->isaddr = op->isaddr;
}
/* this is a temporary : this has
- only four choices :
+ only five choices :
a) register
b) spillocation
c) rematerialize
/* if the type is a conditional */
if (sym->regType == REG_CND)
{
- aop = op->aop = sym->aop = newAsmop (AOP_CRY);
+ sym->aop = op->aop = aop = newAsmop (AOP_CRY);
aop->size = 0;
aop->op = op;
aop->isaddr = op->isaddr;
/* rematerialize it NOW */
if (sym->remat)
{
- sym->aop = op->aop = aop =
- aopForRemat (sym);
+ sym->aop = op->aop = aop = aopForRemat (sym);
aop->size = getSize (sym->type);
aop->op = op;
aop->isaddr = op->isaddr;
// printf("checking accuse\n");
if (sym->accuse)
{
- aop = op->aop = sym->aop = newAsmop (AOP_REG);
+ sym->aop = op->aop = aop = newAsmop (AOP_REG);
aop->size = getSize (sym->type);
switch (sym->accuse)
{
{
unsigned i;
- aop = op->aop = sym->aop = newAsmop (AOP_STR);
+ sym->aop = op->aop = aop = newAsmop (AOP_STR);
aop->size = getSize (sym->type);
for (i = 0; i < fReturnSizeHC08; i++)
aop->aopu.aop_str[i] = fReturn2[i];
/*-----------------------------------------------------------------*/
-/* pushSide - */
+/* pushSide - */
/*-----------------------------------------------------------------*/
static void
-pushSide (operand * oper, int size)
+pushSide (operand * oper, int size, iCode * ic)
{
int offset = 0;
+
+ aopOp (oper, ic, FALSE);
+
while (size--)
{
loadRegFromAop (hc08_reg_a, AOP (oper), offset++);
pushReg ( hc08_reg_a, TRUE);
}
+
+ freeAsmop (oper, NULL, ic, TRUE);
}
/*-----------------------------------------------------------------*/
// bool restoreBank=FALSE;
// bool swapBanks = FALSE;
- D(emitcode("; genPCall",""));
+ D (emitcode (";", "genPcall"));
/* if caller saves & we have not saved then */
if (!ic->regsSaved)
destination registers on the stack */
dtype = operandType (IC_LEFT (ic))->next;
- /* now push the calling address */
+ /* push the return address on to the stack */
emitBranch ("bsr", tlbl);
emitBranch ("bra", rlbl);
emitLabel (tlbl);
_G.stackPushes += 2; /* account for the bsr return address now on stack */
updateCFA();
- /* Push the function's address */
- aopOp (IC_LEFT (ic), ic, FALSE);
- pushSide (IC_LEFT (ic), FPTRSIZE);
- freeAsmop (IC_LEFT (ic), NULL, ic, TRUE);
+ /* now push the function address */
+ pushSide (IC_LEFT (ic), FPTRSIZE, ic);
- /* if send set is not empty the assign */
+ /* if send set is not empty then assign */
if (_G.sendSet)
{
genSend(reverseSet(_G.sendSet));