[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