[vmkit-commits] [vmkit] r84021 - in /vmkit/trunk/lib/N3/VMCore: CLIJit.cpp CLIJit.h CLIString.h N3Initialise.cpp VMArray.h VMClass.cpp VMObject.cpp VMObject.h VirtualTables.cpp
Gael Thomas
gael.thomas at lip6.fr
Tue Oct 13 13:48:25 PDT 2009
Author: gthomas
Date: Tue Oct 13 15:48:25 2009
New Revision: 84021
URL: http://llvm.org/viewvc/llvm-project?rev=84021&view=rev
Log:
Define a new N3VirtualTable that inherits from VirtualTable.
Put VMCond inside LockObj.
Modified:
vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
vmkit/trunk/lib/N3/VMCore/CLIJit.h
vmkit/trunk/lib/N3/VMCore/CLIString.h
vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
vmkit/trunk/lib/N3/VMCore/VMArray.h
vmkit/trunk/lib/N3/VMCore/VMClass.cpp
vmkit/trunk/lib/N3/VMCore/VMObject.cpp
vmkit/trunk/lib/N3/VMCore/VMObject.h
vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.cpp?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.cpp Tue Oct 13 15:48:25 2009
@@ -141,8 +141,8 @@
#endif
-VirtualTable* CLIJit::makeArrayVT(VMClassArray* cl) {
- VirtualTable * res = (VirtualTable*)malloc(VT_SIZE);
+N3VirtualTable* CLIJit::makeArrayVT(VMClassArray* cl) {
+ N3VirtualTable * res = (N3VirtualTable*)malloc(VT_SIZE);
memcpy(res, VMObject::VT, VT_SIZE);
#ifdef WITH_TRACER
Function* func = Function::Create(markAndTraceLLVMType,
@@ -249,17 +249,17 @@
return res;
}
-VirtualTable* CLIJit::makeVT(VMClass* cl, bool stat) {
- VirtualTable * res = (VirtualTable*)malloc(VT_SIZE);
+N3VirtualTable* CLIJit::makeVT(VMClass* cl, bool stat) {
+ N3VirtualTable * res = (N3VirtualTable*)malloc(VT_SIZE);
memcpy(res, VMObject::VT, VT_SIZE);
#ifdef WITH_TRACER
const Type* type = stat ? cl->staticType : cl->virtualType;
std::vector<VMField*> &fields = stat ? cl->staticFields : cl->virtualFields;
Function* func = Function::Create(markAndTraceLLVMType,
- GlobalValue::ExternalLinkage,
- "markAndTraceObject",
- cl->vm->getLLVMModule());
+ GlobalValue::ExternalLinkage,
+ "markAndTraceObject",
+ cl->vm->getLLVMModule());
Argument* arg = func->arg_begin();
#ifdef MULTIPLE_GC
@@ -298,7 +298,7 @@
cl->staticTracer = func;
}
#endif
-
+
return res;
}
Modified: vmkit/trunk/lib/N3/VMCore/CLIJit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIJit.h?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIJit.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIJit.h Tue Oct 13 15:48:25 2009
@@ -42,7 +42,6 @@
class ExceptionBlockDesc : public mvm::PermanentObject {
public:
- static VirtualTable* VT;
uint32 tryOffset;
uint32 tryLength;
uint32 handlerOffset;
@@ -81,8 +80,8 @@
static const char* OpcodeNames[0xE1];
static const char* OpcodeNamesFE[0x23];
- static VirtualTable* makeVT(VMClass* cl, bool isStatic);
- static VirtualTable* makeArrayVT(VMClassArray* cl);
+ static N3VirtualTable* makeVT(VMClass* cl, bool isStatic);
+ static N3VirtualTable* makeArrayVT(VMClassArray* cl);
static void printExecution(char*, n3::VMMethod*);
void compileOpcodes(uint8*, uint32, VMGenericClass* genClass, VMGenericMethod* genMethod);
Modified: vmkit/trunk/lib/N3/VMCore/CLIString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/CLIString.h?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/CLIString.h (original)
+++ vmkit/trunk/lib/N3/VMCore/CLIString.h Tue Oct 13 15:48:25 2009
@@ -24,7 +24,7 @@
class CLIString : public VMObject {
public:
- static VirtualTable* VT;
+ static N3VirtualTable* VT;
virtual void print(mvm::PrintBuffer* buf) const {
buf->write("CLI string");
}
Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Tue Oct 13 15:48:25 2009
@@ -158,12 +158,12 @@
#if defined(WITHOUT_FINALIZER)
# define INIT(X) { \
X fake; \
- X::VT = ((VirtualTable**)(void*)(&fake))[0]; \
+ X::VT = ((N3VirtualTable**)(void*)(&fake))[0]; \
}
#else
# define INIT(X) { \
X fake; \
- X::VT = ((VirtualTable**)(void*)(&fake))[0]; \
+ X::VT = ((N3VirtualTable**)(void*)(&fake))[0]; \
((void**)X::VT)[0] = 0; \
}
#endif
Modified: vmkit/trunk/lib/N3/VMCore/VMArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMArray.h?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMArray.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMArray.h Tue Oct 13 15:48:25 2009
@@ -64,7 +64,7 @@
class Array##name : public VMObject { \
void *operator new(size_t n) { return VMObject::operator new(n, 0); } \
public: \
- static VirtualTable* VT; \
+ static N3VirtualTable* VT; \
static const llvm::Type* llvmType; \
sint32 size; \
elmt elements[1]; \
Modified: vmkit/trunk/lib/N3/VMCore/VMClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.cpp?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.cpp Tue Oct 13 15:48:25 2009
@@ -292,7 +292,7 @@
cl->staticType = llvm::PointerType::getUnqual(llvm::StructType::get(vm->LLVMModule->getContext(), fields, false));
- VirtualTable* VT = CLIJit::makeVT(cl, true);
+ N3VirtualTable* VT = CLIJit::makeVT(cl, true);
uint64 size = mvm::MvmModule::getTypeSize(cl->staticType->getContainedType(0));
cl->staticInstance = (VMObject*)gc::operator new(size, VT);
@@ -465,7 +465,7 @@
// We check for virtual instance because the string class has a
// bigger size than the class declares.
if (super != MSCorlib::pEnum && !cl->virtualInstance) {
- VirtualTable* VT = CLIJit::makeVT(cl, false);
+ N3VirtualTable* VT = CLIJit::makeVT(cl, false);
uint64 size = mvm::MvmModule::getTypeSize(cl->virtualType->getContainedType(0));
cl->virtualInstance = (VMObject*)gc::operator new(size, VT);
Modified: vmkit/trunk/lib/N3/VMCore/VMObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMObject.cpp?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.cpp Tue Oct 13 15:48:25 2009
@@ -23,7 +23,7 @@
this->lockObj = 0;
}
-void VMCond::notify() {
+void LockObj::notify() {
for (std::vector<VMThread*>::iterator i = threads.begin(),
e = threads.end(); i!= e; ++i) {
VMThread* cur = *i;
@@ -45,7 +45,7 @@
}
}
-void VMCond::notifyAll() {
+void LockObj::notifyAll() {
for (std::vector<VMThread*>::iterator i = threads.begin(),
e = threads.end(); i!= e; ++i) {
VMThread* cur = *i;
@@ -56,11 +56,11 @@
}
}
-void VMCond::wait(VMThread* th) {
+void LockObj::wait(VMThread* th) {
threads.push_back(th);
}
-void VMCond::remove(VMThread* th) {
+void LockObj::remove(VMThread* th) {
for (std::vector<VMThread*>::iterator i = threads.begin(),
e = threads.end(); i!= e; ++i) {
if (*i == th) {
@@ -142,7 +142,7 @@
unsigned int recur = l->lock.recursionCount();
bool timeout = false;
l->lock.unlockAll();
- l->varcond.wait(thread);
+ l->wait(thread);
thread->state = VMThread::StateWaiting;
if (timed) {
@@ -156,7 +156,7 @@
l->lock.lockAll(recur);
if (interrupted || timeout) {
- l->varcond.remove(thread);
+ l->remove(thread);
}
thread->state = VMThread::StateRunning;
@@ -182,7 +182,7 @@
void VMObject::notify() {
LockObj* l = myLock(this);
if (l->owner()) {
- l->varcond.notify();
+ l->notify();
} else {
VMThread::get()->getVM()->illegalMonitorStateException(this);
}
@@ -191,7 +191,7 @@
void VMObject::notifyAll() {
LockObj* l = myLock(this);
if (l->owner()) {
- l->varcond.notifyAll();
+ l->notifyAll();
} else {
VMThread::get()->getVM()->illegalMonitorStateException(this);
}
Modified: vmkit/trunk/lib/N3/VMCore/VMObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMObject.h?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.h Tue Oct 13 15:48:25 2009
@@ -19,6 +19,8 @@
#include "mvm/Object.h"
#include "mvm/Threads/Locks.h"
+#include "mvm/GC/GC.h"
+
#include "types.h"
namespace n3 {
@@ -28,26 +30,32 @@
class VMObject;
class VMThread;
-class VMCond {
-public:
- std::vector<VMThread*> threads;
-
- void notify();
- void notifyAll();
- void wait(VMThread* th);
- void remove(VMThread* th);
+struct N3VirtualTable : VirtualTable {
+ uintptr_t print;
+ uintptr_t hashcode;
+
+ N3VirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, uintptr_t p, uintptr_t h) : VirtualTable(d, o, t) {
+ print = p;
+ hashcode = h;
+ }
};
class LockObj : public mvm::Object {
public:
- static VirtualTable* VT;
- mvm::LockRecursive lock;
- VMCond varcond;
+ static N3VirtualTable* VT;
+ mvm::LockRecursive lock;
+ std::vector<VMThread*> threads;
+
+ static LockObj* allocate();
virtual void print(mvm::PrintBuffer* buf) const;
virtual void TRACER;
+
+ void notify();
+ void notifyAll();
+ void wait(VMThread* th);
+ void remove(VMThread* th);
- static LockObj* allocate();
void aquire();
void release();
bool owner();
@@ -57,7 +65,7 @@
class VMObject : public mvm::Object {
public:
- static VirtualTable* VT;
+ static N3VirtualTable* VT;
VMCommonClass* classOf;
LockObj* lockObj;
Modified: vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp?rev=84021&r1=84020&r2=84021&view=diff
==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Tue Oct 13 15:48:25 2009
@@ -23,7 +23,7 @@
using namespace n3;
-#define INIT(X) VirtualTable* X::VT = 0
+#define INIT(X) N3VirtualTable* X::VT = 0
INIT(LockObj);
INIT(VMObject);
More information about the vmkit-commits
mailing list