pCode - register allocation, flow analysis, and peephole.
[fw/sdcc] / src / pic / ralloc.c
index 3a0ab79c178aab7b25dd9715622ec3f627fbfbe5..9907b9b237d6e7829bbab7493dbdb1edc4406117 100644 (file)
@@ -493,6 +493,19 @@ pic14_regWithIdx (int idx)
   exit (1);
 }
 
+/*-----------------------------------------------------------------*/
+/*-----------------------------------------------------------------*/
+regs *
+pic14_findFreeReg(void)
+{
+  int i;
+
+  for (i = 0; i < pic14_nRegs; i++)
+    if (regspic14[i].isFree)
+      return &regspic14[i];
+
+  return NULL;
+}
 /*-----------------------------------------------------------------*/
 /* freeReg - frees a register                                      */
 /*-----------------------------------------------------------------*/
@@ -1923,8 +1936,8 @@ regTypeNum ()
 /*-----------------------------------------------------------------*/
 /* freeAllRegs - mark all registers as free                        */
 /*-----------------------------------------------------------------*/
-static void
-freeAllRegs ()
+void
+pic14_freeAllRegs ()
 {
   int i;
 
@@ -1933,6 +1946,21 @@ freeAllRegs ()
     regspic14[i].isFree = 1;
 }
 
+/*-----------------------------------------------------------------*/
+/*-----------------------------------------------------------------*/
+void
+pic14_deallocateAllRegs ()
+{
+  int i;
+
+  debugLog ("%s\n", __FUNCTION__);
+  for (i = 0; i < pic14_nRegs; i++) {
+    regspic14[i].isFree = 1;
+    regspic14[i].wasUsed = 0;
+  }
+}
+
+
 /*-----------------------------------------------------------------*/
 /* deallocStackSpil - this will set the stack pointer back         */
 /*-----------------------------------------------------------------*/
@@ -3064,7 +3092,7 @@ pic14_assignRegisters (eBBlock ** ebbs, int count)
   setToNull ((void **) &_G.stackSpil);
   setToNull ((void **) &_G.spiltSet);
   /* mark all registers as free */
-  freeAllRegs ();
+  pic14_freeAllRegs ();
 
   debugLog ("leaving\n<><><><><><><><><><><><><><><><><>\n");
   debugLogClose ();