[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