some changes towards compilation
[IRC.git] / Robust / src / Runtime / bamboo / pmc_refupdate.c
index 780d615de574719f7e8e13d911a3623eea6f6dc6..d6ccf46016c50d1a6fdf1962786458337f437f3b 100644 (file)
@@ -1,7 +1,12 @@
+#include <stdlib.h>
+#include "structdefs.h"
+#include "bambooalign.h"
+#include "runtime_arch.h"
 #include "pmc_forward.h"
 #include "pmc_refupdate.h"
 
-#define pmcupdateObj(objptr) ((void *)((struct ___Object___ *)objptr)->mark)
+
+#define pmcupdateObj(objptr) ((void *)((struct ___Object___ *)objptr)->marked)
 
 #define PMCUPDATEOBJ(obj) {void *updatetmpptr=obj; if (updatetmpptr!=NULL) {obj=pmcupdateObj(updatetmpptr);}}
 
@@ -28,6 +33,11 @@ void pmc_updatePtrs(void *ptr, int type) {
   }  
 }
 
+void pmc_doreferenceupdate() {
+  struct pmc_region * region=&pmc_heapptr->regions[BAMBOO_NUM_OF_CORE];
+  pmc_referenceupdate(region->startptr, region->endptr);
+}
+
 void pmc_referenceupdate(void *bottomptr, void *topptr) {
   void *tmpptr=bottomptr;
   while(tmpptr<topptr) {
@@ -39,18 +49,22 @@ void pmc_referenceupdate(void *bottomptr, void *topptr) {
       continue;
     }
     //if marked we update the pointers
-    if (((struct ___Object___ *) tmpptr)->mark) {
+    if (((struct ___Object___ *) tmpptr)->marked) {
       pmc_updatePtrs(tmpptr, type);
     }
     tmpptr+=size;
   }
 }
 
+void pmc_docompact() {
+  struct pmc_region * region=&pmc_heapptr->regions[BAMBOO_NUM_OF_CORE];
+  pmc_compact(region, !(BAMBOO_NUM_OF_CORE&1), region->startptr, region->endptr);
+}
+
 
 void pmc_compact(struct pmc_region * region, int forward, void *bottomptr, void *topptr) {
   if (forward) {
     void *tmpptr=bottomptr;
-    void *lastptr;
     while(tmpptr<topptr) {
       unsigned int type;
       unsigned int size;
@@ -60,26 +74,24 @@ void pmc_compact(struct pmc_region * region, int forward, void *bottomptr, void
        continue;
       }
       //if marked we update the pointers
-      void *forwardptr=(void *)((struct ___Object___ *) tmpptr)->mark;
-      ((struct ___Object___ *) tmpptr)->mark=NULL;
+      void *forwardptr=(void *)((struct ___Object___ *) tmpptr)->marked;
+      ((struct ___Object___ *) tmpptr)->marked=NULL;
       if (forwardptr) {
        memmove(forwardptr, tmpptr, size);
       }
-      lastptr=forwardptr+size;
       tmpptr+=size;
     }
-    region->lastptr=lastptr;
   } else {
-    struct ___Object___ *backward=region->lastobj;
+    struct ___Object___ *backward=((struct ___Object___ *) region)->backward;
     struct ___Object___ *lastobj=NULL;
     while(backward) {
       lastobj=backward;
-      backward=backward->lastobj;
+      backward=backward->backward;
       unsigned int type;
       unsigned int size;
-      gettype_size(tmpptr, &type, &size);
-      void *forwardptr=(void *)((struct ___Object___ *) lastobj)->mark;
-      ((struct ___Object___ *) lastobj)->mark=NULL;
+      gettype_size(lastobj, &type, &size);
+      void *forwardptr=(void *)((struct ___Object___ *) lastobj)->marked;
+      ((struct ___Object___ *) lastobj)->marked=NULL;
       if (forwardptr) {
        memmove(forwardptr, lastobj, size);
       }