changeset 18262:f7d45e2426d4

converted HotSpotObjectConstant to an interface
author Doug Simon <doug.simon@oracle.com>
date Wed, 05 Nov 2014 21:07:59 +0100
parents d66c79acfeac
children ce742edd2c63
files graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotAssembler.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java graal/com.oracle.graal.hotspot.server/src/com/oracle/graal/hotspot/server/ReplacingStreams.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSpeculationLog.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java src/cpu/sparc/vm/graalCodeInstaller_sparc.cpp src/cpu/x86/vm/graalCodeInstaller_x86.cpp src/share/vm/classfile/systemDictionary.hpp src/share/vm/classfile/vmSymbols.hpp src/share/vm/graal/graalCodeInstaller.cpp src/share/vm/graal/graalJavaAccess.hpp
diffstat 43 files changed, 258 insertions(+), 216 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java	Wed Nov 05 21:07:59 2014 +0100
@@ -87,7 +87,7 @@
 
     @Override
     public JavaConstant getClassConstant(ResolvedJavaType declaringClass) {
-        return HotSpotObjectConstant.forObject(((HotSpotResolvedJavaType) declaringClass).mirror());
+        return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) declaringClass).mirror());
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java	Wed Nov 05 21:07:59 2014 +0100
@@ -55,7 +55,7 @@
                 // compressed null
                 masm.testl(asRegister(x), asRegister(x));
             } else if (y instanceof HotSpotObjectConstant) {
-                if (HotSpotObjectConstant.isCompressed(y)) {
+                if (HotSpotObjectConstantImpl.isCompressed(y)) {
                     // compressed oop
                     crb.recordInlineDataInCode(y);
                     masm.cmpl(asRegister(x), 0xDEADDEAD);
@@ -96,7 +96,7 @@
                 // compressed null
                 masm.cmpl(address.toAddress(), 0);
             } else if (y instanceof HotSpotObjectConstant) {
-                if (HotSpotObjectConstant.isCompressed(y) && crb.target.inlineObjects) {
+                if (HotSpotObjectConstantImpl.isCompressed(y) && crb.target.inlineObjects) {
                     // compressed oop
                     crb.recordInlineDataInCode(y);
                     masm.cmpl(address.toAddress(), 0xDEADDEAD);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Wed Nov 05 21:07:59 2014 +0100
@@ -620,7 +620,7 @@
         if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
             return true;
         } else if (c instanceof HotSpotObjectConstant) {
-            return HotSpotObjectConstant.isCompressed(c);
+            return HotSpotObjectConstantImpl.isCompressed(c);
         } else {
             return super.canInlineConstant(c);
         }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java	Wed Nov 05 21:07:59 2014 +0100
@@ -62,7 +62,7 @@
                     masm.movl((AMD64Address) crb.asAddress(result), 0);
                 }
             } else if (input instanceof HotSpotObjectConstant) {
-                boolean compressed = HotSpotObjectConstant.isCompressed(input);
+                boolean compressed = HotSpotObjectConstantImpl.isCompressed(input);
                 if (crb.target.inlineObjects) {
                     crb.recordInlineDataInCode(input);
                     if (isRegister(result)) {
@@ -135,7 +135,7 @@
                 // compressed null
                 masm.movl(address.toAddress(), 0);
             } else if (input instanceof HotSpotObjectConstant) {
-                if (HotSpotObjectConstant.isCompressed(input) && crb.target.inlineObjects) {
+                if (HotSpotObjectConstantImpl.isCompressed(input) && crb.target.inlineObjects) {
                     // compressed oop
                     crb.recordInlineDataInCode(input);
                     masm.movl(address.toAddress(), 0xDEADDEAD);
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotAssembler.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotAssembler.java	Wed Nov 05 21:07:59 2014 +0100
@@ -46,7 +46,7 @@
         if (src.isNull()) {
             emitString("mov_b64 " + regName + ", 0x0;  // null object");
         } else {
-            Object obj = HotSpotObjectConstant.asObject(src);
+            Object obj = HotSpotObjectConstantImpl.asObject(src);
             // Get a JNI reference handle to the object.
             long refHandle = OkraUtil.getRefHandle(obj);
             // Get the clasname of the object for emitting a comment.
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java	Wed Nov 05 21:07:59 2014 +0100
@@ -235,7 +235,7 @@
     protected HSAILLIRInstruction createMove(AllocatableValue dst, Value src) {
         if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(src)) {
             return new MoveToRegOp(Kind.Int, dst, JavaConstant.INT_0);
-        } else if (src instanceof HotSpotObjectConstant && HotSpotObjectConstant.isCompressed((JavaConstant) src)) {
+        } else if (src instanceof HotSpotObjectConstant && HotSpotObjectConstantImpl.isCompressed((JavaConstant) src)) {
             Variable uncompressed = newVariable(LIRKind.reference(Kind.Object));
             append(new MoveToRegOp(Kind.Object, uncompressed, src));
             CompressEncoding oopEncoding = config.getOopEncoding();
--- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java	Wed Nov 05 21:07:59 2014 +0100
@@ -190,7 +190,7 @@
             }
         }
 
-        InvokeNode kernelStart = createInvoke(getClass(), "getKernelStart", ConstantNode.forConstant(HotSpotObjectConstant.forObject(kernel), providers.getMetaAccess(), getGraph()));
+        InvokeNode kernelStart = createInvoke(getClass(), "getKernelStart", ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(kernel), providers.getMetaAccess(), getGraph()));
 
         AllocaNode buf = append(AllocaNode.create(bufSize / wordSize, new BitSet()));
         ValueNode objectParametersOffsets;
--- a/graal/com.oracle.graal.hotspot.server/src/com/oracle/graal/hotspot/server/ReplacingStreams.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.server/src/com/oracle/graal/hotspot/server/ReplacingStreams.java	Wed Nov 05 21:07:59 2014 +0100
@@ -175,7 +175,7 @@
                 if (constant.getKind() != Kind.Object) {
                     return obj;
                 }
-                Object contents = HotSpotObjectConstant.asObject(constant);
+                Object contents = HotSpotObjectConstantImpl.asObject(constant);
                 if (contents == null) {
                     return obj;
                 }
@@ -185,12 +185,12 @@
                 }
                 placeholder = objectMap.get(contents);
                 if (placeholder != null) {
-                    return HotSpotObjectConstant.forObject(placeholder);
+                    return HotSpotObjectConstantImpl.forObject(placeholder);
                 }
                 if (contents instanceof Remote) {
-                    return HotSpotObjectConstant.forObject(createRemoteCallPlaceholder(contents));
+                    return HotSpotObjectConstantImpl.forObject(createRemoteCallPlaceholder(contents));
                 }
-                return HotSpotObjectConstant.forObject(createDummyPlaceholder(contents));
+                return HotSpotObjectConstantImpl.forObject(createDummyPlaceholder(contents));
             }
             return obj;
         }
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java	Wed Nov 05 21:07:59 2014 +0100
@@ -104,7 +104,7 @@
 
         NodeIterable<ConstantNode> filter = getConstantNodes(result);
         assertDeepEquals(1, filter.count());
-        Object mirror = HotSpotObjectConstant.asObject(filter.first().asJavaConstant());
+        Object mirror = HotSpotObjectConstantImpl.asObject(filter.first().asJavaConstant());
         assertDeepEquals(Class.class, mirror.getClass());
         assertDeepEquals(AheadOfTimeCompilationTest.class, mirror);
 
@@ -132,7 +132,7 @@
         StructuredGraph result = compile("getPrimitiveClassObject", false);
         NodeIterable<ConstantNode> filter = getConstantNodes(result);
         assertDeepEquals(1, filter.count());
-        Object mirror = HotSpotObjectConstant.asObject(filter.first().asJavaConstant());
+        Object mirror = HotSpotObjectConstantImpl.asObject(filter.first().asJavaConstant());
         assertDeepEquals(Class.class, mirror.getClass());
         assertDeepEquals(Integer.TYPE, mirror);
 
@@ -160,7 +160,7 @@
 
         NodeIterable<ConstantNode> filter = getConstantNodes(result);
         assertDeepEquals(1, filter.count());
-        Object mirror = HotSpotObjectConstant.asObject(filter.first().asJavaConstant());
+        Object mirror = HotSpotObjectConstantImpl.asObject(filter.first().asJavaConstant());
         assertDeepEquals(String.class, mirror.getClass());
         assertDeepEquals("test string", mirror);
 
@@ -193,7 +193,7 @@
         assertDeepEquals(1, getConstantNodes(result).count());
         ConstantNode constant = getConstantNodes(result).first();
         assertDeepEquals(Kind.Object, constant.getKind());
-        assertDeepEquals(Boolean.TRUE, HotSpotObjectConstant.asObject(constant.asJavaConstant()));
+        assertDeepEquals(Boolean.TRUE, HotSpotObjectConstantImpl.asObject(constant.asJavaConstant()));
     }
 
     private StructuredGraph compile(String test, boolean compileAOT) {
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java	Wed Nov 05 21:07:59 2014 +0100
@@ -77,7 +77,7 @@
             assert parameterTypes.length == args.length;
             for (int i = 0; i < argsToBind.length; i++) {
                 ParameterNode param = graph.getParameter(i);
-                JavaConstant c = HotSpotObjectConstant.forBoxedValue(parameterTypes[i].getKind(), argsToBind[i]);
+                JavaConstant c = HotSpotObjectConstantImpl.forBoxedValue(parameterTypes[i].getKind(), argsToBind[i]);
                 ConstantNode replacement = ConstantNode.forConstant(c, getMetaAccess(), graph);
                 param.replaceAtUsages(replacement);
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Wed Nov 05 21:07:59 2014 +0100
@@ -236,7 +236,7 @@
     @Override
     protected ValueNode staticFieldBase(StructuredGraph graph, ResolvedJavaField f) {
         HotSpotResolvedJavaField field = (HotSpotResolvedJavaField) f;
-        return ConstantNode.forConstant(HotSpotObjectConstant.forObject(field.getDeclaringClass().mirror()), metaAccess, graph);
+        return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(field.getDeclaringClass().mirror()), metaAccess, graph);
     }
 
     @Override
@@ -355,7 +355,7 @@
                 } else {
                     throw GraalInternalError.shouldNotReachHere();
                 }
-                FloatingNode exceptionNode = ConstantNode.forConstant(HotSpotObjectConstant.forObject(exception), metaAccess, graph);
+                FloatingNode exceptionNode = ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(exception), metaAccess, graph);
                 graph.replaceFixedWithFloating(node, exceptionNode);
 
             } else {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java	Wed Nov 05 21:07:59 2014 +0100
@@ -264,7 +264,7 @@
             boolean compressed;
             long raw;
             if (constant instanceof HotSpotObjectConstant) {
-                compressed = HotSpotObjectConstant.isCompressed(constant);
+                compressed = HotSpotObjectConstantImpl.isCompressed(constant);
                 raw = 0xDEADDEADDEADDEADL;
             } else if (constant instanceof HotSpotMetaspaceConstant) {
                 HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) constant;
@@ -288,7 +288,7 @@
                 };
             }
         } else if (JavaConstant.isNull(constant)) {
-            boolean compressed = HotSpotObjectConstant.isCompressed(constant);
+            boolean compressed = HotSpotObjectConstantImpl.isCompressed(constant);
             size = target.getSizeInBytes(compressed ? Kind.Int : target.wordKind);
             builder = DataBuilder.zero(size);
         } else if (constant instanceof PrimitiveConstant) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java	Wed Nov 05 21:07:59 2014 +0100
@@ -397,13 +397,13 @@
                 return lookupType(cpi, opcode);
             case String:
                 Object string = runtime().getCompilerToVM().resolvePossiblyCachedConstantInPool(metaspaceConstantPool, cpi);
-                return HotSpotObjectConstant.forObject(string);
+                return HotSpotObjectConstantImpl.forObject(string);
             case MethodHandle:
             case MethodHandleInError:
             case MethodType:
             case MethodTypeInError:
                 Object obj = runtime().getCompilerToVM().resolveConstantInPool(metaspaceConstantPool, cpi);
-                return HotSpotObjectConstant.forObject(obj);
+                return HotSpotObjectConstantImpl.forObject(obj);
             default:
                 throw GraalInternalError.shouldNotReachHere("unknown constant pool tag " + tag);
         }
@@ -428,7 +428,7 @@
         if (result == null) {
             return null;
         } else {
-            return HotSpotObjectConstant.forObject(result);
+            return HotSpotObjectConstantImpl.forObject(result);
         }
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java	Wed Nov 05 21:07:59 2014 +0100
@@ -49,10 +49,15 @@
 
     @Override
     public Integer readArrayLength(JavaConstant array) {
-        if (array.getKind() != Kind.Object || array.isNull() || !HotSpotObjectConstant.asObject(array).getClass().isArray()) {
+        if (array.getKind() != Kind.Object || array.isNull()) {
             return null;
         }
-        return Array.getLength(HotSpotObjectConstant.asObject(array));
+
+        Object arrayObject = HotSpotObjectConstantImpl.asObject(array);
+        if (!arrayObject.getClass().isArray()) {
+            return null;
+        }
+        return Array.getLength(arrayObject);
     }
 
     @Override
@@ -60,7 +65,7 @@
         Object base;
         long displacement;
         if (baseConstant.getKind() == Kind.Object) {
-            base = HotSpotObjectConstant.asObject(baseConstant);
+            base = HotSpotObjectConstantImpl.asObject(baseConstant);
             displacement = initialDisplacement;
             if (base == null) {
                 return null;
@@ -115,7 +120,7 @@
                 } else {
                     throw GraalInternalError.shouldNotReachHere();
                 }
-                return HotSpotObjectConstant.forObject(o);
+                return HotSpotObjectConstantImpl.forObject(o);
             }
             default:
                 throw GraalInternalError.shouldNotReachHere();
@@ -127,7 +132,7 @@
         Object base;
         long displacement;
         if (baseConstant.getKind() == Kind.Object) {
-            base = HotSpotObjectConstant.asObject(baseConstant);
+            base = HotSpotObjectConstantImpl.asObject(baseConstant);
             displacement = initialDisplacement;
             if (base == null) {
                 return null;
@@ -192,14 +197,14 @@
         if (array.getKind() != Kind.Object || array.isNull()) {
             return null;
         }
-        Object a = HotSpotObjectConstant.asObject(array);
+        Object a = HotSpotObjectConstantImpl.asObject(array);
 
         if (index < 0 || index >= Array.getLength(a)) {
             return null;
         }
 
         if (a instanceof Object[]) {
-            return HotSpotObjectConstant.forObject(((Object[]) a)[index]);
+            return HotSpotObjectConstantImpl.forObject(((Object[]) a)[index]);
         } else {
             return JavaConstant.forBoxedPrimitive(Array.get(a, index));
         }
@@ -210,7 +215,7 @@
         if (!source.getKind().isPrimitive()) {
             return null;
         }
-        return HotSpotObjectConstant.forObject(source.asBoxedPrimitive());
+        return HotSpotObjectConstantImpl.forObject(source.asBoxedPrimitive());
     }
 
     @Override
@@ -218,13 +223,13 @@
         if (!source.getKind().isObject()) {
             return null;
         }
-        return JavaConstant.forBoxedPrimitive(HotSpotObjectConstant.asObject(source));
+        return JavaConstant.forBoxedPrimitive(HotSpotObjectConstantImpl.asObject(source));
     }
 
     @Override
     public ResolvedJavaType asJavaType(JavaConstant constant) {
         if (constant instanceof HotSpotObjectConstant) {
-            Object obj = HotSpotObjectConstant.asObject(constant);
+            Object obj = HotSpotObjectConstantImpl.asObject(constant);
             if (obj instanceof Class) {
                 return runtime.getHostProviders().getMetaAccess().lookupJavaType((Class<?>) obj);
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java	Wed Nov 05 21:07:59 2014 +0100
@@ -62,7 +62,7 @@
         if (constant.isNull() || !(constant instanceof HotSpotObjectConstant)) {
             return null;
         }
-        Object o = HotSpotObjectConstant.asObject(constant);
+        Object o = HotSpotObjectConstantImpl.asObject(constant);
         return fromObjectClass(o.getClass());
     }
 
@@ -308,7 +308,7 @@
             } else {
                 if (lookupJavaType.isArray()) {
                     // TODO(tw): Add compressed pointer support.
-                    int length = Array.getLength(HotSpotObjectConstant.asObject(constant));
+                    int length = Array.getLength(HotSpotObjectConstantImpl.asObject(constant));
                     ResolvedJavaType elementType = lookupJavaType.getComponentType();
                     Kind elementKind = elementType.getKind();
                     final int headerSize = HotSpotGraalRuntime.getArrayBaseOffset(elementKind);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java	Wed Nov 05 21:07:59 2014 +0100
@@ -28,133 +28,10 @@
  * Represents a constant non-{@code null} object reference, within the compiler and across the
  * compiler/runtime interface.
  */
-public final class HotSpotObjectConstant extends JavaConstant implements HotSpotConstant, VMConstant {
-
-    private static final long serialVersionUID = 3592151693708093496L;
-
-    public static JavaConstant forObject(Object object) {
-        if (object == null) {
-            return JavaConstant.NULL_OBJECT;
-        } else {
-            return new HotSpotObjectConstant(object, false);
-        }
-    }
-
-    public static JavaConstant forBoxedValue(Kind kind, Object value) {
-        if (kind == Kind.Object) {
-            return HotSpotObjectConstant.forObject(value);
-        } else {
-            return JavaConstant.forBoxedPrimitive(value);
-        }
-    }
-
-    public static Object asObject(Constant constant) {
-        if (JavaConstant.isNull(constant)) {
-            return null;
-        } else {
-            return ((HotSpotObjectConstant) constant).object;
-        }
-    }
+public interface HotSpotObjectConstant extends HotSpotConstant, VMConstant {
 
-    public static Object asBoxedValue(Constant constant) {
-        if (JavaConstant.isNull(constant)) {
-            return null;
-        } else if (constant instanceof HotSpotObjectConstant) {
-            return ((HotSpotObjectConstant) constant).object;
-        } else {
-            return ((JavaConstant) constant).asBoxedPrimitive();
-        }
-    }
-
-    public static boolean isCompressed(Constant constant) {
-        if (JavaConstant.isNull(constant)) {
-            return HotSpotCompressedNullConstant.NULL_OBJECT.equals(constant);
-        } else {
-            return ((HotSpotObjectConstant) constant).compressed;
-        }
-    }
-
-    private final Object object;
-    private final boolean compressed;
-
-    private HotSpotObjectConstant(Object object, boolean compressed) {
-        super(LIRKind.reference(compressed ? Kind.Int : Kind.Object));
-        this.object = object;
-        this.compressed = compressed;
-        assert object != null;
-    }
-
-    public JavaConstant compress() {
-        assert !compressed;
-        return new HotSpotObjectConstant(object, true);
-    }
+    JavaConstant compress();
 
-    public JavaConstant uncompress() {
-        assert compressed;
-        return new HotSpotObjectConstant(object, false);
-    }
-
-    @Override
-    public boolean isNull() {
-        return false;
-    }
-
-    @Override
-    public boolean isDefaultForKind() {
-        return false;
-    }
-
-    @Override
-    public Object asBoxedPrimitive() {
-        throw new IllegalArgumentException();
-    }
-
-    @Override
-    public int asInt() {
-        throw new IllegalArgumentException();
-    }
-
-    @Override
-    public boolean asBoolean() {
-        throw new IllegalArgumentException();
-    }
-
-    @Override
-    public long asLong() {
-        throw new IllegalArgumentException();
-    }
+    JavaConstant uncompress();
 
-    @Override
-    public float asFloat() {
-        throw new IllegalArgumentException();
-    }
-
-    @Override
-    public double asDouble() {
-        throw new IllegalArgumentException();
-    }
-
-    @Override
-    public int hashCode() {
-        return System.identityHashCode(object);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        return o == this || (o instanceof HotSpotObjectConstant && super.equals(o) && object == ((HotSpotObjectConstant) o).object);
-    }
-
-    @Override
-    public String toValueString() {
-        if (object instanceof String) {
-            return (String) object;
-        } else {
-            return Kind.Object.format(object);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return (compressed ? "NarrowOop" : getKind().getJavaName()) + "[" + Kind.Object.format(object) + "]";
-    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java	Wed Nov 05 21:07:59 2014 +0100
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.hotspot.meta;
+
+import com.oracle.graal.api.meta.*;
+
+/**
+ * Represents a constant non-{@code null} object reference, within the compiler and across the
+ * compiler/runtime interface.
+ */
+public final class HotSpotObjectConstantImpl extends JavaConstant implements HotSpotObjectConstant {
+
+    private static final long serialVersionUID = 3592151693708093496L;
+
+    public static JavaConstant forObject(Object object) {
+        if (object == null) {
+            return JavaConstant.NULL_OBJECT;
+        } else {
+            return new HotSpotObjectConstantImpl(object, false);
+        }
+    }
+
+    public static JavaConstant forBoxedValue(Kind kind, Object value) {
+        if (kind == Kind.Object) {
+            return HotSpotObjectConstantImpl.forObject(value);
+        } else {
+            return JavaConstant.forBoxedPrimitive(value);
+        }
+    }
+
+    public static Object asObject(Constant constant) {
+        if (JavaConstant.isNull(constant)) {
+            return null;
+        } else {
+            return ((HotSpotObjectConstantImpl) constant).object;
+        }
+    }
+
+    public static Object asBoxedValue(Constant constant) {
+        if (JavaConstant.isNull(constant)) {
+            return null;
+        } else if (constant instanceof HotSpotObjectConstantImpl) {
+            return ((HotSpotObjectConstantImpl) constant).object;
+        } else {
+            return ((JavaConstant) constant).asBoxedPrimitive();
+        }
+    }
+
+    public static boolean isCompressed(Constant constant) {
+        if (JavaConstant.isNull(constant)) {
+            return HotSpotCompressedNullConstant.NULL_OBJECT.equals(constant);
+        } else {
+            return ((HotSpotObjectConstantImpl) constant).compressed;
+        }
+    }
+
+    private final Object object;
+    private final boolean compressed;
+
+    private HotSpotObjectConstantImpl(Object object, boolean compressed) {
+        super(LIRKind.reference(compressed ? Kind.Int : Kind.Object));
+        this.object = object;
+        this.compressed = compressed;
+        assert object != null;
+    }
+
+    public JavaConstant compress() {
+        assert !compressed;
+        return new HotSpotObjectConstantImpl(object, true);
+    }
+
+    public JavaConstant uncompress() {
+        assert compressed;
+        return new HotSpotObjectConstantImpl(object, false);
+    }
+
+    @Override
+    public boolean isNull() {
+        return false;
+    }
+
+    @Override
+    public boolean isDefaultForKind() {
+        return false;
+    }
+
+    @Override
+    public Object asBoxedPrimitive() {
+        throw new IllegalArgumentException();
+    }
+
+    @Override
+    public int asInt() {
+        throw new IllegalArgumentException();
+    }
+
+    @Override
+    public boolean asBoolean() {
+        throw new IllegalArgumentException();
+    }
+
+    @Override
+    public long asLong() {
+        throw new IllegalArgumentException();
+    }
+
+    @Override
+    public float asFloat() {
+        throw new IllegalArgumentException();
+    }
+
+    @Override
+    public double asDouble() {
+        throw new IllegalArgumentException();
+    }
+
+    @Override
+    public int hashCode() {
+        return System.identityHashCode(object);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        return o == this || (o instanceof HotSpotObjectConstantImpl && super.equals(o) && object == ((HotSpotObjectConstantImpl) o).object);
+    }
+
+    @Override
+    public String toValueString() {
+        if (object instanceof String) {
+            return (String) object;
+        } else {
+            return Kind.Object.format(object);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return (compressed ? "NarrowOop" : getKind().getJavaName()) + "[" + Kind.Object.format(object) + "]";
+    }
+}
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java	Wed Nov 05 21:07:59 2014 +0100
@@ -210,7 +210,7 @@
              * have a non-default value.
              */
             assert !isStatic();
-            Object object = HotSpotObjectConstant.asObject(receiver);
+            Object object = HotSpotObjectConstantImpl.asObject(receiver);
 
             // Canonicalization may attempt to process an unsafe read before
             // processing a guard (e.g. a null check or a type check) for this read
@@ -236,7 +236,7 @@
                         if (isInObject(object)) {
                             assert getName().equals("value") : "Unexpected field in " + StableOptionValue.class.getName() + " hierarchy:" + this;
                             StableOptionValue<?> option = (StableOptionValue<?>) object;
-                            return HotSpotObjectConstant.forObject(option.getValue());
+                            return HotSpotObjectConstantImpl.forObject(option.getValue());
                         }
                     }
                 }
@@ -263,12 +263,12 @@
         if (receiver == null) {
             assert isStatic();
             if (holder.isInitialized()) {
-                return runtime().getHostProviders().getConstantReflection().readUnsafeConstant(getKind(), HotSpotObjectConstant.forObject(holder.mirror()), offset);
+                return runtime().getHostProviders().getConstantReflection().readUnsafeConstant(getKind(), HotSpotObjectConstantImpl.forObject(holder.mirror()), offset);
             }
             return null;
         } else {
             assert !isStatic();
-            assert receiver.isNonNull() && isInObject(HotSpotObjectConstant.asObject(receiver));
+            assert receiver.isNonNull() && isInObject(HotSpotObjectConstantImpl.asObject(receiver));
             return runtime().getHostProviders().getConstantReflection().readUnsafeConstant(getKind(), receiver, offset);
         }
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java	Wed Nov 05 21:07:59 2014 +0100
@@ -709,13 +709,13 @@
 
         Object[] objArguments = new Object[arguments.length];
         for (int i = 0; i < arguments.length; i++) {
-            objArguments[i] = HotSpotObjectConstant.asBoxedValue(arguments[i]);
+            objArguments[i] = HotSpotObjectConstantImpl.asBoxedValue(arguments[i]);
         }
-        Object objReceiver = receiver != null ? HotSpotObjectConstant.asObject(receiver) : null;
+        Object objReceiver = receiver != null ? HotSpotObjectConstantImpl.asObject(receiver) : null;
 
         try {
             Object objResult = javaMethod.invoke(objReceiver, objArguments);
-            return javaMethod.getReturnType() == void.class ? null : HotSpotObjectConstant.forBoxedValue(getSignature().getReturnKind(), objResult);
+            return javaMethod.getReturnType() == void.class ? null : HotSpotObjectConstantImpl.forBoxedValue(getSignature().getReturnKind(), objResult);
 
         } catch (IllegalAccessException | InvocationTargetException ex) {
             throw new IllegalArgumentException(ex);
@@ -730,13 +730,13 @@
 
         Object[] objArguments = new Object[arguments.length];
         for (int i = 0; i < arguments.length; i++) {
-            objArguments[i] = HotSpotObjectConstant.asBoxedValue(arguments[i]);
+            objArguments[i] = HotSpotObjectConstantImpl.asBoxedValue(arguments[i]);
         }
 
         try {
             Object objResult = javaConstructor.newInstance(objArguments);
             assert objResult != null;
-            return HotSpotObjectConstant.forObject(objResult);
+            return HotSpotObjectConstantImpl.forObject(objResult);
 
         } catch (IllegalAccessException | InvocationTargetException | InstantiationException ex) {
             throw new IllegalArgumentException(ex);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java	Wed Nov 05 21:07:59 2014 +0100
@@ -281,7 +281,7 @@
     public JavaConstant getEncoding(Representation r) {
         switch (r) {
             case JavaClass:
-                return HotSpotObjectConstant.forObject(mirror());
+                return HotSpotObjectConstantImpl.forObject(mirror());
             case ObjectHub:
                 return klass();
             default:
@@ -343,7 +343,7 @@
     @Override
     public boolean isInstance(JavaConstant obj) {
         if (obj.getKind() == Kind.Object && !obj.isNull()) {
-            return mirror().isInstance(HotSpotObjectConstant.asObject(obj));
+            return mirror().isInstance(HotSpotObjectConstantImpl.asObject(obj));
         }
         return false;
     }
@@ -862,7 +862,7 @@
 
     @Override
     public JavaConstant newArray(int length) {
-        return HotSpotObjectConstant.forObject(Array.newInstance(mirror(), length));
+        return HotSpotObjectConstantImpl.forObject(Array.newInstance(mirror(), length));
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java	Wed Nov 05 21:07:59 2014 +0100
@@ -280,7 +280,7 @@
 
     @Override
     public JavaConstant newArray(int length) {
-        return HotSpotObjectConstant.forObject(Array.newInstance(mirror(), length));
+        return HotSpotObjectConstantImpl.forObject(Array.newInstance(mirror(), length));
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java	Wed Nov 05 21:07:59 2014 +0100
@@ -29,21 +29,21 @@
 
     @Override
     public JavaConstant forObject(Object object) {
-        return HotSpotObjectConstant.forObject(object);
+        return HotSpotObjectConstantImpl.forObject(object);
     }
 
     @Override
     public Object asObject(JavaConstant constant) {
-        return HotSpotObjectConstant.asObject(constant);
+        return HotSpotObjectConstantImpl.asObject(constant);
     }
 
     @Override
     public JavaConstant forBoxed(Kind kind, Object value) {
-        return HotSpotObjectConstant.forBoxedValue(kind, value);
+        return HotSpotObjectConstantImpl.forBoxedValue(kind, value);
     }
 
     @Override
     public Object asBoxedValue(JavaConstant constant) {
-        return HotSpotObjectConstant.asBoxedValue(constant);
+        return HotSpotObjectConstantImpl.asBoxedValue(constant);
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSpeculationLog.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSpeculationLog.java	Wed Nov 05 21:07:59 2014 +0100
@@ -30,6 +30,6 @@
     @Override
     public JavaConstant speculate(Object reason) {
         addSpeculation(reason);
-        return HotSpotObjectConstant.forObject(reason);
+        return HotSpotObjectConstantImpl.forObject(reason);
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java	Wed Nov 05 21:07:59 2014 +0100
@@ -55,14 +55,14 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 /*
                  * This is an intrinsic for getClassLoader0, which occurs after any security checks.
                  * We can't call that directly so just call getClassLoader.
                  */
                 ClassLoader classLoader = c.getClassLoader();
-                return ConstantNode.forConstant(HotSpotObjectConstant.forObject(classLoader), tool.getMetaAccess());
+                return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(classLoader), tool.getMetaAccess());
             }
         }
         return this;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -54,10 +54,10 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 Class<?> componentType = c.getComponentType();
-                return ConstantNode.forConstant(HotSpotObjectConstant.forObject(componentType), tool.getMetaAccess());
+                return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(componentType), tool.getMetaAccess());
             }
         }
         return this;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -54,7 +54,7 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 return ConstantNode.forInt(c.getModifiers());
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -54,10 +54,10 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 Class<?> superclass = c.getSuperclass();
-                return ConstantNode.forConstant(HotSpotObjectConstant.forObject(superclass), tool.getMetaAccess());
+                return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(superclass), tool.getMetaAccess());
             }
         }
         return this;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -54,7 +54,7 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 return ConstantNode.forBoolean(c.isArray());
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -54,7 +54,7 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 return ConstantNode.forBoolean(c.isInterface());
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -54,7 +54,7 @@
     public Node canonical(CanonicalizerTool tool) {
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
-            Class<?> c = (Class<?>) HotSpotObjectConstant.asObject(javaClass.asJavaConstant());
+            Class<?> c = (Class<?>) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant());
             if (c != null) {
                 return ConstantNode.forBoolean(c.isPrimitive());
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java	Wed Nov 05 21:07:59 2014 +0100
@@ -80,7 +80,7 @@
             return false;
         }
 
-        Object o = HotSpotObjectConstant.asObject(node.asJavaConstant());
+        Object o = HotSpotObjectConstantImpl.asObject(node.asJavaConstant());
         if (!(o instanceof String)) {
             return false;
         }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java	Wed Nov 05 21:07:59 2014 +0100
@@ -60,9 +60,9 @@
     }
 
     private ValueNode getClassConstantReplacement(StructuredGraph graph, PhaseContext context, JavaConstant constant) {
-        if (constant instanceof HotSpotObjectConstant && HotSpotObjectConstant.asObject(constant) instanceof Class<?>) {
+        if (constant instanceof HotSpotObjectConstant && HotSpotObjectConstantImpl.asObject(constant) instanceof Class<?>) {
             MetaAccessProvider metaAccess = context.getMetaAccess();
-            ResolvedJavaType type = metaAccess.lookupJavaType((Class<?>) HotSpotObjectConstant.asObject(constant));
+            ResolvedJavaType type = metaAccess.lookupJavaType((Class<?>) HotSpotObjectConstantImpl.asObject(constant));
             JavaConstant klass;
             LocationNode location;
             if (type instanceof HotSpotResolvedObjectType) {
@@ -94,7 +94,7 @@
             Stamp stamp = StampFactory.exactNonNull(metaAccess.lookupJavaType(Class.class));
             FloatingReadNode freadNode = graph.unique(FloatingReadNode.create(klassNode, location, null, stamp));
 
-            if (HotSpotObjectConstant.isCompressed(constant)) {
+            if (HotSpotObjectConstantImpl.isCompressed(constant)) {
                 return CompressionNode.compress(freadNode, oopEncoding);
             } else {
                 return freadNode;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -51,7 +51,7 @@
 
     private ConstantNode getConstantCallTarget(MetaAccessProvider metaAccess, Assumptions assumptions) {
         if (getCallSite().isConstant() && !getCallSite().isNullConstant()) {
-            CallSite callSite = (CallSite) HotSpotObjectConstant.asObject(getCallSite().asJavaConstant());
+            CallSite callSite = (CallSite) HotSpotObjectConstantImpl.asObject(getCallSite().asJavaConstant());
             MethodHandle target = callSite.getTarget();
             if (!(callSite instanceof ConstantCallSite)) {
                 if (assumptions == null || !assumptions.useOptimisticAssumptions()) {
@@ -59,7 +59,7 @@
                 }
                 assumptions.record(new Assumptions.CallSiteTargetValue(callSite, target));
             }
-            return ConstantNode.forConstant(HotSpotObjectConstant.forObject(target), metaAccess, graph());
+            return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(target), metaAccess, graph());
         }
         return null;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java	Wed Nov 05 21:07:59 2014 +0100
@@ -61,7 +61,7 @@
             if (param.isNull() || ImmutableCode.getValue()) {
                 return null;
             }
-            return HotSpotObjectConstant.forObject(CompositeValueClass.get((Class<? extends CompositeValue>) HotSpotObjectConstant.asObject(param)));
+            return HotSpotObjectConstantImpl.forObject(CompositeValueClass.get((Class<? extends CompositeValue>) HotSpotObjectConstantImpl.asObject(param)));
         }
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java	Wed Nov 05 21:07:59 2014 +0100
@@ -60,7 +60,7 @@
             if (param.isNull() || ImmutableCode.getValue()) {
                 return null;
             }
-            return HotSpotObjectConstant.forObject(NodeClass.get((Class<?>) HotSpotObjectConstant.asObject(param)));
+            return HotSpotObjectConstantImpl.forObject(NodeClass.get((Class<?>) HotSpotObjectConstantImpl.asObject(param)));
         }
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Wed Nov 05 21:07:59 2014 +0100
@@ -507,7 +507,7 @@
                     for (ReturnNode ret : rets) {
                         returnType = checkCounter.getMethod().getSignature().getReturnType(checkCounter.getMethod().getDeclaringClass());
                         String msg = "unbalanced monitors in " + graph.method().format("%H.%n(%p)") + ", count = %d";
-                        ConstantNode errMsg = ConstantNode.forConstant(HotSpotObjectConstant.forObject(msg), providers.getMetaAccess(), graph);
+                        ConstantNode errMsg = ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(msg), providers.getMetaAccess(), graph);
                         callTarget = graph.add(MethodCallTargetNode.create(InvokeKind.Static, checkCounter.getMethod(), new ValueNode[]{errMsg}, returnType));
                         invoke = graph.add(InvokeNode.create(callTarget, 0));
                         List<ValueNode> stack = Collections.emptyList();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java	Wed Nov 05 17:32:21 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java	Wed Nov 05 21:07:59 2014 +0100
@@ -43,6 +43,6 @@
 
     @Override
     protected JavaConstant evaluate(JavaConstant param, MetaAccessProvider metaAccess) {
-        return ImmutableCode.getValue() || param.isNull() ? null : JavaConstant.forInt(System.identityHashCode(HotSpotObjectConstant.asObject(param)));
+        return ImmutableCode.getValue() || param.isNull() ? null : JavaConstant.forInt(System.identityHashCode(HotSpotObjectConstantImpl.asObject(param)));
     }
 }
--- a/src/cpu/sparc/vm/graalCodeInstaller_sparc.cpp	Wed Nov 05 17:32:21 2014 +0100
+++ b/src/cpu/sparc/vm/graalCodeInstaller_sparc.cpp	Wed Nov 05 21:07:59 2014 +0100
@@ -42,9 +42,9 @@
 
 void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle& constant) {
   address pc = _instructions->start() + pc_offset;
-  Handle obj = HotSpotObjectConstant::object(constant);
+  Handle obj = HotSpotObjectConstantImpl::object(constant);
   jobject value = JNIHandles::make_local(obj());
-  if (HotSpotObjectConstant::compressed(constant)) {
+  if (HotSpotObjectConstantImpl::compressed(constant)) {
     fatal("unimplemented: narrow oop relocation");
   } else {
     NativeMovConstReg* move = nativeMovConstReg_at(pc);
--- a/src/cpu/x86/vm/graalCodeInstaller_x86.cpp	Wed Nov 05 17:32:21 2014 +0100
+++ b/src/cpu/x86/vm/graalCodeInstaller_x86.cpp	Wed Nov 05 21:07:59 2014 +0100
@@ -60,9 +60,9 @@
 
 void CodeInstaller::pd_patch_OopConstant(int pc_offset, Handle& constant) {
   address pc = _instructions->start() + pc_offset;
-  Handle obj = HotSpotObjectConstant::object(constant);
+  Handle obj = HotSpotObjectConstantImpl::object(constant);
   jobject value = JNIHandles::make_local(obj());
-  if (HotSpotObjectConstant::compressed(constant)) {
+  if (HotSpotObjectConstantImpl::compressed(constant)) {
     address operand = Assembler::locate_operand(pc, Assembler::narrow_oop_operand);
     int oop_index = _oop_recorder->find_index(value);
     _instructions->relocate(pc, oop_Relocation::spec(oop_index), Assembler::narrow_oop_operand);
--- a/src/share/vm/classfile/systemDictionary.hpp	Wed Nov 05 17:32:21 2014 +0100
+++ b/src/share/vm/classfile/systemDictionary.hpp	Wed Nov 05 21:07:59 2014 +0100
@@ -201,7 +201,7 @@
   GRAAL_ONLY(do_klass(HotSpotResolvedObjectTypeImpl_klass,   com_oracle_graal_hotspot_meta_HotSpotResolvedObjectTypeImpl,  Graal)) \
   GRAAL_ONLY(do_klass(HotSpotMonitorValue_klass,             com_oracle_graal_hotspot_meta_HotSpotMonitorValue,            Graal)) \
   GRAAL_ONLY(do_klass(HotSpotCompressedNullConstant_klass,   com_oracle_graal_hotspot_meta_HotSpotCompressedNullConstant,  Graal)) \
-  GRAAL_ONLY(do_klass(HotSpotObjectConstant_klass,           com_oracle_graal_hotspot_meta_HotSpotObjectConstant,          Graal)) \
+  GRAAL_ONLY(do_klass(HotSpotObjectConstantImpl_klass,       com_oracle_graal_hotspot_meta_HotSpotObjectConstantImpl,      Graal)) \
   GRAAL_ONLY(do_klass(HotSpotMetaspaceConstant_klass,        com_oracle_graal_hotspot_meta_HotSpotMetaspaceConstant,       Graal)) \
   GRAAL_ONLY(do_klass(HotSpotStackFrameReference_klass,      com_oracle_graal_hotspot_HotSpotStackFrameReference,          Graal)) \
   GRAAL_ONLY(do_klass(CompilationTask_klass,                 com_oracle_graal_hotspot_CompilationTask,                     Graal)) \
--- a/src/share/vm/classfile/vmSymbols.hpp	Wed Nov 05 17:32:21 2014 +0100
+++ b/src/share/vm/classfile/vmSymbols.hpp	Wed Nov 05 21:07:59 2014 +0100
@@ -308,7 +308,7 @@
   GRAAL_ONLY(template(com_oracle_graal_hotspot_meta_HotSpotResolvedObjectTypeImpl, "com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl")) \
   GRAAL_ONLY(template(com_oracle_graal_hotspot_meta_HotSpotMonitorValue,        "com/oracle/graal/hotspot/meta/HotSpotMonitorValue"))             \
   GRAAL_ONLY(template(com_oracle_graal_hotspot_meta_HotSpotCompressedNullConstant, "com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant")) \
-  GRAAL_ONLY(template(com_oracle_graal_hotspot_meta_HotSpotObjectConstant,      "com/oracle/graal/hotspot/meta/HotSpotObjectConstant"))           \
+  GRAAL_ONLY(template(com_oracle_graal_hotspot_meta_HotSpotObjectConstantImpl,  "com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl"))       \
   GRAAL_ONLY(template(com_oracle_graal_hotspot_meta_HotSpotMetaspaceConstant,   "com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstant"))        \
   GRAAL_ONLY(template(com_oracle_graal_hotspot_HotSpotStackFrameReference,      "com/oracle/graal/hotspot/HotSpotStackFrameReference"))           \
   GRAAL_ONLY(template(com_oracle_graal_hotspot_CompilationTask,                 "com/oracle/graal/hotspot/CompilationTask"))                      \
--- a/src/share/vm/graal/graalCodeInstaller.cpp	Wed Nov 05 17:32:21 2014 +0100
+++ b/src/share/vm/graal/graalCodeInstaller.cpp	Wed Nov 05 21:07:59 2014 +0100
@@ -315,8 +315,8 @@
       if (value->is_a(NullConstant::klass()) || value->is_a(HotSpotCompressedNullConstant::klass())) {
         return _oop_null_scope_value;
       } else {
-        assert(value->is_a(HotSpotObjectConstant::klass()), "unexpected constant type");
-        oop obj = HotSpotObjectConstant::object(value);
+        assert(value->is_a(HotSpotObjectConstantImpl::klass()), "unexpected constant type");
+        oop obj = HotSpotObjectConstantImpl::object(value);
         assert(obj != NULL, "null value must be in NullConstant");
         return new ConstantOopWriteValue(JNIHandles::make_local(obj));
       }
@@ -571,13 +571,13 @@
     Handle constant = CompilationResult_ConstantReference::constant(reference);
     if (constant->is_a(HotSpotMetaspaceConstant::klass())) {
       record_metadata_in_patch(constant, _oop_recorder);
-    } else if (constant->is_a(HotSpotObjectConstant::klass())) {
-      Handle obj = HotSpotObjectConstant::object(constant);
+    } else if (constant->is_a(HotSpotObjectConstantImpl::klass())) {
+      Handle obj = HotSpotObjectConstantImpl::object(constant);
       jobject value = JNIHandles::make_local(obj());
       int oop_index = _oop_recorder->find_index(value);
 
       address dest = _constants->start() + CompilationResult_Site::pcOffset(patch);
-      if (HotSpotObjectConstant::compressed(constant)) {
+      if (HotSpotObjectConstantImpl::compressed(constant)) {
 #ifdef _LP64
         _constants->relocate(dest, oop_Relocation::spec(oop_index), relocInfo::narrow_oop_in_const);
 #else
@@ -907,7 +907,7 @@
   oop reference = CompilationResult_DataPatch::reference(site);
   if (reference->is_a(CompilationResult_ConstantReference::klass())) {
     Handle constant = CompilationResult_ConstantReference::constant(reference);
-    if (constant->is_a(HotSpotObjectConstant::klass())) {
+    if (constant->is_a(HotSpotObjectConstantImpl::klass())) {
       pd_patch_OopConstant(pc_offset, constant);
     } else if (constant->is_a(HotSpotMetaspaceConstant::klass())) {
       record_metadata_in_patch(constant, _oop_recorder);
--- a/src/share/vm/graal/graalJavaAccess.hpp	Wed Nov 05 17:32:21 2014 +0100
+++ b/src/share/vm/graal/graalJavaAccess.hpp	Wed Nov 05 21:07:59 2014 +0100
@@ -202,9 +202,9 @@
   end_class                                                                                                                                                    \
   start_class(HotSpotCompressedNullConstant)                                                                                                                   \
   end_class                                                                                                                                                    \
-  start_class(HotSpotObjectConstant)                                                                                                                           \
-    oop_field(HotSpotObjectConstant, object, "Ljava/lang/Object;")                                                                                             \
-    boolean_field(HotSpotObjectConstant, compressed)                                                                                                           \
+  start_class(HotSpotObjectConstantImpl)                                                                                                                       \
+    oop_field(HotSpotObjectConstantImpl, object, "Ljava/lang/Object;")                                                                                         \
+    boolean_field(HotSpotObjectConstantImpl, compressed)                                                                                                       \
   end_class                                                                                                                                                    \
   start_class(HotSpotMetaspaceConstant)                                                                                                                        \
     long_field(HotSpotMetaspaceConstant, primitive)                                                                                                            \