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