[vmkit-commits] [vmkit] r60172 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathField.cpp LLVMRuntime/runtime-default.ll VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaConstantPool.cpp VMCore/JavaJIT.cpp VMCore/JavaRuntimeJIT.cpp VMCore/JavaUpcalls.cpp VMCore/Jni.cpp VMCore/Jnjvm.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModule.h VMCore/VirtualTables.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Nov 27 07:02:02 PST 2008
Author: geoffray
Date: Thu Nov 27 09:01:54 2008
New Revision: 60172
URL: http://llvm.org/viewvc/llvm-project?rev=60172&view=rev
Log:
Make the static instance a simply malloc'ed object, not a JavaObject.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp Thu Nov 27 09:01:54 2008
@@ -66,7 +66,7 @@
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
const Typedef* type = field->getSignature();
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -103,7 +103,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -142,7 +142,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -174,7 +174,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -215,7 +215,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -246,7 +246,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -278,7 +278,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -311,7 +311,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -353,7 +353,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)_obj;
+ void* Obj = (void*)_obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -428,7 +428,7 @@
NativeUtil::decapsulePrimitive(vm, buf, (JavaObject*)val, type);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -473,7 +473,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -502,7 +503,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -541,7 +543,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -577,7 +579,7 @@
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -613,7 +615,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -647,7 +650,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -679,7 +683,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
@@ -709,7 +714,8 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* slot = vm->upcalls->fieldSlot;
JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
- JavaObject* Obj = (JavaObject*)obj;
+
+ void* Obj = (void*)obj;
if (isStatic(field->access)) {
UserClass* cl = internalGetClass(vm, field, Field);
Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Thu Nov 27 09:01:54 2008
@@ -88,7 +88,7 @@
declare i32 @getDepth(%JavaClass*) readnone
;;; getStaticInstance - Get the static instance of this class.
-declare %JavaObject* @getStaticInstance(%JavaClass*) readnone
+declare i8* @getStaticInstance(%JavaClass*) readnone
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Nov 27 09:01:54 2008
@@ -97,7 +97,6 @@
Class::Class() : CommonClass() {
ctpInfo = 0;
- staticVT = 0;
JInfo = 0;
outerClass = 0;
innerOuterResolved = false;
@@ -140,8 +139,7 @@
classLoader->allocator.Deallocate(ctpInfo);
}
- classLoader->allocator.Deallocate(staticVT);
-
+ classLoader->allocator.Deallocate(_staticInstance);
// Currently, only regular classes have a heap allocated virtualVT.
// Array classes have a C++ allocated virtualVT and primitive classes
// do not have a virtualVT.
@@ -310,6 +308,7 @@
innerOuterResolved = false;
display = 0;
nbInnerClasses = 0;
+ staticTracer = 0;
#if !defined(ISOLATE) && !defined(ISOLATE_SHARING)
_staticInstance = 0;
#endif
@@ -642,7 +641,7 @@
}
}
-void JavaField::InitField(JavaObject* obj, uint64 val) {
+void JavaField::InitField(void* obj, uint64 val) {
Typedef* type = getSignature();
if (!type->isPrimitive()) {
@@ -669,19 +668,19 @@
}
}
-void JavaField::InitField(JavaObject* obj, JavaObject* val) {
+void JavaField::InitField(void* obj, JavaObject* val) {
((JavaObject**)((uint64)obj + ptrOffset))[0] = val;
}
-void JavaField::InitField(JavaObject* obj, double val) {
+void JavaField::InitField(void* obj, double val) {
((double*)((uint64)obj + ptrOffset))[0] = val;
}
-void JavaField::InitField(JavaObject* obj, float val) {
+void JavaField::InitField(void* obj, float val) {
((float*)((uint64)obj + ptrOffset))[0] = val;
}
-void JavaField::initField(JavaObject* obj, Jnjvm* vm) {
+void JavaField::initField(void* obj, Jnjvm* vm) {
const Typedef* type = getSignature();
Attribut* attribut = lookupAttribut(Attribut::constantAttribut);
@@ -712,11 +711,8 @@
}
}
-JavaObject* UserClass::allocateStaticInstance(Jnjvm* vm) {
- JavaObject* val =
- (JavaObject*)vm->gcAllocator.allocateManagedObject(getStaticSize(),
- getStaticVT());
- val->initialise(this);
+void* UserClass::allocateStaticInstance(Jnjvm* vm) {
+ void* val = classLoader->allocator.Allocate(getStaticSize());
setStaticInstance(val);
return val;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Nov 27 09:01:54 2008
@@ -124,7 +124,7 @@
public:
JavaState status;
JavaObject* delegatee;
- JavaObject* staticInstance;
+ mvm::Object* staticInstance;
};
#endif
@@ -665,27 +665,22 @@
///
bool innerOuterResolved;
- /// staticSize - The size of the static instance of this class.
- ///
- uint32 staticSize;
-
- /// staticVT - The virtual table of the static instance of this class.
+ /// setInnerAccess - Set the access flags of this inner class.
///
- VirtualTable* staticVT;
-
void setInnerAccess(uint32 access) {
innerAccess = access;
}
+ /// staticSize - The size of the static instance of this class.
+ ///
+ uint32 staticSize;
+
+ /// getStaticSize - Get the size of the static instance.
+ ///
uint32 getStaticSize() {
return staticSize;
}
- VirtualTable* getStaticVT() {
- return staticVT;
- }
-
-
#ifndef ISOLATE_SHARING
/// doNew - Allocates a Java object whose class is this class.
///
@@ -711,27 +706,29 @@
///
Attribut* lookupAttribut(const UTF8* key);
+ void (*staticTracer)(void*);
+
/// staticInstance - Get the static instance of this class. A static instance
/// is inlined when the vm is in a single environment. In a multiple
/// environment, the static instance is in a hashtable.
///
#if !defined(ISOLATE_SHARING) && !defined(ISOLATE)
- JavaObject* _staticInstance;
+ void* _staticInstance;
- JavaObject* getStaticInstance() {
+ void* getStaticInstance() {
return _staticInstance;
}
- void setStaticInstance(JavaObject* val) {
+ void setStaticInstance(void* val) {
_staticInstance = val;
}
#else
#if defined(ISOLATE)
- JavaObject* getStaticInstance() {
+ void* getStaticInstance() {
return getCurrentTaskClassMirror().staticInstance;
}
- void setStaticInstance(JavaObject* val) {
+ void setStaticInstance(void* val) {
getCurrentTaskClassMirror().staticInstance = val;
}
@@ -740,7 +737,7 @@
/// allocateStaticInstance - Allocate the static instance of this class.
///
- JavaObject* allocateStaticInstance(Jnjvm* vm);
+ void* allocateStaticInstance(Jnjvm* vm);
/// Class - Create a class in the given virtual machine and with the given
/// name.
@@ -1040,10 +1037,10 @@
/// InitField - Set an initial value to the field of an object.
///
- void InitField(JavaObject* obj, uint64 val = 0);
- void InitField(JavaObject* obj, JavaObject* val);
- void InitField(JavaObject* obj, double val);
- void InitField(JavaObject* obj, float val);
+ void InitField(void* obj, uint64 val = 0);
+ void InitField(void* obj, JavaObject* val);
+ void InitField(void* obj, double val);
+ void InitField(void* obj, float val);
public:
@@ -1093,7 +1090,7 @@
/// initField - Init the value of the field in the given object. This is
/// used for static fields which have a default value.
///
- void initField(JavaObject* obj, Jnjvm* vm);
+ void initField(void* obj, Jnjvm* vm);
/// lookupAttribut - Look up the attribut in the field's list of attributs.
///
@@ -1106,7 +1103,7 @@
/// getVritual*Field - Get a virtual field of an object.
///
#define GETFIELD(TYPE, TYPE_NAME) \
- TYPE get##TYPE_NAME##Field(JavaObject* obj) { \
+ TYPE get##TYPE_NAME##Field(void* obj) { \
assert(classDef->isResolved()); \
void* ptr = (void*)((uint64)obj + ptrOffset); \
return ((TYPE*)ptr)[0]; \
@@ -1115,7 +1112,7 @@
/// set*Field - Set a field of an object.
///
#define SETFIELD(TYPE, TYPE_NAME) \
- void set##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \
+ void set##TYPE_NAME##Field(void* obj, TYPE val) { \
assert(classDef->isResolved()); \
void* ptr = (void*)((uint64)obj + ptrOffset); \
((TYPE*)ptr)[0] = val; \
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Thu Nov 27 09:01:54 2008
@@ -493,7 +493,7 @@
}
#ifndef ISOLATE_SHARING
else if (cl->isReady()) {
- JavaObject* S = field->classDef->getStaticInstance();
+ void* S = field->classDef->getStaticInstance();
ctpRes[index] = (void*)((uint64)S + field->ptrOffset);
}
#endif
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Thu Nov 27 09:01:54 2008
@@ -835,11 +835,9 @@
if (isVirtual(compilingMethod->access)) {
argsSync = llvmFunction->arg_begin();
} else {
- Value* cl = module->getNativeClass(compilingClass);
+ Value* cl = module->getJavaClass(compilingClass);
cl = new LoadInst(cl, "", currentBlock);
- Value* arg = CallInst::Create(module->GetStaticInstanceFunction, cl, "",
- currentBlock);
- argsSync = arg;
+ argsSync = cl;
}
llvm::CallInst::Create(module->ReleaseObjectFunction, argsSync, "",
synchronizeExceptionBlock);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Thu Nov 27 09:01:54 2008
@@ -127,7 +127,7 @@
JavaField* field = cl->lookupField(utf8, sign->keyName, true, true, &fieldCl);
fieldCl->initialiseClass(JavaThread::get()->getJVM());
- JavaObject* obj = ((UserClass*)fieldCl)->getStaticInstance();
+ void* obj = ((UserClass*)fieldCl)->getStaticInstance();
assert(obj && "No static instance in static field lookup");
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Thu Nov 27 09:01:54 2008
@@ -226,7 +226,7 @@
JCL->loadName(threadGroup->getName(), true, true);
threadGroup->initialiseClass(vm);
- JavaObject* Stat = threadGroup->getStaticInstance();
+ void* Stat = threadGroup->getStaticInstance();
JavaObject* RG = rootGroup->getObjectField(Stat);
group->setObjectField(th, RG);
groupAddThread->invokeIntSpecial(vm, threadGroup, RG, th);
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Thu Nov 27 09:01:54 2008
@@ -1382,7 +1382,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jobject)field->getObjectField(Stat);
END_EXCEPTION
@@ -1397,7 +1397,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jboolean)field->getInt8Field(Stat);
END_EXCEPTION
@@ -1412,7 +1412,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jbyte)field->getInt8Field(Stat);
END_EXCEPTION
@@ -1427,7 +1427,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jchar)field->getInt16Field(Stat);
END_EXCEPTION
@@ -1442,7 +1442,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jshort)field->getInt16Field(Stat);
END_EXCEPTION
@@ -1457,7 +1457,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jint)field->getInt32Field(Stat);
END_EXCEPTION
@@ -1472,7 +1472,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jlong)field->getLongField(Stat);
END_EXCEPTION
@@ -1487,7 +1487,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jfloat)field->getFloatField(Stat);
END_EXCEPTION
@@ -1502,7 +1502,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
return (jdouble)field->getDoubleField(Stat);
END_EXCEPTION
@@ -1518,7 +1518,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setObjectField(Stat, (JavaObject*)value);
END_EXCEPTION
@@ -1533,7 +1533,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setInt8Field(Stat, (uint8)value);
END_EXCEPTION
@@ -1548,7 +1548,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setInt8Field(Stat, (sint8)value);
END_EXCEPTION
@@ -1563,7 +1563,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setInt16Field(Stat, (uint16)value);
END_EXCEPTION
@@ -1578,7 +1578,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setInt16Field(Stat, (sint16)value);
END_EXCEPTION
@@ -1593,7 +1593,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setInt32Field(Stat, (sint32)value);
END_EXCEPTION
@@ -1608,7 +1608,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setLongField(Stat, (sint64)value);
END_EXCEPTION
@@ -1623,7 +1623,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setFloatField(Stat, (float)value);
END_EXCEPTION
@@ -1638,7 +1638,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaField* field = (JavaField*)fieldID;
UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
- JavaObject* Stat = cl->getStaticInstance();
+ void* Stat = cl->getStaticInstance();
field->setDoubleField(Stat, (double)value);
END_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Nov 27 09:01:54 2008
@@ -127,12 +127,12 @@
#if defined(ISOLATE) || defined(ISOLATE_SHARING)
// Isolate environments allocate the static instance on their own, not when
// the class is being resolved.
- JavaObject* val = cl->allocateStaticInstance(vm);
+ void* val = cl->allocateStaticInstance(vm);
#else
// Single environment allocates the static instance during resolution, so
// that compiled code can access it directly (with an initialization
// check just before the access)
- JavaObject* val = cl->getStaticInstance();
+ void* val = cl->getStaticInstance();
if (!val) {
val = cl->allocateStaticInstance(vm);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Thu Nov 27 09:01:54 2008
@@ -178,7 +178,7 @@
if (I == End) {
LLVMClassInfo* LCI = getClassInfo(classDef);
LCI->getStaticType();
- JavaObject* obj = ((Class*)classDef)->getStaticInstance();
+ void* obj = ((Class*)classDef)->getStaticInstance();
#ifndef ISOLATE
if (!obj && !isStaticCompiling()) {
Class* cl = (Class*)classDef;
@@ -193,9 +193,9 @@
#endif
Constant* cons =
ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty,
- uint64_t (obj)), JnjvmModule::JavaObjectType);
+ uint64_t (obj)), ptrType);
- varGV = new GlobalVariable(JnjvmModule::JavaObjectType, !staticCompilation,
+ varGV = new GlobalVariable(ptrType, !staticCompilation,
GlobalValue::ExternalLinkage,
cons, "", this);
@@ -330,13 +330,16 @@
Value* GC = ++func->arg_begin();
Args.push_back(GC);
#endif
- if (stat || cl->super == 0) {
- CallInst::Create(JavaObjectTracerFunction, Args.begin(), Args.end(),
- "", block);
- } else {
- LLVMClassInfo* LCP = (LLVMClassInfo*)getClassInfo((Class*)(cl->super));
- CallInst::Create(LCP->getVirtualTracer(), Args.begin(),
- Args.end(), "", block);
+ if (!stat) {
+ if (cl->super == 0) {
+ CallInst::Create(JavaObjectTracerFunction, Args.begin(), Args.end(),
+ "", block);
+
+ } else {
+ LLVMClassInfo* LCP = (LLVMClassInfo*)getClassInfo((Class*)(cl->super));
+ CallInst::Create(LCP->getVirtualTracer(), Args.begin(),
+ Args.end(), "", block);
+ }
}
for (uint32 i = 0; i < nbFields; ++i) {
@@ -372,79 +375,75 @@
return func;
}
-VirtualTable* JnjvmModule::makeVT(Class* cl, bool stat) {
+VirtualTable* JnjvmModule::makeVT(Class* cl) {
VirtualTable* VT = 0;
-#ifndef WITHOUT_VTABLE
- if (stat) {
-#endif
- mvm::BumpPtrAllocator& allocator = cl->classLoader->allocator;
- VT = (VirtualTable*)allocator.Allocate(VT_SIZE);
- memcpy(VT, JavaObject::VT, VT_SIZE);
-#ifndef WITHOUT_VTABLE
+#ifdef WITHOUT_VTABLE
+ mvm::BumpPtrAllocator& allocator = cl->classLoader->allocator;
+ VT = (VirtualTable*)allocator.Allocate(VT_SIZE);
+ memcpy(VT, JavaObject::VT, VT_SIZE);
+#else
+ if (cl->super) {
+ cl->virtualTableSize = cl->super->virtualTableSize;
} else {
- if (cl->super) {
- cl->virtualTableSize = cl->super->virtualTableSize;
- } else {
- cl->virtualTableSize = VT_NB_FUNCS;
- }
+ cl->virtualTableSize = VT_NB_FUNCS;
+ }
+
+ // Allocate the virtual table.
+ VT = allocateVT(cl);
- // Allocate the virtual table.
- VT = allocateVT(cl);
+ // Fill the virtual table with function pointers.
+ ExecutionEngine* EE = mvm::MvmModule::executionEngine;
+ for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
+ JavaMethod& meth = cl->virtualMethods[i];
+ LLVMMethodInfo* LMI = getMethodInfo(&meth);
+ Function* func = LMI->getMethod();
- // Fill the virtual table with function pointers.
- ExecutionEngine* EE = mvm::MvmModule::executionEngine;
- for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
- JavaMethod& meth = cl->virtualMethods[i];
- LLVMMethodInfo* LMI = getMethodInfo(&meth);
- Function* func = LMI->getMethod();
-
- // Special handling for finalize method. Don't put a finalizer
- // if there is none, or if it is empty.
- if (meth.offset == 0) {
+ // Special handling for finalize method. Don't put a finalizer
+ // if there is none, or if it is empty.
+ if (meth.offset == 0) {
#ifdef ISOLATE_SHARING
- ((void**)VT)[0] = 0;
+ ((void**)VT)[0] = 0;
#else
- JnjvmClassLoader* loader = cl->classLoader;
- Function* func = loader->getModuleProvider()->parseFunction(&meth);
- if (!cl->super) meth.canBeInlined = true;
- Function::iterator BB = func->begin();
- BasicBlock::iterator I = BB->begin();
- if (isa<ReturnInst>(I)) {
- ((void**)VT)[0] = 0;
- } else {
- // LLVM does not allow recursive compilation. Create the code now.
- ((void**)VT)[0] = EE->getPointerToFunction(func);
- }
+ JnjvmClassLoader* loader = cl->classLoader;
+ Function* func = loader->getModuleProvider()->parseFunction(&meth);
+ if (!cl->super) meth.canBeInlined = true;
+ Function::iterator BB = func->begin();
+ BasicBlock::iterator I = BB->begin();
+ if (isa<ReturnInst>(I)) {
+ ((void**)VT)[0] = 0;
+ } else {
+ // LLVM does not allow recursive compilation. Create the code now.
+ ((void**)VT)[0] = EE->getPointerToFunction(func);
}
+ }
#endif
- if (staticCompilation) {
- ((void**)VT)[meth.offset] = func;
- } else {
- ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
- }
+ if (staticCompilation) {
+ ((void**)VT)[meth.offset] = func;
+ } else {
+ ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
}
+ }
- // If there is no super, then it's the first VT that we allocate. Assign
- // this VT to native types.
- if (!(cl->super)) {
- uint32 size = (cl->virtualTableSize - VT_NB_FUNCS) * sizeof(void*);
+ // If there is no super, then it's the first VT that we allocate. Assign
+ // this VT to native types.
+ if (!(cl->super)) {
+ uint32 size = (cl->virtualTableSize - VT_NB_FUNCS) * sizeof(void*);
#define COPY(CLASS) \
memcpy((void*)((uintptr_t)CLASS::VT + VT_SIZE), \
(void*)((uintptr_t)VT + VT_SIZE), size);
- COPY(JavaArray)
- COPY(JavaObject)
- COPY(ArrayObject)
+ COPY(JavaArray)
+ COPY(JavaObject)
+ COPY(ArrayObject)
#undef COPY
- }
- }
+ }
#endif
#ifdef WITH_TRACER
- llvm::Function* func = makeTracer(cl, stat);
+ llvm::Function* func = makeTracer(cl, false);
if (staticCompilation) {
((void**)VT)[VT_TRACER_OFFSET] = func;
@@ -453,7 +452,6 @@
((void**)VT)[VT_TRACER_OFFSET] = codePtr;
func->deleteBody();
}
-
#endif
return VT;
@@ -474,7 +472,7 @@
for (uint32 i = 0; i < classDef->nbVirtualFields; ++i) {
JavaField& field = classDef->virtualFields[i];
- field.num = i;
+ field.num = i + 1;
Typedef* type = field.getSignature();
LLVMAssessorInfo& LAI = JnjvmModule::getTypedefInfo(type);
fields.push_back(LAI.llvmType);
@@ -498,7 +496,7 @@
JnjvmModule* Mod = classDef->classLoader->getModule();
if (!Mod->isStaticCompiling()) {
- classDef->virtualVT = Mod->makeVT((Class*)classDef, false);
+ classDef->virtualVT = Mod->makeVT((Class*)classDef);
}
@@ -512,7 +510,6 @@
if (!staticType) {
Class* cl = (Class*)classDef;
std::vector<const llvm::Type*> fields;
- fields.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
for (uint32 i = 0; i < classDef->nbStaticFields; ++i) {
JavaField& field = classDef->staticFields[i];
@@ -530,15 +527,20 @@
for (uint32 i = 0; i < classDef->nbStaticFields; ++i) {
JavaField& field = classDef->staticFields[i];
- field.ptrOffset = sl->getElementOffset(i + 1);
+ field.ptrOffset = sl->getElementOffset(i);
}
uint64 size = mvm::MvmModule::getTypeSize(structType);
cl->staticSize = size;
JnjvmModule* Mod = cl->classLoader->getModule();
- if (!Mod->isStaticCompiling()) {
- cl->staticVT = Mod->makeVT((Class*)classDef, true);
+ Function* F = Mod->makeTracer(cl, true);
+ if (Mod->isStaticCompiling()) {
+ cl->staticTracer = (void (*)(void*)) (uintptr_t) F;
+ } else {
+ cl->staticTracer = (void (*)(void*)) (uintptr_t)
+ Mod->executionEngine->getPointerToFunction(F);
+ F->deleteBody();
}
}
return staticType;
@@ -627,8 +629,8 @@
} else {
JnjvmModule::resolveVirtualClass(fieldDef->classDef);
}
- // Increment by one because zero is JavaObject
- offsetConstant = ConstantInt::get(Type::Int32Ty, fieldDef->num + 1);
+
+ offsetConstant = ConstantInt::get(Type::Int32Ty, fieldDef->num);
}
return offsetConstant;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Thu Nov 27 09:01:54 2008
@@ -214,7 +214,7 @@
llvm::Function* makeTracer(Class* cl, bool stat);
- VirtualTable* makeVT(Class* cl, bool stat);
+ VirtualTable* makeVT(Class* cl);
VirtualTable* allocateVT(Class* cl);
Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=60172&r1=60171&r2=60172&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Thu Nov 27 09:01:54 2008
@@ -78,7 +78,9 @@
for (uint32 i =0; i < NR_ISOLATES; ++i) {
TaskClassMirror &M = IsolateInfo[i];
M.delegatee->MARK_AND_TRACE;
- M.staticInstance->MARK_AND_TRACE;
+ if (M.staticInstance) {
+ ((Class*)this)->staticTracer(M.staticInstance);
+ }
}
#endif
}
@@ -87,7 +89,8 @@
CommonClass::CALL_TRACER;
bytes->MARK_AND_TRACE;
#if !defined(ISOLATE)
- _staticInstance->MARK_AND_TRACE;
+ if (_staticInstance)
+ staticTracer(_staticInstance);
#endif
}
More information about the vmkit-commits
mailing list