[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