changeset 2057:89bf01e6b049

Treat C1XOptions fields as final.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Fri, 14 Jan 2011 16:29:42 +0100
parents b7f06f504206
children 8f033d37798a
files c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotField.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java src/share/vm/c1x/c1x_VMEntries.cpp src/share/vm/classfile/systemDictionary.hpp src/share/vm/classfile/vmSymbols.hpp
diffstat 7 files changed, 32 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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;
     }
 
--- 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;
         }
--- 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;
 
 /**
  *
--- 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;
--- 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()) {
--- 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) \
--- 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")                   \