[vmkit-commits] [vmkit] r61579 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaTypes.cpp JavaTypes.h Jnjvm.cpp JnjvmModule.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Jan 2 06:46:13 PST 2009


Author: geoffray
Date: Fri Jan  2 08:46:13 2009
New Revision: 61579

URL: http://llvm.org/viewvc/llvm-project?rev=61579&view=rev
Log:
Also output native to Java stubs.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp?rev=61579&r1=61578&r2=61579&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Fri Jan  2 08:46:13 2009
@@ -56,12 +56,13 @@
   buf->write(")");
 }
 
-const char* Signdef::printString() const {
+const char* Signdef::printString(const char* ext) const {
   mvm::PrintBuffer *buf= mvm::PrintBuffer::alloc();
   buf->write("Signature<");
   getReturnType()->tPrintBuf(buf);
   buf->write("...");
   humanPrintArgs(buf);
+  buf->write(ext);
   buf->write(">");
   return buf->contents()->cString();
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h?rev=61579&r1=61578&r2=61579&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h Fri Jan  2 08:46:13 2009
@@ -281,9 +281,9 @@
   ///
   const UTF8* keyName;
   
-  /// printString - Print the signature for debugging purposes.
+  /// printString - Print the signature with the following extension.
   ///
-  const char* printString() const;
+  const char* printString(const char* ext = "") const;
 
   /// printWithSign - Print the signature of a method with the method's class
   /// and name.
@@ -353,6 +353,15 @@
 // End of inlined methods of getting dynamically generated functions.
 //
 //===----------------------------------------------------------------------===//
+  
+  /// compileAllStubs - Compile all the native -> Java stubs.
+  ///
+  void compileAllStubs() {
+    getStaticCallBuf();
+    getStaticCallAP();
+    getVirtualCallBuf();
+    getVirtualCallAP();
+  }
 
   
   /// JInfo - Holds info useful for the JIT.

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=61579&r1=61578&r2=61579&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Jan  2 08:46:13 2009
@@ -1100,12 +1100,14 @@
     JavaMethod& meth = cl->virtualMethods[i];
     if (!isAbstract(meth.access))
       cl->classLoader->getModuleProvider()->parseFunction(&meth);
+    meth.getSignature()->compileAllStubs();
   }
   
   for (uint32 i = 0; i < cl->nbStaticMethods; ++i) {
     JavaMethod& meth = cl->staticMethods[i];
     if (!isAbstract(meth.access))
       cl->classLoader->getModuleProvider()->parseFunction(&meth);
+    meth.getSignature()->compileAllStubs();
   }
 }
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61579&r1=61578&r2=61579&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Fri Jan  2 08:46:13 2009
@@ -1512,11 +1512,18 @@
   
   std::vector<Value*> Args;
 
+  JnjvmModule* Mod = signature->initialLoader->getModule();
+  const char* name = 0;
+  if (Mod->isStaticCompiling()) {
+    name = virt ? signature->printString("virtual_buf") :
+                  signature->printString("static_buf");
+  } else {
+    name = "";
+  }
+
   Function* res = Function::Create(virt ? getVirtualBufType() : 
                                           getStaticBufType(),
-                                   GlobalValue::ExternalLinkage,
-                                   signature->printString(),
-                                   signature->initialLoader->TheModule);
+                                   GlobalValue::ExternalLinkage, name, Mod);
   
   BasicBlock* currentBlock = BasicBlock::Create("enter", res);
   Function::arg_iterator i = res->arg_begin();
@@ -1562,12 +1569,19 @@
 Function* LLVMSignatureInfo::createFunctionCallAP(bool virt) {
   
   std::vector<Value*> Args;
+  
+  JnjvmModule* Mod = signature->initialLoader->getModule();
+  const char* name = 0;
+  if (Mod->isStaticCompiling()) {
+    name = virt ? signature->printString("virtual_ap") :
+                  signature->printString("static_ap");
+  } else {
+    name = "";
+  }
 
   Function* res = Function::Create(virt ? getVirtualBufType() :
                                           getStaticBufType(),
-                                   GlobalValue::ExternalLinkage,
-                                   signature->printString(),
-                                   signature->initialLoader->TheModule);
+                                   GlobalValue::ExternalLinkage, name, Mod);
   
   BasicBlock* currentBlock = BasicBlock::Create("enter", res);
   Function::arg_iterator i = res->arg_begin();
@@ -1665,8 +1679,9 @@
     virtualBufFunction = createFunctionCallBuf(true);
     signature->setVirtualCallBuf((intptr_t)
       mvm::MvmModule::executionEngine->getPointerToGlobal(virtualBufFunction));
-    // Now that it's compiled, we don't need the IR anymore
-    virtualBufFunction->deleteBody();
+    if (!signature->initialLoader->getModule()->isStaticCompiling())
+      // Now that it's compiled, we don't need the IR anymore
+      virtualBufFunction->deleteBody();
   }
   return virtualBufFunction;
 }
@@ -1678,8 +1693,9 @@
     virtualAPFunction = createFunctionCallAP(true);
     signature->setVirtualCallAP((intptr_t)
       mvm::MvmModule::executionEngine->getPointerToGlobal(virtualAPFunction));
-    // Now that it's compiled, we don't need the IR anymore
-    virtualAPFunction->deleteBody();
+    if (!signature->initialLoader->getModule()->isStaticCompiling())
+      // Now that it's compiled, we don't need the IR anymore
+      virtualAPFunction->deleteBody();
   }
   return virtualAPFunction;
 }
@@ -1691,8 +1707,9 @@
     staticBufFunction = createFunctionCallBuf(false);
     signature->setStaticCallBuf((intptr_t)
       mvm::MvmModule::executionEngine->getPointerToGlobal(staticBufFunction));
-    // Now that it's compiled, we don't need the IR anymore
-    staticBufFunction->deleteBody();
+    if (!signature->initialLoader->getModule()->isStaticCompiling())
+      // Now that it's compiled, we don't need the IR anymore
+      staticBufFunction->deleteBody();
   }
   return staticBufFunction;
 }
@@ -1704,8 +1721,9 @@
     staticAPFunction = createFunctionCallAP(false);
     signature->setStaticCallAP((intptr_t)
       mvm::MvmModule::executionEngine->getPointerToGlobal(staticAPFunction));
-    // Now that it's compiled, we don't need the IR anymore
-    staticAPFunction->deleteBody();
+    if (!signature->initialLoader->getModule()->isStaticCompiling())
+      // Now that it's compiled, we don't need the IR anymore
+      staticAPFunction->deleteBody();
   }
   return staticAPFunction;
 }





More information about the vmkit-commits mailing list