[vmkit-commits] [vmkit] r198553 - Correctly define the java class of a primitive.
Gael Thomas
gael.thomas at lip6.fr
Sun Jan 5 01:46:51 PST 2014
Author: gthomas
Date: Sun Jan 5 03:46:51 2014
New Revision: 198553
URL: http://llvm.org/viewvc/llvm-project?rev=198553&view=rev
Log:
Correctly define the java class of a primitive.
Modified:
vmkit/branches/mcjit/include/j3/j3class.h
vmkit/branches/mcjit/include/j3/j3constants.h
vmkit/branches/mcjit/include/j3/j3typesdef.h
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3class.cc
vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc
Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Sun Jan 5 03:46:51 2014
@@ -295,6 +295,7 @@ namespace j3 {
uint32_t logSize() { return _logSize; }
bool isPrimitive() { return 1; }
llvm::Type* llvmType() { return _llvmType; }
+ void defineJavaClass(const char* className);
};
}
Modified: vmkit/branches/mcjit/include/j3/j3constants.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3constants.h?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3constants.h (original)
+++ vmkit/branches/mcjit/include/j3/j3constants.h Sun Jan 5 03:46:51 2014
@@ -81,7 +81,7 @@ namespace j3 {
static const char ID_Void = 'V';
static const char ID_Byte = 'B';
- static const char ID_Char = 'C';
+ static const char ID_Character = 'C';
static const char ID_Double = 'D';
static const char ID_Float = 'F';
static const char ID_Integer = 'I';
Modified: vmkit/branches/mcjit/include/j3/j3typesdef.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3typesdef.h?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3typesdef.h (original)
+++ vmkit/branches/mcjit/include/j3/j3typesdef.h Sun Jan 5 03:46:51 2014
@@ -5,14 +5,14 @@ namespace j3 {
/* name, ctype, llvmType, scale size */
#define onJavaPrimitives(_) \
- _(Boolean, bool, Int1, 0) \
- _(Byte, int8_t, Int8, 0) \
- _(Short, int16_t, Int16, 1) \
- _(Char, uint16_t, Int16, 1) \
- _(Integer, int32_t, Int32, 2) \
- _(Long, int64_t, Int64, 3) \
- _(Float, float, Float, 2) \
- _(Double, double, Double, 3) \
+ _(Boolean, bool, Int1, 0) \
+ _(Byte, int8_t, Int8, 0) \
+ _(Short, int16_t, Int16, 1) \
+ _(Character, uint16_t, Int16, 1) \
+ _(Integer, int32_t, Int32, 2) \
+ _(Long, int64_t, Int64, 3) \
+ _(Float, float, Float, 2) \
+ _(Double, double, Double, 3) \
#define onJavaVoid(_) \
_(Void, void, Void, 0)
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Jan 5 03:46:51 2014
@@ -563,9 +563,25 @@ jboolean JNICALL JVM_IsInterface(JNIEnv*
jobjectArray JNICALL JVM_GetClassSigners(JNIEnv* env, jclass cls) { enterJVM(); NYI(); leaveJVM(); }
void JNICALL JVM_SetClassSigners(JNIEnv* env, jclass cls, jobjectArray signers) { enterJVM(); NYI(); leaveJVM(); }
jobject JNICALL JVM_GetProtectionDomain(JNIEnv* env, jclass cls) { enterJVM(); NYI(); leaveJVM(); }
-jboolean JNICALL JVM_IsArrayClass(JNIEnv* env, jclass cls) { enterJVM(); NYI(); leaveJVM(); }
+
+jboolean JNICALL JVM_IsArrayClass(JNIEnv* env, jclass cls) {
+ jboolean res;
+ enterJVM();
+ res = J3ObjectType::nativeClass(cls)->isArrayClass();
+ leaveJVM();
+ return res;
+}
+
jboolean JNICALL JVM_IsPrimitiveClass(JNIEnv* env, jclass cls) { enterJVM(); NYI(); leaveJVM(); }
-jclass JNICALL JVM_GetComponentType(JNIEnv* env, jclass cls) { enterJVM(); NYI(); leaveJVM(); }
+jclass JNICALL JVM_GetComponentType(JNIEnv* env, jclass cls) {
+ jclass res;
+ enterJVM();
+ J3ObjectType* cl = J3ObjectType::nativeClass(cls);
+ res = cl->isArrayClass() ? cl->asArrayClass()->component()->javaClass() : 0;
+ leaveJVM();
+ return res;
+}
+
jint JNICALL JVM_GetClassModifiers(JNIEnv* env, jclass cls) {
jint res;
enterJVM();
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc Sun Jan 5 03:46:51 2014
@@ -80,15 +80,15 @@ extern "C" {
unsafeCAS(jtype, id, j3id, sign) \
unsafeGetPut(jtype, id, j3id, sign)
- defUnsafe(jobject, Object, Object, Ljava_lang_Object_2);
- defUnsafe(jboolean, Boolean, Boolean, Z);
- defUnsafe(jbyte, Byte, Byte, B);
- defUnsafe(jchar, Char, Char, C);
- defUnsafe(jshort, Short, Short, S);
- defUnsafe(jint, Int, Integer, I);
- defUnsafe(jlong, Long, Long, J);
- defUnsafe(jfloat, Float, Float, F);
- defUnsafe(jdouble, Double, Double, D);
+ defUnsafe(jobject, Object, Object, Ljava_lang_Object_2);
+ defUnsafe(jboolean, Boolean, Boolean, Z);
+ defUnsafe(jbyte, Byte, Byte, B);
+ defUnsafe(jchar, Char, Character, C);
+ defUnsafe(jshort, Short, Short, S);
+ defUnsafe(jint, Int, Integer, I);
+ defUnsafe(jlong, Long, Long, J);
+ defUnsafe(jfloat, Float, Float, F);
+ defUnsafe(jdouble, Double, Double, D);
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sun Jan 5 03:46:51 2014
@@ -106,7 +106,7 @@ void J3::run() {
arrayInterfaces[0] = z_class("java/lang/Cloneable");
arrayInterfaces[1] = z_class("java/io/Serializable");
- charArrayClass = typeChar->getArray();
+ charArrayClass = typeCharacter->getArray();
objectClass = z_class("java/lang/Object");
objectClass->resolve();
@@ -137,6 +137,11 @@ void J3::run() {
constructorClassInit = z_method(0, constructorClass, initName,
names()->get("(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V"));
+#define defJavaClassPrimitive(name, ctype, llvmtype, scale) \
+ type##name->defineJavaClass("java/lang/"#name);
+ onJavaTypes(defJavaClassPrimitive)
+#undef defJavaClassPrimitive
+
J3Lib::bootstrap(this);
}
@@ -173,7 +178,7 @@ J3ObjectHandle* J3::nameToString(const v
buf[pos++] = encoder.nextUtf16();
res = initialClassLoader->globalReferences()->add(J3ObjectHandle::doNewArray(charArrayClass, pos));
- res->setRegionChar(0, buf, 0, pos);
+ res->setRegionCharacter(0, buf, 0, pos);
J3Thread::get()->restore(prev);
nameToCharArrays[name] = res;
Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sun Jan 5 03:46:51 2014
@@ -934,3 +934,8 @@ J3Primitive::J3Primitive(J3ClassLoader*
_logSize = logSize;
}
+void J3Primitive::defineJavaClass(const char* className) {
+ J3* vm = J3Thread::get()->vm();
+ fprintf(stderr, " ---> %s\n", className);
+ _javaClass = vm->initialClassLoader->loadClass(vm->names()->get(className))->javaClass(0);
+}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Sun Jan 5 03:46:51 2014
@@ -108,15 +108,10 @@ J3Type* J3ClassLoader::getTypeInternal(J
switch(type[pos]) {
case J3Cst::ID_Array: prof++; pos++; break;
- case J3Cst::ID_Void: res = vm->typeVoid; pos++; break;
- case J3Cst::ID_Byte: res = vm->typeByte; pos++; break;
- case J3Cst::ID_Char: res = vm->typeChar; pos++; break;
- case J3Cst::ID_Double: res = vm->typeDouble; pos++; break;
- case J3Cst::ID_Float: res = vm->typeFloat; pos++; break;
- case J3Cst::ID_Integer: res = vm->typeInteger; pos++; break;
- case J3Cst::ID_Long: res = vm->typeLong; pos++; break;
- case J3Cst::ID_Short: res = vm->typeShort; pos++; break;
- case J3Cst::ID_Boolean: res = vm->typeBoolean; pos++; break;
+#define doIt(id, ctype, llvmType, scale) \
+ case J3Cst::ID_##id: res = vm->type##id; pos++; break;
+ onJavaTypes(doIt)
+#undef doIt
case J3Cst::ID_Classname:
if(unify) {
uint32_t start = ++pos;
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sun Jan 5 03:46:51 2014
@@ -171,7 +171,7 @@ llvm::Value* J3CodeGen::flatten(llvm::Va
return v;
else if(type == vm->typeBoolean->llvmType() || type == vm->typeByte->llvmType() || type == vm->typeShort->llvmType())
return builder->CreateSExt(v, vm->typeInteger->llvmType());
- else if(type == vm->typeChar->llvmType())
+ else if(type == vm->typeCharacter->llvmType())
return builder->CreateZExt(v, vm->typeInteger->llvmType());
fprintf(stderr, " v: ");
@@ -189,7 +189,7 @@ llvm::Value* J3CodeGen::unflatten(llvm::
return v;
else if(type == vm->typeBoolean->llvmType() || type == vm->typeByte->llvmType() || type == vm->typeShort->llvmType())
return builder->CreateSExtOrTrunc(v, type);
- else if(type == vm->typeChar->llvmType())
+ else if(type == vm->typeCharacter->llvmType())
return builder->CreateZExtOrTrunc(v, type);
fprintf(stderr, " v: ");
@@ -543,7 +543,7 @@ void J3CodeGen::newArray(uint8_t atype)
switch(atype) {
case J3Cst::T_BOOLEAN: prim = vm->typeBoolean; break;
- case J3Cst::T_CHAR: prim = vm->typeChar; break;
+ case J3Cst::T_CHAR: prim = vm->typeCharacter; break;
case J3Cst::T_FLOAT: prim = vm->typeFloat; break;
case J3Cst::T_DOUBLE: prim = vm->typeDouble; break;
case J3Cst::T_BYTE: prim = vm->typeByte; break;
@@ -1066,7 +1066,7 @@ void J3CodeGen::translate() {
break;
case J3Cst::BC_caload: /* 0x34 */
- arrayLoad(vm->typeChar);
+ arrayLoad(vm->typeCharacter);
break;
case J3Cst::BC_saload: /* 0x35 */
@@ -1141,7 +1141,7 @@ void J3CodeGen::translate() {
break;
case J3Cst::BC_castore: /* 0x55 */
- arrayStore(vm->typeChar);
+ arrayStore(vm->typeCharacter);
break;
case J3Cst::BC_sastore: /* 0x56 */
Modified: vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3jni.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sun Jan 5 03:46:51 2014
@@ -319,7 +319,7 @@ jmethodID JNICALL GetStaticMethodID(JNIE
defJNIObj(jobject, Object, Object);
defJNI (jboolean, Boolean, Boolean);
defJNI (jbyte, Byte, Byte);
- defJNI (jchar, Char, Char);
+ defJNI (jchar, Char, Character);
defJNI (jshort, Short, Short);
defJNI (jint, Int, Integer);
defJNI (jlong, Long, Long);
@@ -407,8 +407,8 @@ jstring JNICALL NewString(JNIEnv* env, c
jstring res;
enterJVM();
J3* vm = J3Thread::get()->vm();
- J3ObjectHandle* content = J3ObjectHandle::doNewArray(vm->typeChar->getArray(), len);
- content->setRegionChar(0, unicode, 0, len);
+ J3ObjectHandle* content = J3ObjectHandle::doNewArray(vm->typeCharacter->getArray(), len);
+ content->setRegionCharacter(0, unicode, 0, len);
res = J3ObjectHandle::doNewObject(vm->stringClass);
vm->stringClassInit->invokeSpecial(res, content, 0);
leaveJVM();
@@ -521,7 +521,7 @@ jint JNICALL GetJavaVM(JNIEnv* env, Java
void JNICALL GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, jchar* buf) {
enterJVM();
- str->getObject(J3Thread::get()->vm()->stringClassValue)->getRegionChar(start, buf, 0, len);
+ str->getObject(J3Thread::get()->vm()->stringClassValue)->getRegionCharacter(start, buf, 0, len);
leaveJVM();
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Sun Jan 5 03:46:51 2014
@@ -131,24 +131,14 @@ J3Value J3Method::internalInvoke(J3Objec
for(llvm::FunctionType::param_iterator cur=fType->param_begin(); cur!=fType->param_end(); cur++, i++) {
llvm::Type* t = *cur;
- if(t == vm->typeBoolean->llvmType())
- args[i].valBoolean = va_arg(va, bool);
- else if(t == vm->typeByte->llvmType())
- args[i].valByte = va_arg(va, int8_t);
- else if(t == vm->typeShort->llvmType())
- args[i].valShort = va_arg(va, int16_t);
- else if(t == vm->typeChar->llvmType())
- args[i].valChar = va_arg(va, uint16_t);
- else if(t == vm->typeInteger->llvmType())
- args[i].valInteger = va_arg(va, int32_t);
- else if(t == vm->typeLong->llvmType())
- args[i].valLong = va_arg(va, int64_t);
- else if(t == vm->typeFloat->llvmType())
- args[i].valFloat = va_arg(va, float);
- else if(t == vm->typeDouble->llvmType())
- args[i].valDouble = va_arg(va, double);
+ if(0) {}
+#define doIt(id, ctype, lt, scale) \
+ else if(t == vm->type##id->llvmType()) \
+ args[i].val##id = va_arg(va, ctype);
+ onJavaPrimitives(doIt)
else
args[i].valObject = va_arg(va, J3ObjectHandle*);
+#undef doIt
}
return cxxCaller()(fnPtr(), args);
Modified: vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc?rev=198553&r1=198552&r2=198553&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc Sun Jan 5 03:46:51 2014
@@ -41,7 +41,7 @@ size_t J3Utf16Decoder::decode(J3ObjectHa
size_t pos = 0;
for(uint32_t i=0; i<length; i++) {
- uint16_t c = charArray->getCharAt(i);
+ uint16_t c = charArray->getCharacterAt(i);
if(c > 127) {
J3::internalError("implement me: fun char");
} else {
More information about the vmkit-commits
mailing list