[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