[vmkit-commits] [vmkit] r83245 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/JnJVM/VMCore/Jnjvm.cpp lib/JnJVM/VMCore/Jnjvm.h lib/N3/VMCore/Assembly.cpp lib/N3/VMCore/Assembly.h lib/N3/VMCore/LockedMap.h lib/N3/VMCore/N3.cpp lib/N3/VMCore/N3.h lib/N3/VMCore/N3Initialise.cpp lib/N3/VMCore/VirtualMachine.cpp lib/N3/VMCore/VirtualMachine.h lib/N3/VMCore/VirtualTables.cpp

Gael Thomas gael.thomas at lip6.fr
Fri Oct 2 04:17:01 PDT 2009


Author: gthomas
Date: Fri Oct  2 06:17:00 2009
New Revision: 83245

URL: http://llvm.org/viewvc/llvm-project?rev=83245&view=rev
Log:
BumpPtrAllocator is now in mvm::VirtualMachine and used by N3 and J3.
N3, Assembly and maps are not more collectable objects but allocated with a BumpPtrAllocator.


Modified:
    vmkit/trunk/include/mvm/VirtualMachine.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/N3/VMCore/Assembly.cpp
    vmkit/trunk/lib/N3/VMCore/Assembly.h
    vmkit/trunk/lib/N3/VMCore/LockedMap.h
    vmkit/trunk/lib/N3/VMCore/N3.cpp
    vmkit/trunk/lib/N3/VMCore/N3.h
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/VirtualMachine.cpp
    vmkit/trunk/lib/N3/VMCore/VirtualMachine.h
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

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

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Fri Oct  2 06:17:00 2009
@@ -102,7 +102,8 @@
 
 protected:
 
-  VirtualMachine() :
+  VirtualMachine(mvm::BumpPtrAllocator &Alloc) :
+		allocator(Alloc),
     WeakReferencesQueue(ReferenceQueue::WEAK),
     SoftReferencesQueue(ReferenceQueue::SOFT), 
     PhantomReferencesQueue(ReferenceQueue::PHANTOM) {
@@ -129,6 +130,8 @@
   }
 public:
 
+  mvm::BumpPtrAllocator& allocator;
+
   virtual void tracer() {}
 
   virtual ~VirtualMachine() {}

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Oct  2 06:17:00 2009
@@ -1269,7 +1269,7 @@
 }
 
 Jnjvm::Jnjvm(mvm::BumpPtrAllocator& Alloc, JnjvmBootstrapLoader* loader) : 
-  VirtualMachine(), allocator(Alloc) {
+  VirtualMachine(Alloc) {
 
   classpath = getenv("CLASSPATH");
   if (!classpath) classpath = ".";

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Fri Oct  2 06:17:00 2009
@@ -104,10 +104,6 @@
 class Jnjvm : public mvm::VirtualMachine {
   friend class JnjvmClassLoader;
 public:
-  /// allocator - Memory allocator of this JVM.
-  ///
-  mvm::BumpPtrAllocator& allocator;
-  
   /// throwable - The java/lang/Throwable class. In an isolate
   /// environment, generated code references this field.
   UserClass* throwable;

Modified: vmkit/trunk/lib/N3/VMCore/Assembly.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Assembly.cpp?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.cpp Fri Oct  2 06:17:00 2009
@@ -465,11 +465,12 @@
 }
 
 Assembly* Assembly::allocate(const UTF8* name) {
-  Assembly* ass = gc_new(Assembly)();
-  ass->loadedNameClasses = ClassNameMap::allocate();
-  ass->loadedTokenClasses = ClassTokenMap::allocate();
-  ass->loadedTokenMethods = MethodTokenMap::allocate();
-  ass->loadedTokenFields = FieldTokenMap::allocate();
+	mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
+  Assembly* ass = new(*a, "Assembly") Assembly(*a);
+  ass->loadedNameClasses = ClassNameMap::allocate(ass->allocator);
+  ass->loadedTokenClasses = ClassTokenMap::allocate(ass->allocator);
+  ass->loadedTokenMethods = MethodTokenMap::allocate(ass->allocator);
+  ass->loadedTokenFields = FieldTokenMap::allocate(ass->allocator);
   ass->assemblyRefs = 0;
   ass->isRead = false;
   ass->name = name;

Modified: vmkit/trunk/lib/N3/VMCore/Assembly.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Assembly.h?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Assembly.h (original)
+++ vmkit/trunk/lib/N3/VMCore/Assembly.h Fri Oct  2 06:17:00 2009
@@ -133,9 +133,8 @@
 typedef VMCommonClass* (*signatureVector_t)(uint32 op, Assembly* ass,
                                             uint32& offset, VMGenericClass* genClass, VMGenericMethod* genMethod);
 
-class Assembly : public mvm::Object {
+class Assembly : public mvm::PermanentObject {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
@@ -188,6 +187,10 @@
   uint32 resRva;
   uint32 resSize;
 
+	mvm::BumpPtrAllocator &allocator;
+
+	Assembly(mvm::BumpPtrAllocator &Alloc) : allocator(Alloc) {}
+
   static Assembly* allocate(const UTF8* name);
   static const UTF8* readUTF8(VirtualMachine* vm, uint32 len, Reader* reader);
   static const UTF8* readUTF16(VirtualMachine* vm, uint32 len, Reader* reader);

Modified: vmkit/trunk/lib/N3/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/LockedMap.h?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/N3/VMCore/LockedMap.h Fri Oct  2 06:17:00 2009
@@ -37,7 +37,7 @@
 class UTF8;
 
 template<class Key, class Container, class Compare, class Upcall>
-class LockedMap : public mvm::Object {
+class LockedMap : public mvm::PermanentObject {
 public:
   typedef typename std::map<const Key, Container*, Compare>::iterator iterator;
   typedef Container* (*funcCreate)(Key& V, Upcall* ass);
@@ -92,7 +92,7 @@
   virtual void TRACER {
     //lock->MARK_AND_TRACE;
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
-      i->second->MARK_AND_TRACE;
+      i->second->CALL_TRACER;
     }
   }
 
@@ -120,9 +120,8 @@
 class ClassNameMap : 
   public LockedMap<ClassNameCmp, VMCommonClass, std::less<ClassNameCmp>, Assembly > {
 public:
-  static VirtualTable* VT; 
-  static ClassNameMap* allocate() {
-    ClassNameMap* map = gc_new(ClassNameMap)();
+  static ClassNameMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    ClassNameMap* map = new(allocator, "ClassNameMap") ClassNameMap();
     map->lock = new mvm::LockNormal();
     return map;
   }
@@ -131,9 +130,8 @@
 class ClassTokenMap : 
   public LockedMap<uint32, VMCommonClass, std::less<uint32>, Assembly > {
 public:
-  static VirtualTable* VT; 
-  static ClassTokenMap* allocate() {
-    ClassTokenMap* map = gc_new(ClassTokenMap)();
+  static ClassTokenMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    ClassTokenMap* map = new(allocator, "ClassTokenMap") ClassTokenMap();
     map->lock = new mvm::LockNormal();
     return map;
   }
@@ -143,9 +141,8 @@
 class FieldTokenMap : 
   public LockedMap<uint32, VMField, std::less<uint32>, Assembly > {
 public:
-  static VirtualTable* VT; 
-  static FieldTokenMap* allocate() {
-    FieldTokenMap* map = gc_new(FieldTokenMap)();
+  static FieldTokenMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    FieldTokenMap* map = new(allocator, "FieldTokenMap") FieldTokenMap();
     map->lock = new mvm::LockNormal();
     return map;
   }
@@ -154,9 +151,8 @@
 class MethodTokenMap : 
   public LockedMap<uint32, VMMethod, std::less<uint32>, Assembly > {
 public:
-  static VirtualTable* VT; 
-  static MethodTokenMap* allocate() {
-    MethodTokenMap* map = gc_new(MethodTokenMap)();
+  static MethodTokenMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    MethodTokenMap* map = new(allocator, "MethodTokenMap") MethodTokenMap();
     map->lock = new mvm::LockNormal();
     return map;
   }
@@ -165,9 +161,8 @@
 class AssemblyMap : 
   public LockedMap<const UTF8*, Assembly, std::less<const UTF8*>, N3 > {
 public:
-  static VirtualTable* VT; 
-  static AssemblyMap* allocate() {
-    AssemblyMap* map = gc_new(AssemblyMap)();
+  static AssemblyMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    AssemblyMap* map = new(allocator, "AssemblyMap") AssemblyMap();
     map->lock = new mvm::LockNormal();
     return map;
   }
@@ -177,9 +172,8 @@
 class StringMap :
     public LockedMap<const UTF8*, CLIString, std::less<const UTF8*>, N3 > { 
 public:
-  static VirtualTable* VT; 
-  static StringMap* allocate() {
-    StringMap* map = gc_new(StringMap)();
+  static StringMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    StringMap* map = new(allocator, "StringMap") StringMap();
     map->lock = new mvm::LockRecursive();
     return map;
   }
@@ -188,9 +182,8 @@
 class FunctionMap :
     public LockedMap<llvm::Function*, VMMethod, std::less<llvm::Function*>, N3 > { 
 public:
-  static VirtualTable* VT; 
-  static FunctionMap* allocate() {
-    FunctionMap* map = gc_new(FunctionMap)();
+  static FunctionMap* allocate(mvm::BumpPtrAllocator &allocator) {
+    FunctionMap* map = new(allocator, "FunctionMap") FunctionMap();
     map->lock = new mvm::LockNormal();
     return map;
   }
@@ -198,14 +191,14 @@
 
 
 
-class UTF8Map : public mvm::Object {
+class UTF8Map : public mvm::PermanentObject {
 public:
   typedef std::multimap<const uint32, const UTF8*>::iterator iterator;
   
   mvm::Lock* lock;
   std::multimap<uint32, const UTF8*, std::less<uint32>,
                 gc_allocator<std::pair<const uint32, const UTF8*> > > map;
-  static VirtualTable* VT;
+
   const UTF8* lookupOrCreateAsciiz(const char* asciiz); 
   const UTF8* lookupOrCreateReader(const uint16* buf, uint32 size);
   
@@ -220,8 +213,8 @@
     buf->write("UTF8 Hashtable<>");
   }
   
-  static UTF8Map* allocate() {
-    UTF8Map* map = gc_new(UTF8Map)();
+  static UTF8Map* allocate(mvm::BumpPtrAllocator &allocator) {
+    UTF8Map* map = new(allocator, "UTF8Map") UTF8Map();
     map->lock = new mvm::LockNormal();
     return map;
   }

Modified: vmkit/trunk/lib/N3/VMCore/N3.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3.cpp?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.cpp Fri Oct  2 06:17:00 2009
@@ -60,8 +60,8 @@
 }
 
 N3* N3::allocateBootstrap() {
-  mvm::BumpPtrAllocator * A = new mvm::BumpPtrAllocator();
-  N3 *vm= new(*A, "VM") N3();
+  mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
+  N3 *vm= new(*a, "VM") N3(*a);
 
   std::string str = 
     mvm::MvmModule::executionEngine->getTargetData()->getStringRepresentation();
@@ -70,14 +70,14 @@
   vm->module = new mvm::MvmModule(vm->LLVMModule);
   vm->getLLVMModule()->setDataLayout(str);
   vm->protectModule = new mvm::LockNormal();
-  vm->functions = FunctionMap::allocate();
+  vm->functions = FunctionMap::allocate(vm->allocator);
   vm->TheModuleProvider = new N3ModuleProvider(vm->LLVMModule, vm->functions);
   CLIJit::initialiseBootstrapVM(vm);
   
   vm->name = "bootstrapN3";
-  vm->hashUTF8 = UTF8Map::allocate();
-  vm->hashStr = StringMap::allocate();
-  vm->loadedAssemblies = AssemblyMap::allocate();
+  vm->hashUTF8 = UTF8Map::allocate(vm->allocator);
+  vm->hashStr = StringMap::allocate(vm->allocator);
+  vm->loadedAssemblies = AssemblyMap::allocate(vm->allocator);
   vm->scanner = new mvm::UnpreciseStackScanner(); 
   
   return vm;
@@ -85,8 +85,8 @@
 
 
 N3* N3::allocate(const char* name, N3* parent) {
-  mvm::BumpPtrAllocator * A = new mvm::BumpPtrAllocator();
-  N3 *vm= new(*A, "VM") N3();
+  mvm::BumpPtrAllocator *a = new mvm::BumpPtrAllocator();
+  N3 *vm= new(*a, "VM") N3(*a);
   vm->scanner = new mvm::UnpreciseStackScanner(); 
   
   std::string str = 
@@ -95,7 +95,7 @@
   vm->module = new mvm::MvmModule(vm->LLVMModule);
   vm->LLVMModule->setDataLayout(str);
   vm->protectModule = new mvm::LockNormal();
-  vm->functions = FunctionMap::allocate();
+  vm->functions = FunctionMap::allocate(vm->allocator);
   vm->TheModuleProvider = new N3ModuleProvider(vm->LLVMModule, vm->functions);
   CLIJit::initialiseAppDomain(vm);
 
@@ -103,8 +103,8 @@
   vm->threadSystem = ThreadSystem::allocateThreadSystem();
   vm->name = name;
   vm->hashUTF8 = parent->hashUTF8;
-  vm->hashStr = StringMap::allocate();
-  vm->loadedAssemblies = AssemblyMap::allocate();
+  vm->hashStr = StringMap::allocate(vm->allocator);
+  vm->loadedAssemblies = AssemblyMap::allocate(vm->allocator);
   vm->assemblyPath = parent->assemblyPath;
   vm->coreAssembly = parent->coreAssembly;
   vm->loadedAssemblies->hash(parent->coreAssembly->name, parent->coreAssembly);

Modified: vmkit/trunk/lib/N3/VMCore/N3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3.h?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3.h (original)
+++ vmkit/trunk/lib/N3/VMCore/N3.h Fri Oct  2 06:17:00 2009
@@ -50,10 +50,11 @@
 
 class N3 : public VirtualMachine {
 public:
-  static VirtualTable* VT;
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;
 
+	N3(mvm::BumpPtrAllocator &allocator) : VirtualMachine(allocator) {}
+
   VMObject*     asciizToStr(const char* asciiz);
   VMObject*     UTF8ToStr(const UTF8* utf8);
   Assembly*     constructAssembly(const UTF8* name);

Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Fri Oct  2 06:17:00 2009
@@ -177,7 +177,6 @@
 	}
 #endif
   
-  INIT(Assembly);
   INIT(Header);
   INIT(Property);
   INIT(Param);
@@ -210,17 +209,7 @@
   INIT(VMThread);
   //mvm::Key<VMThread>::VT = mvm::ThreadKey::VT;
   INIT(ThreadSystem);
-  INIT(N3);
   INIT(Reader);
-  INIT(UTF8Map);
-  INIT(AssemblyMap);
-  INIT(ClassNameMap);
-  INIT(ClassTokenMap);
-  INIT(FieldTokenMap);
-  INIT(MethodTokenMap);
-  INIT(StringMap);
-  INIT(FunctionMap);
-  INIT(VirtualMachine);
   INIT(CLIString);
   INIT(CLIJit);
   INIT(CacheNode);

Modified: vmkit/trunk/lib/N3/VMCore/VirtualMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualMachine.cpp?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualMachine.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualMachine.cpp Fri Oct  2 06:17:00 2009
@@ -155,7 +155,8 @@
   delete TheModuleProvider;
 }
 
-VirtualMachine::VirtualMachine() {
+VirtualMachine::VirtualMachine(mvm::BumpPtrAllocator &allocator)
+	: mvm::VirtualMachine(allocator) {
   module = 0;
   TheModuleProvider = 0;
 }

Modified: vmkit/trunk/lib/N3/VMCore/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualMachine.h?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualMachine.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualMachine.h Fri Oct  2 06:17:00 2009
@@ -48,7 +48,6 @@
 
 class VirtualMachine : public mvm::VirtualMachine {
 public:
-  static VirtualTable* VT;
   ThreadSystem* threadSystem; 
  
   const UTF8*   asciizConstructUTF8(const char* asciiz);
@@ -119,7 +118,7 @@
   }
 
   ~VirtualMachine();
-  VirtualMachine();
+  VirtualMachine(mvm::BumpPtrAllocator &allocator);
   
   mvm::Lock* protectModule;
   FunctionMap* functions;

Modified: vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp?rev=83245&r1=83244&r2=83245&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Fri Oct  2 06:17:00 2009
@@ -50,21 +50,10 @@
   INIT(LockObj);
   INIT(VMObject);
   INIT(VMThread);
-  INIT(VirtualMachine);
-  INIT(UTF8Map);
-  INIT(ClassNameMap);
-  INIT(ClassTokenMap);
-  INIT(FieldTokenMap);
-  INIT(MethodTokenMap);
-  INIT(StringMap);
-  INIT(FunctionMap);
-  INIT(N3);
-  INIT(Assembly);
   INIT(Section);
   INIT(Stream);
   INIT(Table);
   INIT(Header);
-  INIT(AssemblyMap);
   INIT(ThreadSystem);
   INIT(CLIString);
   INIT(Property);
@@ -158,7 +147,7 @@
   TRACE_VECTOR(VMCommonClass*, display, std::allocator);
   vm->CALL_TRACER;
 
-  assembly->MARK_AND_TRACE;
+  assembly->CALL_TRACER;
   //funcs->MARK_AND_TRACE;
   TRACE_VECTOR(Property*, properties, gc_allocator);
 }
@@ -235,8 +224,8 @@
 
 void VirtualMachine::TRACER {
   threadSystem->MARK_AND_TRACE;
-  hashUTF8->MARK_AND_TRACE;
-  functions->MARK_AND_TRACE;
+  hashUTF8->CALL_TRACER;
+  functions->CALL_TRACER;
   if (bootstrapThread) {
     bootstrapThread->CALL_TRACER;
     for (VMThread* th = (VMThread*)bootstrapThread->next(); 
@@ -258,10 +247,10 @@
 }
 
 void Assembly::TRACER {
-  loadedNameClasses->MARK_AND_TRACE;
-  loadedTokenClasses->MARK_AND_TRACE;
-  loadedTokenMethods->MARK_AND_TRACE;
-  loadedTokenFields->MARK_AND_TRACE;
+  loadedNameClasses->CALL_TRACER;
+  loadedTokenClasses->CALL_TRACER;
+  loadedTokenMethods->CALL_TRACER;
+  loadedTokenFields->CALL_TRACER;
   //lockVar->MARK_AND_TRACE;
   //condVar->MARK_AND_TRACE;
   name->MARK_AND_TRACE;
@@ -277,9 +266,9 @@
 
 void N3::TRACER {
   VirtualMachine::CALL_TRACER;
-  hashUTF8->MARK_AND_TRACE;
-  hashStr->MARK_AND_TRACE;
-  loadedAssemblies->MARK_AND_TRACE;
+  hashUTF8->CALL_TRACER;
+  hashStr->CALL_TRACER;
+  loadedAssemblies->CALL_TRACER;
 }
 
 void Section::TRACER {





More information about the vmkit-commits mailing list