code towards PMC compiling
[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(loopcount<10000) {
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   }
46   tprintf("Loopcount hit 10000\n");
47   BAMBOO_EXIT();
48   return NULL;
49 }
50
51 #else
52 void * mycalloc_share(int size) {
53   int isize = ((size-1)&(~(BAMBOO_CACHE_LINE_MASK)))+(BAMBOO_CACHE_LINE_SIZE);
54   void * p = BAMBOO_SHARE_MEM_CALLOC(isize); // calloc(m, isize);
55   if(p == NULL) {
56     // no more global shared memory
57     BAMBOO_EXIT();
58   }
59   return (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
60 }
61 #endif
62
63 void * mycalloc(int size, char * file, int line) {
64   BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
65   void * p = mycalloc_i(size, file, line);
66   BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
67   return p;
68 }
69
70
71 void * mycalloc_i(int size, char * file, int line) {
72   void * p = BAMBOO_LOCAL_MEM_CALLOC(size);
73   if(p == NULL) {
74     tprintf("mycalloc_i %s %d \n", file, line);
75     BAMBOO_EXIT();
76   }
77   return p;
78 }
79
80 void myfree(void * ptr) {
81   BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
82   BAMBOO_LOCAL_MEM_FREE(ptr);
83   BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
84   return;
85 }
86
87 void myfree_i(void * ptr) {
88   BAMBOO_LOCAL_MEM_FREE(ptr);
89   return;
90 }
91
92 #endif