[llvm-commits] [vmkit] r51481 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathConstructor.cpp Classpath/ClasspathMethod.cpp Classpath/ClasspathVMField.cpp VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaJIT.cpp VMCore/JavaMetaJIT.cpp VMCore/JavaTypes.cpp VMCore/JavaTypes.h VMCore/JnjvmModule.cpp VMCore/NativeUtil.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri May 23 08:39:42 PDT 2008
Author: geoffray
Date: Fri May 23 10:39:41 2008
New Revision: 51481
URL: http://llvm.org/viewvc/llvm-project?rev=51481&view=rev
Log:
Lazily create method and field signatures.
Inline some functions.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMField.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp Fri May 23 10:39:41 2008
@@ -56,7 +56,7 @@
JavaMethod* meth = (JavaMethod*)_meth;
ArrayObject* args = (ArrayObject*)_args;
sint32 nbArgs = args ? args->size : 0;
- sint32 size = meth->signature->args.size();
+ sint32 size = meth->getSignature()->args.size();
Jnjvm* vm = JavaThread::get()->isolate;
void** buf = (void**)alloca(size * sizeof(uint64));
@@ -70,8 +70,8 @@
JavaObject* res = cl->doNew(vm);
- for (std::vector<Typedef*>::iterator i = meth->signature->args.begin(),
- e = meth->signature->args.end(); i != e; ++i, ++index) {
+ for (std::vector<Typedef*>::iterator i = meth->getSignature()->args.begin(),
+ e = meth->getSignature()->args.end(); i != e; ++i, ++index) {
NativeUtil::decapsulePrimitive(vm, buf, args->at(index), *i);
}
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp Fri May 23 10:39:41 2008
@@ -41,7 +41,7 @@
jobject Meth) {
JavaMethod* meth = (JavaMethod*)Classpath::methodSlot->getVirtualInt32Field((JavaObject*)Meth);
JavaObject* loader = meth->classDef->classLoader;
- return (jclass)NativeUtil::getClassType(loader, meth->signature->ret);
+ return (jclass)NativeUtil::getClassType(loader, meth->getSignature()->ret);
}
@@ -65,7 +65,7 @@
JavaMethod* meth = (JavaMethod*)_meth;
ArrayObject* args = (ArrayObject*)_args;
sint32 nbArgs = args ? args->size : 0;
- sint32 size = meth->signature->args.size();
+ sint32 size = meth->getSignature()->args.size();
Jnjvm* vm = JavaThread::get()->isolate;
JavaObject* obj = (JavaObject*)_obj;
@@ -87,8 +87,8 @@
}
- for (std::vector<Typedef*>::iterator i = meth->signature->args.begin(),
- e = meth->signature->args.end(); i != e; ++i, ++index) {
+ for (std::vector<Typedef*>::iterator i = meth->getSignature()->args.begin(),
+ e = meth->getSignature()->args.end(); i != e; ++i, ++index) {
NativeUtil::decapsulePrimitive(vm, buf, args->at(index), *i);
}
@@ -120,7 +120,7 @@
} \
JavaObject* res = 0;
- const AssessorDesc* retType = meth->signature->ret->funcs;
+ const AssessorDesc* retType = meth->getSignature()->ret->funcs;
if (retType == AssessorDesc::dVoid) {
res = 0;
uint32 val = 0;
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMField.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMField.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMField.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMField.cpp Fri May 23 10:39:41 2008
@@ -35,7 +35,7 @@
jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)obj);
JavaObject* loader = field->classDef->classLoader;
- CommonClass* cl = field->signature->assocClass(loader);
+ CommonClass* cl = field->getSignature()->assocClass(loader);
return (jclass)cl->getClassDelegatee();
}
@@ -45,7 +45,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -80,7 +80,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -118,7 +118,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -142,7 +142,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -184,7 +184,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -207,7 +207,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -231,7 +231,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -258,7 +258,7 @@
#endif
jobject Field, jobject obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -304,7 +304,7 @@
#endif
jobject Field, jobject _obj) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- Typedef* type = field->signature;
+ Typedef* type = field->getSignature();
const AssessorDesc* ass = type->funcs;
JavaObject* obj = (JavaObject*)_obj;
Jnjvm* vm = JavaThread::get()->isolate;
@@ -398,9 +398,9 @@
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
void** buf = (void**)alloca(sizeof(uint64));
void* _buf = (void*)buf;
- NativeUtil::decapsulePrimitive(JavaThread::get()->isolate, buf, (JavaObject*)val, field->signature);
+ NativeUtil::decapsulePrimitive(JavaThread::get()->isolate, buf, (JavaObject*)val, field->getSignature());
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -454,7 +454,7 @@
#endif
jobject Field, jobject obj, jboolean val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -476,7 +476,7 @@
#endif
jobject Field, jobject _obj, jbyte val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
JavaObject* obj = (JavaObject*)_obj;
if (isStatic(field->access))
@@ -518,7 +518,7 @@
#endif
jobject Field, jobject obj, jchar val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -555,7 +555,7 @@
#endif
jobject Field, jobject obj, jshort val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -592,7 +592,7 @@
#endif
jobject Field, jobject obj, jint val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -625,7 +625,7 @@
#endif
jobject Field, jobject obj, jlong val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -654,7 +654,7 @@
#endif
jobject Field, jobject obj, jfloat val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
@@ -679,7 +679,7 @@
#endif
jobject Field, jobject obj, jdouble val) {
JavaField* field = (JavaField*)Classpath::fieldSlot->getVirtualInt32Field((JavaObject*)Field);
- const AssessorDesc* ass = field->signature->funcs;
+ const AssessorDesc* ass = field->getSignature()->funcs;
if (isStatic(field->access))
JavaThread::get()->isolate->initialiseClass(field->classDef);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Fri May 23 10:39:41 2008
@@ -279,7 +279,7 @@
const char* JavaMethod::printString() const {
mvm::PrintBuffer *buf= mvm::PrintBuffer::alloc();
buf->write("JavaMethod<");
- signature->printWithSign(classDef, name, buf);
+ ((JavaMethod*)this)->getSignature()->printWithSign(classDef, name, buf);
buf->write(">");
return buf->contents()->cString();
}
@@ -291,7 +291,7 @@
buf->write("static ");
else
buf->write("virtual ");
- signature->tPrintBuf(buf);
+ ((JavaMethod*)this)->getSignature()->tPrintBuf(buf);
buf->write(" ");
classDef->print(buf);
buf->write("::");
@@ -479,7 +479,7 @@
}
void JavaField::initField(JavaObject* obj) {
- const AssessorDesc* funcs = signature->funcs;
+ const AssessorDesc* funcs = getSignature()->funcs;
Attribut* attribut = lookupAttribut(Attribut::constantAttribut);
if (!attribut) {
@@ -579,7 +579,7 @@
method->name = name;
method->type = type;
method->classDef = (Class*)this;
- method->signature = (Signdef*)isolate->constructType(type);
+ method->_signature = 0;
method->code = 0;
method->access = access;
method->canBeInlined = false;
@@ -602,7 +602,7 @@
field->name = name;
field->type = type;
field->classDef = (Class*)this;
- field->signature = isolate->constructType(type);
+ field->_signature = 0;
field->ptrOffset = 0;
field->access = access;
map.insert(std::make_pair(CC, field));
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Fri May 23 10:39:41 2008
@@ -22,6 +22,7 @@
#include "mvm/Threads/Locks.h"
#include "JavaAccess.h"
+#include "Jnjvm.h"
namespace jnjvm {
@@ -156,12 +157,10 @@
#endif
- typedef std::map<const FieldCmp, JavaField*, std::less<FieldCmp>,
- gc_allocator<std::pair<const FieldCmp, JavaField*> > >::iterator
+ typedef std::map<const FieldCmp, JavaField*, std::less<FieldCmp> >::iterator
field_iterator;
- typedef std::map<const FieldCmp, JavaField*, std::less<FieldCmp>,
- gc_allocator<std::pair<const FieldCmp, JavaField*> > >
+ typedef std::map<const FieldCmp, JavaField*, std::less<FieldCmp> >
field_map;
/// virtualFields - List of all the virtual fields defined in this class.
@@ -172,12 +171,10 @@
///
field_map staticFields;
- typedef std::map<const FieldCmp, JavaMethod*, std::less<FieldCmp>,
- gc_allocator<std::pair<const FieldCmp, JavaMethod*> > >::iterator
+ typedef std::map<const FieldCmp, JavaMethod*, std::less<FieldCmp> >::iterator
method_iterator;
- typedef std::map<const FieldCmp, JavaMethod*, std::less<FieldCmp>,
- gc_allocator<std::pair<const FieldCmp, JavaMethod*> > >
+ typedef std::map<const FieldCmp, JavaMethod*, std::less<FieldCmp> >
method_map;
/// virtualMethods - List of all the virtual methods defined by this class.
@@ -357,12 +354,13 @@
class JavaMethod {
+ friend class CommonClass;
private:
void* _compiledPtr();
+ Signdef* _signature;
public:
~JavaMethod();
unsigned int access;
- Signdef* signature;
std::vector<Attribut*> attributs;
std::vector<Enveloppe*> caches;
Class* classDef;
@@ -381,6 +379,12 @@
if (!code) return _compiledPtr();
return code;
}
+
+ Signdef* getSignature() {
+ if(!_signature)
+ _signature = (Signdef*) classDef->isolate->constructType(type);
+ return _signature;
+ }
uint32 invokeIntSpecialAP(Jnjvm* vm, JavaObject* obj, va_list ap);
float invokeFloatSpecialAP(Jnjvm* vm, JavaObject* obj, va_list ap);
@@ -440,11 +444,13 @@
};
class JavaField {
+ friend class CommonClass;
+private:
+ Typedef* _signature;
public:
~JavaField();
unsigned int access;
const UTF8* name;
- Typedef* signature;
const UTF8* type;
std::vector<Attribut*> attributs;
Class* classDef;
@@ -452,6 +458,12 @@
/// num - The index of the field in the field list.
///
uint32 num;
+
+ Typedef* getSignature() {
+ if(!_signature)
+ _signature = classDef->isolate->constructType(type);
+ return _signature;
+ }
void initField(JavaObject* obj);
Attribut* lookupAttribut(const UTF8* key);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Fri May 23 10:39:41 2008
@@ -69,7 +69,7 @@
LLVMSignatureInfo* LSI = module->getSignatureInfo(signature);
const llvm::FunctionType* virtualType = LSI->getVirtualType();
FunctionType::param_iterator it = virtualType->param_end();
- makeArgs(it, index, args, signature->nbIn + 1);
+ makeArgs(it, index, args, signature->args.size() + 1);
JITVerifyNull(args[0]);
@@ -206,8 +206,8 @@
currentBlock);
llvm::BranchInst::Create(executeBlock, endBlock, test, currentBlock);
- if (compilingMethod->signature->ret->funcs != AssessorDesc::dVoid) {
- uint8 id = compilingMethod->signature->ret->funcs->numId;
+ if (compilingMethod->getSignature()->ret->funcs != AssessorDesc::dVoid) {
+ uint8 id = compilingMethod->getSignature()->ret->funcs->numId;
LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
Constant* C = LAI.llvmNullConstant;
endNode->addIncoming(C, currentBlock);
@@ -243,7 +243,7 @@
LLVMSignatureInfo* LSI =
- module->getSignatureInfo(compilingMethod->signature);
+ module->getSignatureInfo(compilingMethod->getSignature());
const llvm::Type* valPtrType = LSI->getNativePtrType();
Value* valPtr =
ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, (uint64)natPtr),
@@ -373,7 +373,7 @@
uint32 max = args.size();
#endif
std::vector<Typedef*>::iterator type =
- compilingMethod->signature->args.begin();
+ compilingMethod->getSignature()->args.begin();
std::vector<Value*>::iterator i = args.begin();
if (isVirtual(compilingMethod->access)) {
@@ -539,7 +539,7 @@
#endif
Function::arg_iterator i = func->arg_begin();
std::vector<Typedef*>::iterator type =
- compilingMethod->signature->args.begin();
+ compilingMethod->getSignature()->args.begin();
if (isVirtual(compilingMethod->access)) {
new StoreInst(i, objectLocals[0], false, currentBlock);
@@ -1362,7 +1362,7 @@
std::vector<Value*> args;
FunctionType::param_iterator it = virtualType->param_end();
- makeArgs(it, index, args, signature->nbIn + 1);
+ makeArgs(it, index, args, signature->args.size() + 1);
JITVerifyNull(args[0]);
if (cl == Jnjvm::mathName) {
@@ -1407,7 +1407,7 @@
std::vector<Value*> args; // size = [signature->nbIn + 2];
FunctionType::param_iterator it = staticType->param_end();
- makeArgs(it, index, args, signature->nbIn);
+ makeArgs(it, index, args, signature->args.size());
ctpInfo->markAsStaticCall(index);
if (cl == Jnjvm::mathName) {
@@ -1833,7 +1833,7 @@
std::vector<Value*> args; // size = [signature->nbIn + 3];
FunctionType::param_iterator it = virtualType->param_end();
- makeArgs(it, index, args, signature->nbIn + 1);
+ makeArgs(it, index, args, signature->args.size() + 1);
const llvm::Type* retType = virtualType->getReturnType();
BasicBlock* endBlock = createBasicBlock("end virtual invoke");
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp Fri May 23 10:39:41 2008
@@ -100,13 +100,12 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true); \
\
verifyNull(obj); \
- JavaMethod* meth = obj->classOf->lookupMethod(name, type, false, true); \
- \
- void** buf = (void**)alloca(meth->signature->args.size() * sizeof(uint64)); \
+ Signdef* sign = getSignature(); \
+ void** buf = (void**)alloca(sign->args.size() * sizeof(uint64)); \
void* _buf = (void*)buf; \
- readArgs(buf, signature, ap); \
- void* func = meth->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_BUF)signature->virtualCallBuf())(vm, func, obj, _buf);\
+ readArgs(buf, sign, ap); \
+ void* func = (((void***)obj)[0])[offset];\
+ return ((FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf())(vm, func, obj, _buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, JavaObject* obj, va_list ap) {\
@@ -114,22 +113,24 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true);\
\
verifyNull(obj);\
- void** buf = (void**)alloca(this->signature->args.size() * sizeof(uint64)); \
+ Signdef* sign = getSignature(); \
+ void** buf = (void**)alloca(sign->args.size() * sizeof(uint64)); \
void* _buf = (void*)buf; \
- readArgs(buf, signature, ap); \
+ readArgs(buf, sign, ap); \
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_BUF)signature->virtualCallBuf())(vm, func, obj, _buf);\
+ return ((FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf())(vm, func, obj, _buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, va_list ap) {\
if (!classDef->isReady())\
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true);\
\
- void** buf = (void**)alloca(this->signature->args.size() * sizeof(uint64)); \
+ Signdef* sign = getSignature(); \
+ void** buf = (void**)alloca(sign->args.size() * sizeof(uint64)); \
void* _buf = (void*)buf; \
- readArgs(buf, signature, ap); \
+ readArgs(buf, sign, ap); \
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_STATIC_BUF)signature->staticCallBuf())(vm, func, _buf);\
+ return ((FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf())(vm, func, _buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, JavaObject* obj, void* buf) {\
@@ -139,8 +140,9 @@
verifyNull(obj);\
JavaMethod* meth = obj->classOf->lookupMethod(name, type, false, true);\
\
+ Signdef* sign = getSignature(); \
void* func = meth->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_BUF)signature->virtualCallBuf())(vm, func, obj, buf);\
+ return ((FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf())(vm, func, obj, buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, JavaObject* obj, void* buf) {\
@@ -149,7 +151,8 @@
\
verifyNull(obj);\
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_BUF)signature->virtualCallBuf())(vm, func, obj, buf);\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf())(vm, func, obj, buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, void* buf) {\
@@ -157,7 +160,8 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true);\
\
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_STATIC_BUF)signature->staticCallBuf())(vm, func, buf);\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf())(vm, func, buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, JavaObject* obj, ...) { \
@@ -193,10 +197,9 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true); \
\
verifyNull(obj); \
- JavaMethod* meth = obj->classOf->lookupMethod(name, type, false, true); \
- \
- void* func = (((void***)obj)[0])[meth->offset];\
- return ((FUNC_TYPE_VIRTUAL_AP)signature->virtualCallAP())(vm, func, obj, ap);\
+ void* func = (((void***)obj)[0])[offset];\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP())(vm, func, obj, ap);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, JavaObject* obj, va_list ap) {\
@@ -205,7 +208,8 @@
\
verifyNull(obj);\
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_AP)signature->virtualCallAP())(vm, func, obj, ap);\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP())(vm, func, obj, ap);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, va_list ap) {\
@@ -213,7 +217,8 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true);\
\
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_STATIC_AP)signature->staticCallAP())(vm, func, ap);\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_STATIC_AP)sign->getStaticCallAP())(vm, func, ap);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, JavaObject* obj, void* buf) {\
@@ -221,10 +226,9 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true);\
\
verifyNull(obj);\
- JavaMethod* meth = obj->classOf->lookupMethod(name, type, false, true);\
- \
- void* func = meth->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_BUF)signature->virtualCallBuf())(vm, func, obj, buf);\
+ void* func = (((void***)obj)[0])[offset];\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf())(vm, func, obj, buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, JavaObject* obj, void* buf) {\
@@ -233,7 +237,8 @@
\
verifyNull(obj);\
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_VIRTUAL_BUF)signature->virtualCallBuf())(vm, func, obj, buf);\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf())(vm, func, obj, buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, void* buf) {\
@@ -241,7 +246,8 @@
classDef->isolate->loadName(classDef->name, classDef->classLoader, true, true, true);\
\
void* func = this->compiledPtr();\
- return ((FUNC_TYPE_STATIC_BUF)signature->staticCallBuf())(vm, func, buf);\
+ Signdef* sign = getSignature(); \
+ return ((FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf())(vm, func, buf);\
}\
\
TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm,JavaObject* obj, ...) { \
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Fri May 23 10:39:41 2008
@@ -471,10 +471,6 @@
humanPrintArgs(&args, buf);
}
-unsigned int Signdef::nbInWithThis(unsigned int flag) {
- return args.size() + (isStatic(flag) ? 0 : 1);
-}
-
Signdef* Signdef::signDup(const UTF8* name, Jnjvm *vm) {
std::vector<Typedef*> buf;
uint32 len = (uint32)name->size;
@@ -508,7 +504,6 @@
res->keyName = name;
res->pseudoAssocClassName = name;
res->funcs = 0;
- res->nbIn = buf.size();
res->_virtualCallBuf = 0;
res->_staticCallBuf = 0;
res->_virtualCallAP = 0;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h Fri May 23 10:39:41 2008
@@ -143,30 +143,69 @@
};
class Signdef : public Typedef {
-public:
- static VirtualTable *VT;
- std::vector<Typedef*> args;
- Typedef* ret;
+private:
mvm::Code* _staticCallBuf;
mvm::Code* _virtualCallBuf;
mvm::Code* _staticCallAP;
mvm::Code* _virtualCallAP;
- uint32 nbIn;
+
+ void* staticCallBuf();
+ void* virtualCallBuf();
+ void* staticCallAP();
+ void* virtualCallAP();
+
+public:
+ static VirtualTable *VT;
+ std::vector<Typedef*> args;
+ Typedef* ret;
virtual void print(mvm::PrintBuffer* buf) const;
virtual void TRACER;
void printWithSign(CommonClass* cl, const UTF8* name, mvm::PrintBuffer* buf);
- unsigned int nbInWithThis(unsigned int flag);
static Signdef* signDup(const UTF8* name, Jnjvm* vm);
- void* staticCallBuf();
- void* virtualCallBuf();
- void* staticCallAP();
- void* virtualCallAP();
+
+ void* getStaticCallBuf() {
+ if(!_staticCallBuf) return staticCallBuf();
+ return _staticCallBuf;
+ }
+
+ void* getVirtualCallBuf() {
+ if(!_virtualCallBuf) return virtualCallBuf();
+ return _virtualCallBuf;
+ }
+
+ void* getStaticCallAP() {
+ if (!_staticCallAP) return staticCallAP();
+ return _staticCallAP;
+ }
+ void* getVirtualCallAP() {
+ if (!_virtualCallAP) return virtualCallAP();
+ return _virtualCallAP;
+ }
+
+ void setStaticCallBuf(mvm::Code* code) {
+ _staticCallBuf = code;
+ }
+
+ void setVirtualCallBuf(mvm::Code* code) {
+ _virtualCallBuf = code;
+ }
+
+ void setStaticCallAP(mvm::Code* code) {
+ _staticCallAP = code;
+ }
+
+ void setVirtualCallAP(mvm::Code* code) {
+ _virtualCallAP = code;
+ }
+
+
};
+
} // end namespace jnjvm
#endif
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Fri May 23 10:39:41 2008
@@ -270,7 +270,7 @@
for (CommonClass::field_iterator i = fields.begin(), e = fields.end();
i!= e; ++i) {
- if (i->second->signature->funcs->doTrace) {
+ if (i->second->getSignature()->funcs->doTrace) {
LLVMFieldInfo* LFI = getFieldInfo(i->second);
std::vector<Value*> args; //size = 2
args.push_back(zero);
@@ -330,7 +330,7 @@
for (uint32 index = 0; index < classDef->virtualFields.size(); ++index) {
- uint8 id = array[index]->signature->funcs->numId;
+ uint8 id = array[index]->getSignature()->funcs->numId;
LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
fields.push_back(LAI.llvmType);
}
@@ -374,7 +374,7 @@
for (uint32 index = 0; index < classDef->staticFields.size(); ++index) {
JavaField* field = array[index];
- uint8 id = field->signature->funcs->numId;
+ uint8 id = field->getSignature()->funcs->numId;
LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
fields.push_back(LAI.llvmType);
}
@@ -493,7 +493,7 @@
const FunctionType* LLVMMethodInfo::getFunctionType() {
if (!functionType) {
- LLVMSignatureInfo* LSI = module->getSignatureInfo(methodDef->signature);
+ LLVMSignatureInfo* LSI = module->getSignatureInfo(methodDef->getSignature());
assert(LSI);
if (isStatic(methodDef->access)) {
functionType = LSI->getStaticType();
@@ -763,8 +763,8 @@
// Lock here because we are called by arbitrary code
llvm::MutexGuard locked(mvm::jit::executionEngine->lock);
virtualBufFunction = createFunctionCallBuf(true);
- signature->_virtualCallBuf = (mvm::Code*)
- mvm::jit::executionEngine->getPointerToGlobal(virtualBufFunction);
+ signature->setVirtualCallBuf((mvm::Code*)
+ mvm::jit::executionEngine->getPointerToGlobal(virtualBufFunction));
}
return virtualBufFunction;
}
@@ -774,8 +774,8 @@
// Lock here because we are called by arbitrary code
llvm::MutexGuard locked(mvm::jit::executionEngine->lock);
virtualAPFunction = createFunctionCallAP(true);
- signature->_virtualCallAP = (mvm::Code*)
- mvm::jit::executionEngine->getPointerToGlobal(virtualAPFunction);
+ signature->setVirtualCallAP((mvm::Code*)
+ mvm::jit::executionEngine->getPointerToGlobal(virtualAPFunction));
}
return virtualAPFunction;
}
@@ -785,8 +785,8 @@
// Lock here because we are called by arbitrary code
llvm::MutexGuard locked(mvm::jit::executionEngine->lock);
staticBufFunction = createFunctionCallBuf(false);
- signature->_staticCallBuf = (mvm::Code*)
- mvm::jit::executionEngine->getPointerToGlobal(staticBufFunction);
+ signature->setStaticCallBuf((mvm::Code*)
+ mvm::jit::executionEngine->getPointerToGlobal(staticBufFunction));
}
return staticBufFunction;
}
@@ -796,8 +796,8 @@
// Lock here because we are called by arbitrary code
llvm::MutexGuard locked(mvm::jit::executionEngine->lock);
staticAPFunction = createFunctionCallAP(false);
- signature->_staticCallAP = (mvm::Code*)
- mvm::jit::executionEngine->getPointerToGlobal(staticAPFunction);
+ signature->setStaticCallAP((mvm::Code*)
+ mvm::jit::executionEngine->getPointerToGlobal(staticAPFunction));
}
return staticAPFunction;
}
@@ -1051,7 +1051,7 @@
void JnjvmModule::InitField(JavaField* field, JavaObject* obj, uint64 val) {
- const AssessorDesc* funcs = field->signature->funcs;
+ const AssessorDesc* funcs = field->getSignature()->funcs;
if (funcs == AssessorDesc::dLong) {
((sint64*)((uint64)obj + field->ptrOffset))[0] = val;
} else if (funcs == AssessorDesc::dInt) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp?rev=51481&r1=51480&r2=51481&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp Fri May 23 10:39:41 2008
@@ -381,7 +381,7 @@
}
ArrayObject* NativeUtil::getParameterTypes(JavaObject* loader, JavaMethod* meth) {
- std::vector<Typedef*>& args = meth->signature->args;
+ std::vector<Typedef*>& args = meth->getSignature()->args;
ArrayObject* res = ArrayObject::acons(args.size(), Classpath::classArrayClass,
JavaThread::get()->isolate);
More information about the llvm-commits
mailing list