5 #include "runtime_arch.h"
11 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
13 extern bool gc_localheap_s;
15 p = gc_localheap_s ? BAMBOO_LOCAL_MEM_CALLOC_S(m, isize) :
16 BAMBOO_LOCAL_MEM_CALLOC(m, isize);
18 p = BAMBOO_LOCAL_MEM_CALLOC(m, isize); // calloc(m, isize);
23 gc_localheap_s = true;
29 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
34 void * mycalloc_share(struct garbagelist * stackptr,
38 //int isize = 2*BAMBOO_CACHE_LINE_SIZE-4+(size-1)&(~BAMBOO_CACHE_LINE_MASK);
39 int isize = (size & (~(BAMBOO_CACHE_LINE_MASK))) + (BAMBOO_CACHE_LINE_SIZE);
42 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
43 p = BAMBOO_SHARE_MEM_CALLOC_I(m, isize); // calloc(m, isize);
45 // no more global shared memory
46 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
53 // no more global shared memory
57 // try to malloc again
60 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
62 (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
63 BAMBOO_MEMSET_WH(p, -2, (alignedp - p));
64 BAMBOO_MEMSET_WH(alignedp + size, -2, p + isize - alignedp - size);
68 void * mycalloc_share_ngc(int m,
71 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
72 p = BAMBOO_SHARED_MEM_CALLOC_NGC_I(m, size); // calloc(m, isize);
73 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
77 void * mycalloc_share_ngc_I(int m,
80 p = BAMBOO_SHARED_MEM_CALLOC_NGC_I(m, size); // calloc(m, isize);
84 void mycalloc_free_ngc(void * ptr) {
85 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
86 BAMBOO_SHARED_MEM_FREE_NGC_I(ptr);
87 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
90 void mycalloc_free_ngc_I(void * ptr) {
91 BAMBOO_SHARED_MEM_FREE_NGC_I(ptr);
94 void * mycalloc_share(int m,
97 //int isize = 2*BAMBOO_CACHE_LINE_SIZE-4+(size-1)&(~BAMBOO_CACHE_LINE_MASK);
98 int isize = (size & (~(BAMBOO_CACHE_LINE_MASK))) + (BAMBOO_CACHE_LINE_SIZE);
99 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
100 p = BAMBOO_SHARE_MEM_CALLOC_I(m, isize); // calloc(m, isize);
102 // no more global shared memory
105 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
107 (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
111 void * mycalloc_i(int m,
116 extern bool gc_localheap_s;
118 p = gc_localheap_s ? BAMBOO_LOCAL_MEM_CALLOC_S(m, isize) :
119 BAMBOO_LOCAL_MEM_CALLOC(m, isize);
121 p = BAMBOO_LOCAL_MEM_CALLOC(m, isize); // calloc(m, isize);
125 if(!gc_localheap_s) {
126 gc_localheap_s = true;
135 void myfree(void * ptr) {
137 if(ptr >= BAMBOO_LOCAL_HEAP_START_VA ) {
139 BAMBOO_LOCAL_MEM_FREE(ptr);
141 } else if(ptr >= BAMBOO_LOCAL_HEAP_START_VA_S) {
142 BAMBOO_LOCAL_MEM_FREE_S(ptr);