[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