5 #include "runtime_arch.h"
8 extern volatile bool gcflag;
9 void * mycalloc_share(struct garbagelist * stackptr,
13 //int isize = 2*BAMBOO_CACHE_LINE_SIZE-4+(size-1)&(~BAMBOO_CACHE_LINE_MASK);
14 int isize = ((size-1)&(~(BAMBOO_CACHE_LINE_MASK)))+(BAMBOO_CACHE_LINE_SIZE);
17 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
19 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
21 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
23 p = BAMBOO_SHARE_MEM_CALLOC_I(m, isize); // calloc(m, isize);
25 // no more global shared memory
26 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
34 // no more global shared memory
38 // try to malloc again
41 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
43 (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
44 BAMBOO_MEMSET_WH(p, -2, (alignedp - p));
45 BAMBOO_MEMSET_WH(alignedp + size, -2, p + isize - alignedp - size);
49 void * mycalloc_share(int m,
52 //int isize = 2*BAMBOO_CACHE_LINE_SIZE-4+(size-1)&(~BAMBOO_CACHE_LINE_MASK);
53 int isize = ((size-1)&(~(BAMBOO_CACHE_LINE_MASK)))+(BAMBOO_CACHE_LINE_SIZE);
54 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
55 p = BAMBOO_SHARE_MEM_CALLOC_I(m, isize); // calloc(m, isize);
57 // no more global shared memory
60 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
62 (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
66 void * mycalloc(int m,
72 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
74 extern bool gc_localheap_s;
76 p = gc_localheap_s ? BAMBOO_LOCAL_MEM_CALLOC_S(m, isize) :
77 BAMBOO_LOCAL_MEM_CALLOC(m, isize);
79 p = BAMBOO_LOCAL_MEM_CALLOC(m, isize); // calloc(m, isize);
84 gc_localheap_s = true;
88 printf("mycalloc %s %d \n", file, line);
91 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
96 void * mycalloc_i(int m,
103 extern bool gc_localheap_s;
105 p = gc_localheap_s ? BAMBOO_LOCAL_MEM_CALLOC_S(m, isize) :
106 BAMBOO_LOCAL_MEM_CALLOC(m, isize);
108 p = BAMBOO_LOCAL_MEM_CALLOC(m, isize); // calloc(m, isize);
112 if(!gc_localheap_s) {
113 gc_localheap_s = true;
117 tprintf("mycalloc_i %s %d \n", file, line);
123 void myfree(void * ptr) {
124 BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
126 if(ptr >= BAMBOO_LOCAL_HEAP_START_VA ) {
128 BAMBOO_LOCAL_MEM_FREE(ptr);
130 } else if(ptr >= BAMBOO_LOCAL_HEAP_START_VA_S) {
131 BAMBOO_LOCAL_MEM_FREE_S(ptr);
134 BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
138 void myfree_i(void * ptr) {
140 if(ptr >= BAMBOO_LOCAL_HEAP_START_VA ) {
142 BAMBOO_LOCAL_MEM_FREE(ptr);
144 } else if(ptr >= BAMBOO_LOCAL_HEAP_START_VA_S) {
145 BAMBOO_LOCAL_MEM_FREE_S(ptr);