vsnprintf is not standard
[fw/sdcc] / src / avr / ralloc.c
index b3d2a81f7e5296e2a382333759fd79c1016a9447..8159c84338fd023425e1f02d10fd489cd3f9479b 100644 (file)
@@ -1339,10 +1339,10 @@ static int needsPair (iCode *ic)
                int ikey = bitVectFirstBit(uses_defs);
                iCode *uic = hTabItemWithKey(iCodehTab,ikey);
                sym_link *otype = NULL; 
+               bitVectUnSetBit(uses_defs,ikey);
                if (!uic) continue;             
                otype = (IC_RIGHT(uic) ? operandType(IC_RIGHT(uic)) : NULL);
                if (otype && IS_LITERAL(otype)) return 1;
-               bitVectUnSetBit(uses_defs,ikey);
        }
        return 0;       
 }
@@ -2073,8 +2073,11 @@ packRegisters (eBBlock * ebp)
                if (POINTER_SET (ic))
                        OP_SYMBOL (IC_RESULT (ic))->uptr = 1;
 
-               if (POINTER_GET (ic))
+               if (POINTER_GET (ic)) {
                        OP_SYMBOL (IC_LEFT (ic))->uptr = 1;
+                       if (OP_SYMBOL (IC_LEFT(ic))->remat) 
+                               OP_SYMBOL (IC_RESULT (ic))->usl.spillLoc = NULL;
+               }
 
                /* if the condition of an if instruction
                   is defined in the previous instruction then
@@ -2218,8 +2221,8 @@ setDefaultRegs (eBBlock ** ebbs, int count)
        else {
                regsAVR[R26_IDX].type = (regsAVR[R26_IDX].type & ~REG_MASK) | REG_PTR;
                regsAVR[R27_IDX].type = (regsAVR[R27_IDX].type & ~REG_MASK) | REG_PTR;
-               regsAVR[R28_IDX].type = (regsAVR[R28_IDX].type & ~REG_MASK) | REG_PTR;
-               regsAVR[R29_IDX].type = (regsAVR[R29_IDX].type & ~REG_MASK) | REG_PTR;
+               regsAVR[R30_IDX].type = (regsAVR[R30_IDX].type & ~REG_MASK) | REG_PTR;
+               regsAVR[R31_IDX].type = (regsAVR[R31_IDX].type & ~REG_MASK) | REG_PTR;
        }
 
        /* registers 0-1 / 24-25 used as scratch */