Mercurial > hg > graal-compiler
changeset 2058:8f033d37798a
Better support for array types.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Tue, 18 Jan 2011 10:19:59 +0100 |
parents | 89bf01e6b049 |
children | 9508a52cbd32 |
files | c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotRuntime.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java c1x4hotspotsrc/hotspot/hotspot Default.launch src/share/vm/c1x/c1x_VMEntries.cpp |
diffstat | 7 files changed, 40 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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
--- 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:
--- 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);
--- 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);
--- 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 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <launchConfiguration type="org.eclipse.cdt.launch.applicationLaunchType"> +<booleanAttribute key="org.eclipse.cdt.dsf.gdb.AUTO_SOLIB" value="true"/> +<listAttribute key="org.eclipse.cdt.dsf.gdb.AUTO_SOLIB_LIST"/> +<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="gdb"/> +<stringAttribute key="org.eclipse.cdt.dsf.gdb.GDB_INIT" value=".gdbinit"/> +<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="false"/> +<booleanAttribute key="org.eclipse.cdt.dsf.gdb.REVERSE" value="false"/> +<listAttribute key="org.eclipse.cdt.dsf.gdb.SOLIB_PATH"/> +<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/> +<booleanAttribute key="org.eclipse.cdt.dsf.gdb.internal.ui.launching.LocalApplicationCDebuggerTab.DEFAULTS_SET" value="true"/> <intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/> <stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/> +<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="gdb"/> +<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/> +<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/> +<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/> <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-client -XX:+UseC1X -XX:+PrintGC -Xms1g -Xmx1g -Xbootclasspath/p:${workspace_loc:hotspot}/../../../maxine/C1X/bin:${workspace_loc:hotspot}/../../../maxine/CRI/bin:${workspace_loc:hotspot}/../../../maxine/Base/bin:${workspace_loc:hotspot}/../../../maxine/Assembler/bin:${workspace_loc:hotspot}/../HotSpotVM/bin -classpath ${workspace_loc:hotspot}/../HotSpotTest/bin C1XTest"/> <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="java"/> <stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="hotspot"/>
--- 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<klassOop>(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<Handle>(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)},