[vmkit-commits] [vmkit] r59366 - in /vmkit/trunk/lib/JnJVM: LLVMRuntime/runtime-default.ll VMCore/JavaArray.h VMCore/JavaJITOpcodes.cpp VMCore/LowerConstantCalls.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Nov 15 08:12:46 PST 2008


Author: geoffray
Date: Sat Nov 15 10:12:40 2008
New Revision: 59366

URL: http://llvm.org/viewvc/llvm-project?rev=59366&view=rev
Log:
Set the type of the array size field to ssize_t instead of sint32
for proper alignment.


Modified:
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
    vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
    vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=59366&r1=59365&r2=59366&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Sat Nov 15 10:12:40 2008
@@ -32,17 +32,17 @@
 %JavaObject = type { %VT, %JavaClass*, i8* }
 
 ;;; Types for Java arrays. A size of 0 means an undefined size.
-%JavaArray = type { %JavaObject, i32 }
-%ArrayDouble = type { %JavaObject, i32, [0 x double] }
-%ArrayFloat = type { %JavaObject, i32, [0 x float] }
-%ArrayLong = type { %JavaObject, i32, [0 x i64] }
-%ArrayObject = type { %JavaObject, i32, [0 x %JavaObject*] }
-%ArraySInt16 = type { %JavaObject, i32, [0 x i16] }
-%ArraySInt32 = type { %JavaObject, i32, [0 x i32] }
-%ArraySInt8 = type { %JavaObject, i32, [0 x i8] }
-%ArrayUInt16 = type { %JavaObject, i32, [0 x i16] }
-%ArrayUInt32 = type { %JavaObject, i32, [0 x i32] }
-%ArrayUInt8 = type { %JavaObject, i32, [0 x i8] }
+%JavaArray = type { %JavaObject, i8* }
+%ArrayDouble = type { %JavaObject, i8*, [0 x double] }
+%ArrayFloat = type { %JavaObject, i8*, [0 x float] }
+%ArrayLong = type { %JavaObject, i8*, [0 x i64] }
+%ArrayObject = type { %JavaObject, i8*, [0 x %JavaObject*] }
+%ArraySInt16 = type { %JavaObject, i8*, [0 x i16] }
+%ArraySInt32 = type { %JavaObject, i8*, [0 x i32] }
+%ArraySInt8 = type { %JavaObject, i8*, [0 x i8] }
+%ArrayUInt16 = type { %JavaObject, i8*, [0 x i16] }
+%ArrayUInt32 = type { %JavaObject, i8*, [0 x i32] }
+%ArrayUInt8 = type { %JavaObject, i8*, [0 x i8] }
 
 ;;; The CacheNode type. The second field is the last called method. The
 ;;; last field is for multi vm environment.

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Sat Nov 15 10:12:40 2008
@@ -37,7 +37,7 @@
 class TJavaArray : public JavaObject {
 public:
   /// size - The (constant) size of the array.
-  sint32 size;
+  ssize_t size;
 
   /// elements - Elements of this array. The size here is different than the
   /// actual size of the Java array. This is to facilitate Java array accesses

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJITOpcodes.cpp Sat Nov 15 10:12:40 2008
@@ -1944,6 +1944,8 @@
         gep4.push_back(module->JavaArraySizeOffsetConstant);
         Value* GEP = GetElementPtrInst::Create(cast, gep4.begin(), gep4.end(),
                                                "", currentBlock);
+        
+        arg1 = new IntToPtrInst(arg1, module->ptrType, "", currentBlock);
         new StoreInst(arg1, GEP, currentBlock);
         
         // Set the class

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Sat Nov 15 10:12:40 2008
@@ -70,10 +70,24 @@
   GEP.push_back(module->OffsetTaskClassMirrorInClassConstant);
   Value* TCMArray = GetElementPtrInst::Create(Arg, GEP.begin(), GEP.end(),
                                               "", CI);
+
+  Value* threadId = CallInst::Create(module->llvm_frameaddress,
+                                     module->constantZero, "", CI);
+  threadId = new PtrToIntInst(threadId, module->pointerSizeType, "", CI);
+  threadId = BinaryOperator::CreateAnd(threadId, module->constantThreadIDMask,
+                                       "", CI);
+  
+  threadId = new IntToPtrInst(threadId, module->ptr32Type, "", CI);
+  
+  GEP.clear();
+  GEP.push_back(module->constantThree);
+  Value* IsolateID = GetElementPtrInst::Create(threadId, GEP.begin(), GEP.end(),
+                                               "", CI);
+  IsolateID = new LoadInst(IsolateID, "", CI);
+
   GEP.clear();
   GEP.push_back(module->constantZero);
-  // TODO get the isolate id
-  GEP.push_back(module->constantZero);
+  GEP.push_back(IsolateID);
   Value* TCM = GetElementPtrInst::Create(TCMArray, GEP.begin(), GEP.end(), "",
                                          CI);
   return TCM;
@@ -103,6 +117,7 @@
           Value* ptr = GetElementPtrInst::Create(array, args.begin(), args.end(),
                                          "", CI);
           Value* load = new LoadInst(ptr, "", CI);
+          load = new PtrToIntInst(load, module->pointerSizeType, "", CI);
           CI->replaceAllUsesWith(load);
           CI->eraseFromParent();
         } else if (V == module->GetVTFunction) {





More information about the vmkit-commits mailing list