more changes
authorbdemsky <bdemsky>
Wed, 6 Jul 2011 01:25:09 +0000 (01:25 +0000)
committerbdemsky <bdemsky>
Wed, 6 Jul 2011 01:25:09 +0000 (01:25 +0000)
Robust/src/Runtime/bamboo/pmc_forward.c
Robust/src/Runtime/bamboo/pmc_garbage.h
Robust/src/Runtime/bamboo/pmc_mem.c [new file with mode: 0644]
Robust/src/Runtime/bamboo/pmc_mem.h [new file with mode: 0644]
Robust/src/Runtime/bamboo/pmc_refupdate.c

index 84c3e2a353dd4a76db228fba6db6ddc9e36d3bd6..a7d14fccf42d1137f54f6e837c4771e1d7d671c4 100644 (file)
@@ -4,8 +4,8 @@ void pmc_count() {
   for(int i=0;i<NUMPMCUNITS;i++) {
     if (!tmc_spin_mutex_trylock(&pmc_heapptr->units[i].lock)) {
       //got lock
-      void *unitbase=gcbaseva+i*UNITSIZE;
-      void *unittop=unitbase+UNITSIZE;
+      void *unitbase=(i==0)?gcbaseva:pmc_heapptr->unit[i-1]->endptr;
+      void *unittop=pmc_heapptr->unit[i]->endptr;
       pmc_countbytes(&pmc_heapptr->unit[i], unitbase, unittop);
     }
   }
@@ -76,9 +76,18 @@ void pmc_doforward() {
     return;
   if (endregion==-1)
     endregion=NUMPMCUNITS;
-  region->startptr=gcbaseva+startregion*UNITSIZE;
-  region->endptr=gcbaseva+endregion*UNITSIZE;
-  pmc_forward(region, totalbytes, region->startptr, region->endptr, BAMBOO_NUM_OF_CORE&1);
+  region->startptr=(i==0)?gcbaseva:pmc_heapptr->units[i-1].endptr;
+  region->endptr=pmc_heapptr->units[i].endptr;
+
+  if (BAMBOO_NUM_OF_CORE&1) {
+    //backward direction
+    region->lastptr=region->endptr-totalbytes;
+  } else {
+    //forward direction
+    region->lastptr=region->startptr+totalbytes;
+  }
+
+  pmc_forward(region, totalbytes, region->startptr, region->endptr, !(BAMBOO_NUM_OF_CORE&1));
 }
 
 
index 58c0c0652911e62d63ea91669ed1993ad09e0768..2be0312eccccc276f86cb47355991d96e3aaa18f 100644 (file)
@@ -9,12 +9,15 @@ struct pmc_unit {
   tmc_spin_mutex_t lock;
   unsigned int numbytes;
   unsigned int regionnum;
+  void * endptr;
 };
 
 struct pmc_region {
+  void * allocptr;
   void * lastptr;
   void * startptr;
   void * endptr;
+  tmc_spin_mutex_t lock;
   struct ___Object___ * lastobj;
   struct pmc_queue markqueue;
 };
diff --git a/Robust/src/Runtime/bamboo/pmc_mem.c b/Robust/src/Runtime/bamboo/pmc_mem.c
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Robust/src/Runtime/bamboo/pmc_mem.h b/Robust/src/Runtime/bamboo/pmc_mem.h
new file mode 100644 (file)
index 0000000..caad0d0
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef PMC_MEM_H
+#define PMC_MEM_H
+
+void * pmc_alloc(unsigned int * numbytesallocated, unsigned int minimumbytes) {
+  for(int i=0;i<NUMCORES4GC;i+=2) {
+    void *startptr=pmc_heapptr->regions[i].lastptr;
+    void *finishptr=pmc_heapptr->regions[i+1].lastptr;
+    if ((finishptr-startptr)>minimumbytes) {
+      
+    }
+  }
+}
+
+#endif
index 1e4eaa87a15ea0050218f5b62163c623384287b3..d019b2815f7861a5734f263a4172c3e1a85bc391 100644 (file)
@@ -53,14 +53,13 @@ void pmc_referenceupdate(void *bottomptr, void *topptr) {
 
 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);
+  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;
@@ -75,10 +74,8 @@ void pmc_compact(struct pmc_region * region, int forward, void *bottomptr, void
       if (forwardptr) {
        memmove(forwardptr, tmpptr, size);
       }
-      lastptr=forwardptr+size;
       tmpptr+=size;
     }
-    region->lastptr=lastptr;
   } else {
     struct ___Object___ *backward=region->lastobj;
     struct ___Object___ *lastobj=NULL;