changes
[IRC.git] / Robust / src / Runtime / mem.c
1 #include "mem.h"
2
3 #ifdef MULTICORE
4 #include "runtime.h"
5 #include "runtime_arch.h"
6
7 #ifdef MULTICORE_GC
8 #include "bambooalign.h"
9
10 extern volatile bool gcflag;
11 void * mycalloc_share(struct garbagelist * stackptr, int size) {
12   void * p = NULL;
13   int isize = ((size-1)&(~(ALIGNMENTSIZE-1)))+ALIGNMENTSIZE;
14   int hasgc = 0;
15
16   while(true) {
17     if(gcflag) {
18       gc(stackptr);
19     }
20     p = BAMBOO_SHARE_MEM_CALLOC(isize); // calloc(m, isize);
21
22     if(p == NULL) {
23       // no more global shared memory
24       if(hasgc < 5) {
25         // start gc
26         if(gcflag) {
27           gc(stackptr);
28         }
29         hasgc++;
30       } else {
31         // no more global shared memory
32         BAMBOO_EXIT();
33       }
34     } else
35       break;
36   }
37   
38   return p;
39 }
40 #else
41 void * mycalloc_share(int size) {
42   int isize = ((size-1)&(~(BAMBOO_CACHE_LINE_MASK)))+(BAMBOO_CACHE_LINE_SIZE);
43   void * p = BAMBOO_SHARE_MEM_CALLOC(isize); // calloc(m, isize);
44   if(p == NULL) {
45     // no more global shared memory
46     BAMBOO_EXIT();
47   }
48   return (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
49 }
50 #endif
51
52 void * mycalloc(int size, char * file, int line) {
53   BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
54   void * p = mycalloc_i(size, file, line);
55   BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
56   return p;
57 }
58
59
60 void * mycalloc_i(int size, char * file, int line) {
61   void * p = BAMBOO_LOCAL_MEM_CALLOC(size);
62   if(p == NULL) {
63     tprintf("mycalloc_i %s %d \n", file, line);
64     BAMBOO_EXIT();
65   }
66   return p;
67 }
68
69 void myfree(void * ptr) {
70   BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
71   BAMBOO_LOCAL_MEM_FREE(ptr);
72   BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
73   return;
74 }
75
76 void myfree_i(void * ptr) {
77   BAMBOO_LOCAL_MEM_FREE(ptr);
78   return;
79 }
80
81 #endif