[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