[vmkit-commits] [vmkit] r59250 - in /vmkit/trunk: include/mvm/ lib/JnJVM/LLVMRuntime/ lib/JnJVM/VMCore/ lib/Mvm/Allocator/ lib/Mvm/CommonThread/ lib/Mvm/GCMmap2/ lib/Mvm/Runtime/

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Nov 13 09:25:01 PST 2008


Author: geoffray
Date: Thu Nov 13 11:24:49 2008
New Revision: 59250

URL: http://llvm.org/viewvc/llvm-project?rev=59250&view=rev
Log:
Code cleanup, mostly removal of old MULTIPLE_GC macros.


Modified:
    vmkit/trunk/include/mvm/VirtualMachine.h
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
    vmkit/trunk/lib/Mvm/Allocator/gcchunk.h
    vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
    vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
    vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
    vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
    vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
    vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp
    vmkit/trunk/lib/Mvm/Runtime/Object.cpp
    vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp

Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Thu Nov 13 11:24:49 2008
@@ -42,6 +42,16 @@
   
   static CompilationUnit* initialiseCLIVM();
   static VirtualMachine* createCLIVM(CompilationUnit* C = 0);
+  
+
+#ifdef ISOLATE
+  uint32 IsolateID;
+#endif
+
+#ifdef SERVICE
+  uint64_t memoryUsed;
+  uint64_t gcTriggered;
+#endif
 
   mvm::Allocator gcAllocator;
 

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Thu Nov 13 11:24:49 2008
@@ -183,6 +183,8 @@
 declare void @jniProceedPendingException()
 declare i8*  @getSJLJBuffer()
 
+declare %JavaObject* @gcmalloc(i32, %VT)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Debugging methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-multi-mmap.ll Thu Nov 13 11:24:49 2008
@@ -4,5 +4,3 @@
 
 declare void @MarkAndTrace(%JavaObject*, i8*)
 declare void @JavaObjectTracer(%JavaObject*, i8*)
-declare %JavaObject* @gcmalloc(i32, %VT, i8*)
-declare i8* @getCollector(i8*) readnone

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-single-mmap.ll Thu Nov 13 11:24:49 2008
@@ -4,4 +4,3 @@
 
 declare void @MarkAndTrace(%JavaObject*)
 declare void @JavaObjectTracer(%JavaObject*)
-declare %JavaObject* @gcmalloc(i32, %VT)

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Thu Nov 13 11:24:49 2008
@@ -358,39 +358,14 @@
 }
 
 extern "C" void JavaObjectAquire(JavaObject* obj) {
-#ifdef SERVICE_VM
-  ServiceDomain* vm = (ServiceDomain*)JavaThread::get()->getJVM();
-  if (!(vm->GC->isMyObject(obj))) {
-    vm->serviceError(vm, "I'm locking an object I don't own");
-  }
-#endif
   obj->acquire();
 }
 
 
 extern "C" void JavaObjectRelease(JavaObject* obj) {
-  verifyNull(obj);
-#ifdef SERVICE_VM
-  ServiceDomain* vm = (ServiceDomain*)JavaThread::get()->getJVM();
-  if (!(vm->GC->isMyObject(obj))) {
-    vm->serviceError(vm, "I'm unlocking an object I don't own");
-  }
-#endif
   obj->release();
 }
 
-#ifdef SERVICE_VM
-extern "C" void JavaObjectAquireInSharedDomain(JavaObject* obj) {
-  verifyNull(obj);
-  obj->acquire();
-}
-
-extern "C" void JavaObjectReleaseInSharedDomain(JavaObject* obj) {
-  verifyNull(obj);
-  obj->release();
-}
-#endif
-
 extern "C" bool instanceOf(JavaObject* obj, UserCommonClass* cl) {
   return obj->instanceOf(cl);
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Thu Nov 13 11:24:49 2008
@@ -322,10 +322,6 @@
   ///
   virtual void waitForExit();
 
-#ifdef ISOLATE
-  uint32 IsolateID;
-#endif
-
 };
 
 } // end namespace jnjvm

Modified: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Thu Nov 13 11:24:49 2008
@@ -63,6 +63,23 @@
   return CE;
 }
 
+#ifdef ISOLATE
+static Value* getTCM(JnjvmModule* module, Value* Arg, Instruction* CI) {
+  std::vector<Value*> GEP;
+  GEP.push_back(module->constantZero);
+  GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
+  Value* TCMArray = GetElementPtrInst::Create(Arg, GEP.begin(), GEP.end(),
+                                              "", CI);
+  GEP.clear();
+  GEP.push_back(module->constantZero);
+  // TODO get the isolate id
+  GEP.push_back(module->constantZero);
+  Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(), GEP.end(), "",
+                                         CI);
+  return TCM;
+}
+#endif
+
 bool LowerConstantCalls::runOnFunction(Function& F) {
   JnjvmModule* module = (JnjvmModule*)F.getParent();
   bool Changed = false;
@@ -288,7 +305,7 @@
           Changed = true;
 #if !defined(ISOLATE_SHARING) && !defined(ISOLATE)
           ConstantExpr* CE = getClass(module, Call);
-          assert(CE && "Wrong use if GetStaticInstanceFunction");
+          assert(CE && "Wrong use of GetStaticInstanceFunction");
           
           ConstantInt* C = (ConstantInt*)CE->getOperand(0);
           Class* cl = (Class*)C->getZExtValue();
@@ -299,20 +316,9 @@
           CI->eraseFromParent();
 
 #elif defined(ISOLATE)
+          Value* TCM = getTCM(module, Call.getArgument(0), CI);
           std::vector<Value*> GEP;
           GEP.push_back(module->constantZero);
-          GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
-          Value* TCMArray = GetElementPtrInst::Create(Call.getArgument(0),
-                                                      GEP.begin(), GEP.end(),
-                                                      "", CI);
-          GEP.clear();
-          GEP.push_back(module->constantZero);
-          // TODO get the isolate id
-          GEP.push_back(module->constantZero);
-          Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(),
-                                                 GEP.end(), "", CI);
-          GEP.clear();
-          GEP.push_back(module->constantZero);
           GEP.push_back(module->OffsetStaticInstanceInTaskClassMirrorConstant);
           Value* Replace = GetElementPtrInst::Create(TCM, GEP.begin(),
                                                      GEP.end(), "", CI);
@@ -345,19 +351,9 @@
                                                        indexes.end(), "", CI);
 
 #else
+          Value* TCM = getTCM(module, Call.getArgument(0), CI);
           std::vector<Value*> GEP;
           GEP.push_back(module->constantZero);
-          GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
-          Value* TCMArray = GetElementPtrInst::Create(Cl, GEP.begin(),
-                                                      GEP.end(), "", CI);
-          GEP.clear();
-          GEP.push_back(module->constantZero);
-          // TODO get the isolate id
-          GEP.push_back(module->constantZero);
-          Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(),
-                                                 GEP.end(), "", CI);
-          GEP.clear();
-          GEP.push_back(module->constantZero);
           GEP.push_back(module->OffsetStatusInTaskClassMirrorConstant);
           Value* StatusPtr = GetElementPtrInst::Create(TCM, GEP.begin(),
                                                      GEP.end(), "", CI);

Modified: vmkit/trunk/lib/Mvm/Allocator/gcchunk.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Allocator/gcchunk.h?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Allocator/gcchunk.h (original)
+++ vmkit/trunk/lib/Mvm/Allocator/gcchunk.h Thu Nov 13 11:24:49 2008
@@ -10,6 +10,8 @@
 #ifndef _GC_CHUNK_H_
 #define _GC_CHUNK_H_
 
+#include "mvm/VirtualMachine.h"
+
 #include "gcmapper.h"
 #include "types.h"
 
@@ -25,8 +27,8 @@
 	                        /* bit 0-2: la marque */
 	                        /* bit 3: est-on collectable */
 public:
-#ifdef SERVICE_GC
-  void* meta; // who allocated me
+#ifdef SERVICE
+  VirtualMachine* meta; // who allocated me
 #endif
  	static const signed int maskCollectable    = 8;
  	static const signed int maskNotCollectable = 0;

Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Thu Nov 13 11:24:49 2008
@@ -133,20 +133,9 @@
 void Thread::internalThreadStart(mvm::Thread* th) {
   th->baseSP  = (void*)&th;
 
-#ifdef MULTIPLE_GC
-  GC->inject_my_thread(th);
-#else
-  Collector::inject_my_thread(th);
-#endif
-  
-  
+  Collector::inject_my_thread(th); 
   th->routine(th);
-  
-#ifdef MULTIPLE_GC
-  GC->remove_my_thread(th);
-#else
   Collector::remove_my_thread(th);
-#endif
 
 }
 

Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Thu Nov 13 11:24:49 2008
@@ -43,15 +43,13 @@
  
 #ifndef MULTIPLE_GC
   void    markAndTrace() const;
-#endif
   size_t  objectSize() const;
   void *  operator new(size_t sz, VirtualTable *VT);
   void *  operator new(size_t sz);
   void    operator delete(void *);
   void *  realloc(size_t n);
 
-#ifdef MULTIPLE_GC
-#define collector_new(Class, Collector) __gc_new(Class::VT, Collector) Class
+#else
   void    markAndTrace(Collector* GC) const;
   size_t  objectSize(Collector* GC) const;
   void *  operator new(size_t sz, VirtualTable *VT, Collector* GC);
@@ -62,48 +60,33 @@
 
 };
 
-#ifdef MULTIPLE_GC
-#define STATIC
-#else
-#define STATIC static
-#endif
-
 class Collector {
 public:
-#ifdef SERVICE_GC
-  uint64 memoryUsed;
-  uint64 gcTriggered;
-  bool isMyObject(const void* o) { return getCollectorFromObject(o) == this; }
-  static Collector* getCollectorFromObject(const void*o);
-#endif
   typedef void (*markerFn)(void*);
   
   static void  initialise(markerFn mark);
-  STATIC void  destroy();
+  static void  destroy();
 
-  STATIC void           die_if_sigsegv_occured_during_collection(void *addr);
-  STATIC int            isStable(gc_lock_recovery_fct_t, int, int, int, int,
+  static void           die_if_sigsegv_occured_during_collection(void *addr);
+  static int            isStable(gc_lock_recovery_fct_t, int, int, int, int,
                                  int, int, int, int);
-  STATIC unsigned int   enable(unsigned int n);
-  STATIC void           gcStats(size_t &no, size_t &nbb);
-  STATIC void           maybeCollect();
-  STATIC void           collect(void);
-  STATIC void           inject_my_thread(mvm::Thread* th);
-  STATIC void           remove_my_thread(mvm::Thread* th);
-#ifdef MULTIPLE_GC
-  static Collector*     allocate();
-#endif
-
-  STATIC gc             *begOf(const void *o);
-  STATIC int            byteOffset(void *o);
-  inline STATIC bool    isObject(const void *o) { return begOf((void*)o); }
-        STATIC void     applyFunc(void (*func)(gcRoot *o, void *data), void *data);
-        STATIC void     registerMemoryError(void (*func)(unsigned int));
-        STATIC int      getMaxMemory(void);
-        STATIC int      getFreeMemory(void);
-        STATIC int      getTotalMemory(void);
-        STATIC void     setMaxMemory(size_t);
-        STATIC void     setMinMemory(size_t);
+  static unsigned int   enable(unsigned int n);
+  static void           gcStats(size_t &no, size_t &nbb);
+  static void           maybeCollect();
+  static void           collect(void);
+  static void           inject_my_thread(mvm::Thread* th);
+  static void           remove_my_thread(mvm::Thread* th);
+
+  static gc             *begOf(const void *o);
+  static int            byteOffset(void *o);
+  inline static bool    isObject(const void *o) { return begOf((void*)o); }
+        static void     applyFunc(void (*func)(gcRoot *o, void *data), void *data);
+        static void     registerMemoryError(void (*func)(unsigned int));
+        static int      getMaxMemory(void);
+        static int      getFreeMemory(void);
+        static int      getTotalMemory(void);
+        static void     setMaxMemory(size_t);
+        static void     setMinMemory(size_t);
 };
 
 #endif

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Thu Nov 13 11:24:49 2008
@@ -16,39 +16,31 @@
 
 using namespace mvm;
 
-#ifdef MULTIPLE_GC
-#define COLLECTOR ((GCCollector*)(mvm::Thread::get()->GC))->
-#else
-#define COLLECTOR GCCollector::
-#endif
-
 
 typedef void (*memoryError_t)(unsigned int);
 
 memoryError_t GCCollector::internMemoryError;
 
-#ifdef MULTIPLE_GC
-void gc::markAndTrace(Collector* GC) const {
-  ((GCCollector*)GC)->markAndTrace((void*)this);
-}
-extern "C" void MarkAndTrace(gc* gc, Collector* GC) {
-  ((GCCollector*)GC)->markAndTrace((void*)gc);
-}
-#else
+#ifndef MULTIPLE_GC
+
 void gc::markAndTrace() const {
   GCCollector::markAndTrace((void*)this);
 }
+
 extern "C" void MarkAndTrace(gc* gc) {
   GCCollector::markAndTrace((void*)gc);
 }
-#endif
+
+extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT) {
+  return (gc*)GCCollector::gcmalloc(VT, sz);
+}
 
 size_t gc::objectSize() const {
-  return COLLECTOR objectSize((gc*)this);
+  return GCCollector::objectSize((gc*)this);
 }
 
 void *gc::operator new(size_t sz, VirtualTable *vt) {
-  return COLLECTOR gcmalloc(vt, sz);
+  return GCCollector::gcmalloc(vt, sz);
 }
 
 void *gc::operator new(size_t sz) {
@@ -60,11 +52,22 @@
 }
 
 void *gc::realloc(size_t n) {
-  return COLLECTOR gcrealloc(this, n);
+  return GCCollector::gcrealloc(this, n);
 }
 
+#else
 
-#ifdef MULTIPLE_GC
+void gc::markAndTrace(Collector* GC) const {
+  ((GCCollector*)GC)->markAndTrace((void*)this);
+}
+
+extern "C" void MarkAndTrace(gc* gc, Collector* GC) {
+  ((GCCollector*)GC)->markAndTrace((void*)gc);
+}
+
+extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT, Collector* GC) {
+  return (gc*)((GCCollector*)GC)->gcmalloc(VT, sz);
+}
 
 size_t gc::objectSize(Collector* GC) const {
   return ((GCCollector*)GC)->objectSize((gc*)this);
@@ -87,28 +90,21 @@
 }
 #endif
 
-#undef COLLECTOR
-#ifdef MULTIPLE_GC
-#define COLLECTOR ((GCCollector*)this)->
-#else
-#define COLLECTOR GCCollector::
-#endif
-
 unsigned int Collector::enable(unsigned int n) {
-   return COLLECTOR enable(n);
+   return GCCollector::enable(n);
 }
 
 int Collector::isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, 
                         int a3, int a4, int a5, int a6, int a7) {
-  return COLLECTOR isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
+  return GCCollector::isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
 }
 
 void Collector::die_if_sigsegv_occured_during_collection(void *addr) {
-  COLLECTOR die_if_sigsegv_occured_during_collection(addr);
+  GCCollector::die_if_sigsegv_occured_during_collection(addr);
 }
 
 void Collector::gcStats(size_t &no, size_t &nbb) {
-  COLLECTOR gcStats(&no, &nbb);
+  GCCollector::gcStats(&no, &nbb);
 }
 
 void Collector::initialise(markerFn marker) {
@@ -116,36 +112,36 @@
 }
 
 void Collector::destroy() {
-  COLLECTOR destroy();
+  GCCollector::destroy();
 }
 
 void Collector::inject_my_thread(mvm::Thread* th) {
 #ifdef HAVE_PTHREAD
-  COLLECTOR inject_my_thread(th);
+  GCCollector::inject_my_thread(th);
 #endif
 }
 
 void Collector::maybeCollect() {
-   COLLECTOR maybeCollect();
+   GCCollector::maybeCollect();
 }
 
 void Collector::collect(void) {
-   COLLECTOR collect();
+   GCCollector::collect();
 }
 
 gc *Collector::begOf(const void *obj) {
-  return (gc*)COLLECTOR begOf((void*)obj);
+  return (gc*)GCCollector::begOf((void*)obj);
 }
 
 int Collector::byteOffset(void *obj) {
-  int beg = (intptr_t)COLLECTOR begOf(obj);
+  int beg = (intptr_t)GCCollector::begOf(obj);
   intptr_t off = (intptr_t)obj;
   return (off-beg);
 }
 
 
 void Collector::applyFunc(void (*func)(gcRoot *o, void *data), void *data) {
-  return COLLECTOR applyFunc(func, data);
+  return GCCollector::applyFunc(func, data);
 }
 
 int Collector::getMaxMemory(void){
@@ -167,62 +163,40 @@
 }
 
 void Collector::registerMemoryError(void (*func)(unsigned int)){
-  COLLECTOR internMemoryError = func;
-  //onMemoryError = &COLLECTOR defaultMemoryError;
+  GCCollector::internMemoryError = func;
+  //onMemoryError = &GCCollector::defaultMemoryError;
 }
 
 void Collector::remove_my_thread(mvm::Thread* th) {
 #ifdef HAVE_PTHREAD
-  COLLECTOR remove_thread(th);
+  GCCollector::remove_thread(th);
 #endif
 }
 
-#undef COLLECTOR
 void GCThread::waitCollection() {
-#if defined(MULTIPLE_GC)
-#if defined(SERVICE_GC)
-  GCCollector* GC = GCCollector::collectingGC;
-#else
-  GCCollector* GC = ((GCCollector*)mvm::Thread::get()->GC);
-#endif
-#define COLLECTOR GC->
-#else
-#define COLLECTOR GCCollector::
-#endif
   mvm::Thread* th = mvm::Thread::get();
-  unsigned int cm = COLLECTOR current_mark;
+  unsigned int cm = GCCollector::current_mark;
 
   if(th != current_collector) {
     collectorGo();
-    while((COLLECTOR current_mark == cm) && 
-          (COLLECTOR status == COLLECTOR stat_collect))
+    while((GCCollector::current_mark == cm) && 
+          (GCCollector::status == GCCollector::stat_collect))
       _collectionCond.wait(&_stackLock);
   }
 }
 
 #ifdef HAVE_PTHREAD
 
-#undef COLLECTOR
 void GCCollector::siggc_handler(int) {
-#if defined(MULTIPLE_GC)
-#if defined(SERVICE_GC)
-  GCCollector* GC = collectingGC;
-#else
-  GCCollector* GC = ((GCCollector*)mvm::Thread::get()->GC);
-#endif
-#define COLLECTOR GC->
-#else
-#define COLLECTOR GCCollector::
-#endif
   mvm::Thread* th = mvm::Thread::get();
 
   jmp_buf buf;
   setjmp(buf);
   
-  COLLECTOR threads->stackLock();
+  GCCollector::threads->stackLock();
   
   if(!th) /* The thread is being destroyed */
-    COLLECTOR threads->another_mark();
+    GCCollector::threads->another_mark();
   else {
     register unsigned int  **cur = (unsigned int**)(void*)&buf;
     register unsigned int  **max = (unsigned int**)th->baseSP;
@@ -230,42 +204,16 @@
     GCChunkNode *node;
     
     for(; cur<max; cur++) {
-      if((node = o2node(*cur)) && (!COLLECTOR isMarked(node))) {
+      if((node = o2node(*cur)) && (!GCCollector::isMarked(node))) {
         node->remove();
-        node->append(COLLECTOR used_nodes);
-        COLLECTOR mark(node);
+        node->append(GCCollector::used_nodes);
+        GCCollector::mark(node);
       }
     }
     
-    COLLECTOR threads->another_mark();
-    COLLECTOR threads->waitCollection();
+    GCCollector::threads->another_mark();
+    GCCollector::threads->waitCollection();
   }
-  COLLECTOR threads->stackUnlock();
-#undef COLLECTOR
+  GCCollector::threads->stackUnlock();
 }
 #endif // HAVE_PTHREAD
-
-#ifdef MULTIPLE_GC
-Collector* Collector::allocate() {
-  GCCollector* GC = new GCCollector();
-  GC->initialise(GCCollector::bootstrapGC->_marker);
-  return GC;
-}
-#endif // MULTIPLE_GC
-
-#ifdef SERVICE_GC
-Collector* Collector::getCollectorFromObject(const void* o) {
-  return (Collector*)GCCollector::o2node((void*)o)->meta;
-}
-#endif
-
-#ifdef MULTIPLE_GC
-extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT, Collector* GC) {
-  return (gc*)((GCCollector*)GC)->gcmalloc(VT, sz);
-}
-#else
-extern "C" gc* gcmalloc(size_t sz, VirtualTable* VT) {
-  return (gc*)GCCollector::gcmalloc(VT, sz);
-}
-#endif
-

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Thu Nov 13 11:24:49 2008
@@ -11,7 +11,6 @@
 
 using namespace mvm;
 
-#if !defined(MULTIPLE_GC) || defined(SERVICE_GC)
 GCAllocator   *GCCollector::allocator = 0;
 #ifdef HAVE_PTHREAD
 GCThread      *GCCollector::threads;
@@ -26,17 +25,7 @@
 GCChunkNode    *GCCollector::unused_nodes;
 
 unsigned int   GCCollector::current_mark;
-#endif
-
-#ifdef MULTIPLE_GC
-GCCollector* GCCollector::bootstrapGC;
-#endif
-
-#ifdef SERVICE_GC
-GCCollector* GCCollector::collectingGC;
-#endif
 
-#if !defined(SERVICE_GC) && !defined(MULTIPLE_GC)
 int  GCCollector::_collect_freq_auto;
 int  GCCollector::_collect_freq_maybe;
 int  GCCollector::_since_last_collection;
@@ -44,7 +33,6 @@
 bool GCCollector::_enable_auto;
 bool GCCollector::_enable_maybe;
 bool GCCollector::_enable_collection;
-#endif
 
 typedef void (*destructor_t)(void*);
 
@@ -57,10 +45,6 @@
 
   unused_nodes->attrape(used_nodes);
 
-#ifdef SERVICE_GC
-  collectingGC = this;
-#endif
-
 #ifdef HAVE_PTHREAD
   threads->synchronize();
 #endif
@@ -69,11 +53,7 @@
     trace(cur);
 
   if(_marker)
-#ifdef MULTIPLE_GC
-    _marker(this);
-#else
     _marker(0);
-#endif
   status = stat_finalize;
 
   /* finalize */
@@ -88,8 +68,9 @@
   GCChunkNode *next = 0;
 
   for(cur=finalizable.next(); cur!=&finalizable; cur=next) {
-#ifdef SERVICE_GC
-    ((Collector*)cur->meta)->memoryUsed -= real_nbb(cur);
+#ifdef SERVICE
+    VirtualMachine* vm = cur->meta;
+    vm->memoryUsed -= real_nbb(cur);
 #endif
     register gc_header *c = cur->chunk();
     next = cur->next();

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Thu Nov 13 11:24:49 2008
@@ -17,24 +17,6 @@
 #endif
 #include "mvm/GC/GC.h"
 
-#ifdef MULTIPLE_GC
-#define STATIC
-#else
-#define STATIC static
-#endif
-
-#if defined(MULTIPLE_GC) && !defined(SERVICE_GC)
-#define STATIC_FIELD
-#else
-#define STATIC_FIELD static
-#endif
-
-#if defined(MULTIPLE_GC)
-#define STATIC_NO_SERVICE
-#else
-#define STATIC_NO_SERVICE static
-#endif
-
 namespace mvm {
 
 class GCCollector : public Collector {
@@ -42,38 +24,38 @@
 #ifdef HAVE_PTHREAD
   friend class GCThread;
 #endif
-  STATIC_FIELD GCAllocator  *allocator;      /* The allocator */
+  static GCAllocator  *allocator;      /* The allocator */
 
 
-  STATIC_FIELD GCChunkNode  *used_nodes;     /* Used memory nodes */
-  STATIC_FIELD GCChunkNode  *unused_nodes;   /* Unused memory nodes */
-  STATIC_FIELD unsigned int   current_mark;
-
-  STATIC_NO_SERVICE int  _collect_freq_auto;      /* Collection frequency in gcmalloc/gcrealloc */
-  STATIC_NO_SERVICE int  _collect_freq_maybe;     /* Collection frequency  in maybeCollect */
-  STATIC_NO_SERVICE int  _since_last_collection;  /* Bytes left since last collection */
-  STATIC_NO_SERVICE bool _enable_auto;            /* Automatic collection? */
-  STATIC_NO_SERVICE bool _enable_maybe;           /* Collection in maybeCollect()? */
-  STATIC_NO_SERVICE bool _enable_collection;      /* collection authorized? */
-  STATIC_FIELD int  status;
+  static GCChunkNode  *used_nodes;     /* Used memory nodes */
+  static GCChunkNode  *unused_nodes;   /* Unused memory nodes */
+  static unsigned int   current_mark;
+
+  static int  _collect_freq_auto;      /* Collection frequency in gcmalloc/gcrealloc */
+  static int  _collect_freq_maybe;     /* Collection frequency  in maybeCollect */
+  static int  _since_last_collection;  /* Bytes left since last collection */
+  static bool _enable_auto;            /* Automatic collection? */
+  static bool _enable_maybe;           /* Collection in maybeCollect()? */
+  static bool _enable_collection;      /* collection authorized? */
+  static int  status;
   
   
   enum { stat_collect, stat_finalize, stat_alloc, stat_broken };
 
 #ifdef HAVE_PTHREAD
   static void  siggc_handler(int);
-  STATIC inline void  lock()   { threads->lock(); }
-  STATIC inline void  unlock() { threads->unlock(); }
+  static inline void  lock()   { threads->lock(); }
+  static inline void  unlock() { threads->unlock(); }
 #else
   static void  siggc_handler(int) { }
-  STATIC inline void  lock()   { }
-  STATIC inline void  unlock() { }
+  static inline void  lock()   { }
+  static inline void  unlock() { }
 #endif
   
   /* Interface for collection, verifies enable_collect */
-  STATIC void collect_unprotect();    
+  static void collect_unprotect();    
   /* The collection */  
-  STATIC void do_collect();           
+  static void do_collect();           
 
   static inline GCChunkNode *o2node(void *p) {
     return GCHash::get(p)->o2node(p, GCChunkNode::maskCollectable);
@@ -84,55 +66,49 @@
   }
 
 public:
-  STATIC_FIELD Collector::markerFn  _marker; /* The function which traces roots */
-#ifdef SERVICE_GC
-  static GCCollector* collectingGC;
-#endif
-#ifdef MULTIPLE_GC
-  static GCCollector* bootstrapGC;
-#endif
-  STATIC_FIELD GCThread *threads;        /* le gestionnaire de thread et de synchro */
+  static Collector::markerFn  _marker; /* The function which traces roots */
+  static GCThread *threads;        /* le gestionnaire de thread et de synchro */
   static void (*internMemoryError)(unsigned int);
 
 #ifdef HAVE_PTHREAD
-  STATIC inline void  unlock_dont_recovery() { threads->unlock_dont_recovery(); }
-  STATIC void die_if_sigsegv_occured_during_collection(void *addr);
+  static inline void  unlock_dont_recovery() { threads->unlock_dont_recovery(); }
+  static void die_if_sigsegv_occured_during_collection(void *addr);
 #else
-  STATIC void die_if_sigsegv_occured_during_collection(void *addr) { }
+  static void die_if_sigsegv_occured_during_collection(void *addr) { }
 #endif
 
-  STATIC void defaultMemoryError(unsigned int sz){
+  static void defaultMemoryError(unsigned int sz){
     unlock();
     internMemoryError(sz);
     lock();
   }
 
-  STATIC void initialise(Collector::markerFn marker);
-  STATIC void destroy();
+  static void initialise(Collector::markerFn marker);
+  static void destroy();
 
   static int siggc();
 
 #ifdef HAVE_PTHREAD
-  STATIC void inject_my_thread(mvm::Thread* th);
-  STATIC inline void  remove_thread(mvm::Thread* th) {
+  static void inject_my_thread(mvm::Thread* th);
+  static inline void  remove_thread(mvm::Thread* th) {
     threads->remove(th);
   }
-  STATIC inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, 
+  static inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2, 
                              int a3, int a4, int a5, int a6, int a7) {
     return threads->isStable(fct, a0, a1, a2, a3, a4, a5, a6, a7);
   }
 #else
-  STATIC inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
+  static inline int isStable(gc_lock_recovery_fct_t fct, int a0, int a1, int a2,
                              int a3, int a4, int a5, int a6, int a7) {
     return 0;
   }
 #endif
 
-  STATIC inline void *allocate_unprotected(size_t sz) {
+  static inline void *allocate_unprotected(size_t sz) {
     return allocator->alloc(sz);
   }
   
-  STATIC inline void  free_unprotected(void *ptr) {
+  static inline void  free_unprotected(void *ptr) {
     allocator->free(ptr);
   }
 
@@ -144,40 +120,41 @@
       return 0;
   }
 
-  STATIC void gcStats(size_t *no, size_t *nbb);
+  static void gcStats(size_t *no, size_t *nbb);
 
   static inline size_t objectSize(void *ptr) {
     GCChunkNode *node = o2node(ptr);
     return node ? real_nbb(node) : 0;
   }
 
-  STATIC inline void collect() {
+  static inline void collect() {
     lock();
     collect_unprotect();
     unlock();
   }
 
-  STATIC inline void maybeCollect() {
+  static inline void maybeCollect() {
     if(_enable_auto && 
        (_since_last_collection <= (_collect_freq_auto - _collect_freq_maybe)))
       collect(); 
   }
 
-  STATIC inline void *gcmalloc(VirtualTable *vt, size_t n) {
+  static inline void *gcmalloc(VirtualTable *vt, size_t n) {
     lock();
     
     _since_last_collection -= n;
     if(_enable_auto && (_since_last_collection <= 0)) {
-#ifdef SERVICE_GC
-      ++gcTriggered;
+#ifdef SERVICE
+      mvm::Thread::get()->vm->gcTriggered++;
 #endif
       collect_unprotect();
     }
     
     register GCChunkNode *header = allocator->alloc_chunk(n + sizeof(gc_header), 1, current_mark & 1);
-#ifdef SERVICE_GC
-    header->meta = this;
-    memoryUsed += n;
+#ifdef SERVICE
+    VirtualMachine* vm = mvm::Thread::get()->vm;
+    header->meta = vm;
+    vm->memoryUsed += n;
 #endif
     header->append(used_nodes);
     //printf("Allocate %d bytes at %p [%p] %d %d\n", n, header->chunk()->_2gc(),
@@ -190,7 +167,7 @@
     return p->_2gc();
   }
 
-  STATIC inline void *gcrealloc(void *ptr, size_t n) {
+  static inline void *gcrealloc(void *ptr, size_t n) {
     lock();
     
     GCPage      *desc = GCHash::get(ptr);
@@ -204,16 +181,18 @@
     _since_last_collection -= (n - old_sz);
 
     if(_enable_auto && (_since_last_collection <= 0)) {
-#ifdef SERVICE_GC
-      ++gcTriggered;
+#ifdef SERVICE
+      mvm::Thread::get()->vm->gcTriggered++;
 #endif
       collect_unprotect();
     }
 
     GCChunkNode  *res = allocator->realloc_chunk(desc, node, n+sizeof(gc_header));
-#ifdef SERVICE_GC
-    res->meta = this;
-    memoryUsed += (n - old_sz);
+
+#ifdef SERVICE
+    VirtualMachine* vm = mvm::Thread::get()->vm;
+    header->meta = vm;
+    vm->memoryUsed += (n - old_sz);
 #endif
 
     if(res != node) {
@@ -227,31 +206,27 @@
     return obj->_2gc();
   }
 
-  STATIC inline unsigned int enable(unsigned int n)  {
+  static inline unsigned int enable(unsigned int n)  {
     register unsigned int old = _enable_collection;
     _enable_collection = n; 
     return old;
   }
 
-  STATIC inline bool isMarked(GCChunkNode *node) { 
+  static inline bool isMarked(GCChunkNode *node) { 
     return node->mark() == (current_mark & 1);
   }
   
-  STATIC inline void mark(GCChunkNode *node) {
+  static inline void mark(GCChunkNode *node) {
     node->_mark(current_mark & 1);
   }
 
-  STATIC inline void trace(GCChunkNode *node) {
+  static inline void trace(GCChunkNode *node) {
     gc_header *o = node->chunk();
-#ifdef MULTIPLE_GC
-    o->_2gc()->tracer(this);
-#else
     o->_2gc()->tracer();
-#endif
     markAndTrace(o);
   }
 
-  STATIC inline void markAndTrace(void *ptr) {
+  static inline void markAndTrace(void *ptr) {
     GCChunkNode *node = o2node(ptr);
 
     if(node && !isMarked(node)) {
@@ -262,18 +237,6 @@
     }
   }
 
-  STATIC inline void applyFunc(void (*func)(gcRoot *o, void *data), void *data){
-    lock(); /* Make sure no one collects or allocates */
-    status = stat_collect; /* Forbids collections */
-    GCChunkNode *cur=used_nodes->next(); /* Get starter */
-    unlock(); /* One can allocate now */ 
-
-    for(; cur!=used_nodes; cur=cur->next())
-      func(cur->chunk()->_2gc(), data);
-    
-    /* No need to lock ! */
-    status = stat_alloc; 
-  }
 };
 
 }

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gcinit.cpp Thu Nov 13 11:24:49 2008
@@ -27,11 +27,6 @@
 
 void GCCollector::initialise(Collector::markerFn marker) {
  
-#ifdef SERVICE_GC
-  gcTriggered = 0;
-  memoryUsed = 0;
-  if (this == bootstrapGC) {
-#endif
   used_nodes = new GCChunkNode();
   unused_nodes = new GCChunkNode();
 #ifdef HAVE_PTHREAD
@@ -60,9 +55,6 @@
 
   current_mark = 0;
   status = stat_alloc;
-#ifdef SERVICE_GC
-  }
-#endif
 
   _collect_freq_auto = def_collect_freq_auto;
   _collect_freq_maybe = def_collect_freq_maybe;

Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Thu Nov 13 11:24:49 2008
@@ -40,11 +40,7 @@
 
 
 PrintBuffer *PrintBuffer::writeObj(const Object *obj) {
-#ifdef MULTIPLE_GC
-  Object *beg = (Object*)mvm::Thread::get()->GC->begOf(obj);
-#else
   Object *beg = (Object*)Collector::begOf(obj);
-#endif
   
   if(beg) {
     if(beg == obj) {

Modified: vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp?rev=59250&r1=59249&r2=59250&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Sigsegv.cpp Thu Nov 13 11:24:49 2008
@@ -50,12 +50,8 @@
 #endif
 	
   /* Free the GC if it sisgegv'd. No other collection is possible */
-#ifndef MULTIPLE_GC
   Collector::die_if_sigsegv_occured_during_collection(addr);
-#else
-  mvm::Thread::get()->GC->die_if_sigsegv_occured_during_collection(addr);
-#endif
-	
+
   //	sys_exit(0);
   if(client_sigsegv_handler)
     client_sigsegv_handler(n, addr);





More information about the vmkit-commits mailing list