+ regs *tempRegs[4];
+ int receivingA = 0;
+ int roffset = 0;
+
+ for (offset = 0; offset<size; offset++)
+ if (!strcmp (fReturn[offset], "a"))
+ receivingA = 1;
+
+ if (!receivingA)
+ {
+ if (size==1 || getTempRegs(tempRegs, size-1, ic))
+ {
+ for (offset = size-1; offset>0; offset--)
+ emitcode("mov","%s,%s", tempRegs[roffset++]->name, fReturn[offset]);
+ emitcode("mov","a,%s", fReturn[0]);
+ _G.accInUse++;
+ aopOp (IC_RESULT (ic), ic, FALSE);
+ _G.accInUse--;
+ aopPut (AOP (IC_RESULT (ic)), "a", offset,
+ isOperandVolatile (IC_RESULT (ic), FALSE));
+ for (offset = 1; offset<size; offset++)
+ aopPut (AOP (IC_RESULT (ic)), tempRegs[--roffset]->name, offset,
+ isOperandVolatile (IC_RESULT (ic), FALSE));
+ goto release;
+ }
+ }
+ else
+ {
+ if (getTempRegs(tempRegs, size, ic))
+ {
+ for (offset = 0; offset<size; offset++)
+ emitcode("mov","%s,%s", tempRegs[offset]->name, fReturn[offset]);
+ aopOp (IC_RESULT (ic), ic, FALSE);
+ for (offset = 0; offset<size; offset++)
+ aopPut (AOP (IC_RESULT (ic)), tempRegs[offset]->name, offset,
+ isOperandVolatile (IC_RESULT (ic), FALSE));
+ goto release;
+ }
+ }
+