[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