[vmkit-commits] [vmkit] r76584 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJIT.cpp lib/JnJVM/Compiler/JavaJITCompiler.cpp lib/JnJVM/VMCore/JavaRuntimeJIT.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/JnJVM/VMCore/JnjvmClassLoader.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 21 10:16:14 PDT 2009
Author: geoffray
Date: Tue Jul 21 12:15:51 2009
New Revision: 76584
URL: http://llvm.org/viewvc/llvm-project?rev=76584&view=rev
Log:
Don't output strings directly in the native code, but use an indirection.
Modified:
vmkit/trunk/include/jnjvm/JnjvmModule.h
vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Tue Jul 21 12:15:51 2009
@@ -426,6 +426,7 @@
virtual llvm::Constant* getEnveloppe(Enveloppe* enveloppe) = 0;
virtual llvm::Constant* getString(JavaString* str) = 0;
+ virtual llvm::Constant* getStringPtr(JavaString** str) = 0;
virtual llvm::Constant* getConstantPool(JavaConstantPool* ctp) = 0;
virtual llvm::Constant* getNativeFunction(JavaMethod* meth, void* natPtr) = 0;
@@ -498,6 +499,7 @@
virtual llvm::Constant* getEnveloppe(Enveloppe* enveloppe);
virtual llvm::Constant* getString(JavaString* str);
+ virtual llvm::Constant* getStringPtr(JavaString** str);
virtual llvm::Constant* getConstantPool(JavaConstantPool* ctp);
virtual llvm::Constant* getNativeFunction(JavaMethod* meth, void* natPtr);
@@ -553,6 +555,7 @@
virtual llvm::Constant* getEnveloppe(Enveloppe* enveloppe);
virtual llvm::Constant* getString(JavaString* str);
+ virtual llvm::Constant* getStringPtr(JavaString** str);
virtual llvm::Constant* getConstantPool(JavaConstantPool* ctp);
virtual llvm::Constant* getNativeFunction(JavaMethod* meth, void* natPtr);
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Tue Jul 21 12:15:51 2009
@@ -168,6 +168,11 @@
}
}
+Constant* JavaAOTCompiler::getStringPtr(JavaString** str) {
+ fprintf(stderr, "Implement me");
+ abort();
+}
+
Constant* JavaAOTCompiler::getEnveloppe(Enveloppe* enveloppe) {
enveloppe_iterator SI = enveloppes.find(enveloppe);
if (SI != enveloppes.end()) {
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Tue Jul 21 12:15:51 2009
@@ -1101,20 +1101,23 @@
abort();
#else
- JavaString* str = (JavaString*)ctpInfo->ctpRes[index];
- if (str) {
+ if (TheCompiler->isStaticCompiling()) {
+ const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]);
+ JavaString* str = *(compilingClass->classLoader->UTF8ToStr(utf8));
Value* val = TheCompiler->getString(str);
push(val, false);
} else {
- if (TheCompiler->isStaticCompiling()) {
- const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]);
- JavaString* str = compilingClass->classLoader->UTF8ToStr(utf8);
- Value* val = TheCompiler->getString(str);
+ JavaString** str = (JavaString**)ctpInfo->ctpRes[index];
+ if (str) {
+ Value* val = TheCompiler->getStringPtr(str);
+ val = new LoadInst(val, "", currentBlock);
push(val, false);
} else {
// Lookup the constant pool cache
+ const llvm::Type* Ty = PointerType::getUnqual(module->JavaObjectType);
Value* val = getConstantPoolAt(index, module->StringLookupFunction,
- module->JavaObjectType, 0, false);
+ Ty, 0, false);
+ val = new LoadInst(val, "", currentBlock);
push(val, false);
}
}
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp Tue Jul 21 12:15:51 2009
@@ -58,6 +58,14 @@
return ConstantExpr::getIntToPtr(CI, JnjvmModule::JavaObjectType);
}
+Constant* JavaJITCompiler::getStringPtr(JavaString** str) {
+ assert(str && "No string given");
+ LLVMContext& Context = getLLVMModule()->getContext();
+ const llvm::Type* Ty = PointerType::getUnqual(JnjvmModule::JavaObjectType);
+ ConstantInt* CI = Context.getConstantInt(Type::Int64Ty, uint64(str));
+ return ConstantExpr::getIntToPtr(CI, Ty);
+}
+
Constant* JavaJITCompiler::getEnveloppe(Enveloppe* enveloppe) {
assert(enveloppe && "No enveloppe given");
LLVMContext& Context = getLLVMModule()->getContext();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Jul 21 12:15:51 2009
@@ -635,7 +635,7 @@
extern "C" void* jnjvmStringLookup(UserClass* cl, uint32 index) {
UserConstantPool* ctpInfo = cl->getConstantPool();
const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]);
- JavaString* str = cl->classLoader->UTF8ToStr(utf8);
+ JavaString** str = cl->classLoader->UTF8ToStr(utf8);
#if defined(ISOLATE_SHARING) || !defined(ISOLATE)
ctpInfo->ctpRes[index] = str;
#endif
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue Jul 21 12:15:51 2009
@@ -933,17 +933,15 @@
JnjvmBootstrapLoader::~JnjvmBootstrapLoader() {
}
-JavaString* JnjvmClassLoader::UTF8ToStr(const UTF8* val) {
+JavaString** JnjvmClassLoader::UTF8ToStr(const UTF8* val) {
JavaString* res = isolate->internalUTF8ToStr(val);
- strings->addString(this, res);
- return res;
+ return strings->addString(this, res);
}
-JavaString* JnjvmBootstrapLoader::UTF8ToStr(const UTF8* val) {
+JavaString** JnjvmBootstrapLoader::UTF8ToStr(const UTF8* val) {
Jnjvm* vm = JavaThread::get()->getJVM();
JavaString* res = vm->internalUTF8ToStr(val);
- strings->addString(this, res);
- return res;
+ return strings->addString(this, res);
}
void JnjvmBootstrapLoader::analyseClasspathEnv(const char* str) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=76584&r1=76583&r2=76584&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue Jul 21 12:15:51 2009
@@ -237,7 +237,7 @@
/// UTF8ToStr - Constructs a Java string out of the UTF8.
///
- virtual JavaString* UTF8ToStr(const UTF8* utf8);
+ virtual JavaString** UTF8ToStr(const UTF8* utf8);
/// Strings hashed by this classloader.
///
@@ -337,7 +337,7 @@
JnjvmBootstrapLoader(mvm::BumpPtrAllocator& Alloc, JavaCompiler* Comp,
bool dlLoad = true);
- virtual JavaString* UTF8ToStr(const UTF8* utf8);
+ virtual JavaString** UTF8ToStr(const UTF8* utf8);
/// nativeHandle - Non-null handle if boot classes were static compiled in
/// a dynamic library
More information about the vmkit-commits
mailing list