[vmkit-commits] [vmkit] r61616 - in /vmkit/trunk/lib/JnJVM/VMCore: JnjvmClassLoader.cpp JnjvmClassLoader.h JnjvmModule.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Jan 3 15:43:53 PST 2009
Author: geoffray
Date: Sat Jan 3 17:43:53 2009
New Revision: 61616
URL: http://llvm.org/viewvc/llvm-project?rev=61616&view=rev
Log:
Provide static values for native class arrays so that static-compiled code
can reference them directly.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=61616&r1=61615&r2=61616&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Sat Jan 3 17:43:53 2009
@@ -46,6 +46,15 @@
using namespace jnjvm;
+ClassArray ArrayOfBool;
+ClassArray ArrayOfByte;
+ClassArray ArrayOfChar;
+ClassArray ArrayOfShort;
+ClassArray ArrayOfInt;
+ClassArray ArrayOfFloat;
+ClassArray ArrayOfDouble;
+ClassArray ArrayOfLong;
+
JnjvmBootstrapLoader::JnjvmBootstrapLoader(bool staticCompilation) {
TheModule = new JnjvmModule("Bootstrap JnJVM", staticCompilation);
@@ -81,7 +90,8 @@
upcalls->OfChar = UPCALL_PRIMITIVE_CLASS(this, "char", 2);
// Create the char array.
- upcalls->ArrayOfChar = constructArray(utf8OfChar, upcalls->OfChar);
+ upcalls->ArrayOfChar = constructPrimitiveArray(ArrayOfChar, utf8OfChar,
+ upcalls->OfChar);
// Alright, now we can repair the damage: set the class to the UTF8s created
// and set the array class of UTF8s.
@@ -91,8 +101,9 @@
// Create the byte array, so that bytes for classes can be created.
upcalls->OfByte = UPCALL_PRIMITIVE_CLASS(this, "byte", 1);
- upcalls->ArrayOfByte = constructArray(asciizConstructUTF8("[B"),
- upcalls->OfByte);
+ upcalls->ArrayOfByte = constructPrimitiveArray(ArrayOfByte,
+ asciizConstructUTF8("[B"),
+ upcalls->OfByte);
InterfacesArray =
(Class**)allocator.Allocate(2 * sizeof(UserClass*));
@@ -130,23 +141,29 @@
upcalls->OfVoid = UPCALL_PRIMITIVE_CLASS(this, "void", 0);
// And finally create the primitive arrays.
- upcalls->ArrayOfInt = constructArray(asciizConstructUTF8("[I"),
- upcalls->OfInt);
-
- upcalls->ArrayOfBool = constructArray(asciizConstructUTF8("[Z"),
- upcalls->OfBool);
-
- upcalls->ArrayOfLong = constructArray(asciizConstructUTF8("[J"),
- upcalls->OfLong);
-
- upcalls->ArrayOfFloat = constructArray(asciizConstructUTF8("[F"),
- upcalls->OfFloat);
-
- upcalls->ArrayOfDouble = constructArray(asciizConstructUTF8("[D"),
- upcalls->OfDouble);
-
- upcalls->ArrayOfShort = constructArray(asciizConstructUTF8("[S"),
- upcalls->OfShort);
+ upcalls->ArrayOfInt = constructPrimitiveArray(ArrayOfInt,
+ asciizConstructUTF8("[I"),
+ upcalls->OfInt);
+
+ upcalls->ArrayOfBool = constructPrimitiveArray(ArrayOfBool,
+ asciizConstructUTF8("[Z"),
+ upcalls->OfBool);
+
+ upcalls->ArrayOfLong = constructPrimitiveArray(ArrayOfLong,
+ asciizConstructUTF8("[J"),
+ upcalls->OfLong);
+
+ upcalls->ArrayOfFloat = constructPrimitiveArray(ArrayOfFloat,
+ asciizConstructUTF8("[F"),
+ upcalls->OfFloat);
+
+ upcalls->ArrayOfDouble = constructPrimitiveArray(ArrayOfDouble,
+ asciizConstructUTF8("[D"),
+ upcalls->OfDouble);
+
+ upcalls->ArrayOfShort = constructPrimitiveArray(ArrayOfShort,
+ asciizConstructUTF8("[S"),
+ upcalls->OfShort);
upcalls->ArrayOfString =
constructArray(asciizConstructUTF8("[Ljava/lang/String;"));
@@ -567,6 +584,15 @@
return res;
}
+ClassArray*
+JnjvmBootstrapLoader::constructPrimitiveArray(ClassArray& cl, const UTF8* name,
+ ClassPrimitive* baseClass) {
+
+ cl = ClassArray(this, name, baseClass);
+ classes->map.insert(std::make_pair(name, &cl));
+ return &cl;
+}
+
Typedef* JnjvmClassLoader::internalConstructType(const UTF8* name) {
short int cur = name->elements[0];
Typedef* res = 0;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=61616&r1=61615&r2=61616&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Sat Jan 3 17:43:53 2009
@@ -289,6 +289,11 @@
/// of byte.
///
ArrayUInt8* openName(const UTF8* utf8);
+
+ /// constructPrimitiveArray - Hashes the primitive array.
+ ///
+ ClassArray* constructPrimitiveArray(ClassArray& cl, const UTF8* name,
+ ClassPrimitive* prim);
public:
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61616&r1=61615&r2=61616&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Sat Jan 3 17:43:53 2009
@@ -37,6 +37,15 @@
extern void* ArrayObjectVT[];
extern void* JavaObjectVT[];
+extern ClassArray ArrayOfBool;
+extern ClassArray ArrayOfByte;
+extern ClassArray ArrayOfChar;
+extern ClassArray ArrayOfShort;
+extern ClassArray ArrayOfInt;
+extern ClassArray ArrayOfFloat;
+extern ClassArray ArrayOfDouble;
+extern ClassArray ArrayOfLong;
+
#ifdef WITH_TRACER
const llvm::FunctionType* JnjvmModule::MarkAndTraceType = 0;
#endif
@@ -1878,6 +1887,28 @@
ReferenceArrayVT = new GlobalVariable(ATy, true,
GlobalValue::ExternalLinkage,
0, "ArrayObjectVT", this);
+
+
+
+ ATy = JavaClassArrayType->getContainedType(0);
+ GlobalVariable* varGV = 0;
+
+#define PRIMITIVE_ARRAY(name) \
+ varGV = new GlobalVariable(ATy, true, GlobalValue::ExternalLinkage, \
+ 0, #name, this); \
+ arrayClasses.insert(std::make_pair(&name, varGV));
+
+ PRIMITIVE_ARRAY(ArrayOfBool)
+ PRIMITIVE_ARRAY(ArrayOfByte)
+ PRIMITIVE_ARRAY(ArrayOfChar)
+ PRIMITIVE_ARRAY(ArrayOfShort)
+ PRIMITIVE_ARRAY(ArrayOfInt)
+ PRIMITIVE_ARRAY(ArrayOfFloat)
+ PRIMITIVE_ARRAY(ArrayOfDouble)
+ PRIMITIVE_ARRAY(ArrayOfLong)
+
+#undef PRIMITIVE_ARRAY
+
} else {
PrimitiveArrayVT = ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty,
uint64(JavaArrayVT)),
More information about the vmkit-commits
mailing list