# HG changeset patch # User Thomas Wuerthinger # Date 1295342399 -3600 # Node ID 8f033d37798a9b55d91499fde2694ad96384e5f6 # Parent 89bf01e6b0494f4da6125e54d4a8b9bbff8c2d82 Better support for array types. diff -r 89bf01e6b049 -r 8f033d37798a c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java Fri Jan 14 16:29:42 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java Tue Jan 18 10:19:59 2011 +0100 @@ -140,6 +140,7 @@ @Override public RiType getRiType(Class javaClass) { + assert javaClass != null; return Compiler.getVMEntries().getType(javaClass); } diff -r 89bf01e6b049 -r 8f033d37798a c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java Fri Jan 14 16:29:42 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java Tue Jan 18 10:19:59 2011 +0100 @@ -20,6 +20,7 @@ */ package com.sun.hotspot.c1x; +import com.sun.c1x.util.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -49,14 +50,12 @@ @Override public int accessFlags() { - // TODO Auto-generated method stub - return 0; + return javaClass().getModifiers(); } @Override public RiType arrayOf() { - // TODO Auto-generated method stub - return null; + return Compiler.getVMEntries().getPrimitiveArrayType(kind); } @Override @@ -71,9 +70,7 @@ @Override public CiConstant getEncoding(Representation r) { - // TODO Auto-generated method stub - - return null; + throw Util.unimplemented("HotSpotTypePrimitive.getEncoding"); } @Override diff -r 89bf01e6b049 -r 8f033d37798a c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java Fri Jan 14 16:29:42 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java Tue Jan 18 10:19:59 2011 +0100 @@ -55,9 +55,7 @@ @Override public RiType arrayOf() { - Logger.log("arrayOf " + simpleName); - return null; - //return Compiler.getVMEntries().RiType_arrayOf(vmId); + return Compiler.getVMEntries().RiType_arrayOf(this); } @Override @@ -82,7 +80,7 @@ public CiConstant getEncoding(Representation r) { switch (r) { case JavaClass: - return CiConstant.forObject(javaMirror); + return CiConstant.forObject(javaClass()); case ObjectHub: return CiConstant.forObject(this); case StaticFields: diff -r 89bf01e6b049 -r 8f033d37798a c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java Fri Jan 14 16:29:42 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java Tue Jan 18 10:19:59 2011 +0100 @@ -73,7 +73,7 @@ RiType getPrimitiveArrayType(CiKind kind); - RiType RiType_arrayOf(long vmId); + RiType RiType_arrayOf(HotSpotTypeResolved klass); RiType RiType_componentType(HotSpotTypeResolved klass); diff -r 89bf01e6b049 -r 8f033d37798a c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java Fri Jan 14 16:29:42 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java Tue Jan 18 10:19:59 2011 +0100 @@ -93,7 +93,7 @@ public native RiType getPrimitiveArrayType(CiKind kind); @Override - public native RiType RiType_arrayOf(long vmId); + public native RiType RiType_arrayOf(HotSpotTypeResolved klass); @Override public native RiType RiType_componentType(HotSpotTypeResolved klass); diff -r 89bf01e6b049 -r 8f033d37798a c1x4hotspotsrc/hotspot/hotspot Default.launch --- a/c1x4hotspotsrc/hotspot/hotspot Default.launch Fri Jan 14 16:29:42 2011 +0100 +++ b/c1x4hotspotsrc/hotspot/hotspot Default.launch Tue Jan 18 10:19:59 2011 +0100 @@ -1,7 +1,20 @@ + + + + + + + + + + + + + diff -r 89bf01e6b049 -r 8f033d37798a src/share/vm/c1x/c1x_VMEntries.cpp --- a/src/share/vm/c1x/c1x_VMEntries.cpp Fri Jan 14 16:29:42 2011 +0100 +++ b/src/share/vm/c1x/c1x_VMEntries.cpp Tue Jan 18 10:19:59 2011 +0100 @@ -432,13 +432,13 @@ return NULL; } -// public RiType RiType_arrayOf(long vmId); -JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf(JNIEnv *, jobject, jlong vmId) { +// public RiType RiType_arrayOf(HotSpotTypeResolved klass); +JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf(JNIEnv *, jobject, jobject klass) { VM_ENTRY_MARK; - instanceKlass* klass = instanceKlass::cast(VmIds::get(vmId)); - KlassHandle array = klass->array_klass(THREAD); - Handle name = array->name(); + KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); + KlassHandle array = klass_handle->array_klass(THREAD); + Handle name = VmIds::toString(array->name(), CHECK_NULL); return JNIHandles::make_local(THREAD, C1XCompiler::createHotSpotTypeResolved(array, name, THREAD)); } @@ -454,11 +454,19 @@ // public RiType getType(Class javaClass); JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_getType(JNIEnv *env, jobject, jobject javaClass) { VM_ENTRY_MARK; - KlassHandle klass = java_lang_Class::as_klassOop(JNIHandles::resolve(javaClass)); - Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL); + oop javaClassOop = JNIHandles::resolve(javaClass); + if (javaClassOop == NULL) { + fatal("argument to VMEntries.getType must not be NULL"); + } else if (java_lang_Class::is_primitive(javaClassOop)) { + BasicType basicType = java_lang_Class::primitive_type(javaClassOop); + return JNIHandles::make_local(THREAD, VMExits::createRiTypePrimitive((int) basicType, THREAD)); + } else { + KlassHandle klass = java_lang_Class::as_klassOop(javaClassOop); + Handle name = java_lang_String::create_from_symbol(klass->name(), CHECK_NULL); - oop type = C1XCompiler::createHotSpotTypeResolved(klass, name, CHECK_NULL); - return JNIHandles::make_local(THREAD, type); + oop type = C1XCompiler::createHotSpotTypeResolved(klass, name, CHECK_NULL); + return JNIHandles::make_local(THREAD, type); + } } @@ -635,7 +643,7 @@ {CC"RiType_isSubtypeOf", CC"("RESOLVED_TYPE TYPE")Z", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_2isSubtypeOf)}, {CC"RiType_componentType", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1componentType)}, {CC"RiType_uniqueConcreteSubtype", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1uniqueConcreteSubtype)}, - {CC"RiType_arrayOf", CC"("PROXY")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf)}, + {CC"RiType_arrayOf", CC"("RESOLVED_TYPE")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1arrayOf)}, {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getPrimitiveArrayType)}, {CC"getType", CC"("CLASS")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getType)}, {CC"getConfiguration", CC"()"CONFIG, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getConfiguration)},