[vmkit-commits] [vmkit] r195678 - revert to r187580

Gael Thomas gael.thomas at lip6.fr
Mon Nov 25 12:10:44 PST 2013


Author: gthomas
Date: Mon Nov 25 14:10:43 2013
New Revision: 195678

URL: http://llvm.org/viewvc/llvm-project?rev=195678&view=rev
Log:
revert to r187580

Removed:
    vmkit/trunk/include/vmkit/StackEmbeddedList.h
Modified:
    vmkit/trunk/README.TXT
    vmkit/trunk/include/j3/J3Intrinsics.h
    vmkit/trunk/include/vmkit/GC.h
    vmkit/trunk/include/vmkit/System.h
    vmkit/trunk/include/vmkit/Thread.h
    vmkit/trunk/include/vmkit/UTF8.h
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
    vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
    vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJIT.h
    vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
    vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp
    vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
    vmkit/trunk/lib/j3/VMCore/JavaClass.h
    vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp
    vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
    vmkit/trunk/lib/j3/VMCore/JavaObject.h
    vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/j3/VMCore/JavaString.cpp
    vmkit/trunk/lib/j3/VMCore/JavaString.h
    vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp
    vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
    vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x64.inc
    vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc
    vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
    vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp
    vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp

Modified: vmkit/trunk/README.TXT
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/README.TXT (original)
+++ vmkit/trunk/README.TXT Mon Nov 25 14:10:43 2013
@@ -118,4 +118,3 @@ svn co https://YOUR_USER_NAME@llvm.org/s
 * Build it:
 
 make -j12
-

Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Mon Nov 25 14:10:43 2013
@@ -45,7 +45,6 @@ public:
   llvm::Type* JavaMethodType;
   llvm::Type* JavaFieldType;
   llvm::Type* AttributeType;
-  llvm::Type* ThreadType;
   llvm::Type* JavaThreadType;
   llvm::Type* MutatorThreadType;
   llvm::Type* J3DenseMapType;
@@ -141,8 +140,6 @@ public:
   llvm::Constant* OffsetBaseClassInArrayClassConstant;
   llvm::Constant* OffsetLogSizeInPrimitiveClassConstant;
   
-  llvm::Constant* OffsetOffsetInJavaMethodConstant;
-
   llvm::Constant* ClassReadyConstant;
 
   llvm::Constant* JavaObjectNullConstant;

Modified: vmkit/trunk/include/vmkit/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/GC.h (original)
+++ vmkit/trunk/include/vmkit/GC.h Mon Nov 25 14:10:43 2013
@@ -19,20 +19,14 @@ class gc;
 class gcHeader {
 public:
 	word_t _header;
-
 	inline gc* toReference() { return (gc*)((uintptr_t)this + hiddenHeaderSize()); }
 	static inline size_t hiddenHeaderSize() { return sizeof(gcHeader); }
 };
 
 class gcRoot {
 public:
-
-  inline       word_t& header()       {return toHeader()->_header; }
-  inline const word_t& header() const {return const_cast<gcRoot*>(this)->header(); }
-
-  inline       gcHeader* toHeader()       {
-      return (gcHeader*)((uintptr_t)this - gcHeader::hiddenHeaderSize()); }
-  inline const gcHeader* toHeader() const {return const_cast<gcRoot*>(this)->toHeader(); }
+  word_t& header(){return toHeader()->_header; }
+  inline gcHeader* toHeader() { return (gcHeader*)((uintptr_t)this - gcHeader::hiddenHeaderSize()); }
 };
 
 namespace vmkit {

Removed: vmkit/trunk/include/vmkit/StackEmbeddedList.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/StackEmbeddedList.h?rev=195677&view=auto
==============================================================================
--- vmkit/trunk/include/vmkit/StackEmbeddedList.h (original)
+++ vmkit/trunk/include/vmkit/StackEmbeddedList.h (removed)
@@ -1,49 +0,0 @@
-
-#if JAVA_INTERFACE_CALL_STACK
-
-#ifndef STACK_EMBEDDED_LIST_NODE_H_
-#define STACK_EMBEDDED_LIST_NODE_H_
-
-#include "vmkit/System.h"
-
-namespace vmkit {
-
-class Thread;
-
-}
-
-namespace j3 {
-
-class JavaMethod;
-
-enum StackEmbeddedListID {
-	StackEmbeddedListIntendedCaller = 0,
-
-	StackEmbeddedListNodeCountPerThread
-};
-
-struct StackEmbeddedListNode
-{
-	StackEmbeddedListNode* callerNode;
-	word_t data[1];
-
-	void initialize() {
-		callerNode = NULL;
-		memset(data, 0, sizeof(*data) * StackEmbeddedListNodeCountPerThread);
-	}
-
-	void dump() const __attribute__((noinline));
-};
-
-}
-
-extern "C" void pushIntendedInvokedMethodNode(
-	vmkit::Thread* thread, j3::StackEmbeddedListNode* node,
-	j3::JavaMethod* intendedMethod);
-
-extern "C" void popIntendedInvokedMethodNode(
-	vmkit::Thread* thread, j3::StackEmbeddedListNode* node);
-
-#endif
-
-#endif

Modified: vmkit/trunk/include/vmkit/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/System.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/System.h (original)
+++ vmkit/trunk/include/vmkit/System.h Mon Nov 25 14:10:43 2013
@@ -17,8 +17,6 @@
 #include <stdint.h>
 #include <unistd.h>
 
-#include "vmkit/config.h"
-
 #if defined(__linux__) || defined(__FreeBSD__)
 #define LINUX_OS 1
 #elif defined(__APPLE__)
@@ -150,7 +148,7 @@ public:
     return pagesize;
   }
 
-  static word_t GetCallFrameAddress() __attribute((always_inline)) {
+  static word_t GetCallerAddress() __attribute((always_inline)) {
 #if defined(ARCH_X86) || defined(ARCH_X64)
     return (word_t)__builtin_frame_address(0);
 #else
@@ -158,15 +156,15 @@ public:
 #endif
   }
 
-  static word_t GetCallerCallFrame(word_t currentCallFrame) {
-    return *(word_t*)currentCallFrame;
+  static word_t GetCallerOfAddress(word_t addr) {
+    return ((word_t*)addr)[0];
   }
 
-  static word_t GetReturnAddressOfCallFrame(word_t currentCallFrame) {
+  static word_t GetIPFromCallerAddress(word_t addr) {
 #if defined(MACOS_OS) && defined(ARCH_PPC)
-    return ((word_t*)currentCallFrame)[2];
+    return ((word_t*)addr)[2];
 #else
-    return ((word_t*)currentCallFrame)[1];
+    return ((word_t*)addr)[1];
 #endif
   }
 

Modified: vmkit/trunk/include/vmkit/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Thread.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/Thread.h (original)
+++ vmkit/trunk/include/vmkit/Thread.h Mon Nov 25 14:10:43 2013
@@ -172,7 +172,7 @@ public:
   /// get - Get the thread specific data of the current thread.
   ///
   static Thread* get() {
-    return (Thread*)(System::GetCallFrameAddress() & System::GetThreadIDMask());
+    return (Thread*)(System::GetCallerAddress() & System::GetThreadIDMask());
   }
   
 private:
@@ -239,7 +239,7 @@ public:
   /// stackOverflow - Returns if there is a stack overflow in Java land.
   ///
   bool stackOverflow() {
-    return (System::GetCallFrameAddress() & StackOverflowMask) == 0;
+    return (System::GetCallerAddress() & StackOverflowMask) == 0;
   }
 
   /// operator new - Allocate the Thread object as well as the stack for this
@@ -331,12 +331,11 @@ public:
 ///
 class StackWalker {
 public:
-  word_t callFrameAddress;
-  word_t returnAddress;
+  word_t addr;
+  word_t ip;
   KnownFrame* frame;
   vmkit::Thread* thread;
 
-  StackWalker() __attribute__ ((noinline));
   StackWalker(vmkit::Thread* th) __attribute__ ((noinline));
   void operator++();
   word_t operator*();

Modified: vmkit/trunk/include/vmkit/UTF8.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/UTF8.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/UTF8.h (original)
+++ vmkit/trunk/include/vmkit/UTF8.h Mon Nov 25 14:10:43 2013
@@ -12,25 +12,6 @@ namespace vmkit {
 
 class UTF8Map;
 
-template<class T1, class T2>
-int compare_null_terminated_arrays(const T1* array1, size_t size1, const T2* array2, size_t size2)
-{
-	// NULL array is treated as empty
-	if (!array1) size1 = 0;
-	if (!array2) size2 = 0;
-
-	// Compute real sizes, excluding null terminators
-	for (; (size1 != 0) && (array1[size1 - 1] == 0); --size1);
-	for (; (size2 != 0) && (array2[size2 - 1] == 0); --size2);
-
-	int diff = size1 - size2;	// Compare sizes
-	if (diff == 0) {	// Equal sizes, compare contents
-		for (; (size1 != 0) && (diff == 0); --size1, ++array1, ++array2)
-			diff = *array1 - *array2;
-	}
-	return diff;
-}
-
 class UTF8 {
   friend class UTF8Map;
 private:
@@ -55,7 +36,8 @@ public:
   /// equals - Are the two UTF8s equal?
   bool equals(const UTF8* other) const {
     if (other == this) return true;
-    return (*this) == (*other);
+    else if (size != other->size) return false;
+    else return !memcmp(elements, other->elements, size * sizeof(uint16));
   }
   
   /// equals - Does the UTF8 equal to the buffer? 
@@ -65,8 +47,12 @@ public:
   }
 
   /// lessThan - strcmp-like function for UTF8s, used by hash tables.
-  bool lessThan(const UTF8* other) const
-    { return (*this) < (*other); }
+  bool lessThan(const UTF8* other) const {
+    if (size < other->size) return true;
+    else if (size > other->size) return false;
+    else return memcmp((const char*)elements, (const char*)other->elements, 
+                       size * sizeof(uint16)) < 0;
+  }
 
 	static uint32_t readerHasher(const uint16* buf, sint32 size);
 	
@@ -78,26 +64,9 @@ public:
     size = n;
   }
 
-  friend bool operator < (const UTF8& str1, const UTF8& str2) {
-    return UTF8::compare(&str1, &str2) < 0;
-  }
-  friend bool operator == (const UTF8& str1, const UTF8& str2) {
-    return UTF8::compare(&str1, &str2) == 0;
-  }
   friend std::ostream& operator << (std::ostream&, const UTF8&);
-
   void dump() const __attribute__((noinline));
-  int compare(const char *str, int length = -1) const {
-    return compare_null_terminated_arrays(
-      elements, size, str, (length == -1) ? strlen(str) : length);
-  }
-  int compare(const UTF8& str) const {return UTF8::compare(this, &str);}
-  static int compare(const UTF8* str1, const UTF8* str2) {
-    if (!str1 && !str2) return 0;
-    return compare_null_terminated_arrays(
-    	(!str1 ? NULL : str1->elements), (!str1 ? 0 : str1->size),
-    	(!str2 ? NULL : str2->elements), (!str2 ? 0 : str2->size));
-  }
+  int compare(const char *) const;
   std::string& toString(std::string& buffer) const;
 };
 
@@ -114,13 +83,6 @@ struct UTF8MapKey {
   }
 };
 
-class UTF8_Comparator {
-public:
-	bool operator() (const UTF8* str1, const UTF8* str2) const {
-		return (*str1) < (*str2);
-	}
-};
-
 // Provide VmkitDenseMapInfo for UTF8.
 template<>
 struct VmkitDenseMapInfo<const UTF8*> {

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Mon Nov 25 14:10:43 2013
@@ -206,7 +206,6 @@ JavaMethod* Classpath::InitArithmeticExc
 JavaMethod* Classpath::InitCloneNotSupportedException;
 JavaMethod* Classpath::InitObject;
 JavaMethod* Classpath::FinalizeObject;
-JavaMethod* Classpath::toString;
 JavaMethod* Classpath::IntToString;
 
 JavaMethod* Classpath::SystemArraycopy;
@@ -906,9 +905,6 @@ void Classpath::initialiseClasspath(Jnjv
   
   FinalizeObject = UPCALL_METHOD(loader, "java/lang/Object", "finalize", "()V",
                                  ACC_VIRTUAL);
-
-  toString = UPCALL_METHOD(loader, "java/lang/Object", "toString",
-          "()Ljava/lang/String;", ACC_VIRTUAL);
   
   IntToString = UPCALL_METHOD(loader, "java/lang/Integer", "toString",
                               "(II)Ljava/lang/String;", ACC_STATIC);

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h Mon Nov 25 14:10:43 2013
@@ -251,7 +251,6 @@ public:
 
   ISOLATE_STATIC JavaMethod* InitObject;
   ISOLATE_STATIC JavaMethod* FinalizeObject;
-  ISOLATE_STATIC JavaMethod* toString;
 
   ISOLATE_STATIC JavaMethod* ErrorWithExcpNoClassDefFoundError;
   ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError;

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Mon Nov 25 14:10:43 2013
@@ -197,7 +197,6 @@ JavaMethod* Classpath::InitArithmeticExc
 JavaMethod* Classpath::InitCloneNotSupportedException;
 JavaMethod* Classpath::InitObject;
 JavaMethod* Classpath::FinalizeObject;
-JavaMethod* Classpath::toString;
 JavaMethod* Classpath::IntToString;
 
 JavaMethod* Classpath::SystemArraycopy;
@@ -788,9 +787,6 @@ void Classpath::initialiseClasspath(Jnjv
   FinalizeObject = UPCALL_METHOD(loader, "java/lang/Object", "finalize", "()V",
                                  ACC_VIRTUAL);
 
-  toString = UPCALL_METHOD(loader, "java/lang/Object", "toString",
-          "()Ljava/lang/String;", ACC_VIRTUAL);
-
   IntToString = UPCALL_METHOD(loader, "java/lang/Integer", "toString",
                               "(II)Ljava/lang/String;", ACC_STATIC);
 

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h Mon Nov 25 14:10:43 2013
@@ -240,7 +240,6 @@ public:
 
   ISOLATE_STATIC JavaMethod* InitObject;
   ISOLATE_STATIC JavaMethod* FinalizeObject;
-  ISOLATE_STATIC JavaMethod* toString;
 
   ISOLATE_STATIC JavaMethod* ErrorWithExcpNoClassDefFoundError;
   ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError;

Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Mon Nov 25 14:10:43 2013
@@ -99,8 +99,6 @@ void J3Intrinsics::init(llvm::Module* mo
     PointerType::getUnqual(module->getTypeByName("UTF8"));
   AttributeType =
     PointerType::getUnqual(module->getTypeByName("Attribute"));
-  ThreadType =
-    PointerType::getUnqual(module->getTypeByName("Thread"));
   JavaThreadType =
     PointerType::getUnqual(module->getTypeByName("JavaThread"));
   MutatorThreadType =
@@ -154,8 +152,6 @@ void J3Intrinsics::init(llvm::Module* mo
   OffsetBaseClassInArrayClassConstant = constantOne;
   OffsetLogSizeInPrimitiveClassConstant = constantOne;
 
-  OffsetOffsetInJavaMethodConstant = ConstantInt::get(Type::getInt32Ty(Context), 9);
-
   OffsetObjectSizeInClassConstant = constantOne;
   OffsetVTInClassConstant = ConstantInt::get(Type::getInt32Ty(Context), 7);
   OffsetTaskClassMirrorInClassConstant = constantThree;

Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Mon Nov 25 14:10:43 2013
@@ -2143,8 +2143,7 @@ void mainCompilerStart(JavaThread* th) {
 
   JavaJITCompiler* Comp = NULL;
   if (!M->clinits->empty()) {
-    Comp = JavaJITCompiler::CreateCompiler(
-      "JIT", M->isCompilingGarbageCollector());
+    Comp = JavaJITCompiler::CreateCompiler("JIT");
     Comp->EmitFunctionName = true;
     if (!M->useCooperativeGC()) {
       Comp->disableCooperativeGC();

Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Mon Nov 25 14:10:43 2013
@@ -15,7 +15,6 @@
 #include <string>
 #include <sstream>
 #include <cstring>
-#include <cstdarg>
 
 #include <llvm/IR/Constants.h>
 #include <llvm/IR/DerivedTypes.h>
@@ -48,37 +47,6 @@ using namespace j3;
 using namespace llvm;
 using namespace std;
 
-Value* JavaJIT::allocateOnStack(
-	const char* name, size_t byteCount, Type* realType)
-{
-	std::string bufferName(name);
-	bufferName += "Buffer";
-
-	Constant* wordCount = ConstantInt::get(
-		Type::getInt32Ty(*llvmContext),
-		vmkit::System::WordAlignUp(byteCount) / sizeof(void*));
-
-	Value* buffer = new AllocaInst(intrinsics->ptrType,
-		wordCount, sizeof(void*), bufferName, currentBlock);
-	return new BitCastInst(buffer, realType, name, currentBlock);
-}
-
-Value* JavaJIT::getElementPtr(
-	const char *name, Value* element, Value* firstIndex, ...)
-{
-	std::vector<Value*> indexList;
-	indexList.push_back(firstIndex);
-
-	va_list argList;
-	Value* arg;
-	va_start(argList, firstIndex);
-	while ((arg = va_arg(argList, Value*)) != NULL)
-		indexList.push_back(arg);
-	va_end(argList);
-
-	return GetElementPtrInst::Create(element, indexList, name, currentBlock);
-}
-
 void JavaJIT::updateStackInfo(Opinfo& info) {
   if (stackSize()) {
     if (!info.stack.size()) {
@@ -253,47 +221,37 @@ void JavaJIT::invokeVirtual(uint16 index
       indexes2[1] = Offset;
     } else {
       nullChecked = true;
-      GlobalVariable* cachedMethodPtr = new GlobalVariable(
-        *llvmFunction->getParent(), intrinsics->JavaMethodType,
-        false, GlobalValue::ExternalLinkage,
-        Constant::getNullValue(intrinsics->JavaMethodType), "cachedMethodPtr");
-      Value* cachedMethod = new LoadInst(
-        cachedMethodPtr, "cachedMethod", false, currentBlock);
-
+      GlobalVariable* GV = new GlobalVariable(*llvmFunction->getParent(),
+                                              Type::getInt32Ty(*llvmContext),
+                                              false,
+                                              GlobalValue::ExternalLinkage,
+                                              intrinsics->constantZero, "");
+    
       BasicBlock* resolveVirtual = createBasicBlock("resolveVirtual");
       BasicBlock* endResolveVirtual = createBasicBlock("endResolveVirtual");
-      PHINode* methodPtr = PHINode::Create(
-        intrinsics->JavaMethodType, 2, "methodPtr", endResolveVirtual);
-      methodPtr->addIncoming(cachedMethod, currentBlock);
-
-      Value* test = new ICmpInst(
-        *currentBlock, ICmpInst::ICMP_EQ, cachedMethod,
-        Constant::getNullValue(intrinsics->JavaMethodType), "isCacheEmpty");
-      BranchInst::Create(resolveVirtual, endResolveVirtual, test, currentBlock);
+      PHINode* node = PHINode::Create(Type::getInt32Ty(*llvmContext), 2, "",
+                                      endResolveVirtual);
 
+      Value* load = new LoadInst(GV, "", false, currentBlock);
+      Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, load,
+                                 intrinsics->constantZero, "");
+      BranchInst::Create(resolveVirtual, endResolveVirtual, test, currentBlock);
+      node->addIncoming(load, currentBlock);
       currentBlock = resolveVirtual;
       std::vector<Value*> Args;
       Args.push_back(TheCompiler->getNativeClass(compilingClass));
       Args.push_back(ConstantInt::get(Type::getInt32Ty(*llvmContext), index));
-      Args.push_back(cachedMethodPtr);
+      Args.push_back(GV);
       Value* targetObject = getTarget(signature);
-      targetObject = new LoadInst(
-        targetObject, "targetObject", false, currentBlock);
+      targetObject = new LoadInst(targetObject, "", false, currentBlock);
       if (!thisReference) JITVerifyNull(targetObject);
       Args.push_back(targetObject);
-      Value* calculatedMethodPtr = invoke(intrinsics->VirtualLookupFunction,
-        Args, "calculatedMethod", currentBlock);
-      methodPtr->addIncoming(calculatedMethodPtr, currentBlock);
-
+      load = invoke(intrinsics->VirtualLookupFunction, Args, "", currentBlock);
+      node->addIncoming(load, currentBlock);
       BranchInst::Create(endResolveVirtual, currentBlock);
       currentBlock = endResolveVirtual;
 
-      Value* methodOffset = getElementPtr(
-        "methodOffsetPtr", methodPtr, intrinsics->constantZero,
-        intrinsics->OffsetOffsetInJavaMethodConstant, NULL);
-      methodOffset = new LoadInst(methodOffset, "methodOffset", currentBlock);
-
-      indexes2[1] = methodOffset;
+      indexes2[1] = node;
     }
 
     makeArgs(it, index, args, signature->nbArguments + 1);
@@ -332,32 +290,19 @@ void JavaJIT::invokeVirtual(uint16 index
 }
 
 llvm::Value* JavaJIT::getMutatorThreadPtr() {
-	return new BitCastInst(
-		getThreadPtr(), intrinsics->MutatorThreadType, "MutatorThreadPtr", currentBlock);
-}
-
-llvm::Value* JavaJIT::getThreadPtr()
-{
-	if (!currentThreadPtr) {
-		Value* frameAddr = CallInst::Create(
-			intrinsics->llvm_frameaddress, intrinsics->constantZero,
-			"frameAddress", currentBlock);
-		Value* ptr = new PtrToIntInst(
-			frameAddr, intrinsics->pointerSizeType, "", currentBlock);
-		ptr = BinaryOperator::CreateAnd(
-			ptr, intrinsics->constantThreadIDMask, "", currentBlock);
-		ptr = new IntToPtrInst(
-			ptr, intrinsics->ThreadType, "threadPtr", currentBlock);
-
-		currentThreadPtr = ptr;
-	}
+  Value* FrameAddr = CallInst::Create(intrinsics->llvm_frameaddress,
+                                     	intrinsics->constantZero, "", currentBlock);
+  Value* threadId = new PtrToIntInst(FrameAddr, intrinsics->pointerSizeType, "",
+                              			 currentBlock);
+  threadId = BinaryOperator::CreateAnd(threadId, intrinsics->constantThreadIDMask,
+                                       "", currentBlock);
+  threadId = new IntToPtrInst(threadId, intrinsics->MutatorThreadType, "MutatorThreadPtr", currentBlock);
 
-	return currentThreadPtr;
+  return threadId;
 }
 
-llvm::Value* JavaJIT::getJavaThreadPtr() {
-	return new BitCastInst(
-		getThreadPtr(), intrinsics->JavaThreadType, "JavaThreadPtr", currentBlock);
+llvm::Value* JavaJIT::getJavaThreadPtr(llvm::Value* mutatorThreadPtr) {
+  return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "JavaThreadPtr", currentBlock);
 }
 
 llvm::Value* JavaJIT::getIsolateIDPtr(llvm::Value* mutatorThreadPtr) { 
@@ -475,6 +420,7 @@ llvm::Function* JavaJIT::nativeCompile(w
     return llvmFunction;
   }
   
+  
   Function* func = llvmFunction;
   if (j3) {
     Function* callee = Function::Create(llvmFunction->getFunctionType(),
@@ -500,33 +446,30 @@ llvm::Function* JavaJIT::nativeCompile(w
 
   currentExceptionBlock = endExceptionBlock = 0;
   currentBlock = createBasicBlock("start");
-  endBlock = createBasicBlock("endBlock");
+  endBlock = createBasicBlock("end block");
   
-  getThreadPtr();
-
   if (returnType != Type::getVoidTy(*llvmContext)) {
     endNode = PHINode::Create(returnType, 0, "", endBlock);
   }
   
   // Allocate currentLocalIndexNumber pointer
-  Value* temp = new AllocaInst(
-	Type::getInt32Ty(*llvmContext), "currentLocalIndexNumber", currentBlock);
+  Value* temp = new AllocaInst(Type::getInt32Ty(*llvmContext), "",
+                               currentBlock);
   new StoreInst(intrinsics->constantZero, temp, false, currentBlock);
   
   // Allocate oldCurrentLocalIndexNumber pointer
-  Value* oldCLIN = new AllocaInst(
-	PointerType::getUnqual(Type::getInt32Ty(*llvmContext)),
-	"oldLocalIndexNumber", currentBlock);
+  Value* oldCLIN = new AllocaInst(PointerType::getUnqual(Type::getInt32Ty(*llvmContext)), "",
+                                  currentBlock);
   
   Constant* sizeF = ConstantInt::get(Type::getInt32Ty(*llvmContext), sizeof(vmkit::KnownFrame));
-  Value* Frame = new AllocaInst(Type::getInt8Ty(*llvmContext), sizeF, "knownFrame", currentBlock);
+  Value* Frame = new AllocaInst(Type::getInt8Ty(*llvmContext), sizeF, "", currentBlock);
   
   uint32 nargs = func->arg_size() + 1 + (stat ? 1 : 0); 
   std::vector<Value*> nativeArgs;
   nativeArgs.push_back(NULL); // Will contain the callee
   
   
-  Value* jniEnv = getJNIEnvPtr(getJavaThreadPtr());
+  Value* jniEnv = getJNIEnvPtr(getJavaThreadPtr(getMutatorThreadPtr()));
  
   jniEnv = new BitCastInst(jniEnv, intrinsics->ptrType, "", currentBlock);
 
@@ -544,10 +487,10 @@ llvm::Function* JavaJIT::nativeCompile(w
        index < nargs; ++i, ++index) {
     
     if (i->getType() == intrinsics->JavaObjectType) {
-      BasicBlock* BB = createBasicBlock("continue");
-      BasicBlock* NotZero = createBasicBlock("storeObjParamOnStack");
+      BasicBlock* BB = createBasicBlock("");
+      BasicBlock* NotZero = createBasicBlock("");
       Type* Ty = PointerType::getUnqual(intrinsics->JavaObjectType);
-      PHINode* node = PHINode::Create(Ty, 2, "stack_obj_param_", BB);
+      PHINode* node = PHINode::Create(Ty, 2, "", BB);
 
       Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, i,
                                  intrinsics->JavaObjectNullConstant, "");
@@ -557,9 +500,8 @@ llvm::Function* JavaJIT::nativeCompile(w
 
       currentBlock = NotZero;
 
-      Instruction* temp = new AllocaInst(
-    	intrinsics->JavaObjectType, "nonNullObjParamOnStack",
-        func->begin()->getTerminator());
+      Instruction* temp = new AllocaInst(intrinsics->JavaObjectType, "",
+                                         func->begin()->getTerminator());
       if (i == func->arg_begin() && !stat) {
         this->thisObject = temp;
       }
@@ -587,10 +529,11 @@ llvm::Function* JavaJIT::nativeCompile(w
     }
   }
   
+  
   Instruction* ResultObject = 0;
   if (returnType == intrinsics->JavaObjectType) {
-    ResultObject = new AllocaInst(
-    	intrinsics->JavaObjectType, "resultObjOnStack", func->begin()->begin());
+    ResultObject = new AllocaInst(intrinsics->JavaObjectType, "",
+                                  func->begin()->begin());
     
     if (TheCompiler->useCooperativeGC()) {
       
@@ -612,8 +555,8 @@ llvm::Function* JavaJIT::nativeCompile(w
     Value* Arg = TheCompiler->getMethodInClass(compilingMethod); 
     
     // If the global variable is null, then load it.
-    BasicBlock* unloadedBlock = createBasicBlock("unloadedBlock");
-    BasicBlock* endBlock = createBasicBlock("endBlock");
+    BasicBlock* unloadedBlock = createBasicBlock("");
+    BasicBlock* endBlock = createBasicBlock("");
     Value* test = new LoadInst(nativeFunc, "", currentBlock);
     Type* Ty = test->getType();
     PHINode* node = PHINode::Create(Ty, 2, "", endBlock);
@@ -652,7 +595,7 @@ llvm::Function* JavaJIT::nativeCompile(w
     Type* Ty = PointerType::getUnqual(intrinsics->JavaObjectType);
     Constant* C = Constant::getNullValue(Ty);
     Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, result, C, "");
-    BasicBlock* loadBlock = createBasicBlock("loadBlock");
+    BasicBlock* loadBlock = createBasicBlock("");
 
     endNode->addIncoming(intrinsics->JavaObjectNullConstant, currentBlock);
     BranchInst::Create(endBlock, loadBlock, cmp, currentBlock);
@@ -669,6 +612,7 @@ llvm::Function* JavaJIT::nativeCompile(w
   
   BranchInst::Create(endBlock, currentBlock);
 
+
   currentBlock = endBlock; 
  
   Value* Args2[1] = { oldCLIN };
@@ -679,9 +623,9 @@ llvm::Function* JavaJIT::nativeCompile(w
   if (isSynchro(compilingMethod->access))
     endSynchronize();
 
-  BasicBlock* ifNormal = createBasicBlock("ifNormal");
-  BasicBlock* ifException = createBasicBlock("ifException");
-  Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr());
+  BasicBlock* ifNormal = createBasicBlock("");
+  BasicBlock* ifException = createBasicBlock("");
+  Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr()));
   Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock);
   Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE, obj, intrinsics->JavaObjectNullConstant, "");
   BranchInst::Create(ifException, ifNormal, test, currentBlock);
@@ -737,8 +681,8 @@ void JavaJIT::monitorEnter(Value* obj) {
   Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, atomic,
                             lock, "");
   
-  BasicBlock* OK = createBasicBlock("synchronizePassed");
-  BasicBlock* NotOK = createBasicBlock("synchronizeDidNotPass");
+  BasicBlock* OK = createBasicBlock("synchronize passed");
+  BasicBlock* NotOK = createBasicBlock("synchronize did not pass");
 
   BranchInst::Create(OK, NotOK, cmp, currentBlock);
 
@@ -790,7 +734,7 @@ void JavaJIT::monitorExit(Value* obj) {
   Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, atomic,
                             oldValMask, "");
   
-  BasicBlock* LockFreeCASFailed = createBasicBlock("LockFreeCASFailed");
+  BasicBlock* LockFreeCASFailed = createBasicBlock("Lock-Free CAS Failed");
 
   BranchInst::Create(EndBlock, LockFreeCASFailed, cmp, currentBlock);
 
@@ -1094,30 +1038,28 @@ llvm::Function* JavaJIT::javaCompile() {
     opcodeInfos[i].exceptionBlock = endExceptionBlock;
   }
 
-  getThreadPtr();
-
   Instruction* returnValue = NULL;
   if (returnType == intrinsics->JavaObjectType &&
       TheCompiler->useCooperativeGC()) {
-    returnValue = new AllocaInst(
-    	intrinsics->JavaObjectType, "returnValueStorage", currentBlock);
-    Instruction* cast = new BitCastInst(
-    	returnValue, intrinsics->ptrPtrType, "returnValue", currentBlock);
+    returnValue = new AllocaInst(intrinsics->JavaObjectType, "returnValue",
+                                 currentBlock);
+    Instruction* cast = 
+        new BitCastInst(returnValue, intrinsics->ptrPtrType, "", currentBlock);
     Value* GCArgs[2] = { cast, intrinsics->constantPtrNull };
         
     CallInst::Create(intrinsics->llvm_gc_gcroot, GCArgs, "", currentBlock);
   }
 
   for (int i = 0; i < maxLocals; i++) {
-    intLocals.push_back(new AllocaInst(Type::getInt32Ty(*llvmContext), setInstructionName(instName, instNameLen, "local_int_%d", i), currentBlock));
+    intLocals.push_back(new AllocaInst(Type::getInt32Ty(*llvmContext), setInstructionName(instName, instNameLen, "int_%d", i), currentBlock));
     new StoreInst(Constant::getNullValue(Type::getInt32Ty(*llvmContext)), intLocals.back(), false, currentBlock);
-    doubleLocals.push_back(new AllocaInst(Type::getDoubleTy(*llvmContext), setInstructionName(instName, instNameLen, "local_double_%d", i), currentBlock));
+    doubleLocals.push_back(new AllocaInst(Type::getDoubleTy(*llvmContext), setInstructionName(instName, instNameLen, "double_%d", i), currentBlock));
     new StoreInst(Constant::getNullValue(Type::getDoubleTy(*llvmContext)), doubleLocals.back(), false, currentBlock);
-    longLocals.push_back(new AllocaInst(Type::getInt64Ty(*llvmContext), setInstructionName(instName, instNameLen, "local_long_%d", i), currentBlock));
+    longLocals.push_back(new AllocaInst(Type::getInt64Ty(*llvmContext), setInstructionName(instName, instNameLen, "long_%d", i), currentBlock));
     new StoreInst(Constant::getNullValue(Type::getInt64Ty(*llvmContext)), longLocals.back(), false, currentBlock);
-    floatLocals.push_back(new AllocaInst(Type::getFloatTy(*llvmContext), setInstructionName(instName, instNameLen, "local_float_%d", i), currentBlock));
+    floatLocals.push_back(new AllocaInst(Type::getFloatTy(*llvmContext), setInstructionName(instName, instNameLen, "float_%d", i), currentBlock));
     new StoreInst(Constant::getNullValue(Type::getFloatTy(*llvmContext)), floatLocals.back(), false, currentBlock);
-    objectLocals.push_back(new AllocaInst(intrinsics->JavaObjectType, setInstructionName(instName, instNameLen, "local_object_%d", i), currentBlock));
+    objectLocals.push_back(new AllocaInst(intrinsics->JavaObjectType, setInstructionName(instName, instNameLen, "object_%d", i), currentBlock));
     // The GCStrategy will already initialize the value.
     if (!TheCompiler->useCooperativeGC())
       new StoreInst(Constant::getNullValue(intrinsics->JavaObjectType), objectLocals.back(), false, currentBlock);
@@ -1189,7 +1131,7 @@ llvm::Function* JavaJIT::javaCompile() {
 
   nbHandlers = readExceptionTable(reader, codeLen);
   if (nbHandlers != 0) {
-    jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "exceptionSavePointStorage", currentBlock);
+    jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "", currentBlock);
     jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ptrType, "exceptionSavePoint", currentBlock);
   }
 
@@ -1199,7 +1141,7 @@ llvm::Function* JavaJIT::javaCompile() {
   endBlock = createBasicBlock("end");
 
   if (returnType != Type::getVoidTy(*llvmContext)) {
-    endNode = llvm::PHINode::Create(returnType, 0, "returnValuePhi", endBlock);
+    endNode = llvm::PHINode::Create(returnType, 0, "", endBlock);
   }
 
   checkYieldPoint();
@@ -1223,8 +1165,8 @@ llvm::Function* JavaJIT::javaCompile() {
 
     stackCheck = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, stackCheck,
                               intrinsics->constantPtrZero, "");
-    BasicBlock* stackOverflow = createBasicBlock("stackOverflow");
-    BasicBlock* noStackOverflow = createBasicBlock("noStackOverflow");
+    BasicBlock* stackOverflow = createBasicBlock("stack overflow");
+    BasicBlock* noStackOverflow = createBasicBlock("no stack overflow");
     BranchInst::Create(stackOverflow, noStackOverflow, stackCheck,
                        currentBlock);
     currentBlock = stackOverflow;
@@ -1285,9 +1227,9 @@ llvm::Function* JavaJIT::javaCompile() {
     currentBlock->eraseFromParent();
   } else {
     if (nbHandlers != 0) {
-      BasicBlock* ifNormal = createBasicBlock("noExceptionThrown");
-      BasicBlock* ifException = createBasicBlock("reThrowException");
-      Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr());
+      BasicBlock* ifNormal = createBasicBlock("No exception was thrown");
+      BasicBlock* ifException = createBasicBlock("Rethrow Exception");
+      Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr()));
       Value* obj = new LoadInst(javaExceptionPtr, "pendingException", currentBlock);
       Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE, obj, intrinsics->JavaObjectNullConstant, "");
       BranchInst::Create(ifException, ifNormal, test, currentBlock);
@@ -1439,8 +1381,8 @@ void JavaJIT::JITVerifyNull(Value* obj)
     } else {
       Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, obj, intrinsics->JavaObjectNullConstant, "");
 
-      BasicBlock* nullObjBlock = createBasicBlock("objectIsNull");
-      BasicBlock* notNullObjBlock = createBasicBlock("objectIsNotNull");
+      BasicBlock* nullObjBlock = createBasicBlock("object is null");
+      BasicBlock* notNullObjBlock = createBasicBlock("object is not null");
 
       BranchInst::Create(nullObjBlock, notNullObjBlock, test, currentBlock);
       currentBlock = nullObjBlock;
@@ -1466,8 +1408,8 @@ Value* JavaJIT::verifyAndComputePtr(Valu
     Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_ULT, index, size,
                               "");
 
-    BasicBlock* ifTrue =  createBasicBlock("trueVerifyAndComputePtr");
-    BasicBlock* ifFalse = createBasicBlock("falseVerifyAndComputePtr");
+    BasicBlock* ifTrue =  createBasicBlock("true verifyAndComputePtr");
+    BasicBlock* ifFalse = createBasicBlock("false verifyAndComputePtr");
 
     BranchInst::Create(ifTrue, ifFalse, cmp, currentBlock);
     
@@ -2238,6 +2180,7 @@ void JavaJIT::getVirtualField(uint16 ind
   }
 }
 
+
 void JavaJIT::invokeInterface(uint16 index) {
   
   // Do the usual
@@ -2402,13 +2345,14 @@ DebugLoc JavaJIT::CreateLocation() {
 }
 
 Instruction* JavaJIT::invoke(Value *F, std::vector<llvm::Value*>& args,
-  const char* Name, BasicBlock *InsertAtEnd) {
+                       const char* Name,
+                       BasicBlock *InsertAtEnd) {
   assert(!inlining);
  
   BasicBlock* ifException = NULL;
   if (jmpBuffer != NULL) {
-    BasicBlock* doCall = createBasicBlock("performCall");
-    ifException = createBasicBlock("exceptionThrown");
+    BasicBlock* doCall = createBasicBlock("Perform call");
+    ifException = createBasicBlock("Exception thrown");
     Instruction* check = CallInst::Create(intrinsics->SetjmpFunction, jmpBuffer, "", currentBlock);
     check = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, check, intrinsics->constantZero, "");
     BranchInst::Create(doCall, ifException, check, currentBlock);
@@ -2422,7 +2366,7 @@ Instruction* JavaJIT::invoke(Value *F, s
   
   if (jmpBuffer != NULL) {
     CallInst::Create(intrinsics->UnregisterSetjmpFunction, jmpBuffer, "", currentBlock);
-    BasicBlock* ifNormal = createBasicBlock("noExceptionBlock");
+    BasicBlock* ifNormal = createBasicBlock("no exception block");
     BranchInst::Create(ifNormal, currentBlock);
 
     currentBlock = ifException;
@@ -2442,7 +2386,7 @@ Instruction* JavaJIT::invoke(Value *F, V
 }
 
 Instruction* JavaJIT::invoke(Value *F, Value* arg1, Value* arg2,
-  const char* Name, BasicBlock *InsertAtEnd) {
+                       const char* Name, BasicBlock *InsertAtEnd) {
   std::vector<Value*> args;
   args.push_back(arg1);
   args.push_back(arg2);
@@ -2450,7 +2394,7 @@ Instruction* JavaJIT::invoke(Value *F, V
 }
 
 Instruction* JavaJIT::invoke(Value *F, const char* Name,
-  BasicBlock *InsertAtEnd) {
+                       BasicBlock *InsertAtEnd) {
   std::vector<Value*> args;
   return invoke(F, args, Name, InsertAtEnd);
 }
@@ -2461,7 +2405,7 @@ void JavaJIT::throwException(Value* obj,
     CallInst::Create(intrinsics->ThrowExceptionFunction, obj, "", currentBlock);
     new UnreachableInst(*llvmContext, currentBlock);
   } else {
-    Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr());
+    Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr()));
     if (vmkit::Collector::needsNonHeapWriteBarrier()) {
       Instruction* ptr = new BitCastInst(javaExceptionPtr, intrinsics->ptrPtrType, "", currentBlock);
       Instruction* val = new BitCastInst(obj, intrinsics->ptrType, "", currentBlock);
@@ -2613,7 +2557,7 @@ unsigned JavaJIT::readExceptionTable(Rea
     Value* VTVar = TheCompiler->getVirtualTable(cur->catchClass->virtualVT);
 
     // Get the Java exception.
-    Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr());
+    Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr()));
     Value* obj = new LoadInst(javaExceptionPtr, "pendingException", currentBlock);
     
     Value* objVT = CallInst::Create(intrinsics->GetVTFunction, obj, "objectVT",

Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.h (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.h Mon Nov 25 14:10:43 2013
@@ -107,7 +107,6 @@ public:
     overridesThis = false;
     nbHandlers = 0;
     jmpBuffer = NULL;
-    currentThreadPtr = NULL;
   }
 
   /// javaCompile - Compile the Java method.
@@ -169,8 +168,6 @@ private:
 
   llvm::Value* jmpBuffer;
 
-  llvm::Value* currentThreadPtr;
-
   /// return the header of an object
   llvm::Value* objectToHeader(llvm::Value* obj);
   
@@ -185,8 +182,6 @@ private:
                     llvm::BasicBlock* currentBlock, bool usign);
  
   /// getMutatorThreadPtr - Emit code to get a pointer to the current MutatorThread.
-	llvm::Value* getThreadPtr();
-	llvm::Value* getJavaThreadPtr();
 	llvm::Value* getMutatorThreadPtr();
 
   /// getIsolateIDPtr - Emit code to get a pointer to IsolateID.
@@ -575,11 +570,6 @@ private:
 //===--------------------- Yield point support  ---------------------------===//
 
   void checkYieldPoint();
-
-  llvm::Value* getElementPtr(
-    const char *name, llvm::Value* element, llvm::Value* firstIndex, ...);
-  llvm::Value* allocateOnStack(
-    const char* name, size_t byteCount, llvm::Type* realType);
 };
 
 enum Opcode {

Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Mon Nov 25 14:10:43 2013
@@ -376,7 +376,7 @@ void JavaJIT::compileOpcodes(Reader& rea
       stack.clear();
       if (opinfo->handler) {
         // If it's a handler, put the exception object in the stack.
-        Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr());
+        Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr()));
         Value* obj = new LoadInst(javaExceptionPtr, "pendingException", currentBlock);
         new StoreInst(obj, objectStack[0], "", currentBlock);
         // And clear the exception.
@@ -940,10 +940,10 @@ void JavaJIT::compileOpcodes(Reader& rea
 
           Value* res = 0;
           if (TheCompiler->isStaticCompiling()) {
-        	  BasicBlock* endBlock = createBasicBlock("endArrayStoreCheck");
-        	  BasicBlock* checkBlock = createBasicBlock("arrayStoreCheck");
+        	  BasicBlock* endBlock = createBasicBlock("end array store check");
+        	  BasicBlock* checkBlock = createBasicBlock("array store check");
         	  BasicBlock* exceptionBlock =
-        	          		  createBasicBlock("arrayStoreException");
+        	          		  createBasicBlock("array store exception");
         	  Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val,
                                     intrinsics->JavaObjectNullConstant, "");
 
@@ -1262,8 +1262,8 @@ void JavaJIT::compileOpcodes(Reader& rea
         if (TheCompiler->hasExceptionsEnabled()) {
           Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val2,
                                     intrinsics->constantZero, "");
-          BasicBlock* ifFalse = createBasicBlock("nonNullDiv");
-          BasicBlock* ifTrue = createBasicBlock("nullDiv");
+          BasicBlock* ifFalse = createBasicBlock("non null div");
+          BasicBlock* ifTrue = createBasicBlock("null div");
 
           BranchInst::Create(ifTrue, ifFalse, cmp, currentBlock);
           currentBlock = ifTrue;
@@ -1272,9 +1272,9 @@ void JavaJIT::compileOpcodes(Reader& rea
         }
         Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val2,
                                   intrinsics->constantMinusOne, "");
-        BasicBlock* ifFalse = createBasicBlock("nonMinusOneDiv");
-        BasicBlock* ifTrue = createBasicBlock("minusOneDiv");
-        BasicBlock* endBlock = createBasicBlock("endDivision");
+        BasicBlock* ifFalse = createBasicBlock("non -1 div");
+        BasicBlock* ifTrue = createBasicBlock("-1 div");
+        BasicBlock* endBlock = createBasicBlock("End division");
         PHINode* node = PHINode::Create(val1->getType(), 2, "", endBlock);
         BranchInst::Create(ifTrue, ifFalse, cmp, currentBlock);
         currentBlock = ifTrue;
@@ -1300,8 +1300,8 @@ void JavaJIT::compileOpcodes(Reader& rea
         if (TheCompiler->hasExceptionsEnabled()) {
           Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val2,
                                     intrinsics->constantLongZero, "");
-          BasicBlock* ifFalse = createBasicBlock("nonNullDiv");
-          BasicBlock* ifTrue = createBasicBlock("nullDiv");
+          BasicBlock* ifFalse = createBasicBlock("non null div");
+          BasicBlock* ifTrue = createBasicBlock("null div");
 
           BranchInst::Create(ifTrue, ifFalse, cmp, currentBlock);
           currentBlock = ifTrue;
@@ -1339,8 +1339,8 @@ void JavaJIT::compileOpcodes(Reader& rea
         if (TheCompiler->hasExceptionsEnabled()) {
           Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val2,
                                     intrinsics->constantZero, "");
-          BasicBlock* ifFalse = createBasicBlock("nonNullRem");
-          BasicBlock* ifTrue = createBasicBlock("nullRem");
+          BasicBlock* ifFalse = createBasicBlock("non null rem");
+          BasicBlock* ifTrue = createBasicBlock("null rem");
 
           BranchInst::Create(ifTrue, ifFalse, cmp, currentBlock);
           currentBlock = ifTrue;
@@ -1349,8 +1349,8 @@ void JavaJIT::compileOpcodes(Reader& rea
         }
         Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val2,
                                   intrinsics->constantMinusOne, "");
-        BasicBlock* ifFalse = createBasicBlock("nonMinusOneRem");
-        BasicBlock* endBlock = createBasicBlock("endBlock");
+        BasicBlock* ifFalse = createBasicBlock("non -1 rem");
+        BasicBlock* endBlock = createBasicBlock("end block");
         PHINode* node = PHINode::Create(val1->getType(), 2, "", endBlock);
         node->addIncoming(intrinsics->constantZero, currentBlock);
         BranchInst::Create(endBlock, ifFalse, cmp, currentBlock);
@@ -1372,8 +1372,8 @@ void JavaJIT::compileOpcodes(Reader& rea
         if (TheCompiler->hasExceptionsEnabled()) {
           Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val2,
                                     intrinsics->constantLongZero, "");
-          BasicBlock* ifFalse = createBasicBlock("nonNullDiv");
-          BasicBlock* ifTrue = createBasicBlock("nullDiv");
+          BasicBlock* ifFalse = createBasicBlock("non null div");
+          BasicBlock* ifTrue = createBasicBlock("null div");
 
           BranchInst::Create(ifTrue, ifFalse, cmp, currentBlock);
           currentBlock = ifTrue;
@@ -1911,7 +1911,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* val = Constant::getNullValue(type);
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, op,
                                          val, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFEQ");
+        BasicBlock* ifFalse = createBasicBlock("false IFEQ");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -1928,7 +1928,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* val = Constant::getNullValue(type);
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE, op,
                                          val, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFNE");
+        BasicBlock* ifFalse = createBasicBlock("false IFNE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -1944,7 +1944,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* val = Constant::getNullValue(type);
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SLT, op,
                                          val, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFLT");
+        BasicBlock* ifFalse = createBasicBlock("false IFLT");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -1960,7 +1960,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* val = Constant::getNullValue(type);
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SGE, op,
                                          val, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFGE");
+        BasicBlock* ifFalse = createBasicBlock("false IFGE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -1976,7 +1976,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* val = Constant::getNullValue(type);
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SGT, op,
                                          val, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFGT");
+        BasicBlock* ifFalse = createBasicBlock("false IFGT");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -1992,7 +1992,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* val = Constant::getNullValue(type);
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SLE, op,
                                          val, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFLE");
+        BasicBlock* ifFalse = createBasicBlock("false IFLE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2007,7 +2007,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val1,
                                          val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ICMPEQ");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ICMPEQ");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2022,7 +2022,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE, val1,
                                          val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ICMPNE");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ICMPNE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2037,7 +2037,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SLT,
                                          val1, val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_IFCMPLT");
+        BasicBlock* ifFalse = createBasicBlock("false IF_IFCMPLT");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2052,7 +2052,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SGE,
                                          val1, val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ICMPGE");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ICMPGE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2067,7 +2067,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SGT,
                                          val1, val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ICMPGT");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ICMPGT");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2082,7 +2082,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_SLE,
                                          val1, val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ICMPLE");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ICMPLE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2097,7 +2097,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ,
                                          val1, val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ACMPEQ");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ACMPEQ");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2112,7 +2112,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE,
                                          val1, val2, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIF_ACMPNE");
+        BasicBlock* ifFalse = createBasicBlock("false IF_ACMPNE");
         branch(test, ifTrue, ifFalse, currentBlock, ifTrueInfo);
         currentBlock = ifFalse;
         break;
@@ -2178,7 +2178,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         for (sint32 cur = low; cur < high; ++cur) {
           Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ,
                                     ConstantInt::get(type, cur), index, "");
-          BasicBlock* falseBlock = createBasicBlock("continueTableswitch");
+          BasicBlock* falseBlock = createBasicBlock("continue tableswitch");
           Opinfo& info = opcodeInfos[tmp + reader.readU4()];
           i += 4;
           branch(cmp, info.newBlock, falseBlock, currentBlock, info);
@@ -2208,7 +2208,7 @@ void JavaJIT::compileOpcodes(Reader& rea
           i += 4;
           Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val, key,
                                     "");
-          BasicBlock* falseBlock = createBasicBlock("continueLookupswitch");
+          BasicBlock* falseBlock = createBasicBlock("continue lookupswitch");
           Opinfo& info = opcodeInfos[tmp + reader.readU4()];
           i += 4;
           branch(cmp, info.newBlock, falseBlock, currentBlock, info);
@@ -2474,22 +2474,22 @@ void JavaJIT::compileOpcodes(Reader& rea
         Value* args[2] = { obj, clVar };
         Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, obj,
                                   intrinsics->JavaObjectNullConstant, "");
-        BasicBlock* endBlock = createBasicBlock("endTypeCompare");
+        BasicBlock* endBlock = createBasicBlock("end type compare");
         PHINode* node = PHINode::Create(Type::getInt1Ty(*llvmContext), 2, "", endBlock);
         
         if (checkcast) {
-          exceptionCheckcast = createBasicBlock("falseCheckcast");
+          exceptionCheckcast = createBasicBlock("false checkcast");
 
         
-          endCheckcast = createBasicBlock("nullCheckcast");
-          BasicBlock* ifFalse = createBasicBlock("nonNullCheckcast");
+          endCheckcast = createBasicBlock("null checkcast");
+          BasicBlock* ifFalse = createBasicBlock("non null checkcast");
 
           BranchInst::Create(endCheckcast, ifFalse, cmp, currentBlock);
           currentBlock = exceptionCheckcast;
           throwRuntimeException(intrinsics->ClassCastExceptionFunction, args, 2);
           currentBlock = ifFalse;
         } else {
-          BasicBlock* ifFalse = createBasicBlock("falseTypeCompare");
+          BasicBlock* ifFalse = createBasicBlock("false type compare");
           BranchInst::Create(endBlock, ifFalse, cmp, currentBlock);
           node->addIncoming(ConstantInt::getFalse(*llvmContext), currentBlock);
           currentBlock = ifFalse;
@@ -2607,7 +2607,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* nil = Constant::getNullValue(val->getType());
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, val,
                                          nil, "");
-        BasicBlock* ifFalse = createBasicBlock("trueIFNULL");
+        BasicBlock* ifFalse = createBasicBlock("true IFNULL");
         Opinfo& ifTrueInfo = opcodeInfos[tmp + reader.readS2()];
         i += 2;
         BasicBlock* ifTrue = ifTrueInfo.newBlock;
@@ -2622,7 +2622,7 @@ void JavaJIT::compileOpcodes(Reader& rea
         Constant* nil = Constant::getNullValue(val->getType());
         llvm::Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE, val,
                                          nil, "");
-        BasicBlock* ifFalse = createBasicBlock("falseIFNONNULL");
+        BasicBlock* ifFalse = createBasicBlock("false IFNONNULL");
         Opinfo& ifTrueInfo = opcodeInfos[tmp + reader.readS2()];
         i += 2;
         BasicBlock* ifTrue = ifTrueInfo.newBlock;

Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Mon Nov 25 14:10:43 2013
@@ -287,8 +287,8 @@ bool LowerConstantCalls::runOnFunction(F
           Value* cmp = new ICmpInst(CI, ICmpInst::ICMP_EQ, Del, 
                                     intrinsics->JavaObjectNullConstant, "");
           
-          BasicBlock* NoDelegatee = BasicBlock::Create(*Context, "noDelegatee", &F);
-          BasicBlock* DelegateeOK = BasicBlock::Create(*Context, "delegateeOK", &F);
+          BasicBlock* NoDelegatee = BasicBlock::Create(*Context, "No delegatee", &F);
+          BasicBlock* DelegateeOK = BasicBlock::Create(*Context, "Delegatee OK", &F);
           BranchInst::Create(NoDelegatee, DelegateeOK, cmp, CI);
           PHINode* phi = PHINode::Create(intrinsics->JavaObjectType, 2, "", DelegateeOK);
           phi->addIncoming(Del, CI->getParent());
@@ -398,8 +398,8 @@ bool LowerConstantCalls::runOnFunction(F
           Value* test = new ICmpInst(CI, ICmpInst::ICMP_EQ, arg1,
                                      intrinsics->constantPtrNull, "");
  
-          BasicBlock* trueCl = BasicBlock::Create(*Context, "CtpOK", &F);
-          BasicBlock* falseCl = BasicBlock::Create(*Context, "CtpNotOK", &F);
+          BasicBlock* trueCl = BasicBlock::Create(*Context, "Ctp OK", &F);
+          BasicBlock* falseCl = BasicBlock::Create(*Context, "Ctp Not OK", &F);
           PHINode* node = llvm::PHINode::Create(returnType, 2, "", trueCl);
           node->addIncoming(arg1, CI->getParent());
           BranchInst::Create(falseCl, trueCl, test, CI);
@@ -465,8 +465,8 @@ bool LowerConstantCalls::runOnFunction(F
             Value* cmp = new ICmpInst(CI, ICmpInst::ICMP_EQ, LoadedGV, init,
                                       "");
 
-            BasicBlock* OKBlock = BasicBlock::Create(*Context, "OK", &F);
-            BasicBlock* NotOKBlock = BasicBlock::Create(*Context, "NotOK", &F);
+            BasicBlock* OKBlock = BasicBlock::Create(*Context, "", &F);
+            BasicBlock* NotOKBlock = BasicBlock::Create(*Context, "", &F);
             PHINode* node = PHINode::Create(intrinsics->VTType, 2, "",
                                             OKBlock);
             node->addIncoming(LoadedGV, CI->getParent());
@@ -509,8 +509,8 @@ bool LowerConstantCalls::runOnFunction(F
           BasicBlock* EndBlock = II->getParent()->splitBasicBlock(II);
           I->getParent()->getTerminator()->eraseFromParent();
           
-          BasicBlock* CurEndBlock = BasicBlock::Create(*Context, "currentEnd", &F);
-          BasicBlock* FailedBlock = BasicBlock::Create(*Context, "failed", &F);
+          BasicBlock* CurEndBlock = BasicBlock::Create(*Context, "", &F);
+          BasicBlock* FailedBlock = BasicBlock::Create(*Context, "", &F);
           PHINode* node = PHINode::Create(Type::getInt1Ty(*Context), 2, "", CurEndBlock);
 
           ConstantInt* CC = ConstantInt::get(Type::getInt32Ty(*Context),

Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll Mon Nov 25 14:10:43 2013
@@ -27,10 +27,6 @@
 ;;; Field 2: The static instance
 %TaskClassMirror = type { i8, i1, i8* }
 
-;;; Field 0: callerNode
-;;; Field 1: data
-%StackEmbeddedListNode = type { %StackEmbeddedListNode*, [1 x i8*] }
-
 %CircularBase = type { %VT*, %CircularBase*, %CircularBase* }
 
 ;;; Field 0:  the parent (circular base)
@@ -45,11 +41,7 @@
 ;;; field 9:  void*  routine
 ;;; field 10: void*  lastKnownFrame
 ;;; field 11: void*  lastExceptionBuffer
-;;; field 12: void*  stackEmbeddedListHead ( 1 = vmkit::StackEmbeddedListNodeCountPerThread )
-%Thread = type {
-	%CircularBase, i32, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8*,
-	[1 x %StackEmbeddedListNode*]
-}
+%Thread = type { %CircularBase, i32, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8* }
 
 %JavaThread = type { %MutatorThread, i8*, %JavaObject* }
 
@@ -192,7 +184,7 @@ declare i8* @getConstantPoolAt(i8* (%Jav
 
 ;;; j3VirtualTableLookup - Look up the offset in a virtual table of a
 ;;; specific function.
-declare %JavaMethod* @j3VirtualTableLookup(%JavaClass*, i32, %JavaMethod**, %JavaObject*)
+declare i32 @j3VirtualTableLookup(%JavaClass*, i32, i32*, %JavaObject*)
 
 ;;; j3ClassLookup - Look up a specific class. The function takes a class and
 ;;; an index to lookup in the constant pool and returns and stores it in the

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Mon Nov 25 14:10:43 2013
@@ -2349,8 +2349,8 @@ void JavaField::setStaticField(JavaObjec
 
 std::ostream& j3::operator << (std::ostream& os, const CommonClass& ccl)
 {
-	return os << *ccl.name << ';';
-//	return (!ccl.super) ? (os << ';') : (os << ':' << *ccl.super);
+	os << *ccl.name;
+	return (!ccl.super) ? (os << ';') : (os << ':' << *ccl.super);
 }
 
 void CommonClass::dump() const

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Mon Nov 25 14:10:43 2013
@@ -1023,15 +1023,12 @@ private:
 	jvalue* marshalArguments(vmkit::ThreadAllocator& allocator, va_list ap);
 
 	template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
-	TYPE invokeSpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj,
-		void* buf) __attribute__((noinline))
-	{
+	TYPE invokeSpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__((noinline)) {
 		llvm_gcroot(obj, 0);
 		verifyNull(obj);
 
 		void* func = this->compiledPtr();
-		FUNC_TYPE_VIRTUAL_BUF call =
-			(FUNC_TYPE_VIRTUAL_BUF)getSignature()->getVirtualCallBuf();
+		FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)getSignature()->getVirtualCallBuf();
 
 		JavaThread* th = JavaThread::get();
 		th->startJava();
@@ -1046,14 +1043,11 @@ private:
 	}
 
 	template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
-	TYPE invokeVirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj,
-		void* buf) __attribute__((noinline))
-	{
+	TYPE invokeVirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__((noinline)) {
 		llvm_gcroot(obj, 0);
 
 		UserCommonClass* theClass = JavaObject::getClass(obj);
-		UserClass* objCl =
-			theClass->isArray() ? theClass->super : theClass->asClass();
+		UserClass* objCl = theClass->isArray() ? theClass->super : theClass->asClass();
 
 		JavaMethod* meth = this;
 		if ((objCl != classDef) && !isFinal(access)) {
@@ -1063,22 +1057,18 @@ private:
 
 		assert(objCl->isSubclassOf(meth->classDef) && "Wrong type");
 
-		return meth->invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(
-			vm, cl, obj, buf);
+		return meth->invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buf);
 	}
 
 	template<class TYPE, class FUNC_TYPE_STATIC_BUF>
-	TYPE invokeStaticBuf(Jnjvm* vm, UserClass* cl,
-		void* buf) __attribute__((noinline))
-	{
+	TYPE invokeStaticBuf(Jnjvm* vm, UserClass* cl, void* buf) __attribute__((noinline)) {
 		if (!cl->isReady()) {
 			cl->resolveClass();
 			cl->initialiseClass(vm);
 		}
 
 		void* func = this->compiledPtr();
-		FUNC_TYPE_STATIC_BUF call =
-			(FUNC_TYPE_STATIC_BUF)getSignature()->getStaticCallBuf();
+		FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)getSignature()->getStaticCallBuf();
 
 		JavaThread* th = JavaThread::get();
 		th->startJava();
@@ -1093,38 +1083,29 @@ private:
 	}
 
 	template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
-	TYPE invokeVirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj,
-		va_list ap) __attribute__((noinline))
-	{
+	TYPE invokeVirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) __attribute__((noinline)) {
 		llvm_gcroot(obj, 0);
 		assert(cl && "Class is NULL");
 		vmkit::ThreadAllocator allocator;
 		jvalue* buffer = marshalArguments(allocator, ap);
-		return invokeVirtualBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(
-			vm, cl, obj, buffer);
+		return invokeVirtualBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buffer);
 	}
 
 	template<class TYPE, class FUNC_TYPE_VIRTUAL_BUF>
-	TYPE invokeSpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj,
-		va_list ap) __attribute__((noinline))
-	{
+	TYPE invokeSpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) __attribute__((noinline)) {
 		llvm_gcroot(obj, 0);
 		assert(cl && "Class is NULL");
 		vmkit::ThreadAllocator allocator;
 		jvalue* buffer = marshalArguments(allocator, ap);
-		return invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(
-			vm, cl, obj, buffer);
+		return invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buffer);
 	}
 
 	template<class TYPE, class FUNC_TYPE_STATIC_BUF>
-	TYPE invokeStaticAP(Jnjvm* vm, UserClass* cl,
-		va_list ap) __attribute__((noinline))
-	{
+	TYPE invokeStaticAP(Jnjvm* vm, UserClass* cl, va_list ap) __attribute__((noinline)) {
 		assert(cl && "Class is NULL");
 		vmkit::ThreadAllocator allocator;
 		jvalue* buffer = marshalArguments(allocator, ap);
-		return invokeStaticBuf<TYPE, FUNC_TYPE_STATIC_BUF>(
-			vm, cl, buffer);
+		return invokeStaticBuf<TYPE, FUNC_TYPE_STATIC_BUF>(vm, cl, buffer);
 	}
 
 #define JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) \

Modified: vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp Mon Nov 25 14:10:43 2013
@@ -69,19 +69,19 @@ jvalue* JavaMethod::marshalArguments(vmk
 		return res;	\
 	}	\
 	TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) {	\
-		llvm_gcroot(obj, 0);	\
-		va_list ap;	\
-		va_start(ap, obj);	\
-		TYPE res = invokeSpecialAP<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, ap);	\
-		va_end(ap);	\
-		return res;	\
+	  llvm_gcroot(obj, 0);	\
+	  va_list ap;	\
+	  va_start(ap, obj);	\
+	  TYPE res = invokeSpecialAP<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, ap);	\
+	  va_end(ap);	\
+	  return res;	\
 	}	\
 	TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) {	\
-		va_list ap;	\
-		va_start(ap, cl);	\
-		TYPE res = invokeStaticAP<TYPE, FUNC_TYPE_STATIC_BUF>(vm, cl, ap);	\
-		va_end(ap);	\
-		return res;	\
+	  va_list ap;	\
+	  va_start(ap, cl);	\
+	  TYPE res = invokeStaticAP<TYPE, FUNC_TYPE_STATIC_BUF>(vm, cl, ap);	\
+	  va_end(ap);	\
+	  return res;	\
 	}
 
 #define JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF)	\
@@ -104,7 +104,7 @@ jvalue* JavaMethod::marshalArguments(vmk
 	} 																										\
 	TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {	\
 		llvm_gcroot(obj, 0); 																				\
-		return invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buf);								\
+		return invokeSpecialBuf<TYPE, FUNC_TYPE_VIRTUAL_BUF>(vm, cl, obj, buf); 							\
 	}																										\
 	TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {					\
 		return invokeStaticBuf<TYPE, FUNC_TYPE_STATIC_BUF>(vm, cl, buf); 									\

Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Mon Nov 25 14:10:43 2013
@@ -387,11 +387,9 @@ bool JavaObject::instanceOf(JavaObject*
 std::ostream& j3::operator << (std::ostream& os, const JavaObject& obj)
 {
 	JavaObject* javaLoader = NULL;
-	const JavaString* jstr = NULL;
-	const JavaObjectVMThread* vmthObj = NULL;
+	const JavaString* threadNameObj = NULL;
 	llvm_gcroot(javaLoader, 0);
-	llvm_gcroot(jstr, 0);
-	llvm_gcroot(vmthObj, 0);
+	llvm_gcroot(threadNameObj, 0);
 
 	if (VMClassLoader::isVMClassLoader(&obj)) {
 		JnjvmClassLoader* loader = ((const VMClassLoader&)obj).getClassLoader();
@@ -418,31 +416,24 @@ std::ostream& j3::operator << (std::ostr
 		os << &obj << "(class=" << *ccl;
 
 		if (ccl == vm->upcalls->newThread) {
-			jstr = static_cast<const JavaString*>(
+			threadNameObj = static_cast<const JavaString*>(
 				vm->upcalls->threadName->getInstanceObjectField(
 					const_cast<JavaObject*>(&obj)));
 
-			os << ",name=" << *jstr;
+			char *threadName = JavaString::strToAsciiz(threadNameObj);
+			os << ",name=\"" << threadName << '\"';
+			delete [] threadName;
 		}
 #ifndef	 OpenJDKPath
 		else if (ccl == vm->upcalls->newVMThread) {
-			vmthObj = static_cast<const JavaObjectVMThread*>(&obj);
-			for (int retries = 10; (!vmthObj->vmdata) && (retries >= 0); --retries)
+			const JavaObjectVMThread& vmthObj = (const JavaObjectVMThread&)obj;
+			for (int retries = 10; (!vmthObj.vmdata) && (retries >= 0); --retries)
 				usleep(100);
 
-			if (const JavaObject* thObj = vmthObj->vmdata->currentThread())
+			if (const JavaObject* thObj = vmthObj.vmdata->currentThread())
 				os << ",thread=" << *thObj;
 		}
 #endif
-		else if (ccl == vm->upcalls->newClass) {
-			ccl = JavaObjectClass::getClass(
-				const_cast<JavaObjectClass*>(
-					static_cast<const JavaObjectClass*>(&obj)));
-
-			os << ",name=\"" << *ccl->asClass() << '\"';
-		} else if (ccl == vm->upcalls->newString) {
-			os << ',' << static_cast<const JavaString&>(obj);
-		}
 
 		os << ')';
 	}
@@ -459,22 +450,3 @@ void JavaObject::dumpClass() const
 {
 	JavaObject::getClass(this)->dump();
 }
-
-void JavaObject::dumpToString() const
-{
-	JavaString* jstr = NULL;
-	llvm_gcroot(jstr, 0);
-
-	if (VMClassLoader::isVMClassLoader(this) || VMStaticInstance::isVMStaticInstance(this))
-	{cerr << "<invalid>" << endl; return;}
-
-	Class* cl = JavaObject::getClass(this)->asClass();
-	if (!cl) {cerr << "<invalid>" << endl; return;}
-
-	Jnjvm* vm = cl->classLoader->getJVM();
-	jstr = static_cast<JavaString*>(
-		vm->upcalls->toString->invokeJavaObjectVirtual(
-			vm, cl, const_cast<JavaObject*>(this)));
-
-	cerr << *jstr << endl;
-}

Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.h Mon Nov 25 14:10:43 2013
@@ -334,7 +334,6 @@ public:
   void dumpClass() const __attribute__((noinline));
   void dump() const __attribute__((noinline));
   friend std::ostream& operator << (std::ostream&, const JavaObject&);
-  void dumpToString() const __attribute__((noinline));
 };
 
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp Mon Nov 25 14:10:43 2013
@@ -110,9 +110,10 @@ extern "C" void* j3StaticFieldLookup(Use
 }
 
 // Throws if the method is not found.
-extern "C" void* j3VirtualTableLookup(UserClass* caller, uint32 index,
-                                       void** javaMethod, JavaObject* obj) {
+extern "C" uint32 j3VirtualTableLookup(UserClass* caller, uint32 index,
+                                       uint32* offset, JavaObject* obj) {
   llvm_gcroot(obj, 0);
+  uint32 res = 0;
   
   UserCommonClass* cl = 0;
   const UTF8* utf8 = 0;
@@ -133,13 +134,15 @@ extern "C" void* j3VirtualTableLookup(Us
       JavaObject::getClass(obj)->asClass();
     dmeth = lookup->lookupMethod(utf8, sign->keyName, false, true, 0);
   } else {
-    *javaMethod = dmeth;
+    *offset = dmeth->offset;
   }
 
   assert(dmeth->classDef->isInitializing() && 
          "Class not ready in a virtual lookup.");
 
-  return dmeth;
+  res = dmeth->offset;
+
+  return res;
 }
 
 // Throws if the class is not found.

Modified: vmkit/trunk/lib/j3/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaString.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaString.cpp Mon Nov 25 14:10:43 2013
@@ -120,28 +120,4 @@ const UTF8* JavaString::javaToInternal(c
   return res;
 }
 
-std::ostream& operator << (std::ostream& os, const JavaString& jstr)
-{
-	char *str = JavaString::strToAsciiz(&jstr);
-	os << '\"' << str << '\"';
-	delete [] str;
-	return os;
-}
-
-const UTF8* JavaString::toUTF8(const JavaString* self, UTF8Map* hashMap)
-{
-	if (!self) return NULL;
-	if (!hashMap) {
-		Jnjvm* vm = JavaThread::get()->getJVM();
-		hashMap = vm->bootstrapLoader->hashUTF8;
-	}
-
-	const j3::ArrayUInt16 *array = j3::JavaString::getValue(self);
-	const j3::ArrayUInt16::ElementType *elts =
-		j3::ArrayUInt16::getElements(array);
-	size_t count = j3::ArrayUInt16::getSize(array);
-
-	return hashMap->lookupOrCreateReader(elts, count);
-}
-
 }

Modified: vmkit/trunk/lib/j3/VMCore/JavaString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaString.h?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaString.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaString.h Mon Nov 25 14:10:43 2013
@@ -59,12 +59,9 @@ class JavaString : public JavaObject {
   static char* strToAsciiz(const JavaString* self);
   static char* strToAsciiz(const JavaString* self, vmkit::ThreadAllocator* allocator);
   static const ArrayUInt16* strToArray(JavaString* self, Jnjvm* vm);
-  static const UTF8* toUTF8(const JavaString* self, UTF8Map* hashMap);
 
   /// javaToInternal - Replaces all '/' into '.'.
   static const UTF8* javaToInternal(const JavaString* self, UTF8Map* map);
-
-  friend std::ostream& operator << (std::ostream&, const JavaString&);
 };
 
 } // end namespace j3

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Mon Nov 25 14:10:43 2013
@@ -8,7 +8,6 @@
 //===----------------------------------------------------------------------===//
 
 #include <sstream>
-#include <errno.h>
 
 #include "vmkit/Locks.h"
 #include "vmkit/Thread.h"
@@ -133,7 +132,7 @@ void JavaThread::printJavaBacktrace() {
 
   while (vmkit::FrameInfo* FI = Walker.get()) {
     if (FI->Metadata != NULL) {
-      MyVM->printMethod(FI, Walker.returnAddress, Walker.callFrameAddress);
+      MyVM->printMethod(FI, Walker.ip, Walker.addr);
     }
     ++Walker;
   }

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Mon Nov 25 14:10:43 2013
@@ -44,6 +44,7 @@
 #include "Reader.h"
 #include "Zip.h"
 
+
 using namespace j3;
 using namespace std;
 

Modified: vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp Mon Nov 25 14:10:43 2013
@@ -103,7 +103,7 @@ void CooperativeCollectionRV::join() {
   th->inRV = true;
   
   lockRV();
-  th->setLastSP(System::GetCallFrameAddress());
+  th->setLastSP(System::GetCallerAddress());
   th->joinedRV = true;
   another_mark();
   waitEndOfRV();

Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Mon Nov 25 14:10:43 2013
@@ -336,8 +336,8 @@ bool FatLock::acquire(gc* obj, LockSyste
 //	if (lockingThreads == 0)
 //      table.deallocate(this);
 
-	word_t methodIP = System::GetCallFrameAddress();
-	methodIP = System::GetReturnAddressOfCallFrame(methodIP);
+	word_t methodIP = System::GetCallerAddress();
+	methodIP = System::GetIPFromCallerAddress(methodIP);
     Thread::get()->throwNullPointerException(methodIP);
   }
 

Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x64.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x64.inc?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x64.inc (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x64.inc Mon Nov 25 14:10:43 2013
@@ -38,7 +38,7 @@ void Handler::UpdateRegistersForNPE() {
 
 void Handler::UpdateRegistersForStackOverflow() {
   word_t alt_stack = vmkit::Thread::get()->GetAlternativeStackStart();
-  ((ucontext_t*)context)->uc_mcontext.gregs[REG_RDI] = System::GetReturnAddressOfCallFrame(((ucontext_t*)context)->uc_mcontext.gregs[REG_RBP]);
+  ((ucontext_t*)context)->uc_mcontext.gregs[REG_RDI] = System::GetIPFromCallerAddress(((ucontext_t*)context)->uc_mcontext.gregs[REG_RBP]);
   ((ucontext_t*)context)->uc_mcontext.gregs[REG_RSI] = ((ucontext_t*)context)->uc_mcontext.gregs[REG_RBP];
   ((ucontext_t*)context)->uc_mcontext.gregs[REG_RSP] = alt_stack;
   ((ucontext_t*)context)->uc_mcontext.gregs[REG_RIP] = (word_t)HandleStackOverflow;

Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc Mon Nov 25 14:10:43 2013
@@ -40,7 +40,7 @@ void Handler::UpdateRegistersForNPE() {
 
 void Handler::UpdateRegistersForStackOverflow() {
   word_t alt_stack = vmkit::Thread::get()->GetAlternativeStackStart();
-  ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBX] = System::GetReturnAddressOfCallFrame(((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]);
+  ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBX] = System::GetIPFromCallerAddress(((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]);
   ((ucontext_t*)context)->uc_mcontext.gregs[REG_EAX] = ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP];
   ((ucontext_t*)context)->uc_mcontext.gregs[REG_ESP] = alt_stack;
   ((ucontext_t*)context)->uc_mcontext.gregs[REG_EIP] = (word_t)HandleStackOverflow;

Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Mon Nov 25 14:10:43 2013
@@ -60,7 +60,7 @@ void Thread::joinRVAfterLeave(word_t sav
 
 void Thread::startKnownFrame(KnownFrame& F) {
   // Get the caller of this function
-  word_t cur = System::GetCallFrameAddress();
+  word_t cur = System::GetCallerAddress();
   F.previousFrame = lastKnownFrame;
   F.currentFP = cur;
   // This is used as a marker.
@@ -75,12 +75,12 @@ void Thread::endKnownFrame() {
 
 void Thread::startUnknownFrame(KnownFrame& F) {
   // Get the caller of this function
-  word_t cur = System::GetCallFrameAddress();
+  word_t cur = System::GetCallerAddress();
   // Get the caller of the caller.
-  cur = System::GetCallerCallFrame(cur);
+  cur = System::GetCallerOfAddress(cur);
   F.previousFrame = lastKnownFrame;
   F.currentFP = cur;
-  F.currentIP = System::GetReturnAddressOfCallFrame(cur);
+  F.currentIP = System::GetIPFromCallerAddress(cur);
   lastKnownFrame = &F;
 }
 
@@ -97,7 +97,7 @@ void Thread::printBacktrace() {
   StackWalker Walker(this);
 
   while (FrameInfo* FI = Walker.get()) {
-    MyVM->printMethod(FI, Walker.returnAddress, Walker.callFrameAddress);
+    MyVM->printMethod(FI, Walker.ip, Walker.addr);
     ++Walker;
   }
 }
@@ -124,44 +124,42 @@ uint32_t Thread::getFrameContextLength()
 }
 
 FrameInfo* StackWalker::get() {
-  if (callFrameAddress == thread->baseSP) return 0;
-  returnAddress = System::GetReturnAddressOfCallFrame(callFrameAddress);
-  return thread->MyVM->IPToFrameInfo(returnAddress);
+  if (addr == thread->baseSP) return 0;
+  ip = System::GetIPFromCallerAddress(addr);
+  return thread->MyVM->IPToFrameInfo(ip);
 }
 
 word_t StackWalker::operator*() {
-  if (callFrameAddress == thread->baseSP) return 0;
-  returnAddress = System::GetReturnAddressOfCallFrame(callFrameAddress);
-  return returnAddress;
+  if (addr == thread->baseSP) return 0;
+  ip = System::GetIPFromCallerAddress(addr);
+  return ip;
 }
 
 void StackWalker::operator++() {
-  if (callFrameAddress != thread->baseSP) {
-    assert((callFrameAddress < thread->baseSP) && "Corrupted stack");
-    assert((callFrameAddress < System::GetCallerCallFrame(callFrameAddress)) && "Corrupted stack");
-    if ((frame != NULL) && (callFrameAddress == frame->currentFP)) {
+  if (addr != thread->baseSP) {
+    assert((addr < thread->baseSP) && "Corrupted stack");
+    assert((addr < System::GetCallerOfAddress(addr)) && "Corrupted stack");
+    if ((frame != NULL) && (addr == frame->currentFP)) {
       assert(frame->currentIP == 0);
       frame = frame->previousFrame;
       assert(frame != NULL);
       assert(frame->currentIP != 0);
-      callFrameAddress = frame->currentFP;
+      addr = frame->currentFP;
       frame = frame->previousFrame;
     } else {
-      callFrameAddress = System::GetCallerCallFrame(callFrameAddress);
+      addr = System::GetCallerOfAddress(addr);
     }
   }
 }
 
-StackWalker::StackWalker(vmkit::Thread* th) :
-	returnAddress(0)
-{
+StackWalker::StackWalker(vmkit::Thread* th) {
   thread = th;
   frame = th->lastKnownFrame;
   if (vmkit::Thread::get() == th) {
-    callFrameAddress = System::GetCallFrameAddress();
-    callFrameAddress = System::GetCallerCallFrame(callFrameAddress);
+    addr = System::GetCallerAddress();
+    addr = System::GetCallerOfAddress(addr);
   } else {
-    callFrameAddress = th->waitOnSP();
+    addr = th->waitOnSP();
     if (frame) {
 //    	if (frame->currentFP < addr) {
 //    		fprintf(stderr, "Error in thread with pointer %p because %x < %x\n", th, frame->currentFP, addr);
@@ -169,9 +167,9 @@ StackWalker::StackWalker(vmkit::Thread*
 //    	}
 
 
-    	assert(frame->currentFP >= callFrameAddress);
+    	assert(frame->currentFP >= addr);
     }
-    if (frame && (callFrameAddress == frame->currentFP)) {
+    if (frame && (addr == frame->currentFP)) {
       frame = frame->previousFrame;
       // Let this be called from JNI, as in
       // OpenJDK's JVM_FillInStackTrace:
@@ -180,23 +178,14 @@ StackWalker::StackWalker(vmkit::Thread*
       assert((frame == NULL) || (frame->currentIP == 0));
     }
   }
-  assert(callFrameAddress && "No address to start with");
+  assert(addr && "No address to start with");
 }
 
-StackWalker::StackWalker() :
-	returnAddress(0)
-{
-  thread = vmkit::Thread::get();
-  frame = thread->lastKnownFrame;
-  callFrameAddress = System::GetCallFrameAddress();
-  callFrameAddress = System::GetCallerCallFrame(callFrameAddress);
-  assert(callFrameAddress && "No address to start with");
-}
 
 void Thread::scanStack(word_t closure) {
   StackWalker Walker(this);
   while (FrameInfo* MI = Walker.get()) {
-    MethodInfoHelper::scan(closure, MI, Walker.returnAddress, Walker.callFrameAddress);
+    MethodInfoHelper::scan(closure, MI, Walker.ip, Walker.addr);
     ++Walker;
   }
 }
@@ -206,11 +195,11 @@ void Thread::enterUncooperativeCode(uint
   	if (!inRV) {
   		assert(!lastSP && "SP already set when entering uncooperative code");
       // Get the caller.
-      word_t temp = System::GetCallFrameAddress();
+      word_t temp = System::GetCallerAddress();
       // Make sure to at least get the caller of the caller.
       ++level;
       while (level--)
-    	  temp = System::GetCallerCallFrame(temp);
+    	  temp = System::GetCallerOfAddress(temp);
       // The cas is not necessary, but it does a memory barrier.
       __sync_bool_compare_and_swap(&lastSP, 0, temp);
       if (doYield) joinRVBeforeEnter();
@@ -348,11 +337,7 @@ extern void sigsTermHandler(int n, sigin
 /// given routine of th.
 ///
 void Thread::internalThreadStart(vmkit::Thread* th) {
-  th->baseSP  = System::GetCallFrameAddress();
-
-#if JAVA_INTERFACE_CALL_STACK
-    th->stackEmbeddedListHead[j3::StackEmbeddedListIntendedCaller] = NULL;
-#endif
+  th->baseSP  = System::GetCallerAddress();
 
   // Set the alternate stack as the second page of the thread's
   // stack.

Modified: vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp (original)
+++ vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp Mon Nov 25 14:10:43 2013
@@ -21,7 +21,7 @@ namespace vmkit {
 
 void MethodInfoHelper::scan(word_t closure, FrameInfo* FI, word_t ip, word_t addr) {
   //word_t spaddr = (word_t)addr + FI->FrameSize + sizeof(void*);
-  word_t spaddr = System::GetCallerCallFrame(addr);
+  word_t spaddr = System::GetCallerOfAddress(addr);
   for (uint16 i = 0; i < FI->NumLiveOffsets; ++i) {
     word_t obj = *(word_t*)(spaddr + FI->LiveOffsets[i]);    
     // Verify that obj does not come from a JSR bytecode.

Modified: vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp?rev=195678&r1=195677&r2=195678&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp (original)
+++ vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp Mon Nov 25 14:10:43 2013
@@ -41,6 +41,17 @@ uint32 UTF8::readerHasher(const uint16*
   return (r1 & 255) + ((r0 & 255) << 8);
 }
 
+int UTF8::compare(const char *s) const
+{
+	int len = strlen(s);
+	int diff = size - len;
+	if (diff != 0) return diff;
+
+	for (int i = 0; (i < size) && (diff == 0); ++i)
+		diff = (char)(elements[i]) - s[i];
+	return diff;
+}
+
 std::string& UTF8::toString(std::string& buffer) const
 {
 	buffer.resize(size);
@@ -53,7 +64,7 @@ std::string& UTF8::toString(std::string&
 
 std::ostream& operator << (std::ostream& os, const UTF8& utf8)
 {
-	for (ssize_t i = 0; (i < utf8.size) && (utf8.elements[i] != 0); ++i)
+	for (ssize_t i = 0; i < utf8.size; ++i)
 		os << (std::string::value_type)(utf8.elements[i]);
 	return os;
 }





More information about the vmkit-commits mailing list