[vmkit-commits] [vmkit] r82046 - /vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Sep 16 06:14:49 PDT 2009


Author: geoffray
Date: Wed Sep 16 08:14:48 2009
New Revision: 82046

URL: http://llvm.org/viewvc/llvm-project?rev=82046&view=rev
Log:
Don't use the cl information in JavaMetaJIT.cpp, do a full lookup
on the object's class.



Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp Wed Sep 16 08:14:48 2009
@@ -86,12 +86,8 @@
   Signdef* sign = getSignature(); \
   uintptr_t buf = (uintptr_t)alloca(sign->nbArguments * sizeof(uint64)); \
   void* _buf = (void*)buf; \
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \
   readArgs(buf, sign, ap, jni); \
@@ -154,12 +150,8 @@
 TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\
   verifyNull(obj);\
   Signdef* sign = getSignature(); \
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \
   JavaThread* th = JavaThread::get(); \
@@ -242,12 +234,8 @@
 \
 TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \
   verifyNull(obj); \
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   Signdef* sign = getSignature(); \
   FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \
@@ -303,12 +291,8 @@
 \
 TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\
   verifyNull(obj);\
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   Signdef* sign = getSignature(); \
   FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \
@@ -398,12 +382,8 @@
   Signdef* sign = getSignature(); \
   uintptr_t buf = (uintptr_t)alloca(sign->nbArguments * sizeof(uint64)); \
   void* _buf = (void*)buf; \
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \
   readArgs(buf, sign, ap, jni); \
@@ -463,12 +443,8 @@
 TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\
   verifyNull(obj);\
   Signdef* sign = getSignature(); \
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \
   JavaThread* th = JavaThread::get(); \
@@ -506,7 +482,7 @@
   \
   void* func = this->compiledPtr();\
   Signdef* sign = getSignature(); \
-  FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)sign->getVirtualCallBuf(); \
+  FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf(); \
   JavaThread* th = JavaThread::get(); \
   th->startJava(); \
   TYPE res = 0; \
@@ -548,12 +524,8 @@
 \
 TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \
   verifyNull(obj); \
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   Signdef* sign = getSignature(); \
   FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \
@@ -606,12 +578,8 @@
 \
 TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\
   verifyNull(obj);\
-  JavaMethod* meth = this; \
-  if (classDef != cl) {\
-    UserClass* cl2 = 0; \
-    meth = cl->lookupMethodDontThrow(name, type, false, true, &cl2); \
-    assert(cl2 == cl && "Different classes in invoke virtual"); \
-  } \
+  UserClass* objCl = obj->getClass()->isArray() ? obj->getClass()->super : obj->getClass()->asClass(); \
+  JavaMethod* meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \
   void* func = meth->compiledPtr(); \
   Signdef* sign = getSignature(); \
   FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \





More information about the vmkit-commits mailing list