#include <stdlib.h>
#include "structdefs.h"
#include "bambooalign.h"
+#include "multicoregc.h"
#include "runtime_arch.h"
#include "pmc_forward.h"
#include "pmc_refupdate.h"
void pmc_updatePtrs(void *ptr, int type) {
unsigned int * pointer=pointerarray[type];
+ tprintf("Updating pointers in %x\n", ptr);
if (pointer==0) {
/* Array of primitives */
} else if (((unsigned int)pointer)==1) {
unsigned int offset=pointer[i];
PMCUPDATEOBJ(*((void **)(((char *)ptr)+offset)));
}
- }
+ }
+ tprintf("done\n");
}
void pmc_updategarbagelist(struct garbagelist *listptr) {
void *forwardptr=(void *)((struct ___Object___ *) tmpptr)->marked;
((struct ___Object___ *) tmpptr)->marked=NULL;
if (forwardptr) {
+ //tprintf("Compacting %x\n",tmpptr);
memmove(forwardptr, tmpptr, size);
}
tmpptr+=size;
}
} else {
- struct ___Object___ *backward=((struct ___Object___ *) region)->backward;
+ struct ___Object___ *backward=region->lastobj;
struct ___Object___ *lastobj=NULL;
while(backward) {
lastobj=backward;
size=((size-1)&(~(ALIGNMENTSIZE-1)))+ALIGNMENTSIZE;
void *forwardptr=(void *)((struct ___Object___ *) lastobj)->marked;
((struct ___Object___ *) lastobj)->marked=NULL;
- if (forwardptr) {
- memmove(forwardptr, lastobj, size);
- }
+ //tprintf("Compacting %x\n",lastobj);
+ memmove(forwardptr, lastobj, size);
}
}
}