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