more code towards second gc
[IRC.git] / Robust / src / Runtime / bamboo / pmc_garbage.c
1 #include "pmc_garbage.h"
2
3 struct pmc_queue * pmc_localqueue;
4
5 void incrementthreads() {
6   tmc_spin_mutex_lock(&pmc_heapptr->lock);
7   pmc_heapptr->numthreads++;
8   tmc_spin_mutex_unlock(&pmc_heapptr->lock);
9 }
10
11 void decrementthreads() {
12   tmc_spin_mutex_lock(&pmc_heapptr->lock);
13   pmc_heapptr->numthreads--;
14   tmc_spin_mutex_unlock(&pmc_heapptr->lock);
15 }
16
17 void pmc_onceInit() {
18   pmc_localqueue=&pmc_heapptr->regions[BAMBOO_NUM_OF_THREADS].markqueue;
19   pmc_queueinit(pmc_localqueue);
20   tmc_spin_barrier_init(&pmc_heapptr->barrier, NUMCORES4GC);
21 }
22
23 void pmc_init() {
24   if (BAMBOO_NUM_OF_THREADS==STARTUPCORE) {
25     pmc_heapptr->numthreads=NUMCORES4GC;
26   }
27   tmc_spin_barrier_wait(&pmc_heapptr->barrier);
28 }
29
30 void gc(struct garbagelist *gl) {
31   pmc_init();
32   pmc_mark(gl);
33   pmc_count();
34   tmc_spin_barrier_wait(&pmc_heapptr->barrier);
35   if (BAMBOO_NUM_OF_THREADS==STARTUPCORE) {
36     pmc_processunits();
37   }
38   tmc_spin_barrier_wait(&pmc_heapptr->barrier);
39   
40 }