[llvm-commits] [vmkit] r49388 - in /vmkit/trunk: include/mvm/ include/mvm/Threads/ lib/JnJVM/ lib/JnJVM/Classpath/ lib/JnJVM/VMCore/ lib/Mvm/ lib/Mvm/Allocator/ lib/Mvm/CommonThread/ lib/Mvm/GCMmap2/ lib/N3/ lib/N3/VMCore/

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Apr 8 10:06:22 PDT 2008


Author: geoffray
Date: Tue Apr  8 12:06:22 2008
New Revision: 49388

URL: http://llvm.org/viewvc/llvm-project?rev=49388&view=rev
Log:
Many cleanups:
- Use -DMULTIPLE_VM to run isolates
- Fix LLVM include list in .h files
- Code cleanup
- 80-Col violation
- Remove unused file VMLet.h



Removed:
    vmkit/trunk/include/mvm/VMLet.h
Modified:
    vmkit/trunk/include/mvm/JIT.h
    vmkit/trunk/include/mvm/Object.h
    vmkit/trunk/include/mvm/Threads/Thread.h
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp
    vmkit/trunk/lib/JnJVM/Classpath/Makefile.am
    vmkit/trunk/lib/JnJVM/Main.cpp
    vmkit/trunk/lib/JnJVM/Makefile.am
    vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
    vmkit/trunk/lib/JnJVM/VMCore/Makefile.am
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
    vmkit/trunk/lib/Mvm/Allocator/Makefile.am
    vmkit/trunk/lib/Mvm/CommonThread/Makefile.am
    vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
    vmkit/trunk/lib/Mvm/JIT.cpp
    vmkit/trunk/lib/Mvm/Main.cpp
    vmkit/trunk/lib/Mvm/Makefile.am
    vmkit/trunk/lib/Mvm/Object.cpp
    vmkit/trunk/lib/Mvm/Sigsegv.cpp
    vmkit/trunk/lib/N3/Main.cpp
    vmkit/trunk/lib/N3/Makefile.am
    vmkit/trunk/lib/N3/VMCore/Makefile.am
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp
    vmkit/trunk/lib/N3/VMCore/VMThread.cpp
    vmkit/trunk/lib/N3/VMCore/VMThread.h

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

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Tue Apr  8 12:06:22 2008
@@ -96,11 +96,10 @@
 extern llvm::ExecutionEngine* executionEngine;
 
 extern uint64 getTypeSize(const llvm::Type* type);
-
 extern void AddStandardCompilePasses(llvm::FunctionPassManager*);
-
 extern void runPasses(llvm::Function* func, llvm::FunctionPassManager*);
-extern void* runCompilation(llvm::Function*);
+extern void initialise();
+
 
 //extern mvm::Lock* protectTypes;
 //extern mvm::Lock* protectConstants;

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

==============================================================================
--- vmkit/trunk/include/mvm/Object.h (original)
+++ vmkit/trunk/include/mvm/Object.h Tue Apr  8 12:06:22 2008
@@ -87,7 +87,7 @@
   }
 
   static void markAndTraceRoots(void);
-  static void initialise(void *sp);
+  static void initialise();
 
 };
 

Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Tue Apr  8 12:06:22 2008
@@ -10,10 +10,14 @@
 #ifndef MVM_THREAD_H
 #define MVM_THREAD_H
 
-#include "mvm/GC/GC.h"
+#include "mvm/Object.h"
+#include "mvm/Threads/Key.h"
+
+class Collector;
 
 namespace mvm {
-class Thread {
+
+class Thread : public Object{
 public:
   static void yield(void);
   static void yield(unsigned int *);
@@ -22,6 +26,12 @@
   static int kill(int tid, int signo);
   static void exit(int value);
   static int start(int *tid, int (*fct)(void *), void *arg);
+  
+  static mvm::Key<Thread>* threadKey;
+#ifdef MULTIPLE_VM
+  Collector* GC;
+#endif
+  static Thread* get();
 
 };
 

Removed: vmkit/trunk/include/mvm/VMLet.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VMLet.h?rev=49387&view=auto

==============================================================================
--- vmkit/trunk/include/mvm/VMLet.h (original)
+++ vmkit/trunk/include/mvm/VMLet.h (removed)
@@ -1,38 +0,0 @@
-//===--------------- VMLet.h - Definition of VMLets -----------------------===//
-//
-//                     The Micro Virtual Machine
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MVM_VMLET_H
-#define MVM_VMLET_H
-
-#include "mvm/Object.h"
-#include "mvm/Threads/Key.h"
-
-namespace llvm {
-  class Module;
-  class ExistingModuleProvider;
-  class ExecutionEngine;
-  class FunctionPassManager;
-  class JITMemoryManager;
-}
-
-namespace mvm {
-
-class VMLet : public Object {
-public:
-  static VirtualTable *VT;
-  //GC_defass(String, name);
-
-  static void register_sigsegv_handler(void (*fct)(int, void *));
-
-  static void initialise();
-};
-
-} // end namespace mvm
-
-#endif // MVM_VMLET_H

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp Tue Apr  8 12:06:22 2008
@@ -100,7 +100,7 @@
     if (cl->status == hashed) {
       cl->bytes = (ArrayUInt8*)bytes;
       cl->status = loaded;
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
       cl->delegatee = (JavaObject*)pd;
 #else
       vm->delegatees->hash(cl, (JavaObject*)pd);

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp Tue Apr  8 12:06:22 2008
@@ -115,7 +115,7 @@
 jclass clazz,
 #endif
 jint par1) {
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   exit(par1);
 #else
   // TODO: do a longjmp

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp Tue Apr  8 12:06:22 2008
@@ -50,7 +50,7 @@
   JavaObject* vmThread = arg->vmThread;
   JavaThread* intern = arg->intern;
   delete arg;
-  JavaThread::threadKey->set(intern);
+  mvm::Thread::threadKey->set(intern);
   CommonClass* vmthClass = vmThread->classOf;
   JavaObject* thread = (JavaObject*)((*ClasspathThread::assocThread)(vmThread).PointerVal);
   JavaIsolate* isolate = (JavaIsolate*)(intern->isolate);
@@ -86,7 +86,8 @@
   JavaObject* javaThread = (JavaObject*)(*ClasspathThread::assocThread)(vmThread).PointerVal;
   assert(javaThread);
 
-  JavaThread* th = JavaThread::allocate(javaThread, JavaThread::get()->isolate);
+  JavaThread* th = gc_new(JavaThread)();
+  th->initialise(javaThread, JavaThread::get()->isolate);
   (*ClasspathThread::vmdata)(vmThread, (JavaObject*)th);
   int tid = 0;
   arg_thread_t* arg = (arg_thread_t*)malloc(sizeof(arg_thread_t));

Modified: vmkit/trunk/lib/JnJVM/Classpath/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/Makefile.am Tue Apr  8 12:06:22 2008
@@ -17,4 +17,4 @@
 	ClasspathVMThrowable.h ClasspathVMThrowable.cpp ClasspathMethod.h ClasspathMethod.cpp \
 	ClasspathVMField.h ClasspathVMField.cpp ClasspathVMStackWalker.cpp ClasspathVMStackWalker.h
 
-libClasspath_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -DSINGLE_VM -O2 -g -Werror
+libClasspath_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -O2 -g -Werror

Modified: vmkit/trunk/lib/JnJVM/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Main.cpp?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Main.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Main.cpp Tue Apr  8 12:06:22 2008
@@ -7,77 +7,27 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "mvm/JIT.h"
+#include "mvm/Object.h"
 #include "mvm/GC/GC.h"
-#include "mvm/PrintBuffer.h"
-#include "mvm/VMLet.h"
-
-
-#include <dlfcn.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stdio.h>
 
 #include "llvm/Support/ManagedStatic.h"
 
-#include "mvm/Threads/Thread.h"
-
 using namespace mvm;
 
 
-static void clearSignals(void) {
-  signal(SIGINT,  SIG_DFL);
-  signal(SIGILL,  SIG_DFL);
-#if !defined(WIN32)
-  signal(SIGIOT,  SIG_DFL);
-  signal(SIGBUS,  SIG_DFL);
-#endif
-  signal(SIGSEGV, SIG_DFL);
-}
-
 extern "C" int boot();
 extern "C" int start_app(int, char**);
-extern "C" int ClasspathBoot(int, char**, char**);
-
-#include "VMCore/JavaJIT.h"
-
-void handler2(int n, void *context) {
-  printf("[%d] crashed\n", (int)mvm::Thread::self());
-  jnjvm::JavaJIT::printBacktrace();
-  assert(0);
-}
-
-void handler(int n, siginfo_t *_info, void *context) {
-  printf("[%d] crashed\n", (int)mvm::Thread::self());
-  jnjvm::JavaJIT::printBacktrace();
-  assert(0);
-}
 
 int main(int argc, char **argv, char **envp) {
   llvm::llvm_shutdown_obj X;  
   int base;
-  
-  struct sigaction sa;
-
-  sigaction(SIGINT, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGINT, &sa, 0);
-  
-  sigaction(SIGILL, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGILL, &sa, 0);
-  
-  
-  VMLet::register_sigsegv_handler(handler2);
-
-  Object::initialise(&base);
-  VMLet::initialise();
-  ClasspathBoot(argc, argv, envp);
+    
+  jit::initialise();
+  Object::initialise();
+  Collector::initialise(Object::markAndTraceRoots, &base);
   boot();
   start_app(argc, argv);
 
-  clearSignals();
-    
   return 0;
 }

Modified: vmkit/trunk/lib/JnJVM/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/Makefile.am Tue Apr  8 12:06:22 2008
@@ -17,7 +17,7 @@
 main_SOURCES = ../Mvm/Object.cpp ../Mvm/Sigsegv.cpp Main.cpp ../Mvm/MvmMemoryManager.cpp ../Mvm/JIT.cpp ../Mvm/EscapeAnalysis.cpp
 
 
-main_CXXFLAGS = $(libJnJVM_la_CXXFLAGS)
+main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
 main_LDADD = VMCore/.libs/libJnJVM.a Classpath/.libs/libClasspath.a $(LIBSUVM) @LLVMDYLIB@
 main_LDFLAGS = @rdynamic@
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp Tue Apr  8 12:06:22 2008
@@ -30,6 +30,17 @@
 const unsigned int JavaArray::T_INT = 10;
 const unsigned int JavaArray::T_LONG = 11;
 
+ClassArray* JavaArray::ofByte = 0;
+ClassArray* JavaArray::ofChar = 0;
+ClassArray* JavaArray::ofInt = 0;
+ClassArray* JavaArray::ofShort = 0;
+ClassArray* JavaArray::ofBool = 0;
+ClassArray* JavaArray::ofLong = 0;
+ClassArray* JavaArray::ofFloat = 0;
+ClassArray* JavaArray::ofDouble = 0;
+ClassArray* JavaArray::ofString = 0;
+ClassArray* JavaArray::ofObject = 0;
+
 #define ACONS(name, elmt, primSize)                                         \
   name *name::acons(sint32 n, ClassArray* atype) {                          \
     if (n < 0)                                                              \

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Tue Apr  8 12:06:22 2008
@@ -125,7 +125,7 @@
 
   const UTF8* extract(Jnjvm *vm, uint32 start, uint32 len) const;
 
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   bool equals(const UTF8* other) const {
     return this == other;
   }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Tue Apr  8 12:06:22 2008
@@ -35,6 +35,22 @@
 
 const int CommonClass::MaxDisplay = 6;
 
+const UTF8* Attribut::codeAttribut = 0;
+const UTF8* Attribut::exceptionsAttribut = 0;
+const UTF8* Attribut::constantAttribut = 0;
+const UTF8* Attribut::lineNumberTableAttribut = 0;
+const UTF8* Attribut::innerClassesAttribut = 0;
+const UTF8* Attribut::sourceFileAttribut = 0;
+
+JavaObject* CommonClass::jnjvmClassLoader = 0;
+
+CommonClass* ClassArray::SuperArray = 0;
+std::vector<Class*> ClassArray::InterfacesArray;
+std::vector<JavaMethod*> ClassArray::VirtualMethodsArray;
+std::vector<JavaMethod*> ClassArray::StaticMethodsArray;
+std::vector<JavaField*> ClassArray::VirtualFieldsArray;
+std::vector<JavaField*> ClassArray::StaticFieldsArray;
+
 void Attribut::print(mvm::PrintBuffer* buf) const {
   buf->write("Attribut<");
   buf->writeObj(name);
@@ -116,7 +132,7 @@
   this->dim = -1;
   this->isArray = isArray;
   this->_llvmVar = 0;
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   this->_llvmDelegatee = 0;
   this->delegatee = 0;
 #endif
@@ -357,16 +373,6 @@
   return res;
 }
 
-#ifndef SINGLE_VM
-JavaObject* Class::doNewIsolate() {
-  if (!isReady())
-    initialiseClass();
-  JavaObject* res = (JavaObject*)gc::operator new(virtualSize, virtualVT);
-  memcpy(res, virtualInstance, virtualSize);  
-  return res;
-}
-#endif
-
 bool CommonClass::inheritName(const UTF8* Tname) {
   if (name->equals(Tname)) {
     return true;
@@ -515,21 +521,19 @@
   VirtualTable* VT = JavaJIT::makeVT(cl, true);
 
   uint64 size = mvm::jit::getTypeSize(cl->staticType->getContainedType(0));
-#ifndef SINGLE_VM
   cl->staticSize = size;
   cl->staticVT = VT;
-  if (cl->isolate != Jnjvm::bootstrapVM) {
-#endif
-  JavaObject* val = (JavaObject*)gc::operator new(size, VT);
-  cl->setStaticInstance(val);
+
+#ifndef MULTIPLE_VM
+  JavaObject* val = (JavaObject*)gc::operator new(cl->staticSize, cl->staticVT);
   val->initialise(cl);
   for (std::vector<JavaField*>::iterator i = cl->staticFields.begin(),
             e = cl->staticFields.end(); i!= e; ++i) {
     
     (*i)->initField(val);
   }
-#ifndef SINGLE_VM
-  }
+  
+  cl->_staticInstance = val;
 #endif
 }
 
@@ -589,11 +593,7 @@
   return isolate->initialiseClass(this);
 }
 
-#ifndef SINGLE_VM
-void Class::setStaticInstance(JavaObject* val) {
-  _staticInstance = val;
-}
-
+#ifdef MULTIPLE_VM
 JavaObject* Class::staticInstance() {
   if (isolate == Jnjvm::bootstrapVM) {
     Class* cl = this;
@@ -606,7 +606,7 @@
   }
 }
 
-JavaObject* Class::createStaticInstance() {
+void Class::createStaticInstance() {
   JavaObject* val = (JavaObject*)gc::operator new(staticSize, staticVT);
   val->initialise(this);
   for (std::vector<JavaField*>::iterator i = this->staticFields.begin(),
@@ -614,7 +614,13 @@
     
     (*i)->initField(val);
   }
-  return val;
+  if (isolate == Jnjvm::bootstrapVM) {
+    std::pair<uint8, JavaObject*>* v = 
+      new std::pair<uint8, JavaObject*>(0, val);
+    JavaThread::get()->isolate->statics->hash(this, v);
+  } else {
+    _staticInstance = val;
+  }
 }
 
 bool CommonClass::isReady() {
@@ -629,4 +635,14 @@
   }
 }
 
+void CommonClass::setReady() {
+  if (isolate == Jnjvm::bootstrapVM && !this->isArray &&
+      !AssessorDesc::bogusClassToPrimitive(this)) {
+    std::pair<uint8, JavaObject*>* val = 
+      JavaThread::get()->isolate->statics->lookup((Class*)this);
+    val->first = 1;
+  } else {
+    status = ready;
+  }
+}
 #endif

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Apr  8 12:06:22 2008
@@ -76,7 +76,7 @@
 class CommonClass : public mvm::Object {
 private:
   llvm::GlobalVariable* _llvmVar;
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   llvm::GlobalVariable* _llvmDelegatee;
 #endif
 public:
@@ -95,7 +95,7 @@
   std::vector<JavaField*>  virtualFields;
   std::vector<JavaField*>  staticFields;
   JavaObject* classLoader;
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   JavaObject* delegatee;
 #endif
   std::vector<CommonClass*> display;
@@ -111,9 +111,8 @@
   static JavaObject* jnjvmClassLoader;
 
   llvm::GlobalVariable* llvmVar(llvm::Module* compilingModule);
-#ifdef SINGLE_VM
-  llvm::GlobalVariable* llvmDelegatee();
-#endif
+  llvm::Value* llvmDelegatee(llvm::Module* M, llvm::BasicBlock* BB);
+  
   static void printClassName(const UTF8* name, mvm::PrintBuffer* buf);
   void initialise(Jnjvm* isolate, bool array);
   void aquire(); 
@@ -148,12 +147,16 @@
   void initialiseClass();
   void resolveClass(bool doClinit);
 
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   bool isReady() {
     return status == ready;
   }
+  void setReady() {
+    status = ready;
+  }
 #else
   bool isReady();
+  void setReady();
 #endif
 
 };
@@ -181,15 +184,12 @@
   bool innerOuterResolved;
   
   void resolveFields();
-  llvm::GlobalVariable* staticVar(llvm::Module* compilingModule);
+  llvm::Value* staticVar(llvm::Module* compilingModule, llvm::BasicBlock* BB);
   
   uint64 virtualSize;
   VirtualTable* virtualVT;
-#ifndef SINGLE_VM
   uint64 staticSize;
   VirtualTable* staticVT;
-  JavaObject* doNewIsolate();
-#endif
   JavaObject* doNew();
   JavaObject* doNewUnknown();
   JavaObject* initialiseObject(JavaObject* obj);
@@ -198,17 +198,14 @@
 
   JavaObject* operator()();
 
-#ifdef SINGLE_VM
-  void setStaticInstance(JavaObject* val) {
-    _staticInstance = val;
-  }
+#ifndef MULTIPLE_VM
   JavaObject* staticInstance() {
     return _staticInstance;
   }
+  void createStaticInstance() { }
 #else
-  void setStaticInstance(JavaObject* val);
   JavaObject* staticInstance();
-  JavaObject* createStaticInstance();
+  void createStaticInstance();
 #endif
 
 };

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Tue Apr  8 12:06:22 2008
@@ -7,10 +7,9 @@
 //
 //===----------------------------------------------------------------------===//
 
-
+#include <signal.h>
 #include <vector>
 
-#include "mvm/VMLet.h"
 #include "mvm/Threads/Locks.h"
 
 #include "JavaArray.h"
@@ -31,143 +30,8 @@
 #include "LockedMap.h"
 #include "Zip.h"
 
-
-
-
 using namespace jnjvm;
 
-ClassArray* JavaArray::ofByte = 0;
-ClassArray* JavaArray::ofChar = 0;
-ClassArray* JavaArray::ofInt = 0;
-ClassArray* JavaArray::ofShort = 0;
-ClassArray* JavaArray::ofBool = 0;
-ClassArray* JavaArray::ofLong = 0;
-ClassArray* JavaArray::ofFloat = 0;
-ClassArray* JavaArray::ofDouble = 0;
-ClassArray* JavaArray::ofString = 0;
-ClassArray* JavaArray::ofObject = 0;
-
-const UTF8* Attribut::codeAttribut = 0;
-const UTF8* Attribut::exceptionsAttribut = 0;
-const UTF8* Attribut::constantAttribut = 0;
-const UTF8* Attribut::lineNumberTableAttribut = 0;
-const UTF8* Attribut::innerClassesAttribut = 0;
-const UTF8* Attribut::sourceFileAttribut = 0;
-
-JavaObject* CommonClass::jnjvmClassLoader = 0;
-
-CommonClass* ClassArray::SuperArray = 0;
-std::vector<Class*> ClassArray::InterfacesArray;
-std::vector<JavaMethod*> ClassArray::VirtualMethodsArray;
-std::vector<JavaMethod*> ClassArray::StaticMethodsArray;
-std::vector<JavaField*> ClassArray::VirtualFieldsArray;
-std::vector<JavaField*> ClassArray::StaticFieldsArray;
-
-
-llvm::Function* JavaJIT::getSJLJBufferLLVM = 0;
-llvm::Function* JavaJIT::throwExceptionLLVM = 0;
-llvm::Function* JavaJIT::getExceptionLLVM = 0;
-llvm::Function* JavaJIT::getJavaExceptionLLVM = 0;
-llvm::Function* JavaJIT::clearExceptionLLVM = 0;
-llvm::Function* JavaJIT::compareExceptionLLVM = 0;
-llvm::Function* JavaJIT::nullPointerExceptionLLVM = 0;
-llvm::Function* JavaJIT::classCastExceptionLLVM = 0;
-llvm::Function* JavaJIT::indexOutOfBoundsExceptionLLVM = 0;
-llvm::Function* JavaJIT::markAndTraceLLVM = 0;
-llvm::Function* JavaJIT::javaObjectTracerLLVM = 0;
-llvm::Function* JavaJIT::virtualLookupLLVM = 0;
-llvm::Function* JavaJIT::fieldLookupLLVM = 0;
-llvm::Function* JavaJIT::UTF8AconsLLVM = 0;
-llvm::Function* JavaJIT::Int8AconsLLVM = 0;
-llvm::Function* JavaJIT::Int32AconsLLVM = 0;
-llvm::Function* JavaJIT::Int16AconsLLVM = 0;
-llvm::Function* JavaJIT::FloatAconsLLVM = 0;
-llvm::Function* JavaJIT::DoubleAconsLLVM = 0;
-llvm::Function* JavaJIT::LongAconsLLVM = 0;
-llvm::Function* JavaJIT::ObjectAconsLLVM = 0;
-llvm::Function* JavaJIT::printExecutionLLVM = 0;
-llvm::Function* JavaJIT::printMethodStartLLVM = 0;
-llvm::Function* JavaJIT::printMethodEndLLVM = 0;
-llvm::Function* JavaJIT::jniProceedPendingExceptionLLVM = 0;
-llvm::Function* JavaJIT::doNewLLVM = 0;
-llvm::Function* JavaJIT::doNewUnknownLLVM = 0;
-llvm::Function* JavaJIT::initialiseObjectLLVM = 0;
-llvm::Function* JavaJIT::newLookupLLVM = 0;
-llvm::Function* JavaJIT::instanceOfLLVM = 0;
-llvm::Function* JavaJIT::aquireObjectLLVM = 0;
-llvm::Function* JavaJIT::releaseObjectLLVM = 0;
-llvm::Function* JavaJIT::multiCallNewLLVM = 0;
-llvm::Function* JavaJIT::runtimeUTF8ToStrLLVM = 0;
-llvm::Function* JavaJIT::getStaticInstanceLLVM = 0;
-llvm::Function* JavaJIT::getClassDelegateeLLVM = 0;
-llvm::Function* JavaJIT::arrayLengthLLVM = 0;
-#ifndef SINGLE_VM
-llvm::Function* JavaJIT::doNewIsolateLLVM = 0;
-#endif
-
-
-const llvm::FunctionType* JavaJIT::markAndTraceLLVMType = 0;
-
-mvm::Lock* JavaObject::globalLock = 0;
-const llvm::Type* JavaObject::llvmType = 0;
-const llvm::Type* JavaArray::llvmType = 0;
-const llvm::Type* ArrayUInt8::llvmType = 0;
-const llvm::Type* ArraySInt8::llvmType = 0;
-const llvm::Type* ArrayUInt16::llvmType = 0;
-const llvm::Type* ArraySInt16::llvmType = 0;
-const llvm::Type* ArrayUInt32::llvmType = 0;
-const llvm::Type* ArraySInt32::llvmType = 0;
-const llvm::Type* ArrayFloat::llvmType = 0;
-const llvm::Type* ArrayDouble::llvmType = 0;
-const llvm::Type* ArrayLong::llvmType = 0;
-const llvm::Type* ArrayObject::llvmType = 0;
-const llvm::Type* UTF8::llvmType = 0;
-const llvm::Type* CacheNode::llvmType = 0;
-const llvm::Type* Enveloppe::llvmType = 0;
-
-
-mvm::Key<JavaThread>* JavaThread::threadKey = 0;
-
-
-Jnjvm* Jnjvm::bootstrapVM = 0;
-const UTF8* Jnjvm::initName = 0;
-const UTF8* Jnjvm::clinitName = 0;
-const UTF8* Jnjvm::clinitType = 0;
-const UTF8* Jnjvm::runName = 0;
-const UTF8* Jnjvm::prelib = 0;
-const UTF8* Jnjvm::postlib = 0;
-const UTF8* Jnjvm::mathName = 0;
-
-#define DEF_UTF8(var) \
-  const UTF8* Jnjvm::var = 0;
-  
-  DEF_UTF8(abs);
-  DEF_UTF8(sqrt);
-  DEF_UTF8(sin);
-  DEF_UTF8(cos);
-  DEF_UTF8(tan);
-  DEF_UTF8(asin);
-  DEF_UTF8(acos);
-  DEF_UTF8(atan);
-  DEF_UTF8(atan2);
-  DEF_UTF8(exp);
-  DEF_UTF8(log);
-  DEF_UTF8(pow);
-  DEF_UTF8(ceil);
-  DEF_UTF8(floor);
-  DEF_UTF8(rint);
-  DEF_UTF8(cbrt);
-  DEF_UTF8(cosh);
-  DEF_UTF8(expm1);
-  DEF_UTF8(hypot);
-  DEF_UTF8(log10);
-  DEF_UTF8(log1p);
-  DEF_UTF8(sinh);
-  DEF_UTF8(tanh);
-
-#undef DEF_UTF8
-
-
 static void initialiseVT() {
 
 # define INIT(X) { \
@@ -199,7 +63,6 @@
   INIT(LockObj);
   INIT(JavaObject);
   INIT(JavaThread);
-  //mvm::Key<JavaThread>::VT = mvm::ThreadKey::VT;
   INIT(AssessorDesc);
   INIT(Typedef);
   INIT(Signdef);
@@ -227,10 +90,6 @@
   JavaObject::globalLock = mvm::Lock::allocNormal();
   //mvm::Object::pushRoot((mvm::Object*)JavaObject::globalLock);
 
-  JavaThread::threadKey = new mvm::Key<JavaThread>();
-  //JavaThread::threadKey = gc_new(mvm::Key<JavaThread>);
-  //mvm::Object::pushRoot((mvm::Object*)JavaThread::threadKey);
-  
   Jnjvm* vm = JavaIsolate::bootstrapVM = JavaIsolate::allocateBootstrap();
   mvm::Object::pushRoot((mvm::Object*)JavaIsolate::bootstrapVM);
   
@@ -336,24 +195,43 @@
  
 }
 
-extern "C" void sigsegv_handler(int val, void* addr) {
-  printf("SIGSEGV in JnJVM at %p\n", addr);
+extern "C" void ClasspathBoot();
+
+void handler(int val, siginfo_t* info, void* addr) {
+  printf("Crash in JnJVM at %p\n", addr);
   JavaJIT::printBacktrace();
   assert(0);
 }
 
-
 extern "C" int boot() {
+  struct sigaction sa;
+  
+  sigaction(SIGINT, 0, &sa);
+  sa.sa_sigaction = handler;
+  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
+  sigaction(SIGINT, &sa, 0);
+  
+  sigaction(SIGILL, 0, &sa);
+  sa.sa_sigaction = handler;
+  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
+  sigaction(SIGILL, &sa, 0);
+  
+  sigaction(SIGSEGV, 0, &sa);
+  sa.sa_sigaction = handler;
+  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
+  sigaction(SIGSEGV, &sa, 0);
+  
   JavaJIT::initialise();
   initialiseVT();
   initialiseStatics();
+  
+  ClasspathBoot();
   Classpath::initialiseClasspath(JavaIsolate::bootstrapVM);
-  //mvm::VMLet::register_sigsegv_handler(sigsegv_handler);
   return 0; 
 }
 
 extern "C" int start_app(int argc, char** argv) {
-#if defined(SINGLE_VM) || defined(SERVICE_VM)
+#if defined(SERVICE_VM) || !defined(MULTIPLE_VM)
   JavaIsolate* vm = (JavaIsolate*)JavaIsolate::bootstrapVM;
 #else
   JavaIsolate* vm = JavaIsolate::allocateIsolate(JavaIsolate::bootstrapVM);

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp Tue Apr  8 12:06:22 2008
@@ -433,7 +433,9 @@
                                                        isolate->functions);  
   JavaJIT::initialiseJITIsolateVM(isolate);
   
-  isolate->bootstrapThread = JavaThread::allocate(0, isolate);
+
+  isolate->bootstrapThread = gc_new(JavaThread)();
+  isolate->bootstrapThread->initialise(0, isolate);
   JavaThread::threadKey->set(isolate->bootstrapThread);
 
   
@@ -451,7 +453,7 @@
   isolate->loadedFields = FieldMap::allocate();
   isolate->javaTypes = jnjvm::TypeMap::allocate(); 
   isolate->globalRefsLock = mvm::Lock::allocNormal();
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
   isolate->statics = StaticInstanceMap::allocate();  
   isolate->delegatees = DelegateeMap::allocate(); 
 #endif
@@ -484,7 +486,8 @@
                                                        isolate->functions);  
   JavaJIT::initialiseJITBootstrapVM(isolate);
   
-  isolate->bootstrapThread = JavaThread::allocate(0, isolate);
+  isolate->bootstrapThread = gc_new(JavaThread)();
+  isolate->bootstrapThread->initialise(0, isolate);
   JavaThread::threadKey->set(isolate->bootstrapThread);
 
   isolate->name = "bootstrapVM";
@@ -498,11 +501,13 @@
   isolate->javavmEnv = &JNI_JavaVMTable;
   isolate->globalRefsLock = mvm::Lock::allocNormal();
   isolate->javaTypes = jnjvm::TypeMap::allocate();  
-#ifndef SINGLE_VM
+
+#ifdef MULTIPLE_VM
   isolate->statics = StaticInstanceMap::allocate();  
   isolate->delegatees = DelegateeMap::allocate(); 
 #endif
-#if defined(SINGLE_VM) || defined(SERVICE_VM)
+
+#if defined(SERVICE_VM) || !defined(MULTIPLE_VM)
   isolate->threadSystem = ThreadSystem::allocateThreadSystem();
 #endif
   

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Tue Apr  8 12:06:22 2008
@@ -170,15 +170,8 @@
 
   uint32 index = 0;
   if (stat) {
-#ifdef SINGLE_VM
-    nativeArgs.push_back(new LoadInst(compilingClass->llvmDelegatee(), "",
-                                      currentBlock));
-#else
     Module* M = compilingClass->isolate->module;
-    Value* ld = new LoadInst(compilingClass->llvmVar(M), "", currentBlock);
-    nativeArgs.push_back(llvm::CallInst::Create(getClassDelegateeLLVM, ld, "",
-                                      currentBlock));
-#endif
+    nativeArgs.push_back(compilingClass->llvmDelegatee(M, currentBlock));
     index = 2;
   } else {
     index = 1;
@@ -227,15 +220,11 @@
     argsSync.push_back(llvmFunction->arg_begin());
   } else {
     Module* M = compilingClass->isolate->module;
-    Value* arg = new LoadInst(compilingClass->staticVar(M), "", currentBlock);
-#ifndef SINGLE_VM
-    if (compilingClass->isolate == Jnjvm::bootstrapVM) {
-      arg = llvm::CallInst::Create(getStaticInstanceLLVM, arg, "", currentBlock);
-    }
-#endif
+    Value* arg = compilingClass->staticVar(M, currentBlock);
     argsSync.push_back(arg);
   }
-  llvm::CallInst::Create(aquireObjectLLVM, argsSync.begin(), argsSync.end(), "", currentBlock);
+  llvm::CallInst::Create(aquireObjectLLVM, argsSync.begin(), argsSync.end(),
+                         "", currentBlock);
 }
 
 void JavaJIT::endSynchronize() {
@@ -244,12 +233,7 @@
     argsSync.push_back(llvmFunction->arg_begin());
   } else {
     Module* M = compilingClass->isolate->module;
-    Value* arg = new LoadInst(compilingClass->staticVar(M), "", currentBlock);
-#ifndef SINGLE_VM
-    if (compilingClass->isolate == Jnjvm::bootstrapVM) {
-      arg = llvm::CallInst::Create(getStaticInstanceLLVM, arg, "", currentBlock);
-    }
-#endif
+    Value* arg = compilingClass->staticVar(M, currentBlock);
     argsSync.push_back(arg);
   }
   llvm::CallInst::Create(releaseObjectLLVM, argsSync.begin(), argsSync.end(), "",
@@ -401,7 +385,8 @@
     mvm::jit::protectConstants();//->lock();
     args.push_back(ConstantInt::get(Type::Int32Ty, (int64_t)compilingMethod));
     mvm::jit::unprotectConstants();//->unlock();
-    llvm::CallInst::Create(printMethodStartLLVM, args.begin(), args.end(), "", currentBlock);
+    llvm::CallInst::Create(printMethodStartLLVM, args.begin(), args.end(), "",
+                           currentBlock);
     }
 #endif
 
@@ -472,7 +457,8 @@
     mvm::jit::protectConstants();//->lock();
     args.push_back(ConstantInt::get(Type::Int32Ty, (int64_t)compilingMethod));
     mvm::jit::unprotectConstants();//->unlock();
-    llvm::CallInst::Create(printMethodEndLLVM, args.begin(), args.end(), "", currentBlock);
+    llvm::CallInst::Create(printMethodEndLLVM, args.begin(), args.end(), "",
+                           currentBlock);
     }
 #endif
 
@@ -488,7 +474,8 @@
   } else {
     CallInst* ptr_eh_ptr = llvm::CallInst::Create(getExceptionLLVM, "eh_ptr", 
                                         endExceptionBlock);
-    llvm::CallInst::Create(mvm::jit::unwindResume, ptr_eh_ptr, "", endExceptionBlock);
+    llvm::CallInst::Create(mvm::jit::unwindResume, ptr_eh_ptr, "",
+                           endExceptionBlock);
     new UnreachableInst(endExceptionBlock);
   }
   
@@ -540,32 +527,41 @@
   
   BasicBlock* realEndExceptionBlock = endExceptionBlock;
   if (sync) {
-    BasicBlock* synchronizeExceptionBlock = createBasicBlock("synchronizeExceptionBlock");
-    BasicBlock* trySynchronizeExceptionBlock = createBasicBlock("trySynchronizeExceptionBlock");
+    BasicBlock* synchronizeExceptionBlock = 
+          createBasicBlock("synchronizeExceptionBlock");
+    BasicBlock* trySynchronizeExceptionBlock = 
+          createBasicBlock("trySynchronizeExceptionBlock");
     realEndExceptionBlock = synchronizeExceptionBlock;
     std::vector<Value*> argsSync;
     if (isVirtual(compilingMethod->access)) {
       argsSync.push_back(llvmFunction->arg_begin());
     } else {
-      Value* arg = new LoadInst(compilingClass->staticVar(compilingClass->isolate->module), "", currentBlock);
-#ifndef SINGLE_VM
-      if (compilingClass->isolate == Jnjvm::bootstrapVM) {
-        arg = llvm::CallInst::Create(getStaticInstanceLLVM, arg, "", currentBlock);
-      }
-#endif
+      Value* arg = compilingClass->staticVar(compilingClass->isolate->module,
+                                             currentBlock);
       argsSync.push_back(arg);
     }
-    llvm::CallInst::Create(releaseObjectLLVM, argsSync.begin(), argsSync.end(), "", synchronizeExceptionBlock);
+    llvm::CallInst::Create(releaseObjectLLVM, argsSync.begin(), argsSync.end(),
+                           "", synchronizeExceptionBlock);
+
     llvm::BranchInst::Create(endExceptionBlock, synchronizeExceptionBlock);
     
     const PointerType* PointerTy_0 = mvm::jit::ptrType;
     std::vector<Value*> int32_eh_select_params;
-    Instruction* ptr_eh_ptr = llvm::CallInst::Create(mvm::jit::llvmGetException, "eh_ptr", trySynchronizeExceptionBlock);
+    Instruction* ptr_eh_ptr = 
+      llvm::CallInst::Create(mvm::jit::llvmGetException, "eh_ptr",
+                             trySynchronizeExceptionBlock);
     int32_eh_select_params.push_back(ptr_eh_ptr);
-    int32_eh_select_params.push_back(ConstantExpr::getCast(Instruction::BitCast, mvm::jit::personality, PointerTy_0));
+    Constant* C = ConstantExpr::getCast(Instruction::BitCast,
+                                        mvm::jit::personality, PointerTy_0);
+    int32_eh_select_params.push_back(C);
     int32_eh_select_params.push_back(mvm::jit::constantPtrNull);
-    llvm::CallInst::Create(mvm::jit::exceptionSelector, int32_eh_select_params.begin(), int32_eh_select_params.end(), "eh_select", trySynchronizeExceptionBlock);
-    llvm::BranchInst::Create(synchronizeExceptionBlock, trySynchronizeExceptionBlock);
+    llvm::CallInst::Create(mvm::jit::exceptionSelector,
+                           int32_eh_select_params.begin(), 
+                           int32_eh_select_params.end(), 
+                           "eh_select", trySynchronizeExceptionBlock);
+
+    llvm::BranchInst::Create(synchronizeExceptionBlock,
+                             trySynchronizeExceptionBlock);
 
     for (uint16 i = 0; i < codeLen; ++i) {
       if (opcodeInfos[i].exceptionBlock == endExceptionBlock) {
@@ -599,7 +595,8 @@
     }
 
     if (!(opcodeInfos[ex->handlerpc].newBlock)) {
-      opcodeInfos[ex->handlerpc].newBlock = createBasicBlock("handlerException");
+      opcodeInfos[ex->handlerpc].newBlock = 
+                    createBasicBlock("handlerException");
     }
     
     ex->handler = opcodeInfos[ex->handlerpc].newBlock;
@@ -624,7 +621,8 @@
       cur->realTest = cur->test;
     }
     
-    cur->exceptionPHI = llvm::PHINode::Create(mvm::jit::ptrType, "", cur->realTest);
+    cur->exceptionPHI = llvm::PHINode::Create(mvm::jit::ptrType, "",
+                                              cur->realTest);
 
     if (next && cur->startpc == next->startpc && cur->endpc == next->endpc)
       first = false;
@@ -655,29 +653,42 @@
     if (cur->realTest != cur->test) {
       const PointerType* PointerTy_0 = mvm::jit::ptrType;
       std::vector<Value*> int32_eh_select_params;
-      Instruction* ptr_eh_ptr = llvm::CallInst::Create(mvm::jit::llvmGetException, "eh_ptr", cur->test);
+      Instruction* ptr_eh_ptr = 
+        llvm::CallInst::Create(mvm::jit::llvmGetException, "eh_ptr", cur->test);
       int32_eh_select_params.push_back(ptr_eh_ptr);
-      int32_eh_select_params.push_back(ConstantExpr::getCast(Instruction::BitCast, mvm::jit::personality, PointerTy_0));
+      Constant* C = ConstantExpr::getCast(Instruction::BitCast,
+                                          mvm::jit::personality, PointerTy_0);
+      int32_eh_select_params.push_back(C);
       int32_eh_select_params.push_back(mvm::jit::constantPtrNull);
-      llvm::CallInst::Create(mvm::jit::exceptionSelector, int32_eh_select_params.begin(), int32_eh_select_params.end(), "eh_select", cur->test);
+      llvm::CallInst::Create(mvm::jit::exceptionSelector,
+                             int32_eh_select_params.begin(),
+                             int32_eh_select_params.end(), "eh_select",
+                             cur->test);
       llvm::BranchInst::Create(cur->realTest, cur->test);
       cur->exceptionPHI->addIncoming(ptr_eh_ptr, cur->test);
     } 
-
-    Value* cl = new LoadInst(cur->catchClass->llvmVar(compilingClass->isolate->module), "", cur->realTest);
-    Value* cmp = llvm::CallInst::Create(compareExceptionLLVM, cl, "", cur->realTest);
+    
+    Module* M = compilingClass->isolate->module;
+    Value* cl = new LoadInst(cur->catchClass->llvmVar(M), "", cur->realTest);
+    Value* cmp = llvm::CallInst::Create(compareExceptionLLVM, cl, "",
+                                        cur->realTest);
     llvm::BranchInst::Create(cur->handler, bbNext, cmp, cur->realTest);
     if (nodeNext)
       nodeNext->addIncoming(cur->exceptionPHI, cur->realTest);
     
     if (cur->handler->empty()) {
-      cur->handlerPHI = llvm::PHINode::Create(mvm::jit::ptrType, "", cur->handler);
+      cur->handlerPHI = llvm::PHINode::Create(mvm::jit::ptrType, "",
+                                              cur->handler);
       cur->handlerPHI->addIncoming(cur->exceptionPHI, cur->realTest);
-      Value* exc = llvm::CallInst::Create(getJavaExceptionLLVM, "", cur->handler);
+      Value* exc = llvm::CallInst::Create(getJavaExceptionLLVM, "",
+                                          cur->handler);
       llvm::CallInst::Create(clearExceptionLLVM, "", cur->handler);
-      llvm::CallInst::Create(mvm::jit::exceptionBeginCatch, cur->handlerPHI, "tmp8", cur->handler);
+      llvm::CallInst::Create(mvm::jit::exceptionBeginCatch, cur->handlerPHI,
+                             "tmp8", cur->handler);
       std::vector<Value*> void_28_params;
-      llvm::CallInst::Create(mvm::jit::exceptionEndCatch, void_28_params.begin(), void_28_params.end(), "", cur->handler);
+      llvm::CallInst::Create(mvm::jit::exceptionEndCatch,
+                             void_28_params.begin(), void_28_params.end(), "",
+                             cur->handler);
       new StoreInst(exc, supplLocal, false, cur->handler);
     } else {
       Instruction* insn = cur->handler->begin();
@@ -718,7 +729,7 @@
         const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]);
         void* val = 0;
         GlobalVariable* gv = 0;
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
         if (compilingClass->isolate != Jnjvm::bootstrapVM) {
 #endif
         val = compilingClass->isolate->UTF8ToStr(utf8);
@@ -729,7 +740,7 @@
                              constantJavaObjectNull, "",
                              compilingClass->isolate->module);
         compilingClass->isolate->protectModule->unlock();
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
         } else {
           val = (void*)utf8;
           compilingClass->isolate->protectModule->lock();
@@ -746,38 +757,47 @@
         void* ptr = mvm::jit::executionEngine->getPointerToGlobal(gv);
         GenericValue Val = GenericValue(val);
         llvm::GenericValue * Ptr = (llvm::GenericValue*)ptr;
-        mvm::jit::executionEngine->StoreValueToMemory(Val, Ptr, JavaObject::llvmType);
+        mvm::jit::executionEngine->StoreValueToMemory(Val, Ptr,
+                                                      JavaObject::llvmType);
         toPush = new LoadInst(gv, "", currentBlock);
         ctpInfo->ctpRes[index] = gv;
         compilingClass->release();
       } else {
         compilingClass->release();
-        toPush = new LoadInst((GlobalVariable*)ctpInfo->ctpRes[index], "", currentBlock);
+        toPush = new LoadInst((GlobalVariable*)ctpInfo->ctpRes[index], "",
+                              currentBlock);
       }
     } else {
-      toPush = new LoadInst((GlobalVariable*)ctpInfo->ctpRes[index], "", currentBlock);
+      toPush = new LoadInst((GlobalVariable*)ctpInfo->ctpRes[index], "",
+                            currentBlock);
     }
-#ifndef SINGLE_VM
-    if (compilingClass->isolate == Jnjvm::bootstrapVM)
-      push(llvm::CallInst::Create(runtimeUTF8ToStrLLVM, toPush, "", currentBlock), AssessorDesc::dRef);
-    else 
+#ifdef MULTIPLE_VM
+    if (compilingClass->isolate == Jnjvm::bootstrapVM) {
+      CallInst* C = llvm::CallInst::Create(runtimeUTF8ToStrLLVM, toPush, "",
+                                           currentBlock);
+      push(C, AssessorDesc::dRef);
+    } else 
 #endif
     push(toPush, AssessorDesc::dRef);
   } else if (type == JavaCtpInfo::ConstantLong) {
     mvm::jit::protectConstants();//->lock();
-    push(ConstantInt::get(Type::Int64Ty, ctpInfo->LongAt(index)), AssessorDesc::dLong);
+    push(ConstantInt::get(Type::Int64Ty, ctpInfo->LongAt(index)),
+         AssessorDesc::dLong);
     mvm::jit::unprotectConstants();//->unlock();
   } else if (type == JavaCtpInfo::ConstantDouble) {
     mvm::jit::protectConstants();//->lock();
-    push(ConstantFP::get(Type::DoubleTy, APFloat(ctpInfo->DoubleAt(index))), AssessorDesc::dDouble);
+    push(ConstantFP::get(Type::DoubleTy, APFloat(ctpInfo->DoubleAt(index))),
+         AssessorDesc::dDouble);
     mvm::jit::unprotectConstants();//->unlock();
   } else if (type == JavaCtpInfo::ConstantInteger) {
     mvm::jit::protectConstants();//->lock();
-    push(ConstantInt::get(Type::Int32Ty, ctpInfo->IntegerAt(index)), AssessorDesc::dInt);
+    push(ConstantInt::get(Type::Int32Ty, ctpInfo->IntegerAt(index)),
+         AssessorDesc::dInt);
     mvm::jit::unprotectConstants();//->unlock();
   } else if (type == JavaCtpInfo::ConstantFloat) {
     mvm::jit::protectConstants();//->lock();
-    push(ConstantFP::get(Type::FloatTy, APFloat(ctpInfo->FloatAt(index))), AssessorDesc::dFloat);
+    push(ConstantFP::get(Type::FloatTy, APFloat(ctpInfo->FloatAt(index))),
+         AssessorDesc::dFloat);
     mvm::jit::unprotectConstants();//->unlock();
   } else if (type == JavaCtpInfo::ConstantClass) {
     assert(0 && "implement ConstantClass in ldc!");
@@ -799,9 +819,10 @@
   llvm::BranchInst::Create(exit, cont, test, jit->currentBlock);
   std::vector<Value*> args;
   if (currentExceptionBlock != endExceptionBlock) {
-    llvm::InvokeInst::Create(JavaJIT::nullPointerExceptionLLVM, unifiedUnreachable,
-                   currentExceptionBlock, args.begin(),
-                   args.end(), "", exit);
+    llvm::InvokeInst::Create(JavaJIT::nullPointerExceptionLLVM,
+                             unifiedUnreachable,
+                             currentExceptionBlock, args.begin(),
+                             args.end(), "", exit);
   } else {
     llvm::CallInst::Create(JavaJIT::nullPointerExceptionLLVM, args.begin(),
                  args.end(), "", exit);
@@ -824,7 +845,8 @@
   if (true) {
     Value* size = arraySize(obj);
     
-    Value* cmp = new ICmpInst(ICmpInst::ICMP_ULT, index, size, "", currentBlock);
+    Value* cmp = new ICmpInst(ICmpInst::ICMP_ULT, index, size, "",
+                              currentBlock);
 
     BasicBlock* ifTrue =  createBasicBlock("true verifyAndComputePtr");
     BasicBlock* ifFalse = createBasicBlock("false verifyAndComputePtr");
@@ -835,12 +857,13 @@
     args.push_back(obj);
     args.push_back(index);
     if (currentExceptionBlock != endExceptionBlock) {
-      llvm::InvokeInst::Create(JavaJIT::indexOutOfBoundsExceptionLLVM, unifiedUnreachable,
-                     currentExceptionBlock, args.begin(),
-                     args.end(), "", ifFalse);
+      llvm::InvokeInst::Create(JavaJIT::indexOutOfBoundsExceptionLLVM,
+                               unifiedUnreachable,
+                               currentExceptionBlock, args.begin(),
+                               args.end(), "", ifFalse);
     } else {
-      llvm::CallInst::Create(JavaJIT::indexOutOfBoundsExceptionLLVM, args.begin(),
-                   args.end(), "", ifFalse);
+      llvm::CallInst::Create(JavaJIT::indexOutOfBoundsExceptionLLVM,
+                             args.begin(), args.end(), "", ifFalse);
       new UnreachableInst(ifFalse);
     }
   
@@ -854,8 +877,9 @@
   indexes.push_back(zero);
   indexes.push_back(JavaArray::elementsOffset());
   indexes.push_back(index);
-  Value* ptr = llvm::GetElementPtrInst::Create(val, indexes.begin(), indexes.end(), 
-                                     "", currentBlock);
+  Value* ptr = llvm::GetElementPtrInst::Create(val, indexes.begin(),
+                                               indexes.end(), 
+                                               "", currentBlock);
 
   return ptr;
 
@@ -887,7 +911,8 @@
 
 static void testPHINodes(BasicBlock* dest, BasicBlock* insert, JavaJIT* jit) {
   if(dest->empty()) {
-    for (std::vector< std::pair<Value*, const AssessorDesc*> >::iterator i = jit->stack.begin(),
+    for (std::vector< std::pair<Value*, const AssessorDesc*> >::iterator i =
+              jit->stack.begin(),
             e = jit->stack.end(); i!= e; ++i) {
       Value* cur = i->first;
       const AssessorDesc* func = i->second;
@@ -904,7 +929,8 @@
       node->addIncoming(cur, insert);
     }
   } else {
-    std::vector< std::pair<Value*, const AssessorDesc*> >::iterator stackit = jit->stack.begin();
+    std::vector< std::pair<Value*, const AssessorDesc*> >::iterator stackit = 
+      jit->stack.begin();
     for (BasicBlock::iterator i = dest->begin(), e = dest->end(); i != e;
          ++i) {
       if (!(isa<PHINode>(i))) {
@@ -990,64 +1016,102 @@
     if (Ty == Type::Int32Ty) {
       Constant* const_int32_9 = mvm::jit::constantZero;
       ConstantInt* const_int32_10 = mvm::jit::constantMinusOne;
-      BinaryOperator* int32_tmpneg = BinaryOperator::create(Instruction::Sub, const_int32_9, args[0], "tmpneg", currentBlock);
-      ICmpInst* int1_abscond = new ICmpInst(ICmpInst::ICMP_SGT, args[0], const_int32_10, "abscond", currentBlock);
-      return llvm::SelectInst::Create(int1_abscond, args[0], int32_tmpneg, "abs", currentBlock);
+      BinaryOperator* int32_tmpneg = 
+        BinaryOperator::create(Instruction::Sub, const_int32_9, args[0],
+                               "tmpneg", currentBlock);
+      ICmpInst* int1_abscond = 
+        new ICmpInst(ICmpInst::ICMP_SGT, args[0], const_int32_10, "abscond", 
+                     currentBlock);
+      return llvm::SelectInst::Create(int1_abscond, args[0], int32_tmpneg,
+                                      "abs", currentBlock);
     } else if (Ty == Type::Int64Ty) {
       Constant* const_int64_9 = mvm::jit::constantLongZero;
       ConstantInt* const_int64_10 = mvm::jit::constantLongMinusOne;
-      BinaryOperator* int64_tmpneg = BinaryOperator::create(Instruction::Sub, const_int64_9, args[0], "tmpneg", currentBlock);
-      ICmpInst* int1_abscond = new ICmpInst(ICmpInst::ICMP_SGT, args[0], const_int64_10, "abscond", currentBlock);
-      return llvm::SelectInst::Create(int1_abscond, args[0], int64_tmpneg, "abs", currentBlock);
+      
+      BinaryOperator* int64_tmpneg = 
+        BinaryOperator::create(Instruction::Sub, const_int64_9, args[0],
+                               "tmpneg", currentBlock);
+
+      ICmpInst* int1_abscond = new ICmpInst(ICmpInst::ICMP_SGT, args[0],
+                                            const_int64_10, "abscond",
+                                            currentBlock);
+      
+      return llvm::SelectInst::Create(int1_abscond, args[0], int64_tmpneg,
+                                      "abs", currentBlock);
     } else if (Ty == Type::FloatTy) {
-      return llvm::CallInst::Create(mvm::jit::func_llvm_fabs_f32, args[0], "tmp1", currentBlock);
+      return llvm::CallInst::Create(mvm::jit::func_llvm_fabs_f32, args[0],
+                                    "tmp1", currentBlock);
     } else if (Ty == Type::DoubleTy) {
-      return llvm::CallInst::Create(mvm::jit::func_llvm_fabs_f64, args[0], "tmp1", currentBlock);
+      return llvm::CallInst::Create(mvm::jit::func_llvm_fabs_f64, args[0],
+                                    "tmp1", currentBlock);
     }
   } else if (name == Jnjvm::sqrt) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_sqrt_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_sqrt_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::sin) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_sin_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_sin_f64, args[0], 
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::cos) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_cos_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_cos_f64, args[0], 
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::tan) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_tan_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_tan_f64, args[0], 
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::asin) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_asin_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_asin_f64, args[0], 
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::acos) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_acos_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_acos_f64, args[0], 
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::atan) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_atan_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_atan_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::atan2) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_atan2_f64, args.begin(), args.end(), "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_atan2_f64, 
+                                  args.begin(), args.end(), "tmp1",
+                                  currentBlock);
   } else if (name == Jnjvm::exp) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_exp_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_exp_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::log) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_log_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_log_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::pow) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_pow_f64, args.begin(), args.end(), "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_pow_f64, args.begin(),
+                                  args.end(), "tmp1", currentBlock);
   } else if (name == Jnjvm::ceil) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_ceil_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_ceil_f64, args[0], "tmp1",
+                                  currentBlock);
   } else if (name == Jnjvm::floor) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_floor_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_floor_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::rint) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_rint_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_rint_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::cbrt) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_cbrt_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_cbrt_f64, args[0], "tmp1",
+                                  currentBlock);
   } else if (name == Jnjvm::cosh) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_cosh_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_cosh_f64, args[0], "tmp1",
+                                  currentBlock);
   } else if (name == Jnjvm::expm1) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_expm1_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_expm1_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::hypot) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_hypot_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_hypot_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::log10) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_log10_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_log10_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::log1p) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_log1p_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_log1p_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::sinh) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_sinh_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_sinh_f64, args[0],
+                                  "tmp1", currentBlock);
   } else if (name == Jnjvm::tanh) {
-    return llvm::CallInst::Create(mvm::jit::func_llvm_tanh_f64, args[0], "tmp1", currentBlock);
+    return llvm::CallInst::Create(mvm::jit::func_llvm_tanh_f64, args[0],
+                                  "tmp1", currentBlock);
   }
   
   return 0;
@@ -1200,7 +1264,8 @@
     Value* node = getInitializedClass(index);
     val = invoke(doNewUnknownLLVM, node, "", currentBlock);
   } else {
-    Value* load = new LoadInst(cl->llvmVar(compilingClass->isolate->module), "", currentBlock);
+    Value* load = new LoadInst(cl->llvmVar(compilingClass->isolate->module),
+                               "", currentBlock);
     val = invoke(doNewLLVM, load, "", currentBlock);
     // give the real type info, escape analysis uses it
     new BitCastInst(val, cl->virtualType, "", currentBlock);
@@ -1231,8 +1296,10 @@
   std::vector<Value*> args; // size = 2
   args.push_back(zero);
   args.push_back(offset);
-  llvm::Value* ptr = llvm::GetElementPtrInst::Create(objectConvert, args.begin(),
-                                           args.end(), "", jit->currentBlock);
+  llvm::Value* ptr = llvm::GetElementPtrInst::Create(objectConvert,
+                                                     args.begin(),
+                                                     args.end(), "",
+                                                     jit->currentBlock);
   return ptr;  
 }
 
@@ -1242,16 +1309,11 @@
   
   JavaField* field = info->lookupField(index, stat);
   if (field && field->classDef->isReady()) {
-    if (stat) object = new LoadInst(field->classDef->staticVar(compilingClass->isolate->module), "",
-                                    currentBlock);
+    Module* M = compilingClass->isolate->module;
+    if (stat) object = field->classDef->staticVar(M, currentBlock);
     const Type* type = stat ? field->classDef->staticType :
                               field->classDef->virtualType;
 
-#ifndef SINGLE_VM
-    if (stat && field->classDef->isolate == Jnjvm::bootstrapVM) {
-      object = llvm::CallInst::Create(getStaticInstanceLLVM, object, "", currentBlock);
-    }
-#endif
     return fieldGetter(this, type, object, field->offset);
   } else {
     const Type* Pty = mvm::jit::arrayPtrType;
@@ -1304,8 +1366,8 @@
     } else {
       args.push_back(constantJavaObjectNull);
     }
-    args.push_back(new LoadInst(compilingClass->llvmVar(compilingClass->isolate->module), "",
-                                currentBlock));
+    Module* M = compilingClass->isolate->module;
+    args.push_back(new LoadInst(compilingClass->llvmVar(M), "", currentBlock));
     mvm::jit::protectConstants();//->lock();
     args.push_back(ConstantInt::get(Type::Int32Ty, index));
     mvm::jit::unprotectConstants();//->unlock();
@@ -1321,7 +1383,8 @@
   }
 }
 
-extern void convertValue(Value*& val, const Type* t1, BasicBlock* currentBlock, bool usign);
+extern void convertValue(Value*& val, const Type* t1, BasicBlock* currentBlock,
+                         bool usign);
  
 
 void JavaJIT::setStaticField(uint16 index) {
@@ -1398,8 +1461,9 @@
   if (currentExceptionBlock != endExceptionBlock) {
     BasicBlock* ifNormal = createBasicBlock("no exception block");
     currentBlock = ifNormal;
-    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock, args.begin(), 
-                          args.end(), Name, InsertAtEnd);
+    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock,
+                                    args.begin(), 
+                                    args.end(), Name, InsertAtEnd);
   } else {
     return llvm::CallInst::Create(F, args.begin(), args.end(), Name, InsertAtEnd);
   }
@@ -1414,8 +1478,8 @@
     currentBlock = ifNormal;
     std::vector<Value*> arg;
     arg.push_back(arg1);
-    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock, arg.begin(),
-                          arg.end(), Name, InsertAtEnd);
+    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock,
+                                    arg.begin(), arg.end(), Name, InsertAtEnd);
   } else {
     return llvm::CallInst::Create(F, arg1, Name, InsertAtEnd);
   }
@@ -1432,8 +1496,9 @@
   if (currentExceptionBlock != endExceptionBlock) {
     BasicBlock* ifNormal = createBasicBlock("no exception block");
     currentBlock = ifNormal;
-    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock, args.begin(),
-                          args.end(), Name, InsertAtEnd);
+    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock,
+                                    args.begin(), args.end(), Name,
+                                    InsertAtEnd);
   } else {
     return llvm::CallInst::Create(F, args.begin(), args.end(), Name, InsertAtEnd);
   }
@@ -1446,8 +1511,9 @@
     BasicBlock* ifNormal = createBasicBlock("no exception block");
     currentBlock = ifNormal;
     std::vector<Value*> args;
-    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock, args.begin(),
-                          args.end(), Name, InsertAtEnd);
+    return llvm::InvokeInst::Create(F, ifNormal, currentExceptionBlock,
+                                    args.begin(), args.end(), Name,
+                                    InsertAtEnd);
   } else {
     return llvm::CallInst::Create(F, Name, InsertAtEnd);
   }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h Tue Apr  8 12:06:22 2008
@@ -268,10 +268,6 @@
   static llvm::Function* getStaticInstanceLLVM;
   static llvm::Function* getClassDelegateeLLVM;
   static llvm::Function* arrayLengthLLVM;
-#ifndef SINGLE_VM
-  static llvm::Function* doNewIsolateLLVM;
-#endif
-  static void runtimeInitialise();
   
 
   static Class* getCallingClass();

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJITInitialise.cpp Tue Apr  8 12:06:22 2008
@@ -7,62 +7,15 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <llvm/Type.h>
-#include <llvm/Support/CFG.h>
-#include <llvm/Module.h>
-#include <llvm/Constants.h>
-#include <llvm/Type.h>
-#include <llvm/DerivedTypes.h>
-#include <llvm/Function.h>
-#include <llvm/Instructions.h>
-#include <llvm/ModuleProvider.h>
-#include <llvm/ExecutionEngine/JIT.h>
-#include <llvm/ExecutionEngine/GenericValue.h>
-#include <llvm/PassManager.h>
-#include <llvm/Analysis/Verifier.h>
-#include <llvm/Transforms/Scalar.h>
-#include <llvm/Target/TargetData.h>
-#include <llvm/Assembly/PrintModulePass.h>
-#include <llvm/Target/TargetOptions.h>
-#include <llvm/CodeGen/MachineCodeEmitter.h>
-#include <llvm/CodeGen/MachineBasicBlock.h>
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
+#include "llvm/Instructions.h"
+#include "llvm/LinkAllPasses.h"
 #include "llvm/Module.h"
-#include "llvm/ModuleProvider.h"
-#include "llvm/ParameterAttributes.h"
-#include "llvm/PassManager.h"
-#include "llvm/ValueSymbolTable.h"
-#include "llvm/Analysis/LoadValueNumbering.h"
 #include "llvm/Analysis/LoopPass.h"
-#include "llvm/Analysis/Verifier.h"
-#include "llvm/Assembly/Writer.h"
-#include "llvm/Assembly/PrintModulePass.h"
-#include "llvm/Bitcode/ReaderWriter.h"
-#include "llvm/CodeGen/RegAllocRegistry.h"
-#include "llvm/CodeGen/SchedulerRegistry.h"
-#include "llvm/CodeGen/ScheduleDAG.h"
-#include "llvm/Target/SubtargetFeature.h"
-#include "llvm/Target/TargetData.h"
-#include "llvm/Target/TargetLowering.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/Target/TargetMachineRegistry.h"
-#include "llvm/Transforms/Scalar.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/Streams.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/MutexGuard.h"
 
-#include <llvm/Transforms/IPO.h>
-
-#include <setjmp.h>
 
 #include "mvm/JIT.h"
 #include "mvm/Method.h"
-#include "mvm/VMLet.h"
 
 #include "JavaArray.h"
 #include "JavaCache.h"
@@ -75,9 +28,23 @@
 using namespace jnjvm;
 using namespace llvm;
 
-void JavaJIT::initialise() {
-  runtimeInitialise();
-}
+const llvm::FunctionType* JavaJIT::markAndTraceLLVMType = 0;
+
+const llvm::Type* JavaObject::llvmType = 0;
+const llvm::Type* JavaArray::llvmType = 0;
+const llvm::Type* ArrayUInt8::llvmType = 0;
+const llvm::Type* ArraySInt8::llvmType = 0;
+const llvm::Type* ArrayUInt16::llvmType = 0;
+const llvm::Type* ArraySInt16::llvmType = 0;
+const llvm::Type* ArrayUInt32::llvmType = 0;
+const llvm::Type* ArraySInt32::llvmType = 0;
+const llvm::Type* ArrayFloat::llvmType = 0;
+const llvm::Type* ArrayDouble::llvmType = 0;
+const llvm::Type* ArrayLong::llvmType = 0;
+const llvm::Type* ArrayObject::llvmType = 0;
+const llvm::Type* UTF8::llvmType = 0;
+const llvm::Type* CacheNode::llvmType = 0;
+const llvm::Type* Enveloppe::llvmType = 0;
 
 void JavaJIT::initialiseJITIsolateVM(Jnjvm* vm) {
   mvm::jit::protectEngine->lock();
@@ -274,20 +241,6 @@
                      module);
   }
 
-#ifndef SINGLE_VM
-  // Create doNewIsolateLLVM
-  {
-  std::vector<const Type*> args;
-  args.push_back(mvm::jit::ptrType);
-  const FunctionType* type = FunctionType::get(JavaObject::llvmType, args,
-                                               false);
-
-  doNewIsolateLLVM = Function::Create(type, GlobalValue::ExternalLinkage,
-                     "_ZN5jnjvm5Class12doNewIsolateEv",
-                     module);
-  }
-#endif
-  
   // Create fieldLookupLLVM
   {
   std::vector<const Type*> args;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp Tue Apr  8 12:06:22 2008
@@ -13,27 +13,12 @@
 
 #include <string.h>
 
-#include <llvm/Type.h>
-#include <llvm/Module.h>
 #include <llvm/Constants.h>
-#include <llvm/Type.h>
 #include <llvm/DerivedTypes.h>
 #include <llvm/Function.h>
 #include <llvm/Instructions.h>
-#include <llvm/ModuleProvider.h>
-#include <llvm/ExecutionEngine/JIT.h>
-#include <llvm/ExecutionEngine/GenericValue.h>
-#include <llvm/PassManager.h>
-#include <llvm/Analysis/Verifier.h>
-#include <llvm/Transforms/Scalar.h>
-#include <llvm/Target/TargetData.h>
-#include <llvm/Assembly/PrintModulePass.h>
-#include <llvm/Target/TargetOptions.h>
-#include <llvm/CodeGen/MachineCodeEmitter.h>
-#include <llvm/CodeGen/MachineBasicBlock.h>
-
-#include <llvm/Transforms/IPO.h>
-
+#include <llvm/Module.h>
+#include <llvm/Type.h>
 
 #include "mvm/JIT.h"
 #include "mvm/Method.h"
@@ -48,7 +33,6 @@
 #include "JavaThread.h"
 #include "JavaTypes.h"
 #include "Jnjvm.h"
-#include "Reader.h"
 
 #include "OpcodeNames.def"
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp Tue Apr  8 12:06:22 2008
@@ -7,145 +7,79 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <stdarg.h>
 #include <string.h>
 
-#include <llvm/Type.h>
-#include <llvm/Support/CFG.h>
+#include <llvm/BasicBlock.h>
+#include <llvm/GlobalVariable.h>
+#include <llvm/Instructions.h>
 #include <llvm/Module.h>
-#include <llvm/Constants.h>
 #include <llvm/Type.h>
-#include <llvm/DerivedTypes.h>
-#include <llvm/Function.h>
-#include <llvm/Instructions.h>
-#include <llvm/ModuleProvider.h>
-#include <llvm/ExecutionEngine/JIT.h>
-#include <llvm/ExecutionEngine/GenericValue.h>
-#include <llvm/PassManager.h>
-#include <llvm/Analysis/Verifier.h>
-#include <llvm/Transforms/Scalar.h>
-#include <llvm/Target/TargetData.h>
-#include <llvm/Assembly/PrintModulePass.h>
-#include <llvm/Target/TargetOptions.h>
-#include <llvm/CodeGen/MachineCodeEmitter.h>
-#include <llvm/CodeGen/MachineBasicBlock.h>
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Module.h"
-#include "llvm/ModuleProvider.h"
-#include "llvm/PassManager.h"
-#include "llvm/ValueSymbolTable.h"
-#include "llvm/Analysis/LoadValueNumbering.h"
-#include "llvm/Analysis/LoopPass.h"
-#include "llvm/Analysis/Verifier.h"
-#include "llvm/Assembly/Writer.h"
-#include "llvm/Assembly/PrintModulePass.h"
-#include "llvm/Bitcode/ReaderWriter.h"
-#include "llvm/CodeGen/RegAllocRegistry.h"
-#include "llvm/CodeGen/SchedulerRegistry.h"
-#include "llvm/CodeGen/ScheduleDAG.h"
-#include "llvm/Target/SubtargetFeature.h"
-#include "llvm/Target/TargetData.h"
-#include "llvm/Target/TargetLowering.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/Target/TargetMachineRegistry.h"
-#include "llvm/Transforms/Scalar.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/Streams.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/MemoryBuffer.h"
-
-#include <llvm/Transforms/IPO.h>
-
+#include "llvm/ExecutionEngine/GenericValue.h"
 
 #include "mvm/JIT.h"
 #include "mvm/Method.h"
 
 #include "debug.h"
 #include "JavaArray.h"
-#include "JavaCache.h"
 #include "JavaClass.h"
-#include "JavaConstantPool.h"
-#include "JavaObject.h"
 #include "JavaJIT.h"
-#include "JavaString.h"
+#include "JavaObject.h"
 #include "JavaThread.h"
 #include "JavaTypes.h"
-#include "JavaUpcalls.h"
 #include "Jnjvm.h"
-#include "JnjvmModuleProvider.h"
-#include "NativeUtil.h"
-#include "Reader.h"
-#include "Zip.h"
-
-#include <iostream>
-
 
 using namespace jnjvm;
 using namespace llvm;
 
-#ifndef SINGLE_VM
-GlobalVariable* Class::staticVar(llvm::Module* compilingModule) {
+Value* Class::staticVar(Module* compilingModule,  BasicBlock* currentBlock) {
+
   if (!_staticVar) {
     aquire();
     if (!_staticVar) {
+#ifdef MULTIPLE_VM
       if (isolate == Jnjvm::bootstrapVM) {
         _staticVar = llvmVar(compilingModule);
-        release();
-        return _staticVar;
       } else {
-        isolate->protectModule->lock();
-        _staticVar = new GlobalVariable(JavaObject::llvmType, false,
-                                        GlobalValue::ExternalLinkage,
-                                        JavaJIT::constantJavaObjectNull, "",
-                                        isolate->module);
-        isolate->protectModule->unlock();
-    
-        // TODO: put an initializer in here
-        void* ptr = mvm::jit::executionEngine->getPointerToGlobal(_staticVar);
-        GenericValue Val = GenericValue((void*)staticInstance());
-        llvm::GenericValue * Ptr = (llvm::GenericValue*)ptr;
-        mvm::jit::executionEngine->StoreValueToMemory(Val, Ptr, staticType); 
-      }
-    }
-  release();
-  }
-
-  return _staticVar;
-}
-#else
-GlobalVariable* Class::staticVar(llvm::Module* compilingModule) {
-  if (!_staticVar) {
-    aquire();
-    if (!_staticVar) {
-      
-      JavaObject* obj = staticInstance();
-      mvm::jit::protectConstants();//->lock();
-      Constant* cons = 
-        ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64_t (obj)),
-                                  JavaObject::llvmType);
-      mvm::jit::unprotectConstants();//->unlock();
+#endif
+        JavaObject* obj = staticInstance();
+        mvm::jit::protectConstants();//->lock();
+        Constant* cons = 
+          ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty,
+                                    uint64_t (obj)), JavaObject::llvmType);
+        mvm::jit::unprotectConstants();//->unlock();
       
-      isolate->protectModule->lock();
-      _staticVar = new GlobalVariable(JavaObject::llvmType, true,
+        isolate->protectModule->lock();
+        _staticVar = new GlobalVariable(JavaObject::llvmType, true,
                                       GlobalValue::ExternalLinkage,
                                       cons, "",
                                       isolate->module);
-      isolate->protectModule->unlock();
-    
+        isolate->protectModule->unlock();
+      }
+#ifdef MULTIPLE_VM
     }
+#endif
     release();
   }
-  return _staticVar;
-}
+
+#ifdef MULTIPLE_VM
+  if (isolate == Jnjvm::bootstrapVM) {
+    Value* ld = new LoadInst(_staticVar, "", currentBlock);
+    return llvm::CallInst::Create(JavaJIT::getStaticInstanceLLVM, ld, "",
+                                  currentBlock);
+  } else {
+#endif
+    return new LoadInst(_staticVar, "", currentBlock);
+#ifdef MULTIPLE_VM
+  }
 #endif
+}
 
 GlobalVariable* CommonClass::llvmVar(llvm::Module* compilingModule) {
   if (!_llvmVar) {
     aquire();
     if (!_llvmVar) {
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
       if (compilingModule == Jnjvm::bootstrapVM->module && isArray && isolate != Jnjvm::bootstrapVM) {
         // We know the array class can belong to bootstrap
         _llvmVar = Jnjvm::bootstrapVM->constructArray(this->name, 0)->llvmVar(compilingModule);
@@ -173,8 +107,8 @@
   return _llvmVar;
 }
 
-#ifdef SINGLE_VM
-GlobalVariable* CommonClass::llvmDelegatee() {
+Value* CommonClass::llvmDelegatee(llvm::Module* M, llvm::BasicBlock* BB) {
+#ifndef MULTIPLE_VM
   if (!_llvmDelegatee) {
     aquire();
     if (!_llvmDelegatee) {
@@ -183,7 +117,7 @@
       JavaObject* obj = getClassDelegatee();
       mvm::jit::protectConstants();//->lock();
       Constant* cons = 
-        ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64_t (obj)),
+        ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64(obj)),
                                     pty);
       mvm::jit::unprotectConstants();//->unlock();
 
@@ -196,9 +130,12 @@
     }
     release();
   }
-  return _llvmDelegatee;
-}
+  return new LoadInst(_llvmDelegatee, "", BB);
+#else
+  Value* ld = new LoadInst(llvmVar(M), "", BB);
+  return llvm::CallInst::Create(JavaJIT::getClassDelegateeLLVM, ld, "", BB);
 #endif
+}
 
 ConstantInt* JavaObject::classOffset() {
   return mvm::jit::constantOne;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Tue Apr  8 12:06:22 2008
@@ -18,6 +18,8 @@
 
 using namespace jnjvm;
 
+mvm::Lock* JavaObject::globalLock = 0;
+
 JavaCond* JavaCond::allocate() {
   return gc_new(JavaCond)();
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Apr  8 12:06:22 2008
@@ -26,6 +26,44 @@
 
 using namespace jnjvm;
 
+llvm::Function* JavaJIT::getSJLJBufferLLVM = 0;
+llvm::Function* JavaJIT::throwExceptionLLVM = 0;
+llvm::Function* JavaJIT::getExceptionLLVM = 0;
+llvm::Function* JavaJIT::getJavaExceptionLLVM = 0;
+llvm::Function* JavaJIT::clearExceptionLLVM = 0;
+llvm::Function* JavaJIT::compareExceptionLLVM = 0;
+llvm::Function* JavaJIT::nullPointerExceptionLLVM = 0;
+llvm::Function* JavaJIT::classCastExceptionLLVM = 0;
+llvm::Function* JavaJIT::indexOutOfBoundsExceptionLLVM = 0;
+llvm::Function* JavaJIT::markAndTraceLLVM = 0;
+llvm::Function* JavaJIT::javaObjectTracerLLVM = 0;
+llvm::Function* JavaJIT::virtualLookupLLVM = 0;
+llvm::Function* JavaJIT::fieldLookupLLVM = 0;
+llvm::Function* JavaJIT::UTF8AconsLLVM = 0;
+llvm::Function* JavaJIT::Int8AconsLLVM = 0;
+llvm::Function* JavaJIT::Int32AconsLLVM = 0;
+llvm::Function* JavaJIT::Int16AconsLLVM = 0;
+llvm::Function* JavaJIT::FloatAconsLLVM = 0;
+llvm::Function* JavaJIT::DoubleAconsLLVM = 0;
+llvm::Function* JavaJIT::LongAconsLLVM = 0;
+llvm::Function* JavaJIT::ObjectAconsLLVM = 0;
+llvm::Function* JavaJIT::printExecutionLLVM = 0;
+llvm::Function* JavaJIT::printMethodStartLLVM = 0;
+llvm::Function* JavaJIT::printMethodEndLLVM = 0;
+llvm::Function* JavaJIT::jniProceedPendingExceptionLLVM = 0;
+llvm::Function* JavaJIT::doNewLLVM = 0;
+llvm::Function* JavaJIT::doNewUnknownLLVM = 0;
+llvm::Function* JavaJIT::initialiseObjectLLVM = 0;
+llvm::Function* JavaJIT::newLookupLLVM = 0;
+llvm::Function* JavaJIT::instanceOfLLVM = 0;
+llvm::Function* JavaJIT::aquireObjectLLVM = 0;
+llvm::Function* JavaJIT::releaseObjectLLVM = 0;
+llvm::Function* JavaJIT::multiCallNewLLVM = 0;
+llvm::Function* JavaJIT::runtimeUTF8ToStrLLVM = 0;
+llvm::Function* JavaJIT::getStaticInstanceLLVM = 0;
+llvm::Function* JavaJIT::getClassDelegateeLLVM = 0;
+llvm::Function* JavaJIT::arrayLengthLLVM = 0;
+
 extern "C" JavaString* runtimeUTF8ToStr(const UTF8* val) {
   Jnjvm* vm = JavaThread::get()->isolate;
   return vm->UTF8ToStr(val);
@@ -161,7 +199,7 @@
   JavaThread::get()->isolate->indexOutOfBounds(obj, index);
 }
 
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
 extern "C" JavaObject* getStaticInstance(Class* cl) {
   if (cl->isolate == Jnjvm::bootstrapVM) {
     Jnjvm* vm = JavaThread::get()->isolate;
@@ -182,20 +220,9 @@
 }
 #endif
 
-void JavaJIT::runtimeInitialise() {
+void JavaJIT::initialise() {
   void* p;
   p = (void*)&runtimeUTF8ToStr;
-  p = (void*)&fieldLookup;
-  p = (void*)&virtualLookup;
-  p = (void*)&printExecution;
-  p = (void*)&jniProceedPendingException;
-  p = (void*)&nullPointerException;
-  p = (void*)&classCastException;
-  p = (void*)&indexOutOfBoundsException;
-#ifndef SINGLE_VM
-  p = (void*)&getStaticInstance;
-  p = (void*)&getClassDelegatee;
-#endif
 }
 
 extern "C" Class* newLookup(Class* caller, uint32 index, Class** toAlloc) { 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Tue Apr  8 12:06:22 2008
@@ -40,25 +40,24 @@
 }
 
 JavaThread* JavaThread::get() {
-  return threadKey->get();
+  return (JavaThread*)Thread::threadKey->get();
 }
 
 extern void AddStandardCompilePasses(llvm::FunctionPassManager*);
 
-JavaThread* JavaThread::allocate(JavaObject* thread, Jnjvm* isolate) {
-  JavaThread* key = gc_new(JavaThread)();
-  key->javaThread = thread;
-  key->isolate = isolate;
-  key->lock = mvm::Lock::allocNormal();
-  key->varcond = mvm::Cond::allocCond();
-  key->interruptFlag = 0;
-  key->state = StateRunning;
-  key->self = mvm::Thread::self();
-  key->pendingException = 0;
-  key->perFunctionPasses = new llvm::FunctionPassManager(isolate->TheModuleProvider);
-  key->perFunctionPasses->add(new llvm::TargetData(isolate->module)); 
-  AddStandardCompilePasses(key->perFunctionPasses);
-  return key;
+void JavaThread::initialise(JavaObject* thread, Jnjvm* isolate) {
+  this->javaThread = thread;
+  this->isolate = isolate;
+  this->lock = mvm::Lock::allocNormal();
+  this->varcond = mvm::Cond::allocCond();
+  this->interruptFlag = 0;
+  this->state = StateRunning;
+  this->self = mvm::Thread::self();
+  this->pendingException = 0;
+  ModuleProvider* MP = isolate->TheModuleProvider;
+  this->perFunctionPasses = new llvm::FunctionPassManager(MP);
+  this->perFunctionPasses->add(new llvm::TargetData(isolate->module));
+  AddStandardCompilePasses(this->perFunctionPasses);
 }
 
 JavaObject* JavaThread::currentThread() {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Tue Apr  8 12:06:22 2008
@@ -18,6 +18,7 @@
 #include "mvm/Threads/Cond.h"
 #include "mvm/Threads/Key.h"
 #include "mvm/Threads/Locks.h"
+#include "mvm/Threads/Thread.h"
 
 namespace jnjvm {
 
@@ -25,7 +26,7 @@
 class JavaObject;
 class Jnjvm;
 
-class JavaThread : public mvm::Object {
+class JavaThread : public mvm::Thread {
 public:
   static VirtualTable *VT;
   JavaObject* javaThread;
@@ -50,10 +51,8 @@
   virtual void tracer(size_t sz);
   virtual void destroyer(size_t sz);
   
-  static mvm::Key<JavaThread>* threadKey;
-
+  void initialise(JavaObject* thread, Jnjvm* isolate);
   static JavaThread* get();
-  static JavaThread* allocate(JavaObject* thread, Jnjvm* isolate);
   static JavaObject* currentThread();
   
   static void* getException();

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Apr  8 12:06:22 2008
@@ -7,12 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-// realpath
-#include <limits.h>
-#include <stdlib.h>
-
 #include <float.h>
-
+#include <limits.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -41,6 +37,44 @@
 
 using namespace jnjvm;
 
+Jnjvm* Jnjvm::bootstrapVM = 0;
+
+#define DEF_UTF8(var) \
+  const UTF8* Jnjvm::var = 0;
+  
+  DEF_UTF8(initName);
+  DEF_UTF8(clinitName);
+  DEF_UTF8(clinitType);
+  DEF_UTF8(runName);
+  DEF_UTF8(prelib);
+  DEF_UTF8(postlib);
+  DEF_UTF8(mathName);
+  DEF_UTF8(abs);
+  DEF_UTF8(sqrt);
+  DEF_UTF8(sin);
+  DEF_UTF8(cos);
+  DEF_UTF8(tan);
+  DEF_UTF8(asin);
+  DEF_UTF8(acos);
+  DEF_UTF8(atan);
+  DEF_UTF8(atan2);
+  DEF_UTF8(exp);
+  DEF_UTF8(log);
+  DEF_UTF8(pow);
+  DEF_UTF8(ceil);
+  DEF_UTF8(floor);
+  DEF_UTF8(rint);
+  DEF_UTF8(cbrt);
+  DEF_UTF8(cosh);
+  DEF_UTF8(expm1);
+  DEF_UTF8(hypot);
+  DEF_UTF8(log10);
+  DEF_UTF8(log1p);
+  DEF_UTF8(sinh);
+  DEF_UTF8(tanh);
+
+#undef DEF_UTF8
+
 const char* Jnjvm::dirSeparator = "/";
 const char* Jnjvm::envSeparator = ":";
 const unsigned int Jnjvm::Magic = 0xcafebabe;
@@ -265,17 +299,15 @@
 typedef void (*clinit_t)(void);
 
 void Jnjvm::initialiseClass(CommonClass* cl) {
-start:
-  if (!((Class*)cl)->isReady()) {
+  if (cl->isArray || AssessorDesc::bogusClassToPrimitive(cl)) {
+    cl->status = ready;
+  } else if (!(cl->isReady())) {
     cl->aquire();
     int status = cl->status;
-#ifdef SINGLE_VM
-    if (status == ready) {
-#else
-    if (((Class*)cl)->isReady()) {
-#endif
+    if (cl->isReady()) {
       cl->release();
-    } else if (status >= resolved && status != clinitParent && status != inClinit) {
+    } else if (status >= resolved && status != clinitParent &&
+               status != inClinit) {
       cl->status = clinitParent;
       cl->release();
       if (cl->super) {
@@ -292,15 +324,9 @@
       PRINT_DEBUG(JNJVM_LOAD, 0, LIGHT_GREEN, "clinit ");
       PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s::%s\n", printString(),
                   cl->printString());
-
-#ifndef SINGLE_VM
-      std::pair<uint8, JavaObject*>* val = 0;
-      if (this == bootstrapVM && !AssessorDesc::bogusClassToPrimitive(cl) && !cl->isArray) {
-        JavaObject* staticVar = ((Class*)cl)->createStaticInstance();
-        val = new std::pair<uint8, JavaObject*>(0, staticVar);
-        JavaThread::get()->isolate->statics->hash((Class*)cl, val);
-      }
-#endif
+      
+      ((Class*)cl)->createStaticInstance();
+      
       if (meth) {
         JavaObject* exc = 0;
         try{
@@ -319,13 +345,8 @@
           }
         }
       }
-
-      cl->status = ready;
-#ifndef SINGLE_VM
-      if (this == bootstrapVM && !AssessorDesc::bogusClassToPrimitive(cl) && !cl->isArray) {
-        val->first = 1;
-      }
-#endif
+      
+      cl->setReady();
       cl->broadcastClass();
     } else if (status < resolved) {
       cl->release();
@@ -334,7 +355,7 @@
       if (!cl->ownerClass()) {
         while (status < ready) cl->waitClass();
         cl->release();
-        goto start;
+        initialiseClass(cl);
       } 
       cl->release();
     }
@@ -770,22 +791,10 @@
 }
 
 const UTF8* Jnjvm::asciizConstructUTF8(const char* asciiz) {
-#ifndef SINGLE_VM
-  if (this != bootstrapVM) {
-    const UTF8* existing = bootstrapVM->hashUTF8->lookupAsciiz(asciiz);
-    if (existing) return existing;
-  }
-#endif
   return hashUTF8->lookupOrCreateAsciiz(asciiz);
 }
 
 const UTF8* Jnjvm::readerConstructUTF8(const uint16* buf, uint32 size) {
-#ifndef SINGLE_VM
-  if (this != bootstrapVM) {
-    const UTF8* existing = bootstrapVM->hashUTF8->lookupReader(buf, size);
-    if (existing) return existing;
-  }
-#endif
   return hashUTF8->lookupOrCreateReader(buf, size);
 }
 
@@ -803,18 +812,13 @@
 }
 
 CommonClass* Jnjvm::loadInClassLoader(const UTF8* name, JavaObject* loader) {
+  JavaString* str = this->UTF8ToStr(name);
   JavaObject* obj = (JavaObject*)
-    Classpath::loadInClassLoader->invokeJavaObjectVirtual(loader, this->UTF8ToStr(name));
+    Classpath::loadInClassLoader->invokeJavaObjectVirtual(loader, str);
   return (CommonClass*)((*Classpath::vmdataClass)(obj).PointerVal);
 }
 
 JavaString* Jnjvm::UTF8ToStr(const UTF8* utf8) { 
-#ifndef SINGLE_VM
-  if (this != bootstrapVM) {
-    JavaString* existing = bootstrapVM->hashStr->lookup(utf8);
-    if (existing) return existing;
-  }
-#endif
   JavaString* res = hashStr->lookupOrCreate(utf8, this, JavaString::stringDup);
   return res;
 }
@@ -828,7 +832,7 @@
   postProperties.push_back(std::make_pair(key, value));
 }
 
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
 JavaObject* Jnjvm::getClassDelegatee(CommonClass* cl) {
   if (!(cl->delegatee)) {
     JavaObject* delegatee = (*Classpath::newClass)();
@@ -838,7 +842,8 @@
     JavaObject* pd = cl->delegatee;
     JavaObject* delegatee = (*Classpath::newClass)();
     cl->delegatee = delegatee;;
-    Classpath::initClassWithProtectionDomain->invokeIntSpecial(delegatee, cl, pd);
+    Classpath::initClassWithProtectionDomain->invokeIntSpecial(delegatee, cl,
+                                                               pd);
   }
   return cl->delegatee;
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Tue Apr  8 12:06:22 2008
@@ -241,7 +241,7 @@
   MethodMap* loadedMethods;
   FieldMap* loadedFields;
   TypeMap* javaTypes;
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
   StaticInstanceMap* statics;
   DelegateeMap* delegatees;
 #endif

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Tue Apr  8 12:06:22 2008
@@ -33,7 +33,7 @@
 
 struct ltutf8
 {
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
   bool operator()(const UTF8* s1, const UTF8* s2) const
   {
     if (s1->size < s2->size) return true;
@@ -327,8 +327,6 @@
     //lock->markAndTrace();
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
       i->first->markAndTrace();
-      printf("i->second = %p\n", i->second);
-      printf("second again = %p\n", i->second->second);
       i->second->second->markAndTrace();
     }
   }

Modified: vmkit/trunk/lib/JnJVM/VMCore/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Makefile.am (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Makefile.am Tue Apr  8 12:06:22 2008
@@ -18,6 +18,6 @@
 	JavaBacktrace.cpp NativeUtil.h NativeUtil.cpp Jni.cpp \
 	JavaCache.h JavaCache.cpp JavaUpcalls.h JavaUpcalls.cpp \
 	JnjvmModuleProvider.h JnjvmModuleProvider.cpp JavaRuntimeJIT.cpp JavaMetaJIT.cpp JavaJITInitialise.cpp \
-	LowerArrayLength.cpp
+	LowerArrayLength.cpp ServiceDomain.cpp
 
-libJnJVM_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -DSINGLE_VM -Werror -O2
+libJnJVM_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp Tue Apr  8 12:06:22 2008
@@ -53,8 +53,10 @@
   service->loadedFields = FieldMap::allocate();
   service->javaTypes = jnjvm::TypeMap::allocate(); 
   service->globalRefsLock = mvm::Lock::allocNormal();
+#ifdef MULTIPLE_VM
   service->statics = StaticInstanceMap::allocate();  
   service->delegatees = DelegateeMap::allocate();  
+#endif
   
   // A service is related to a class loader
   // Here are the classes it loaded

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Tue Apr  8 12:06:22 2008
@@ -138,7 +138,7 @@
   TRACE_VECTOR(JavaField*, virtualFields);
   TRACE_VECTOR(JavaField*, staticFields);
   classLoader->markAndTrace();
-#ifdef SINGLE_VM
+#ifndef MULTIPLE_VM
   delegatee->markAndTrace();
 #endif
   TRACE_VECTOR(CommonClass*, display);
@@ -263,7 +263,7 @@
   TRACE_VECTOR(JavaObject*, globalRefs);
   //globalRefsLock->markAndTrace();
   functions->markAndTrace();
-#ifndef SINGLE_VM
+#ifdef MULTIPLE_VM
   statics->markAndTrace();
   delegatees->markAndTrace();
 #endif

Modified: vmkit/trunk/lib/Mvm/Allocator/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Allocator/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Allocator/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/Allocator/Makefile.am Tue Apr  8 12:06:22 2008
@@ -2,7 +2,7 @@
 noinst_PROGRAMS = mainuvm_alloc
 
 libuvm_alloc_a_SOURCES = gcalloc.cpp gcalloc.h gcchunk.cpp gcchunk.h gcerror.cpp gcerror.h gcmapper.cpp gcmapper.h osdep.h
-libuvm_alloc_a_CXXFLAGS = -O2 -W -Wall -Werror -ansi -pedantic -Wno-variadic-macros -Wno-unused-parameter
+libuvm_alloc_a_CXXFLAGS = -O2 -W -Wall -Werror -ansi -pedantic -Wno-variadic-macros -Wno-unused-parameter -DSERVICE_VM
 
 mainuvm_alloc_SOURCES = main.cpp
 mainuvm_alloc_CXXFLAGS =

Modified: vmkit/trunk/lib/Mvm/CommonThread/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/Makefile.am Tue Apr  8 12:06:22 2008
@@ -6,6 +6,6 @@
 ALLOCLIBS = $(ALLOCDIR)/libuvm_alloc.a
 
 libuvm_common_thread_a_SOURCES = cterror.h ctthread.cpp cterror.cpp ctlock.cpp
-libuvm_common_thread_a_CXXFLAGS = -frepo -O2 -W -Wall -Werror -ansi -pedantic -Wno-unused-parameter
+libuvm_common_thread_a_CXXFLAGS = -frepo -O2 -W -Wall -Werror -ansi -pedantic -Wno-unused-parameter -DSERVICE_VM
 
 CLEANFILES = *~ *.bak .*.sw?

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

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Tue Apr  8 12:06:22 2008
@@ -19,7 +19,7 @@
 
 namespace mvm {
 
-class GCCollector {
+class GCCollector : public Collector {
 #ifdef HAVE_PTHREAD
   friend class GCThread;
 #endif

Modified: vmkit/trunk/lib/Mvm/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/JIT.cpp?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/JIT.cpp Tue Apr  8 12:06:22 2008
@@ -7,60 +7,16 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <llvm/Type.h>
-#include <llvm/Support/CFG.h>
-#include <llvm/Module.h>
 #include <llvm/Constants.h>
-#include <llvm/Type.h>
 #include <llvm/DerivedTypes.h>
-#include <llvm/Function.h>
-#include <llvm/Instructions.h>
-#include <llvm/ModuleProvider.h>
-#include <llvm/ExecutionEngine/JIT.h>
-#include <llvm/ExecutionEngine/GenericValue.h>
-#include <llvm/PassManager.h>
-#include <llvm/Analysis/Verifier.h>
-#include <llvm/Transforms/Scalar.h>
-#include <llvm/Target/TargetData.h>
-#include <llvm/Assembly/PrintModulePass.h>
-#include <llvm/Target/TargetOptions.h>
-#include <llvm/CodeGen/MachineCodeEmitter.h>
-#include <llvm/CodeGen/MachineBasicBlock.h>
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Module.h"
-#include "llvm/ModuleProvider.h"
-#include "llvm/PassManager.h"
-#include "llvm/ValueSymbolTable.h"
-#include "llvm/Analysis/LoopPass.h"
-#include "llvm/Analysis/Verifier.h"
-#include "llvm/Assembly/Writer.h"
-#include "llvm/Assembly/PrintModulePass.h"
-#include "llvm/Bitcode/ReaderWriter.h"
-#include "llvm/CodeGen/RegAllocRegistry.h"
-#include "llvm/CodeGen/SchedulerRegistry.h"
-#include "llvm/CodeGen/ScheduleDAG.h"
-#include "llvm/Target/SubtargetFeature.h"
-#include "llvm/Target/TargetData.h"
-#include "llvm/Target/TargetLowering.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/Target/TargetMachineRegistry.h"
-#include "llvm/Transforms/Scalar.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/Streams.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/MemoryBuffer.h"
+#include <llvm/Type.h>
 #include "llvm/Support/MutexGuard.h"
-
-#include <llvm/Transforms/IPO.h>
+#include "llvm/Target/TargetOptions.h"
 
 #include <stdio.h>
 
 #include "mvm/JIT.h"
 #include "mvm/Method.h"
-#include "mvm/VMLet.h"
 
 #include "MvmMemoryManager.h"
 
@@ -89,61 +45,6 @@
   printf("%s\n", obj->printString());
 }
 
-static void addPass(FunctionPassManager *PM, Pass *P) {
-  // Add the pass to the pass manager...
-  PM->add(P);
-}
-
-void jit::AddStandardCompilePasses(FunctionPassManager *PM) {
-  llvm::MutexGuard locked(mvm::jit::executionEngine->lock);
-  // LLVM does not allow calling functions from other modules in verifier
-  //PM->add(createVerifierPass());                  // Verify that input is correct
-  
-  addPass(PM, createCFGSimplificationPass());    // Clean up disgusting code
-  addPass(PM, createScalarReplAggregatesPass());// Kill useless allocas
-  addPass(PM, createInstructionCombiningPass()); // Clean up after IPCP & DAE
-  addPass(PM, createCFGSimplificationPass());    // Clean up after IPCP & DAE
-  addPass(PM, createPromoteMemoryToRegisterPass());// Kill useless allocas
-  addPass(PM, createInstructionCombiningPass()); // Clean up after IPCP & DAE
-  addPass(PM, createCFGSimplificationPass());    // Clean up after IPCP & DAE
-  
-  addPass(PM, createTailDuplicationPass());      // Simplify cfg by copying code
-  addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
-  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
-  addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
-  addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
-  addPass(PM, createCondPropagationPass());      // Propagate conditionals
-  
-   
-  addPass(PM, createTailCallEliminationPass());  // Eliminate tail calls
-  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
-  addPass(PM, createReassociatePass());          // Reassociate expressions
-  addPass(PM, createLoopRotatePass());
-  addPass(PM, createLICMPass());                 // Hoist loop invariants
-  addPass(PM, createLoopUnswitchPass());         // Unswitch loops.
-  addPass(PM, createInstructionCombiningPass()); // Clean up after LICM/reassoc
-  addPass(PM, createIndVarSimplifyPass());       // Canonicalize indvars
-  addPass(PM, createLoopUnrollPass());           // Unroll small loops
-  addPass(PM, createInstructionCombiningPass()); // Clean up after the unroller
-  addPass(PM, createGVNPass());                  // GVN for load instructions
-  addPass(PM, createGCSEPass());                 // Remove common subexprs
-  addPass(PM, createSCCPPass());                 // Constant prop with SCCP
-  
-  
-  // Run instcombine after redundancy elimination to exploit opportunities
-  // opened up by them.
-  addPass(PM, createInstructionCombiningPass());
-  addPass(PM, createCondPropagationPass());      // Propagate conditionals
-
-  addPass(PM, createDeadStoreEliminationPass()); // Delete dead stores
-  addPass(PM, createAggressiveDCEPass());        // SSA based 'Aggressive DCE'
-  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
-  
-}
-
-
-
-
 static void initialiseTypes(llvm::Module* mod) {
   {
   // llvm::Type Definitions
@@ -317,7 +218,7 @@
 
 extern "C" void __register_frame(void*);
 
-void VMLet::initialise() {
+void mvm::jit::initialise() {
   llvm::SizedMemoryCode = true;
   llvm::NoFramePointerElim = true;
   llvm::ExceptionHandling = true;

Modified: vmkit/trunk/lib/Mvm/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Main.cpp?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Main.cpp (original)
+++ vmkit/trunk/lib/Mvm/Main.cpp Tue Apr  8 12:06:22 2008
@@ -8,10 +8,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "mvm/GC/GC.h"
+#include "mvm/JIT.h"
 #include "mvm/PrintBuffer.h"
 #include "mvm/Threads/Thread.h"
-#include "mvm/Sigsegv.h"
-#include "mvm/VMLet.h"
 
 
 #include <dlfcn.h>
@@ -44,14 +43,15 @@
   int base;
   llvm::cl::ParseCommandLineOptions(argc, argv,
                                     " VMKit: a virtual machine launcher\n");
-  Object::initialise(&base);
-  VMLet::initialise();
+  jit::initialise();
+  Object::initialise();
+  Collector::initialise(Object::markAndTraceRoots, &base);
   
   CommandLine cl;
   cl.start();
    
   clearSignals();
-	Thread::exit(0);
+  Thread::exit(0);
     
   return 0;
 }

Modified: vmkit/trunk/lib/Mvm/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Makefile.am (original)
+++ vmkit/trunk/lib/Mvm/Makefile.am Tue Apr  8 12:06:22 2008
@@ -15,6 +15,6 @@
 PREFIX=@prefix@
 
 main_SOURCES = Main.cpp Object.cpp Sigsegv.cpp JIT.cpp CommandLine.cpp CommandLine.h MvmMemoryManager.h MvmMemoryManager.cpp EscapeAnalysis.cpp Disassembler.cpp
-main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -pedantic -Wno-long-long -fno-omit-frame-pointer -O2 -g
+main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -pedantic -Wno-long-long -fno-omit-frame-pointer -O2 -g -DSERVICE_VM
 main_LDFLAGS=@rdynamic@
 main_LDADD = $(LIBSUVM) @LLVMDYLIB@

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

==============================================================================
--- vmkit/trunk/lib/Mvm/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Object.cpp Tue Apr  8 12:06:22 2008
@@ -13,6 +13,8 @@
 #include "mvm/Object.h"
 #include "mvm/PrintBuffer.h"
 #include "mvm/GC/GC.h"
+#include "mvm/Threads/Key.h"
+#include "mvm/Threads/Thread.h"
 
 using namespace mvm;
 
@@ -23,10 +25,12 @@
 VirtualTable *NativeString::VT = 0;
 VirtualTable *PrintBuffer::VT = 0;
 
+mvm::Key<mvm::Thread>* mvm::Thread::threadKey = 0;
+
 
 Object **Object::rootTable= 0;
-int	  Object::rootTableSize= 0;
-int	  Object::rootTableLimit= 0;
+int    Object::rootTableSize= 0;
+int    Object::rootTableLimit= 0;
 
 void Object::growRootTable(void) {
   if (rootTableLimit != 0) {
@@ -46,7 +50,7 @@
     rootTable[i]->markAndTrace();
 }
 
-void Object::initialise(void *b_sp) {
+void Object::initialise() {
 # define INIT(X) { \
   X fake; \
   X::VT = ((void**)(void*)(&fake))[0]; }
@@ -59,16 +63,15 @@
   INIT(ExceptionTable);
   
 #undef INIT
-
-  Collector::initialise(Object::markAndTraceRoots, b_sp);
+  Thread::threadKey = new mvm::Key<Thread>();
 }
 
 void Code::tracer(size_t sz) {
-	((Code *)this)->method(sz)->markAndTrace();
+  this->method(sz)->markAndTrace();
 }
 
 void Method::tracer(size_t sz) {
-	Method *const self= (Method *)this;
+  Method *const self= (Method *)this;
   self->definition()->markAndTrace();
   self->literals()->markAndTrace();
   self->name()->markAndTrace();
@@ -77,7 +80,7 @@
 }
 
 void PrintBuffer::tracer(size_t sz) {
-	((PrintBuffer *)this)->contents()->markAndTrace();
+  ((PrintBuffer *)this)->contents()->markAndTrace();
 }
 
 PrintBuffer *PrintBuffer::alloc(void) {
@@ -86,24 +89,24 @@
 
 
 PrintBuffer *PrintBuffer::writeObj(const Object *obj) {
-	Object *beg = (Object*)Collector::begOf(obj);
-	
-	if(beg) {
-		if(beg == obj)
-			obj->print((mvm::PrintBuffer*)this);
-		else {
-			write("<In Object [");
-			beg->print(this);
-			write("] -- offset ");
-			writeS4((intptr_t)obj - (intptr_t)beg);
-			write(">");
-		}
-	} else {
-		write("<DirectValue: ");
-		writeS4((intptr_t)obj);
-		write(">");
-	}
-	return this;
+  Object *beg = (Object*)Collector::begOf(obj);
+  
+  if(beg) {
+    if(beg == obj) {
+      obj->print((mvm::PrintBuffer*)this);
+    } else {
+      write("<In Object [");
+      beg->print(this);
+      write("] -- offset ");
+      writeS4((intptr_t)obj - (intptr_t)beg);
+      write(">");
+    }
+  } else {
+    write("<DirectValue: ");
+    writeS4((intptr_t)obj);
+    write(">");
+  }
+  return this;
 }
 
 extern "C" void write_ptr(PrintBuffer* buf, void* obj) {
@@ -120,30 +123,30 @@
 
 char *Object::printString(void) const {
   PrintBuffer *buf= PrintBuffer::alloc();
-	buf->writeObj(this);
+  buf->writeObj(this);
   return buf->contents()->cString();
 }
 
 void Object::print(PrintBuffer *buf) const {
-	buf->write("<Object@");
-	buf->writePtr((void*)this);
+  buf->write("<Object@");
+  buf->writePtr((void*)this);
   buf->write(">");
 }
 
 void Code::print(PrintBuffer *buf) const {
-	buf->write("Code<");
-	buf->write(">");
+  buf->write("Code<");
+  buf->write(">");
 }
 
 void Method::print(PrintBuffer *buf) const {
   Method *const self= (Method *)this;
-	buf->write("Method<");
+  buf->write("Method<");
   if (self->name()) {
-	  self->name()->print(buf);
+    self->name()->print(buf);
   } else {
     buf->write("lambda");
   }
-	buf->write(">");
+  buf->write(">");
 }
 
 void NativeString::print(PrintBuffer *buf) const {
@@ -152,23 +155,27 @@
   for (size_t i= 0; i < strlen(self->cString()); ++i) {
     int c= self->cString()[i];
     switch (c) {
-	    case '\b': buf->write("\\b"); break;
-	    case '\f': buf->write("\\f"); break;
-	    case '\n': buf->write("\\n"); break;
-	    case '\r': buf->write("\\r"); break;
-	    case '\t': buf->write("\\t"); break;
-	    case '"':  buf->write("\\\""); break;
-	    default: {
-	      char esc[32];
-	      if (c < 32)
-	        sprintf(esc, "\\x%02x", c);
-	      else
-	        sprintf(esc, "%c", c);
-	      buf->write(esc);
-	    }
-	  }
+      case '\b': buf->write("\\b"); break;
+      case '\f': buf->write("\\f"); break;
+      case '\n': buf->write("\\n"); break;
+      case '\r': buf->write("\\r"); break;
+      case '\t': buf->write("\\t"); break;
+      case '"':  buf->write("\\\""); break;
+      default: {
+        char esc[32];
+        if (c < 32)
+          sprintf(esc, "\\x%02x", c);
+        else
+          sprintf(esc, "%c", c);
+        buf->write(esc);
+      }
+    }
   }
   buf->write("\"");
 }
 
 NativeString *PrintBuffer::getContents() { return contents(); }
+
+Thread* Thread::get() {
+  return (Thread*)Thread::threadKey->get();
+}

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

==============================================================================
--- vmkit/trunk/lib/Mvm/Sigsegv.cpp (original)
+++ vmkit/trunk/lib/Mvm/Sigsegv.cpp Tue Apr  8 12:06:22 2008
@@ -10,7 +10,6 @@
 
 #include "mvm/GC/GC.h"
 #include "mvm/Sigsegv.h"
-#include "mvm/VMLet.h"
 
 #include <signal.h>
 #include <stdio.h>
@@ -24,49 +23,41 @@
 #endif
 
 void sigsegv_handler(int n, siginfo_t *_info, void *context) {
-	void *addr = _info->si_addr;
+  void *addr = _info->si_addr;
 #if defined(__i386__)
-	struct frame {
-		struct frame *caller;
-		void         *ip;
-	};
-
-	struct frame *fp;	/* my frame */
-  asm ("mov %%ebp, %0" : "=&r"(fp)); /* get it */
-	struct frame *caller = fp->caller; /* my caller */
+  struct frame {
+    struct frame *caller;
+    void         *ip;
+  };
+  
+  /* my frame */
+  struct frame *fp;
+  /* get it */
+  asm ("mov %%ebp, %0" : "=&r"(fp));
+  /* my caller */
+  struct frame *caller = fp->caller; 
   /* preserve my caller if I return from the handler */
-	void *caller_ip = caller->ip; 
+  void *caller_ip = caller->ip; 
 
-# if defined(__MACH__)
+#if defined(__MACH__)
   //.gregs[REG_EIP]; /* just like it's on the stack.. */
-	caller->ip = (void *)((ucontext_t*)context)->uc_mcontext->__ss.__eip;
-# else
-  /* comme si c'était lui qui était sur la pile... */
-	caller->ip = (void *)((ucontext_t*)context)->uc_mcontext.gregs[REG_EIP]; 
-# endif
+  caller->ip = (void *)((ucontext_t*)context)->uc_mcontext->__ss.__eip;
+#else
+  /* just like it's on the stack... */
+  caller->ip = (void *)((ucontext_t*)context)->uc_mcontext.gregs[REG_EIP]; 
+#endif
 #endif
 	
-	/* Free the GC if it sisgegv'd. No other collection is possible */
-	Collector::die_if_sigsegv_occured_during_collection(addr);
+  /* Free the GC if it sisgegv'd. No other collection is possible */
+  Collector::die_if_sigsegv_occured_during_collection(addr);
 	
-	//	sys_exit(0);
-	if(client_sigsegv_handler)
-		client_sigsegv_handler(n, addr);
-	else
-		signal(SIGSEGV, SIG_DFL);
+  //	sys_exit(0);
+  if(client_sigsegv_handler)
+    client_sigsegv_handler(n, addr);
+  else
+    signal(SIGSEGV, SIG_DFL);
 	
 #if defined(__i386__)
-	caller->ip = caller_ip; /* restore the caller ip */
+  caller->ip = caller_ip; /* restore the caller ip */
 #endif
 }
-
-void VMLet::register_sigsegv_handler(void (*fct)(int, void *)) {
-	struct sigaction sa;
-
-	sigaction(SIGSEGV, 0, &sa);
-	sa.sa_sigaction = sigsegv_handler;
-	sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-	sigaction(SIGSEGV, &sa, 0);
-	client_sigsegv_handler = fct;
-}
-

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

==============================================================================
--- vmkit/trunk/lib/N3/Main.cpp (original)
+++ vmkit/trunk/lib/N3/Main.cpp Tue Apr  8 12:06:22 2008
@@ -7,76 +7,28 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "mvm/JIT.h"
 #include "mvm/GC/GC.h"
 #include "mvm/PrintBuffer.h"
-#include "mvm/VMLet.h"
-#include "mvm/Threads/Thread.h"
-
-
-#include <dlfcn.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stdio.h>
 
 #include "llvm/Support/ManagedStatic.h"
 
 using namespace mvm;
 
 
-typedef int (*boot_t)(int, char**, char**);
-
-static void clearSignals(void) {
-  signal(SIGINT,  SIG_DFL);
-  signal(SIGILL,  SIG_DFL);
-#if !defined(WIN32)
-  signal(SIGIOT,  SIG_DFL);
-  signal(SIGBUS,  SIG_DFL);
-#endif
-  signal(SIGSEGV, SIG_DFL);
-}
-
 extern "C" int boot();
 extern "C" int start_app(int, char**);
 
-#include "VMCore/CLIJit.h"
-
-void handler2(int n, void *context) {
-  printf("[%d] crashed\n", (int)mvm::Thread::self());
-  n3::CLIJit::printBacktrace();
-  assert(0);
-}
-
-void handler(int n, siginfo_t *_info, void *context) {
-  printf("[%d] crashed\n", (int)mvm::Thread::self());
-  n3::CLIJit::printBacktrace();
-  assert(0);
-}
 
 int main(int argc, char **argv, char **envp) {
   llvm::llvm_shutdown_obj X;  
   int base;
   
-  struct sigaction sa;
-
-  sigaction(SIGINT, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGINT, &sa, 0);
-  
-  sigaction(SIGILL, 0, &sa);
-  sa.sa_sigaction = handler;
-  sa.sa_flags |= (SA_RESTART | SA_SIGINFO | SA_NODEFER);
-  sigaction(SIGILL, &sa, 0);
-  
-  
-  VMLet::register_sigsegv_handler(handler2);
-
-  Object::initialise(&base);
-  VMLet::initialise();
+  jit::initialise();
+  Object::initialise();
+  Collector::initialise(Object::markAndTraceRoots, &base);
   boot();
   start_app(argc, argv);
 
-  clearSignals();
-    
   return 0;
 }

Modified: vmkit/trunk/lib/N3/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/Makefile.am (original)
+++ vmkit/trunk/lib/N3/Makefile.am Tue Apr  8 12:06:22 2008
@@ -14,6 +14,6 @@
 
 main_SOURCES = ../Mvm/Object.cpp ../Mvm/Sigsegv.cpp Main.cpp ../Mvm/MvmMemoryManager.cpp ../Mvm/JIT.cpp ../Mvm/EscapeAnalysis.cpp
 
-main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2
+main_CXXFLAGS = $(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -Werror -O2 -DSINGLE_VM
 main_LDADD = VMCore/.libs/libN3.a $(LIBSUVM) @LLVMDYLIB@
 main_LDFLAGS = @rdynamic@

Modified: vmkit/trunk/lib/N3/VMCore/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/Makefile.am?rev=49388&r1=49387&r2=49388&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/Makefile.am (original)
+++ vmkit/trunk/lib/N3/VMCore/Makefile.am Tue Apr  8 12:06:22 2008
@@ -16,4 +16,4 @@
 	Opcodes.cpp NativeUtil.h NativeUtil.cpp PNetLib.cpp N3ModuleProvider.cpp N3ModuleProvider.h \
 	PNetLib.h BackTrace.cpp LowerArrayLength.cpp
 
-libN3_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -O2
+libN3_la_CXXFLAGS =$(INCLUDEDIRS) -DPREFIX=\"$(PREFIX)\" -W -Wall -ansi -Wno-unused-parameter -Wno-long-long -Wno-unused-function -fno-omit-frame-pointer -g -O2 -DSINGLE_VM

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Tue Apr  8 12:06:22 2008
@@ -32,7 +32,6 @@
 
 N3* N3::bootstrapVM = 0;
 mvm::Lock* VMObject::globalLock = 0;
-mvm::Key<VMThread>* VMThread::threadKey = 0;
 
 VMCommonClass* VMClassArray::SuperArray = 0;
 std::vector<VMClass*> VMClassArray::InterfacesArray;
@@ -237,9 +236,6 @@
   VMObject::globalLock = mvm::Lock::allocNormal();
   //mvm::Object::pushRoot((mvm::Object*)VMObject::globalLock);
 
-  VMThread::threadKey = new mvm::Key<VMThread>();
-  //mvm::Object::pushRoot((mvm::Object*)VMThread::threadKey);
-  
   N3* vm = N3::bootstrapVM = N3::allocateBootstrap();
   mvm::Object::pushRoot((mvm::Object*)N3::bootstrapVM);
 

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3ModuleProvider.cpp Tue Apr  8 12:06:22 2008
@@ -11,7 +11,6 @@
 #include <llvm/ModuleProvider.h>
 
 #include "mvm/JIT.h"
-#include "mvm/VMLet.h"
 
 #include "Assembly.h"
 #include "CLIJit.h"

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMThread.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMThread.cpp Tue Apr  8 12:06:22 2008
@@ -40,7 +40,7 @@
 }
 
 VMThread* VMThread::get() {
-  return threadKey->get();
+  return (VMThread*)threadKey->get();
 }
 
 extern void AddStandardCompilePasses(llvm::FunctionPassManager*);

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

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMThread.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMThread.h Tue Apr  8 12:06:22 2008
@@ -18,6 +18,7 @@
 #include "mvm/Threads/Cond.h"
 #include "mvm/Threads/Key.h"
 #include "mvm/Threads/Locks.h"
+#include "mvm/Threads/Thread.h"
 
 namespace n3 {
 
@@ -25,7 +26,7 @@
 class VMClass;
 class VMObject;
 
-class VMThread : public mvm::Object {
+class VMThread : public mvm::Thread {
 public:
   static VirtualTable *VT;
   VMObject* vmThread;
@@ -46,8 +47,6 @@
   virtual void tracer(size_t sz);
   virtual void destroyer(size_t sz);
   
-  static mvm::Key<VMThread>* threadKey;
-
   static VMThread* get();
   static VMThread* allocate(VMObject* thread, VirtualMachine* vm);
   static VMObject* currentThread();





More information about the llvm-commits mailing list