[llvm-commits] [vmkit] r51252 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaArray.h JavaJIT.cpp JavaJITOpcodes.cpp JavaTypes.cpp JavaTypes.h JnjvmModule.cpp JnjvmModule.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon May 19 08:16:18 PDT 2008
Author: geoffray
Date: Mon May 19 10:16:18 2008
New Revision: 51252
URL: http://llvm.org/viewvc/llvm-project?rev=51252&view=rev
Log:
Make AssessorDesc objects not depend on LLVM. The LLVM meta
info are now all placed in JnjvmModule.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Mon May 19 10:16:18 2008
@@ -54,8 +54,6 @@
};
-typedef JavaArray* (*arrayCtor_t)(uint32 len, CommonClass* cl, Jnjvm* vm);
-
#define ARRAYCLASS(name, elmt) \
class name : public JavaArray { \
public: \
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon May 19 10:16:18 2008
@@ -82,12 +82,13 @@
}
void JavaJIT::push(llvm::Value* val, const AssessorDesc* ass) {
- assert(ass->llvmType == val->getType());
+ assert(LLVMAssessorInfo::AssessorInfo[ass->numId].llvmType == val->getType());
stack.push_back(std::make_pair(val, ass));
}
void JavaJIT::push(std::pair<llvm::Value*, const AssessorDesc*> pair) {
- assert(pair.second->llvmType == pair.first->getType());
+ assert(LLVMAssessorInfo::AssessorInfo[pair.second->numId].llvmType ==
+ pair.first->getType());
stack.push_back(pair);
}
@@ -263,7 +264,9 @@
llvm::BranchInst::Create(executeBlock, endBlock, test, currentBlock);
if (compilingMethod->signature->ret->funcs != AssessorDesc::dVoid) {
- Constant* C = compilingMethod->signature->ret->funcs->llvmNullConstant;
+ uint8 id = compilingMethod->signature->ret->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ Constant* C = LAI.llvmNullConstant;
endNode->addIncoming(C, currentBlock);
}
@@ -1711,11 +1714,13 @@
const AssessorDesc* ass = topFunc();
Value* val = pop();
Typedef* sign = compilingClass->ctpInfo->infoOfField(index);
- const Type* type = sign->funcs->llvmType;
+ uint8 id = sign->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ const Type* type = LAI.llvmType;
if (type == Type::Int64Ty || type == Type::DoubleTy) {
val = pop();
}
- Value* ptr = ldResolved(index, true, 0, type, sign->funcs->llvmTypePtr);
+ Value* ptr = ldResolved(index, true, 0, type, LAI.llvmTypePtr);
if (type != val->getType()) { // int1, int8, int16
convertValue(val, type, currentBlock,
@@ -1727,10 +1732,12 @@
void JavaJIT::getStaticField(uint16 index) {
Typedef* sign = compilingClass->ctpInfo->infoOfField(index);
- Value* ptr = ldResolved(index, true, 0, sign->funcs->llvmType,
- sign->funcs->llvmTypePtr);
+ uint8 id = sign->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ Value* ptr = ldResolved(index, true, 0, LAI.llvmType,
+ LAI.llvmTypePtr);
push(new LoadInst(ptr, "", currentBlock), sign->funcs);
- const Type* type = sign->funcs->llvmType;
+ const Type* type = LAI.llvmType;
if (type == Type::Int64Ty || type == Type::DoubleTy) {
push(mvm::jit::constantZero, AssessorDesc::dInt);
}
@@ -1740,7 +1747,9 @@
const AssessorDesc* ass = topFunc();
Value* val = pop();
Typedef* sign = compilingClass->ctpInfo->infoOfField(index);
- const Type* type = sign->funcs->llvmType;
+ uint8 id = sign->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ const Type* type = LAI.llvmType;
if (type == Type::Int64Ty || type == Type::DoubleTy) {
val = pop();
@@ -1749,7 +1758,7 @@
Value* object = pop();
JITVerifyNull(object);
Value* ptr = ldResolved(index, false, object, type,
- sign->funcs->llvmTypePtr);
+ LAI.llvmTypePtr);
if (type != val->getType()) { // int1, int8, int16
convertValue(val, type, currentBlock,
@@ -1763,10 +1772,12 @@
Typedef* sign = compilingClass->ctpInfo->infoOfField(index);
Value* obj = pop();
JITVerifyNull(obj);
- Value* ptr = ldResolved(index, false, obj, sign->funcs->llvmType,
- sign->funcs->llvmTypePtr);
+ uint8 id = sign->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ Value* ptr = ldResolved(index, false, obj, LAI.llvmType,
+ LAI.llvmTypePtr);
push(new LoadInst(ptr, "", currentBlock), sign->funcs);
- const Type* type = sign->funcs->llvmType;
+ const Type* type = LAI.llvmType;
if (type == Type::Int64Ty || type == Type::DoubleTy) {
push(mvm::jit::constantZero, AssessorDesc::dInt);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp Mon May 19 10:16:18 2008
@@ -1457,7 +1457,11 @@
uint32 tmp = i;
BasicBlock* ifTrue = opcodeInfos[tmp + readS2(bytecodes, i)].newBlock;
const AssessorDesc* ass = topFunc();
- llvm::Value* val = ass->llvmNullConstant;
+
+ uint8 id = ass->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvm::Value* val = LAI.llvmNullConstant;
+
Value* op = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_EQ, op, val, "",
currentBlock);
@@ -1471,7 +1475,11 @@
uint32 tmp = i;
BasicBlock* ifTrue = opcodeInfos[tmp + readS2(bytecodes, i)].newBlock;
const AssessorDesc* ass = topFunc();
- llvm::Value* val = ass->llvmNullConstant;
+
+ uint8 id = ass->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvm::Value* val = LAI.llvmNullConstant;
+
Value* op = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_NE, op, val, "",
currentBlock);
@@ -1485,7 +1493,9 @@
uint32 tmp = i;
BasicBlock* ifTrue = opcodeInfos[tmp + readS2(bytecodes, i)].newBlock;
const AssessorDesc* ass = topFunc();
- llvm::Value* val = ass->llvmNullConstant;
+ uint8 id = ass->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvm::Value* val = LAI.llvmNullConstant;
Value* op = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_SLT, op, val, "",
currentBlock);
@@ -1499,7 +1509,9 @@
uint32 tmp = i;
BasicBlock* ifTrue = opcodeInfos[tmp + readS2(bytecodes, i)].newBlock;
const AssessorDesc* ass = topFunc();
- llvm::Value* val = ass->llvmNullConstant;
+ uint8 id = ass->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvm::Value* val = LAI.llvmNullConstant;
Value* op = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_SGE, op, val, "",
currentBlock);
@@ -1513,7 +1525,9 @@
uint32 tmp = i;
BasicBlock* ifTrue = opcodeInfos[tmp + readS2(bytecodes, i)].newBlock;
const AssessorDesc* ass = topFunc();
- llvm::Value* val = ass->llvmNullConstant;
+ uint8 id = ass->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvm::Value* val = LAI.llvmNullConstant;
Value* op = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_SGT, op, val, "",
currentBlock);
@@ -1527,7 +1541,9 @@
uint32 tmp = i;
BasicBlock* ifTrue = opcodeInfos[tmp + readS2(bytecodes, i)].newBlock;
const AssessorDesc* ass = topFunc();
- llvm::Value* val = ass->llvmNullConstant;
+ uint8 id = ass->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvm::Value* val = LAI.llvmNullConstant;
Value* op = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_SLE, op, val, "",
currentBlock);
@@ -1837,7 +1853,8 @@
AssessorDesc* ass = AssessorDesc::arrayType(id);
dcl = ass->arrayClass;
TheVT = JnjvmModule::JavaObjectVirtualTableGV;
- sizeElement = ass->sizeInBytesConstant;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[ass->numId];
+ sizeElement = LAI.sizeInBytesConstant;
} else {
uint16 index = readU2(bytecodes, i);
const UTF8* className =
@@ -2101,7 +2118,8 @@
case IFNULL : {
uint32 tmp = i;
const AssessorDesc* ass = topFunc();
- llvm::Value* nil = ass->llvmNullConstant;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[ass->numId];
+ llvm::Value* nil = LAI.llvmNullConstant;
llvm::Value* val = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_EQ, val, nil, "",
currentBlock);
@@ -2115,7 +2133,8 @@
case IFNONNULL : {
uint32 tmp = i;
const AssessorDesc* ass = topFunc();
- llvm::Value* nil = ass->llvmNullConstant;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[ass->numId];
+ llvm::Value* nil = LAI.llvmNullConstant;
llvm::Value* val = pop();
llvm::Value* test = new ICmpInst(ICmpInst::ICMP_NE, val, nil, "",
currentBlock);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.cpp Mon May 19 10:16:18 2008
@@ -9,10 +9,6 @@
#include <vector>
-#include "llvm/Constant.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Type.h"
-
#include "mvm/JIT.h"
#include "JavaAccess.h"
@@ -60,23 +56,19 @@
AssessorDesc* AssessorDesc::allocate(bool dt, char bid, uint32 nb, uint32 nw,
const char* name, const char* className,
- Jnjvm* vm, const llvm::Type* t,
+ Jnjvm* vm, uint8 nid,
const char* assocName, ClassArray* cl,
- llvm::ConstantInt* CI, arrayCtor_t ctor) {
+ arrayCtor_t ctor) {
AssessorDesc* res = vm_new(vm, AssessorDesc)();
+ res->numId = nid;
res->doTrace = dt;
res->byteId = bid;
res->nbb = nb;
res->nbw = nw;
res->asciizName = name;
res->UTF8Name = vm->asciizConstructUTF8(name);
- res->llvmType = t;
- res->sizeInBytesConstant = CI;
res->arrayCtor = ctor;
- if (t && t != llvm::Type::VoidTy) {
- res->llvmTypePtr = llvm::PointerType::getUnqual(t);
- res->llvmNullConstant = llvm::Constant::getNullValue(t);
- }
+
res->arrayClass = cl;
if (assocName)
res->assocClassName = vm->asciizConstructUTF8(assocName);
@@ -96,56 +88,54 @@
void AssessorDesc::initialise(Jnjvm* vm) {
- dParg = AssessorDesc::allocate(false, I_PARG, 0, 0, "(", "(", vm, 0, 0, 0,
- 0, 0);
- dPard = AssessorDesc::allocate(false, I_PARD, 0, 0, ")", ")", vm, 0, 0, 0,
- 0, 0);
+ dParg = AssessorDesc::allocate(false, I_PARG, 0, 0, "(", "(", vm, -1, 0, 0,
+ 0);
+ dPard = AssessorDesc::allocate(false, I_PARD, 0, 0, ")", ")", vm, -1, 0, 0,
+ 0);
dVoid = AssessorDesc::allocate(false, I_VOID, 0, 0, "void", "*** void ***",
- vm, llvm::Type::VoidTy, "java/lang/Void",
- 0, 0, 0);
+ vm, VOID_ID, "java/lang/Void", 0, 0);
dBool = AssessorDesc::allocate(false, I_BOOL, 1, 1, "boolean",
"*** boolean ***", vm,
- llvm::Type::Int8Ty, "java/lang/Boolean",
- JavaArray::ofBool, mvm::jit::constantOne,
+ BOOL_ID, "java/lang/Boolean",
+ JavaArray::ofBool,
(arrayCtor_t)ArrayUInt8::acons);
dByte = AssessorDesc::allocate(false, I_BYTE, 1, 1, "byte", "*** byte ***",
- vm, llvm::Type::Int8Ty, "java/lang/Byte",
- JavaArray::ofByte, mvm::jit::constantOne,
+ vm, BYTE_ID, "java/lang/Byte",
+ JavaArray::ofByte,
(arrayCtor_t)ArraySInt8::acons);
dChar = AssessorDesc::allocate(false, I_CHAR, 2, 1, "char", "*** char ***",
- vm, llvm::Type::Int16Ty, "java/lang/Character",
- JavaArray::ofChar, mvm::jit::constantTwo,
+ vm, CHAR_ID, "java/lang/Character",
+ JavaArray::ofChar,
(arrayCtor_t)ArrayUInt16::acons);
dShort = AssessorDesc::allocate(false, I_SHORT, 2, 1, "short",
- "*** short ***", vm, llvm::Type::Int16Ty,
+ "*** short ***", vm, SHORT_ID,
"java/lang/Short",
- JavaArray::ofShort, mvm::jit::constantTwo,
+ JavaArray::ofShort,
(arrayCtor_t)ArraySInt16::acons);
dInt = AssessorDesc::allocate(false, I_INT, 4, 1, "int", "*** int ***", vm,
- llvm::Type::Int32Ty, "java/lang/Integer",
- JavaArray::ofInt, mvm::jit::constantFour,
+ INT_ID, "java/lang/Integer",
+ JavaArray::ofInt,
(arrayCtor_t)ArraySInt32::acons);
dFloat = AssessorDesc::allocate(false, I_FLOAT, 4, 1, "float",
"*** float ***", vm,
- llvm::Type::FloatTy, "java/lang/Float",
- JavaArray::ofFloat, mvm::jit::constantFour,
+ FLOAT_ID, "java/lang/Float",
+ JavaArray::ofFloat,
(arrayCtor_t)ArrayFloat::acons);
dLong = AssessorDesc::allocate(false, I_LONG, 8, 2, "long", "*** long ***",
- vm, llvm::Type::Int64Ty, "java/lang/Long",
- JavaArray::ofLong, mvm::jit::constantEight,
+ vm, LONG_ID, "java/lang/Long",
+ JavaArray::ofLong,
(arrayCtor_t)ArrayLong::acons);
dDouble = AssessorDesc::allocate(false, I_DOUBLE, 8, 2, "double",
"*** double ***", vm,
- llvm::Type::DoubleTy, "java/lang/Double",
- JavaArray::ofDouble, mvm::jit::constantEight,
+ DOUBLE_ID, "java/lang/Double",
+ JavaArray::ofDouble,
(arrayCtor_t)ArrayDouble::acons);
dTab = AssessorDesc::allocate(true, I_TAB, sizeof(void*), 1, "array", "array",
- vm, JnjvmModule::JavaObjectType, 0, 0,
- mvm::jit::constantPtrSize,
+ vm, ARRAY_ID, 0, 0,
(arrayCtor_t)ArrayObject::acons);
dRef = AssessorDesc::allocate(true, I_REF, sizeof(void*), 1, "reference",
- "reference", vm, JnjvmModule::JavaObjectType,
- 0, 0, mvm::jit::constantPtrSize,
+ "reference", vm, OBJECT_ID,
+ 0, 0,
(arrayCtor_t)ArrayObject::acons);
mvm::Object::pushRoot((mvm::Object*)dParg);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaTypes.h Mon May 19 10:16:18 2008
@@ -10,24 +10,39 @@
#ifndef JNJVM_JAVA_TYPES_H
#define JNJVM_JAVA_TYPES_H
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Type.h"
-
#include "mvm/Object.h"
#include "types.h"
-#include "JavaArray.h"
+namespace mvm {
+ class Code;
+}
namespace jnjvm {
+class ClassArray;
class CommonClass;
+class JavaArray;
class JavaJIT;
class JavaObject;
class Jnjvm;
class UTF8;
+#define VOID_ID 0
+#define BOOL_ID 1
+#define BYTE_ID 2
+#define CHAR_ID 3
+#define SHORT_ID 4
+#define INT_ID 5
+#define FLOAT_ID 6
+#define LONG_ID 7
+#define DOUBLE_ID 8
+#define ARRAY_ID 9
+#define OBJECT_ID 10
+#define NUM_ASSESSORS 11
+
+typedef JavaArray* (*arrayCtor_t)(uint32 len, CommonClass* cl, Jnjvm* vm);
+
class AssessorDesc : public mvm::Object {
public:
static VirtualTable *VT;
@@ -51,13 +66,10 @@
char byteId;
uint32 nbb;
uint32 nbw;
+ uint8 numId;
const char* asciizName;
CommonClass* classType;
- const llvm::Type* llvmType;
- const llvm::Type* llvmTypePtr;
- llvm::Constant* llvmNullConstant;
- llvm::ConstantInt* sizeInBytesConstant;
const UTF8* assocClassName;
const UTF8* UTF8Name;
ClassArray* arrayClass;
@@ -79,9 +91,9 @@
static AssessorDesc* allocate(bool dt, char bid, uint32 nb, uint32 nw,
const char* name, const char* className,
- Jnjvm* vm, const llvm::Type* type,
+ Jnjvm* vm, uint8 nid,
const char* assocName, ClassArray* cl,
- llvm::ConstantInt* CI, arrayCtor_t ctor);
+ arrayCtor_t ctor);
static void initialise(Jnjvm* vm);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon May 19 10:16:18 2008
@@ -323,7 +323,9 @@
uint32 index = 0;
for (std::vector<JavaField*>::iterator i = classDef->virtualFields.begin(),
e = classDef->virtualFields.end(); i!= e; ++i) {
- fields.push_back((*i)->signature->funcs->llvmType);
+ uint8 id = (*i)->signature->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ fields.push_back(LAI.llvmType);
(*i)->num = index++;
}
@@ -359,7 +361,9 @@
uint32 index = 0;
for (std::vector<JavaField*>::iterator i = classDef->staticFields.begin(),
e = classDef->staticFields.end(); i!= e; ++i) {
- fields.push_back((*i)->signature->funcs->llvmType);
+ uint8 id = (*i)->signature->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ fields.push_back(LAI.llvmType);
(*i)->num = index++;
}
@@ -518,15 +522,18 @@
llvmArgs.push_back(JnjvmModule::JavaObjectType);
for (uint32 i = 0; i < size; ++i) {
- llvmArgs.push_back(signature->args.at(i)->funcs->llvmType);
+ uint8 id = signature->args.at(i)->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvmArgs.push_back(LAI.llvmType);
}
#if defined(MULTIPLE_VM) || defined(MULTIPLE_GC)
llvmArgs.push_back(mvm::jit::ptrType); // domain
#endif
- virtualType = FunctionType::get(signature->ret->funcs->llvmType,
- llvmArgs, false);
+ uint8 id = signature->ret->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ virtualType = FunctionType::get(LAI.llvmType, llvmArgs, false);
}
return virtualType;
}
@@ -539,15 +546,18 @@
unsigned int size = signature->args.size();
for (uint32 i = 0; i < size; ++i) {
- llvmArgs.push_back(signature->args.at(i)->funcs->llvmType);
+ uint8 id = signature->args.at(i)->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvmArgs.push_back(LAI.llvmType);
}
#if defined(MULTIPLE_VM) || defined(MULTIPLE_GC)
llvmArgs.push_back(mvm::jit::ptrType); // domain
#endif
- staticType = FunctionType::get(signature->ret->funcs->llvmType,
- llvmArgs, false);
+ uint8 id = signature->ret->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ staticType = FunctionType::get(LAI.llvmType, llvmArgs, false);
}
return staticType;
}
@@ -563,15 +573,18 @@
llvmArgs.push_back(JnjvmModule::JavaObjectType); // Class
for (uint32 i = 0; i < size; ++i) {
- llvmArgs.push_back(signature->args.at(i)->funcs->llvmType);
+ uint8 id = signature->args.at(i)->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ llvmArgs.push_back(LAI.llvmType);
}
#if defined(MULTIPLE_VM) || defined(MULTIPLE_GC)
llvmArgs.push_back(mvm::jit::ptrType); // domain
#endif
- nativeType = FunctionType::get(signature->ret->funcs->llvmType,
- llvmArgs, false);
+ uint8 id = signature->ret->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ nativeType = FunctionType::get(LAI.llvmType, llvmArgs, false);
}
return nativeType;
}
@@ -609,7 +622,8 @@
const AssessorDesc* funcs = (*i)->funcs;
ptr = GetElementPtrInst::Create(ptr, CI, "", currentBlock);
- Value* val = new BitCastInst(ptr, funcs->llvmTypePtr, "", currentBlock);
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[funcs->numId];
+ Value* val = new BitCastInst(ptr, LAI.llvmTypePtr, "", currentBlock);
Value* arg = new LoadInst(val, "", currentBlock);
Args.push_back(arg);
if (funcs == AssessorDesc::dLong || funcs == AssessorDesc::dDouble) {
@@ -661,7 +675,8 @@
for (std::vector<Typedef*>::iterator i = signature->args.begin(),
e = signature->args.end(); i!= e; i++) {
- Args.push_back(new VAArgInst(ap, (*i)->funcs->llvmType, "", currentBlock));
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[(*i)->funcs->numId];
+ Args.push_back(new VAArgInst(ap, LAI.llvmType, "", currentBlock));
}
#if defined(MULTIPLE_VM) || defined(MULTIPLE_GC)
@@ -708,8 +723,9 @@
Args2.push_back(getVirtualPtrType());
Args2.push_back(JnjvmModule::JavaObjectType);
Args2.push_back(PointerType::getUnqual(Type::Int32Ty));
- virtualBufType = FunctionType::get(signature->ret->funcs->llvmType,
- Args2, false);
+ uint8 id = signature->ret->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ virtualBufType = FunctionType::get(LAI.llvmType, Args2, false);
}
return virtualBufType;
}
@@ -722,8 +738,9 @@
Args.push_back(mvm::jit::ptrType); // vm
Args.push_back(getStaticPtrType());
Args.push_back(PointerType::getUnqual(Type::Int32Ty));
- staticBufType = FunctionType::get(signature->ret->funcs->llvmType,
- Args, false);
+ uint8 id = signature->ret->funcs->numId;
+ LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[id];
+ staticBufType = FunctionType::get(LAI.llvmType, Args, false);
}
return staticBufType;
}
@@ -1016,6 +1033,7 @@
JavaObjectLockOffsetConstant = mvm::jit::constantTwo;
JavaObjectClassOffsetConstant = mvm::jit::constantOne;
+ LLVMAssessorInfo::initialise();
}
void JnjvmModule::InitField(JavaField* field, JavaObject* obj, uint64 val) {
@@ -1066,4 +1084,73 @@
mvm::jit::executionEngine->getTargetData()->getStringRepresentation();
setDataLayout(str);
}
+void LLVMAssessorInfo::initialise() {
+ AssessorInfo[VOID_ID].llvmType = Type::VoidTy;
+ AssessorInfo[VOID_ID].llvmTypePtr = 0;
+ AssessorInfo[VOID_ID].llvmNullConstant = 0;
+ AssessorInfo[VOID_ID].sizeInBytesConstant = 0;
+
+ AssessorInfo[BOOL_ID].llvmType = Type::Int8Ty;
+ AssessorInfo[BOOL_ID].llvmTypePtr = PointerType::getUnqual(Type::Int8Ty);
+ AssessorInfo[BOOL_ID].llvmNullConstant =
+ Constant::getNullValue(Type::Int8Ty);
+ AssessorInfo[BOOL_ID].sizeInBytesConstant = mvm::jit::constantOne;
+
+ AssessorInfo[BYTE_ID].llvmType = Type::Int8Ty;
+ AssessorInfo[BYTE_ID].llvmTypePtr = PointerType::getUnqual(Type::Int8Ty);
+ AssessorInfo[BYTE_ID].llvmNullConstant =
+ Constant::getNullValue(Type::Int8Ty);
+ AssessorInfo[BYTE_ID].sizeInBytesConstant = mvm::jit::constantOne;
+
+ AssessorInfo[SHORT_ID].llvmType = Type::Int16Ty;
+ AssessorInfo[SHORT_ID].llvmTypePtr = PointerType::getUnqual(Type::Int16Ty);
+ AssessorInfo[SHORT_ID].llvmNullConstant =
+ Constant::getNullValue(Type::Int16Ty);
+ AssessorInfo[SHORT_ID].sizeInBytesConstant = mvm::jit::constantTwo;
+
+ AssessorInfo[CHAR_ID].llvmType = Type::Int16Ty;
+ AssessorInfo[CHAR_ID].llvmTypePtr = PointerType::getUnqual(Type::Int16Ty);
+ AssessorInfo[CHAR_ID].llvmNullConstant =
+ Constant::getNullValue(Type::Int16Ty);
+ AssessorInfo[CHAR_ID].sizeInBytesConstant = mvm::jit::constantTwo;
+
+ AssessorInfo[INT_ID].llvmType = Type::Int32Ty;
+ AssessorInfo[INT_ID].llvmTypePtr = PointerType::getUnqual(Type::Int32Ty);
+ AssessorInfo[INT_ID].llvmNullConstant =
+ Constant::getNullValue(Type::Int32Ty);
+ AssessorInfo[INT_ID].sizeInBytesConstant = mvm::jit::constantFour;
+
+ AssessorInfo[FLOAT_ID].llvmType = Type::FloatTy;
+ AssessorInfo[FLOAT_ID].llvmTypePtr = PointerType::getUnqual(Type::FloatTy);
+ AssessorInfo[FLOAT_ID].llvmNullConstant =
+ Constant::getNullValue(Type::FloatTy);
+ AssessorInfo[FLOAT_ID].sizeInBytesConstant = mvm::jit::constantFour;
+
+ AssessorInfo[LONG_ID].llvmType = Type::Int64Ty;
+ AssessorInfo[LONG_ID].llvmTypePtr = PointerType::getUnqual(Type::Int64Ty);
+ AssessorInfo[LONG_ID].llvmNullConstant =
+ Constant::getNullValue(Type::Int64Ty);
+ AssessorInfo[LONG_ID].sizeInBytesConstant = mvm::jit::constantEight;
+
+ AssessorInfo[DOUBLE_ID].llvmType = Type::DoubleTy;
+ AssessorInfo[DOUBLE_ID].llvmTypePtr = PointerType::getUnqual(Type::DoubleTy);
+ AssessorInfo[DOUBLE_ID].llvmNullConstant =
+ Constant::getNullValue(Type::DoubleTy);
+ AssessorInfo[DOUBLE_ID].sizeInBytesConstant = mvm::jit::constantEight;
+
+ AssessorInfo[ARRAY_ID].llvmType = JnjvmModule::JavaObjectType;
+ AssessorInfo[ARRAY_ID].llvmTypePtr =
+ PointerType::getUnqual(JnjvmModule::JavaObjectType);
+ AssessorInfo[ARRAY_ID].llvmNullConstant =
+ JnjvmModule::JavaObjectNullConstant;
+ AssessorInfo[ARRAY_ID].sizeInBytesConstant = mvm::jit::constantPtrSize;
+
+ AssessorInfo[OBJECT_ID].llvmType = JnjvmModule::JavaObjectType;
+ AssessorInfo[OBJECT_ID].llvmTypePtr =
+ PointerType::getUnqual(JnjvmModule::JavaObjectType);
+ AssessorInfo[OBJECT_ID].llvmNullConstant =
+ JnjvmModule::JavaObjectNullConstant;
+ AssessorInfo[OBJECT_ID].sizeInBytesConstant = mvm::jit::constantPtrSize;
+}
+LLVMAssessorInfo LLVMAssessorInfo::AssessorInfo[NUM_ASSESSORS];
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=51252&r1=51251&r2=51252&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Mon May 19 10:16:18 2008
@@ -9,6 +9,8 @@
#include <map>
+#include "JavaTypes.h"
+
#include "llvm/Constant.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
@@ -28,6 +30,19 @@
class JnjvmModule;
class Signdef;
+class LLVMAssessorInfo {
+public:
+ const llvm::Type* llvmType;
+ const llvm::Type* llvmTypePtr;
+ llvm::Constant* llvmNullConstant;
+ llvm::ConstantInt* sizeInBytesConstant;
+
+ static void initialise();
+ static LLVMAssessorInfo AssessorInfo[NUM_ASSESSORS];
+
+};
+
+
class LLVMCommonClassInfo {
friend class JnjvmModule;
More information about the llvm-commits
mailing list