# HG changeset patch # User Thomas Wuerthinger # Date 1295018982 -3600 # Node ID 89bf01e6b0494f4da6125e54d4a8b9bbff8c2d82 # Parent b7f06f5042068e42346e996bcc86faae0cdb721a Treat C1XOptions fields as final. diff -r b7f06f504206 -r 89bf01e6b049 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java Fri Jan 14 13:22:50 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java Fri Jan 14 16:29:42 2011 +0100 @@ -186,7 +186,7 @@ // these options are important - c1x4hotspot will not generate correct code without them C1XOptions.GenSpecialDivChecks = true; C1XOptions.NullCheckUniquePc = true; - C1XOptions.invokeinterfaceTemplatePos = true; + C1XOptions.InvokeSnippetAfterArguments = true; C1XOptions.StackShadowPages = config.stackShadowPages; } diff -r b7f06f504206 -r 89bf01e6b049 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotField.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotField.java Fri Jan 14 13:22:50 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotField.java Fri Jan 14 16:29:42 2011 +0100 @@ -21,6 +21,9 @@ package com.sun.hotspot.c1x; +import java.lang.reflect.*; + +import com.sun.c1x.*; import com.sun.cri.ci.CiConstant; import com.sun.cri.ci.CiKind; import com.sun.cri.ri.RiField; @@ -55,6 +58,30 @@ @Override public CiConstant constantValue(Object object) { if (object == null) { + if (constant == null && holder.isResolved() && holder.javaClass() == C1XOptions.class) { + Field f; + try { + f = C1XOptions.class.getField(name); + } catch (SecurityException e1) { + return null; + } catch (NoSuchFieldException e1) { + return null; + } + f.setAccessible(true); + if (Modifier.isStatic(f.getModifiers())) { + CiKind kind = CiKind.fromJavaClass(f.getType()); + Object value; + try { + value = f.get(null); + } catch (IllegalArgumentException e) { + return null; + } catch (IllegalAccessException e) { + return null; + } + constant = CiConstant.forBoxed(kind, value); + } + } + // Constant part only valid for static fields. return constant; } diff -r b7f06f504206 -r 89bf01e6b049 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Fri Jan 14 13:22:50 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Fri Jan 14 16:29:42 2011 +0100 @@ -37,7 +37,6 @@ import com.sun.cri.xir.CiXirAssembler.XirMark; import com.sun.cri.xir.CiXirAssembler.XirOperand; import com.sun.cri.xir.CiXirAssembler.XirParameter; -import com.sun.cri.xir.CiXirAssembler.XirTemp; /** * diff -r b7f06f504206 -r 89bf01e6b049 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java Fri Jan 14 13:22:50 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java Fri Jan 14 16:29:42 2011 +0100 @@ -48,7 +48,6 @@ C1XOptions.setOptimizationLevel(3); C1XOptions.OptInlineExcept = false; C1XOptions.OptInlineSynchronized = false; - C1XOptions.IRChecking = false; C1XOptions.DetailedAsserts = false; C1XOptions.CommentedAssembly = false; C1XOptions.MethodEndBreakpointGuards = 2; diff -r b7f06f504206 -r 89bf01e6b049 src/share/vm/c1x/c1x_VMEntries.cpp --- a/src/share/vm/c1x/c1x_VMEntries.cpp Fri Jan 14 13:22:50 2011 +0100 +++ b/src/share/vm/c1x/c1x_VMEntries.cpp Fri Jan 14 16:29:42 2011 +0100 @@ -296,7 +296,8 @@ ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index); Bytecodes::Code code = (Bytecodes::Code)(((int) byteCode) & 0xFF); Handle field_handle = C1XCompiler::get_RiField(field, loading_klass, cp->pool_holder(), code, THREAD); - if (field->is_constant() && field->is_static()) { + bool is_constant = field->is_constant(); + if (is_constant && field->is_static()) { ciConstant constant = field->constant_value(); oop constant_object = NULL; switch (constant.basic_type()) { diff -r b7f06f504206 -r 89bf01e6b049 src/share/vm/classfile/systemDictionary.hpp --- a/src/share/vm/classfile/systemDictionary.hpp Fri Jan 14 13:22:50 2011 +0100 +++ b/src/share/vm/classfile/systemDictionary.hpp Fri Jan 14 16:29:42 2011 +0100 @@ -182,6 +182,7 @@ template(Integer_klass, java_lang_Integer, Pre) \ template(Long_klass, java_lang_Long, Pre) \ \ + template(C1XOptions_klass, com_sun_c1x_C1XOptions, Opt) \ template(HotSpotTypeResolved_klass, com_sun_hotspot_c1x_HotSpotTypeResolved, Opt) \ template(HotSpotType_klass, com_sun_hotspot_c1x_HotSpotType, Opt) \ template(HotSpotField_klass, com_sun_hotspot_c1x_HotSpotField, Opt) \ diff -r b7f06f504206 -r 89bf01e6b049 src/share/vm/classfile/vmSymbols.hpp --- a/src/share/vm/classfile/vmSymbols.hpp Fri Jan 14 13:22:50 2011 +0100 +++ b/src/share/vm/classfile/vmSymbols.hpp Fri Jan 14 16:29:42 2011 +0100 @@ -266,6 +266,7 @@ template(com_sun_hotspot_c1x_HotSpotMethodResolved, "com/sun/hotspot/c1x/HotSpotMethodResolved") \ template(com_sun_hotspot_c1x_HotSpotTargetMethod, "com/sun/hotspot/c1x/HotSpotTargetMethod") \ template(com_sun_hotspot_c1x_HotSpotField, "com/sun/hotspot/c1x/HotSpotField") \ + template(com_sun_c1x_C1XOptions, "com/sun/c1x/C1XOptions") \ template(com_sun_hotspot_c1x_HotSpotTypeResolved, "com/sun/hotspot/c1x/HotSpotTypeResolved") \ template(com_sun_hotspot_c1x_HotSpotType, "com/sun/hotspot/c1x/HotSpotType") \ template(com_sun_hotspot_c1x_HotSpotExceptionHandler,"com/sun/hotspot/c1x/HotSpotExceptionHandler") \