[vmkit-commits] [vmkit] r57996 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaJIT.cpp JnjvmModule.cpp JnjvmModule.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Oct 22 13:46:20 PDT 2008


Author: geoffray
Date: Wed Oct 22 15:46:18 2008
New Revision: 57996

URL: http://llvm.org/viewvc/llvm-project?rev=57996&view=rev
Log:
Put enveloppes for interface calls in global variables.


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

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Wed Oct 22 15:46:18 2008
@@ -2026,10 +2026,7 @@
     new(allocator) Enveloppe(compilingClass->ctpInfo, index);
   compilingMethod->caches.push_back(enveloppe);
    
-  Value* llvmEnv = 
-    ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty,
-                              uint64_t (enveloppe)),
-                              module->EnveloppeType);
+  Value* llvmEnv = module->getEnveloppe(enveloppe, this);
 #else
   Value* llvmEnv = getConstantPoolAt(index,
                                      module->EnveloppeLookupFunction,

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Wed Oct 22 15:46:18 2008
@@ -124,6 +124,24 @@
   return new LoadInst(varGV, "", jit->currentBlock);
 }
 
+Value* JnjvmModule::getEnveloppe(Enveloppe* enveloppe, JavaJIT* jit) {
+  llvm::GlobalVariable* varGV;
+  enveloppe_iterator SI = enveloppes.find(enveloppe);
+  if (SI != enveloppes.end()) {
+    varGV = SI->second;
+  } else {
+    void* ptr = enveloppe;
+    Constant* cons = 
+      ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64(ptr)),
+                                JnjvmModule::EnveloppeType);
+    varGV = new GlobalVariable(JnjvmModule::EnveloppeType, true,
+                               GlobalValue::ExternalLinkage,
+                               cons, "", this);
+    enveloppes.insert(std::make_pair(enveloppe, varGV));
+  }
+  return new LoadInst(varGV, "", jit->currentBlock);
+}
+
 Value* JnjvmModule::getJavaClass(CommonClass* cl, JavaJIT* jit) {
   llvm::GlobalVariable* varGV = 0;
   java_class_iterator End = javaClasses.end();

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Wed Oct 22 15:46:18 2008
@@ -185,6 +185,7 @@
   std::map<const Class*, llvm::GlobalVariable*> staticInstances;
   std::map<const JavaConstantPool*, llvm::GlobalVariable*> constantPools;
   std::map<const JavaString*, llvm::GlobalVariable*> strings;
+  std::map<const Enveloppe*, llvm::GlobalVariable*> enveloppes;
 
   typedef std::map<const CommonClass*, llvm::GlobalVariable*>::iterator
     native_class_iterator;  
@@ -204,6 +205,10 @@
   typedef std::map<const JavaString*, llvm::GlobalVariable*>::iterator
     string_iterator;
   
+  typedef std::map<const Enveloppe*, llvm::GlobalVariable*>::iterator
+    enveloppe_iterator;
+  
+  
 
 
   VirtualTable* makeVT(Class* cl, bool stat);
@@ -371,6 +376,7 @@
   llvm::Value* getStaticInstance(Class* cl, JavaJIT* jit);
   llvm::Value* getVirtualTable(CommonClass* cl, JavaJIT* jit);
   
+  llvm::Value* getEnveloppe(Enveloppe* enveloppe, JavaJIT* jit);
   llvm::Value* getString(JavaString* str, JavaJIT* jit);
   llvm::Value* getConstantPool(JavaConstantPool* ctp, JavaJIT* jit);
 





More information about the vmkit-commits mailing list