[vmkit-commits] [vmkit] r73069 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/mvm/JIT.h lib/JnJVM/Classpath/ClasspathVMObject.cpp lib/JnJVM/Classpath/ClasspathVMSystem.cpp lib/JnJVM/Compiler/JITInfo.cpp lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJITOpcodes.cpp lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/Mvm/Compiler/JIT.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Jun 8 07:52:38 PDT 2009


Author: geoffray
Date: Mon Jun  8 09:52:37 2009
New Revision: 73069

URL: http://llvm.org/viewvc/llvm-project?rev=73069&view=rev
Log:
Use log size instead of direct size for array manipulation.


Modified:
    vmkit/trunk/include/jnjvm/JnjvmModule.h
    vmkit/trunk/include/mvm/JIT.h
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/Mvm/Compiler/JIT.cpp

Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=73069&r1=73068&r2=73069&view=diff

==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Mon Jun  8 09:52:37 2009
@@ -58,7 +58,7 @@
   const llvm::Type* llvmType;
   const llvm::Type* llvmTypePtr;
   llvm::Constant* llvmNullConstant;
-  llvm::ConstantInt* sizeInBytesConstant;
+  llvm::ConstantInt* logSizeInBytesConstant;
   
   static void initialise();
   static std::map<const char, LLVMAssessorInfo> AssessorInfo;

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

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Mon Jun  8 09:52:37 2009
@@ -152,7 +152,7 @@
   static llvm::ConstantFP*  constantFloatMinusZero;
   static llvm::ConstantFP*  constantDoubleMinusZero;
   static llvm::Constant*    constantPtrNull;
-  static llvm::ConstantInt* constantPtrSize;
+  static llvm::ConstantInt* constantPtrLogSize;
   static llvm::ConstantInt* constantThreadIDMask;
   static llvm::ConstantInt* constantStackOverflowMask;
   static llvm::ConstantInt* constantFatMask;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp Mon Jun  8 09:52:37 2009
@@ -38,11 +38,11 @@
   if (cl->isArray()) {
     UserClassArray* array = cl->asArrayClass();
     UserCommonClass* base = array->baseClass();
-    uint32 primSize = base->isPrimitive() ? 
-      base->asPrimitiveClass()->primSize : sizeof(JavaObject*);
+    uint32 logSize = base->isPrimitive() ? 
+      base->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
 
     size = sizeof(JavaObject) + sizeof(ssize_t) + 
-                            ((JavaArray*)src)->size * primSize;
+                            (((JavaArray*)src)->size << logSize);
   } else {
     assert(cl->isClass() && "Not a class!");
     size = cl->asClass()->getVirtualSize();

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystem.cpp Mon Jun  8 09:52:37 2009
@@ -83,13 +83,12 @@
     }
   }
   
-  uint32 size = dstType->isPrimitive() ? 
-                  dstType->asPrimitiveClass()->primSize : sizeof(JavaObject*);
-  
-  assert(size && "Size zero in a arraycopy");
-  void* ptrDst = (void*)((int64_t)(dst->elements) + size * dstart);
-  void* ptrSrc = (void*)((int64_t)(src->elements) + size * sstart);
-  memmove(ptrDst, ptrSrc, size * len);
+  uint32 logSize = dstType->isPrimitive() ? 
+    dstType->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
+
+  void* ptrDst = (void*)((int64_t)(dst->elements) + (dstart << logSize));
+  void* ptrSrc = (void*)((int64_t)(src->elements) + (sstart << logSize));
+  memmove(ptrDst, ptrSrc, len << logSize);
 
   if (doThrow)
     vm->arrayStoreException();

Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp?rev=73069&r1=73068&r2=73069&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Mon Jun  8 09:52:37 2009
@@ -531,69 +531,79 @@
   AssessorInfo[I_VOID].llvmType = Type::VoidTy;
   AssessorInfo[I_VOID].llvmTypePtr = 0;
   AssessorInfo[I_VOID].llvmNullConstant = 0;
-  AssessorInfo[I_VOID].sizeInBytesConstant = 0;
+  AssessorInfo[I_VOID].logSizeInBytesConstant = 0;
   
   AssessorInfo[I_BOOL].llvmType = Type::Int8Ty;
   AssessorInfo[I_BOOL].llvmTypePtr = PointerType::getUnqual(Type::Int8Ty);
   AssessorInfo[I_BOOL].llvmNullConstant = 
     Constant::getNullValue(Type::Int8Ty);
-  AssessorInfo[I_BOOL].sizeInBytesConstant = mvm::MvmModule::constantOne;
+  AssessorInfo[I_BOOL].logSizeInBytesConstant =
+    mvm::MvmModule::constantZero;
   
   AssessorInfo[I_BYTE].llvmType = Type::Int8Ty;
   AssessorInfo[I_BYTE].llvmTypePtr = PointerType::getUnqual(Type::Int8Ty);
   AssessorInfo[I_BYTE].llvmNullConstant = 
     Constant::getNullValue(Type::Int8Ty);
-  AssessorInfo[I_BYTE].sizeInBytesConstant = mvm::MvmModule::constantOne;
+  AssessorInfo[I_BYTE].logSizeInBytesConstant =
+    mvm::MvmModule::constantZero;
   
   AssessorInfo[I_SHORT].llvmType = Type::Int16Ty;
   AssessorInfo[I_SHORT].llvmTypePtr = PointerType::getUnqual(Type::Int16Ty);
   AssessorInfo[I_SHORT].llvmNullConstant = 
     Constant::getNullValue(Type::Int16Ty);
-  AssessorInfo[I_SHORT].sizeInBytesConstant = mvm::MvmModule::constantTwo;
+  AssessorInfo[I_SHORT].logSizeInBytesConstant =
+    mvm::MvmModule::constantOne;
   
   AssessorInfo[I_CHAR].llvmType = Type::Int16Ty;
   AssessorInfo[I_CHAR].llvmTypePtr = PointerType::getUnqual(Type::Int16Ty);
   AssessorInfo[I_CHAR].llvmNullConstant = 
     Constant::getNullValue(Type::Int16Ty);
-  AssessorInfo[I_CHAR].sizeInBytesConstant = mvm::MvmModule::constantTwo;
+  AssessorInfo[I_CHAR].logSizeInBytesConstant =
+    mvm::MvmModule::constantOne;
   
   AssessorInfo[I_INT].llvmType = Type::Int32Ty;
   AssessorInfo[I_INT].llvmTypePtr = PointerType::getUnqual(Type::Int32Ty);
   AssessorInfo[I_INT].llvmNullConstant = 
     Constant::getNullValue(Type::Int32Ty);
-  AssessorInfo[I_INT].sizeInBytesConstant = mvm::MvmModule::constantFour;
+  AssessorInfo[I_INT].logSizeInBytesConstant =
+    mvm::MvmModule::constantTwo;
   
   AssessorInfo[I_FLOAT].llvmType = Type::FloatTy;
   AssessorInfo[I_FLOAT].llvmTypePtr = PointerType::getUnqual(Type::FloatTy);
   AssessorInfo[I_FLOAT].llvmNullConstant = 
     Constant::getNullValue(Type::FloatTy);
-  AssessorInfo[I_FLOAT].sizeInBytesConstant = mvm::MvmModule::constantFour;
+  AssessorInfo[I_FLOAT].logSizeInBytesConstant =
+    mvm::MvmModule::constantTwo;
   
   AssessorInfo[I_LONG].llvmType = Type::Int64Ty;
   AssessorInfo[I_LONG].llvmTypePtr = PointerType::getUnqual(Type::Int64Ty);
   AssessorInfo[I_LONG].llvmNullConstant = 
     Constant::getNullValue(Type::Int64Ty);
-  AssessorInfo[I_LONG].sizeInBytesConstant = mvm::MvmModule::constantEight;
+  AssessorInfo[I_LONG].logSizeInBytesConstant =
+    mvm::MvmModule::constantThree;
   
   AssessorInfo[I_DOUBLE].llvmType = Type::DoubleTy;
   AssessorInfo[I_DOUBLE].llvmTypePtr = PointerType::getUnqual(Type::DoubleTy);
   AssessorInfo[I_DOUBLE].llvmNullConstant = 
     Constant::getNullValue(Type::DoubleTy);
-  AssessorInfo[I_DOUBLE].sizeInBytesConstant = mvm::MvmModule::constantEight;
+  AssessorInfo[I_DOUBLE].logSizeInBytesConstant =
+    mvm::MvmModule::constantThree;
   
   AssessorInfo[I_TAB].llvmType = JnjvmModule::JavaObjectType;
   AssessorInfo[I_TAB].llvmTypePtr =
     PointerType::getUnqual(JnjvmModule::JavaObjectType);
   AssessorInfo[I_TAB].llvmNullConstant =
     JnjvmModule::JavaObjectNullConstant;
-  AssessorInfo[I_TAB].sizeInBytesConstant = mvm::MvmModule::constantPtrSize;
+  AssessorInfo[I_TAB].logSizeInBytesConstant =
+    mvm::MvmModule::constantPtrLogSize;
   
   AssessorInfo[I_REF].llvmType = JnjvmModule::JavaObjectType;
   AssessorInfo[I_REF].llvmTypePtr =
     PointerType::getUnqual(JnjvmModule::JavaObjectType);
   AssessorInfo[I_REF].llvmNullConstant =
     JnjvmModule::JavaObjectNullConstant;
-  AssessorInfo[I_REF].sizeInBytesConstant = mvm::MvmModule::constantPtrSize;
+  AssessorInfo[I_REF].logSizeInBytesConstant =
+    mvm::MvmModule::constantPtrLogSize;
 }
 
 std::map<const char, LLVMAssessorInfo> LLVMAssessorInfo::AssessorInfo;

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=73069&r1=73068&r2=73069&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Mon Jun  8 09:52:37 2009
@@ -802,7 +802,7 @@
   ClassElts.push_back(CreateConstantFromCommonClass(cl));
 
   // primSize
-  ClassElts.push_back(ConstantInt::get(Type::Int32Ty, cl->primSize));
+  ClassElts.push_back(ConstantInt::get(Type::Int32Ty, cl->logSize));
 
   return ConstantStruct::get(STy, ClassElts);
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITOpcodes.cpp Mon Jun  8 09:52:37 2009
@@ -1919,7 +1919,7 @@
 #endif
 
           LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[charId];
-          sizeElement = LAI.sizeInBytesConstant;
+          sizeElement = LAI.logSizeInBytesConstant;
           if (TheCompiler->isStaticCompiling() &&
               valCl->getType() != module->JavaClassArrayType) {
             valCl = new LoadInst(valCl, "", currentBlock);
@@ -1962,7 +1962,7 @@
                                      currentBlock);
           }
 
-          sizeElement = module->constantPtrSize;
+          sizeElement = module->constantPtrLogSize;
         }
         Value* arg1 = popAsInt();
 
@@ -1991,7 +1991,7 @@
           currentBlock = BB2;
         }
         
-        Value* mult = BinaryOperator::CreateMul(arg1, sizeElement, "",
+        Value* mult = BinaryOperator::CreateShl(arg1, sizeElement, "",
                                                 currentBlock);
         Value* size =
           BinaryOperator::CreateAdd(module->JavaArraySizeConstant, mult,

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon Jun  8 09:52:37 2009
@@ -219,7 +219,7 @@
   uint32 size = JavaVirtualTable::getBaseSize();
   virtualVT = new(loader->allocator, size) JavaVirtualTable(this);
   access = ACC_ABSTRACT | ACC_FINAL | ACC_PUBLIC | JNJVM_PRIMITIVE;
-  primSize = nb;
+  logSize = nb;
 }
 
 Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) : 
@@ -271,10 +271,10 @@
 JavaArray* UserClassArray::doNew(sint32 n, mvm::Allocator& allocator) {
   UserCommonClass* cl = baseClass();
 
-  uint32 primSize = cl->isPrimitive() ? 
-    cl->asPrimitiveClass()->primSize : sizeof(JavaObject*);
+  uint32 logSize = cl->isPrimitive() ? 
+    cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
   VirtualTable* VT = virtualVT;
-  uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + n * primSize;
+  uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize);
   JavaArray* res = (JavaArray*)allocator.allocateManagedObject(size, VT);
   res->size = n;
   return res;
@@ -283,10 +283,10 @@
 JavaArray* UserClassArray::doNew(sint32 n, mvm::BumpPtrAllocator& allocator) {
   UserCommonClass* cl = baseClass();
 
-  uint32 primSize = cl->isPrimitive() ? 
-    cl->asPrimitiveClass()->primSize : sizeof(JavaObject*);
+  uint32 logSize = cl->isPrimitive() ? 
+    cl->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
   VirtualTable* VT = virtualVT;
-  uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + n * primSize;
+  uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize);
   
   JavaArray* res = (JavaArray*)allocator.Allocate(size);
   ((void**)res)[0] = VT;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Mon Jun  8 09:52:37 2009
@@ -351,9 +351,9 @@
 class ClassPrimitive : public CommonClass {
 public:
   
-  /// primSize - The primitive size of this class, eg 4 for int.
+  /// logSize - The log size of this class, eg 2 for int.
   ///
-  uint32 primSize;
+  uint32 logSize;
   
   
   /// ClassPrimitive - Constructs a primitive class. Only called at boot

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Jun  8 09:52:37 2009
@@ -133,15 +133,15 @@
     ClassArray::InterfacesArray = InterfacesArray;
 
     // Create the primitive classes.
-    upcalls->OfChar = UPCALL_PRIMITIVE_CLASS(this, "char", 2);
-    upcalls->OfBool = UPCALL_PRIMITIVE_CLASS(this, "boolean", 1);
-    upcalls->OfShort = UPCALL_PRIMITIVE_CLASS(this, "short", 2);
-    upcalls->OfInt = UPCALL_PRIMITIVE_CLASS(this, "int", 4);
-    upcalls->OfLong = UPCALL_PRIMITIVE_CLASS(this, "long", 8);
-    upcalls->OfFloat = UPCALL_PRIMITIVE_CLASS(this, "float", 4);
-    upcalls->OfDouble = UPCALL_PRIMITIVE_CLASS(this, "double", 8);
+    upcalls->OfChar = UPCALL_PRIMITIVE_CLASS(this, "char", 1);
+    upcalls->OfBool = UPCALL_PRIMITIVE_CLASS(this, "boolean", 0);
+    upcalls->OfShort = UPCALL_PRIMITIVE_CLASS(this, "short", 1);
+    upcalls->OfInt = UPCALL_PRIMITIVE_CLASS(this, "int", 2);
+    upcalls->OfLong = UPCALL_PRIMITIVE_CLASS(this, "long", 3);
+    upcalls->OfFloat = UPCALL_PRIMITIVE_CLASS(this, "float", 2);
+    upcalls->OfDouble = UPCALL_PRIMITIVE_CLASS(this, "double", 3);
     upcalls->OfVoid = UPCALL_PRIMITIVE_CLASS(this, "void", 0);
-    upcalls->OfByte = UPCALL_PRIMITIVE_CLASS(this, "byte", 1);
+    upcalls->OfByte = UPCALL_PRIMITIVE_CLASS(this, "byte", 0);
   }
   
   // Create the primitive arrays.

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

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Mon Jun  8 09:52:37 2009
@@ -130,7 +130,8 @@
   constantPtrZero = ConstantInt::get(pointerSizeType, 0);
 
   constantPtrNull = Constant::getNullValue(ptrType); 
-  constantPtrSize = ConstantInt::get(Type::Int32Ty, sizeof(void*));
+  constantPtrLogSize = 
+    ConstantInt::get(Type::Int32Ty, sizeof(void*) == 8 ? 3 : 2);
   arrayPtrType = PointerType::getUnqual(ArrayType::get(Type::Int8Ty, 0));
 }
 
@@ -241,7 +242,7 @@
 llvm::ConstantFP*  MvmModule::constantFloatMinusZero;
 llvm::ConstantFP*  MvmModule::constantDoubleMinusZero;
 llvm::Constant*    MvmModule::constantPtrNull;
-llvm::ConstantInt* MvmModule::constantPtrSize;
+llvm::ConstantInt* MvmModule::constantPtrLogSize;
 llvm::ConstantInt* MvmModule::constantThreadIDMask;
 llvm::ConstantInt* MvmModule::constantStackOverflowMask;
 llvm::ConstantInt* MvmModule::constantFatMask;





More information about the vmkit-commits mailing list