[vmkit-commits] [vmkit] r180297 - Fixing some performance issues in native implementation of VMConstructor, VMField, VMMethod
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:52:05 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:50:02 2013
New Revision: 180297
URL: http://llvm.org/viewvc/llvm-project?rev=180297&view=rev
Log:
Fixing some performance issues in native implementation of VMConstructor, VMField, VMMethod
(cherry picked from commit 56310bce50e865e3100b325b618967872ef09cca)
Modified:
vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc
vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc
vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc
Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc?rev=180297&r1=180296&r2=180297&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc Thu Apr 25 11:50:02 2013
@@ -25,45 +25,27 @@ using namespace j3;
extern "C" {
-bool getClassAndMethodPointerByVMConstructor(JavaObject* vmCons, UserCommonClass** cls, JavaMethod** m)
+bool getClassAndMethodPointerByVMConstructor(JavaObjectVMConstructor* vmCons, UserCommonClass** cls, JavaMethod** m)
__attribute__ ((noinline));
-bool getClassAndMethodPointerByVMConstructor(JavaObject* vmCons, UserCommonClass** cls, JavaMethod** m) {
+bool getClassAndMethodPointerByVMConstructor(JavaObjectVMConstructor* vmCons, UserCommonClass** cls, JavaMethod** m) {
JavaObject* res = 0;
- JavaField* field = 0;
- JavaField* fieldSlot = 0;
- UserCommonClass* cl = 0;
// Local object references
llvm_gcroot(vmCons, 0);
llvm_gcroot(res, 0);
BEGIN_NATIVE_EXCEPTION(0)
- // Store local reference
- cl = JavaObject::getClass(vmCons);
- if (cl->isClass()) {
- const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz");
- const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;");
- const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot");
- const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I");
- if (name && nameSlot && type && typeSlot) {
- field = cl->asClass()->lookupField(name, type, false, true,0);
- fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0);
- res = field->getInstanceObjectField(vmCons);
- int slot = fieldSlot->getInstanceInt32Field(vmCons);
- *cls = JavaObjectClass::getClass((JavaObjectClass*)res);
- *m = &((*cls)->asClass()->virtualMethods[slot]);
- return true;
- }
- }
+ *cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(vmCons);
+ *m = JavaObjectVMConstructor::getInternalMethod(vmCons);
END_NATIVE_EXCEPTION
- return false;
+ return true;
}
JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMConstructor_getParameterTypes(
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* cons) {
+JavaObjectVMConstructor* cons) {
JavaObject* res = 0;
UserCommonClass* cls = 0;
@@ -88,7 +70,7 @@ JNIEXPORT jint JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* cons) {
+JavaObjectVMConstructor* cons) {
jint res = 0;
@@ -184,7 +166,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* cons, ArrayObject* args) {
+JavaObjectVMConstructor* cons, ArrayObject* args) {
JavaObject* res = 0;
JavaMethod* m = 0;
@@ -207,7 +189,7 @@ ArrayObject* JNICALL Java_java_lang_refl
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* cons) {
+JavaObjectVMConstructor* cons) {
ArrayObject* res = 0;
JavaMethod* m = 0;
@@ -233,7 +215,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth) {
+JavaObjectVMConstructor* Meth) {
JavaObject* result = 0;
JavaMethod* m = 0;
Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc?rev=180297&r1=180296&r2=180297&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc Thu Apr 25 11:50:02 2013
@@ -19,45 +19,28 @@ using namespace j3;
extern "C" {
-bool getClassAndFieldPointerByVMField(JavaObject* vmField, UserCommonClass** cls, JavaField** m)
+bool getClassAndFieldPointerByVMField(JavaObjectVMField* vmField, UserCommonClass** cls, JavaField** m)
__attribute__ ((noinline));
-bool getClassAndFieldPointerByVMField(JavaObject* vmField, UserCommonClass** cls, JavaField** m) {
+bool getClassAndFieldPointerByVMField(JavaObjectVMField* vmField, UserCommonClass** cls, JavaField** m) {
JavaObject* res = 0;
- JavaField* field = 0;
- JavaField* fieldSlot = 0;
- UserCommonClass* cl = 0;
// Local object references
llvm_gcroot(vmField, 0);
llvm_gcroot(res, 0);
BEGIN_NATIVE_EXCEPTION(0)
// Store local reference
- cl = JavaObject::getClass(vmField);
- if (cl->isClass()) {
- const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz");
- const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;");
- const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot");
- const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I");
- if (name && nameSlot && type && typeSlot) {
- field = cl->asClass()->lookupField(name, type, false, true,0);
- fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0);
- res = field->getInstanceObjectField(vmField);
- int slot = fieldSlot->getInstanceInt32Field(vmField);
- *cls = JavaObjectClass::getClass((JavaObjectClass*)res);
- *m = &((*cls)->asClass()->virtualFields[slot]);
- return true;
- }
- }
+ *cls = (UserCommonClass*)JavaObjectVMField::getClass(vmField);
+ *m = JavaObjectVMField::getInternalField(vmField);
END_NATIVE_EXCEPTION
- return false;
+ return true;
}
JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal(
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field) {
+JavaObjectVMField* Field) {
jint res = 0;
llvm_gcroot(Field, 0);
@@ -80,7 +63,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field) {
+JavaObjectVMField* Field) {
JavaObject* res = 0;
@@ -108,7 +91,7 @@ JNIEXPORT jint JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jint res = 0;
@@ -178,7 +161,7 @@ JNIEXPORT jlong JNICALL Java_java_lang_r
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jlong res = 0;
@@ -254,7 +237,7 @@ JNIEXPORT jboolean JNICALL Java_java_lan
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jboolean res = 0;
@@ -307,7 +290,7 @@ JNIEXPORT jfloat JNICALL Java_java_lang_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jfloat res = 0;
llvm_gcroot(Field, 0);
@@ -389,7 +372,7 @@ JNIEXPORT jbyte JNICALL Java_java_lang_r
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jbyte res = 0;
llvm_gcroot(Field, 0);
@@ -440,7 +423,7 @@ JNIEXPORT jchar JNICALL Java_java_lang_r
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jchar res = 0;
llvm_gcroot(Field, 0);
@@ -492,7 +475,7 @@ JNIEXPORT jshort JNICALL Java_java_lang_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jshort res = 0;
@@ -550,7 +533,7 @@ JNIEXPORT jdouble JNICALL Java_java_lang
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
jdouble res = 0;
llvm_gcroot(Field, 0);
@@ -637,7 +620,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj) {
+JavaObjectVMField* Field, JavaObject* obj) {
JavaObject* res = 0;
@@ -726,7 +709,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, JavaObject* val) {
+JavaObjectVMField* Field, JavaObject* obj, JavaObject* val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -824,7 +807,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jboolean val) {
+JavaObjectVMField* Field, JavaObject* obj, jboolean val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -873,7 +856,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jbyte val) {
+JavaObjectVMField* Field, JavaObject* obj, jbyte val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -951,7 +934,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jchar val) {
+JavaObjectVMField* Field, JavaObject* obj, jchar val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -1022,7 +1005,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jshort val) {
+JavaObjectVMField* Field, JavaObject* obj, jshort val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -1093,7 +1076,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jint val) {
+JavaObjectVMField* Field, JavaObject* obj, jint val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -1159,7 +1142,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jlong val) {
+JavaObjectVMField* Field, JavaObject* obj, jlong val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -1219,7 +1202,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jfloat val) {
+JavaObjectVMField* Field, JavaObject* obj, jfloat val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
@@ -1273,7 +1256,7 @@ JNIEXPORT void JNICALL Java_java_lang_re
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Field, JavaObject* obj, jdouble val) {
+JavaObjectVMField* Field, JavaObject* obj, jdouble val) {
llvm_gcroot(Field, 0);
llvm_gcroot(obj, 0);
Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc?rev=180297&r1=180296&r2=180297&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Thu Apr 25 11:50:02 2013
@@ -25,47 +25,27 @@ using namespace j3;
extern "C" {
-bool getClassAndMethodPointerFromVMMethod(JavaObject* vmMethod, UserCommonClass** cls, JavaMethod** m)
+bool getClassAndMethodPointerFromVMMethod(JavaObjectVMMethod* vmMethod, UserCommonClass** cls, JavaMethod** m)
__attribute__ ((noinline));
-bool getClassAndMethodPointerFromVMMethod(JavaObject* vmMethod, UserCommonClass** cls, JavaMethod** m) {
+bool getClassAndMethodPointerFromVMMethod(JavaObjectVMMethod* vmMethod, UserCommonClass** cls, JavaMethod** m) {
JavaObject* res = 0;
- JavaField* field = 0;
- JavaField* fieldSlot = 0;
- UserCommonClass* cl = 0;
// Local object references
llvm_gcroot(vmMethod, 0);
llvm_gcroot(res, 0);
BEGIN_NATIVE_EXCEPTION(0)
- // Store local reference
- cl = JavaObject::getClass(vmMethod);
- if (cl->isClass()) {
- const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz");
- const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;");
- const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot");
- const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I");
- if (name && nameSlot && type && typeSlot) {
- field = cl->asClass()->lookupField(name, type, false, true,0);
- fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0);
- res = field->getInstanceObjectField(vmMethod);
- int slot = fieldSlot->getInstanceInt32Field(vmMethod);
- *cls = JavaObjectClass::getClass((JavaObjectClass*)res);
- if (!*cls) return false;
- *m = &((*cls)->asClass()->virtualMethods[slot]);
- if (!*m) return false;
- return true;
- }
- }
+ *cls = (UserCommonClass*)JavaObjectVMMethod::getClass(vmMethod);
+ *m = JavaObjectVMMethod::getInternalMethod(vmMethod);
END_NATIVE_EXCEPTION
- return false;
+ return true;
}
JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal(
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth) {
+JavaObjectVMMethod* Meth) {
jint res = 0;
llvm_gcroot(Meth, 0);
@@ -87,7 +67,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth) {
+JavaObjectVMMethod* Meth) {
JavaObject* res = 0;
llvm_gcroot(Meth, 0);
@@ -115,7 +95,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth) {
+JavaObjectVMMethod* Meth) {
JavaObject* res = 0;
llvm_gcroot(Meth, 0);
@@ -141,11 +121,11 @@ JavaObject* Meth) {
}
-JavaObject* proceedVMMethod(JavaObject* Meth, JavaObject* obj,
+JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj,
ArrayObject* args)
__attribute__((noinline));
-JavaObject* proceedVMMethod(JavaObject* Meth, JavaObject* obj,
+JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj,
ArrayObject* args) {
JavaObject* res = 0;
@@ -292,7 +272,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth, JavaObject* obj, ArrayObject* args) {
+JavaObjectVMMethod* Meth, JavaObject* obj, ArrayObject* args) {
JavaObject* res = 0;
llvm_gcroot(res, 0);
@@ -313,7 +293,7 @@ JNIEXPORT ArrayObject* JNICALL Java_java
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth) {
+JavaObjectVMMethod* Meth) {
ArrayObject* res = 0;
llvm_gcroot(Meth, 0);
@@ -343,7 +323,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
#ifdef NATIVE_JNI
JNIEnv *env,
#endif
-JavaObject* Meth) {
+JavaObjectVMMethod* Meth) {
JavaObject* result = 0;
llvm_gcroot(Meth, 0);
More information about the vmkit-commits
mailing list