[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