[vmkit-commits] [vmkit] r71558 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClassLoader.cpp VMCore/JavaArray.cpp VMCore/JavaArray.h VMCore/JnjvmClassLoader.cpp VMCore/JnjvmClassLoader.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue May 12 08:55:29 PDT 2009
Author: geoffray
Date: Tue May 12 10:55:14 2009
New Revision: 71558
URL: http://llvm.org/viewvc/llvm-project?rev=71558&view=rev
Log:
Continue avoiding the creation of UTF8s.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp?rev=71558&r1=71557&r2=71558&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp Tue May 12 10:55:14 2009
@@ -62,11 +62,9 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaString* name = (JavaString*)_name;
- const UTF8* utf8 = name->strToUTF8(vm);
- const UTF8* internalName = utf8->javaToInternal(vm, 0, utf8->size);
JnjvmClassLoader* JCL =
JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm);
- UserCommonClass* cl = JCL->lookupClass(internalName);
+ UserCommonClass* cl = JCL->lookupClassFromJavaString(name);
if (cl) res = (jclass)(cl->getClassDelegatee(vm));
@@ -132,7 +130,8 @@
JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm);
JavaString* str = (JavaString*)_str;
- const UTF8* name = str->value->javaToInternal(vm, str->offset, str->count);
+ const UTF8* name = str->value->javaToInternal(JCL->hashUTF8, str->offset,
+ str->count);
UserCommonClass* cl = JCL->lookupClass(name);
if (!cl) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp?rev=71558&r1=71557&r2=71558&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp Tue May 12 10:55:14 2009
@@ -44,17 +44,17 @@
return printUTF8(buf);
}
-const UTF8* UTF8::javaToInternal(Jnjvm* vm, unsigned int start,
+const UTF8* UTF8::javaToInternal(UTF8Map* map, unsigned int start,
unsigned int len) const {
- UTF8* array = (UTF8*)vm->upcalls->ArrayOfChar->doNew(len, vm);
- uint16* java = array->elements;
- for (uint32 i = 0; i < len; i++) {
+ uint16* java = (uint16*)alloca(sizeof(uint16) * len);
+
+ for (uint32 i = 0; i < len; ++i) {
uint16 cur = elements[start + i];
if (cur == '.') java[i] = '/';
else java[i] = cur;
}
-
- return (const UTF8*)array;
+
+ return map->lookupOrCreateReader(java, len);
}
// We also define a checked java to internal function to disallow
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h?rev=71558&r1=71557&r2=71558&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Tue May 12 10:55:14 2009
@@ -132,7 +132,7 @@
unsigned int len) const;
/// javaToInternal - Replaces all '/' into '.'.
- const UTF8* javaToInternal(Jnjvm* vm, unsigned int start,
+ const UTF8* javaToInternal(UTF8Map* map, unsigned int start,
unsigned int len) const;
/// checkedJavaToInternal - Replaces all '/' into '.'. Returns null if the
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=71558&r1=71557&r2=71558&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue May 12 10:55:14 2009
@@ -507,16 +507,43 @@
JnjvmClassLoader::loadClassFromJavaString(JavaString* str, bool doResolve,
bool doThrow) {
- const UTF8* name = 0;
-
- if (str->value->elements[str->offset] != I_TAB)
- name = str->value->checkedJavaToInternal(isolate, str->offset, str->count);
- else
- name = str->value->javaToInternal(isolate, str->offset, str->count);
-
- if (name)
+ UTF8* name = (UTF8*)alloca(sizeof(UTF8) + str->count * sizeof(uint16));
+
+ if (name) {
+ name->size = str->count;
+ if (str->value->elements[str->offset] != I_TAB) {
+ for (sint32 i = 0; i < str->count; ++i) {
+ uint16 cur = str->value->elements[str->offset + i];
+ if (cur == '.') name->elements[i] = '/';
+ else if (cur == '/') return 0;
+ else name->elements[i] = cur;
+ }
+ } else {
+ for (sint32 i = 0; i < str->count; ++i) {
+ uint16 cur = str->value->elements[str->offset + i];
+ if (cur == '.') name->elements[i] = '/';
+ else name->elements[i] = cur;
+ }
+ }
+
return loadClassFromUserUTF8(name, doResolve, doThrow);
+ }
+
+ return 0;
+}
+UserCommonClass* JnjvmClassLoader::lookupClassFromJavaString(JavaString* str) {
+
+ UTF8* name = (UTF8*)alloca(sizeof(UTF8) + str->count * sizeof(uint16));
+ if (name) {
+ name->size = str->count;
+ for (sint32 i = 0; i < str->count; ++i) {
+ uint16 cur = str->value->elements[str->offset + i];
+ if (cur == '.') name->elements[i] = '/';
+ else name->elements[i] = cur;
+ }
+ return lookupClass(name);
+ }
return 0;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=71558&r1=71557&r2=71558&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue May 12 10:55:14 2009
@@ -161,6 +161,13 @@
///
UserCommonClass* loadClassFromJavaString(JavaString* str,
bool doResolve, bool doThrow);
+
+ /// lookupClassFromJavaString - Finds the class of the given string name in
+ /// the class loader's table. Do not inline this function, because it
+ /// does an alloca and is called by Classpath functions.
+ ///
+ UserCommonClass* lookupClassFromJavaString(JavaString* str)
+ __attribute__ ((noinline));
/// lookupClass - Finds the class of the given name in the class loader's
/// table.
More information about the vmkit-commits
mailing list