changeset 18549:8f4945c8126a

Merge.
author Doug Simon <doug.simon@oracle.com>
date Wed, 26 Nov 2014 21:00:02 +0100
parents 5851c17b571e (diff) 11f353f259ae (current diff)
children 99c57f4c3fa3 bbf27a6ffb52
files
diffstat 28 files changed, 105 insertions(+), 95 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java	Wed Nov 26 21:00:02 2014 +0100
@@ -24,10 +24,12 @@
 
 import java.util.*;
 
+import com.oracle.graal.api.meta.Kind.FormatWithToString;
+
 /**
  * A {@link LocationIdentity} with a name.
  */
-public final class NamedLocationIdentity implements LocationIdentity {
+public final class NamedLocationIdentity implements LocationIdentity, FormatWithToString {
 
     /**
      * Map for asserting all {@link NamedLocationIdentity} instances have a unique name.
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java	Wed Nov 26 21:00:02 2014 +0100
@@ -23,7 +23,6 @@
 package com.oracle.graal.api.meta;
 
 import java.lang.annotation.*;
-import java.lang.reflect.*;
 import java.net.*;
 
 /**
@@ -344,12 +343,6 @@
     ResolvedJavaMethod getClassInitializer();
 
     /**
-     * Creates a new array with this type as the component type and the specified length. This
-     * method is similar to {@link Array#newInstance(Class, int)}.
-     */
-    JavaConstant newArray(int length);
-
-    /**
      * Returns true if this type represents and interface and it should be trusted even in places
      * where the JVM verifier would not give any guarantees other than {@link Object}.
      */
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java	Wed Nov 26 21:00:02 2014 +0100
@@ -72,7 +72,7 @@
             Call call = (Call) infopoint;
             assert call.target instanceof HotSpotForeignCallLinkage : this + " cannot have non runtime call: " + call.target;
             HotSpotForeignCallLinkage linkage = (HotSpotForeignCallLinkage) call.target;
-            assert !linkage.isCompiledStub() || linkage.getDescriptor() == UNCOMMON_TRAP_HANDLER : this + " cannot call compiled stub " + linkage;
+            assert !linkage.isCompiledStub() || linkage.getDescriptor().equals(UNCOMMON_TRAP_HANDLER) : this + " cannot call compiled stub " + linkage;
         }
         return true;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java	Wed Nov 26 21:00:02 2014 +0100
@@ -399,7 +399,7 @@
 
         if (metaspaceKlass == 0L) {
             assert resolve == false;
-            return HotSpotUnresolvedJavaType.create(name);
+            return HotSpotUnresolvedJavaType.create(this, name);
         }
         return HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(metaspaceKlass);
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/LocalImpl.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/LocalImpl.java	Wed Nov 26 21:00:02 2014 +0100
@@ -22,10 +22,7 @@
  */
 package com.oracle.graal.hotspot.debug;
 
-import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
-
 import com.oracle.graal.api.meta.*;
-import com.oracle.graal.hotspot.meta.*;
 
 public class LocalImpl implements Local {
 
@@ -35,12 +32,12 @@
     private final int slot;
     private final JavaType type;
 
-    public LocalImpl(String name, String type, HotSpotResolvedObjectType holder, int startBci, int endBci, int slot) {
+    public LocalImpl(String name, JavaType type, int startBci, int endBci, int slot) {
         this.name = name;
         this.startBci = startBci;
         this.endBci = endBci;
         this.slot = slot;
-        this.type = runtime().lookupType(type, holder, false);
+        this.type = type;
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Wed Nov 26 21:00:02 2014 +0100
@@ -84,7 +84,7 @@
 
         assert target == providers.getCodeCache().getTarget();
         checkcastDynamicSnippets = new CheckCastDynamicSnippets.Templates(providers, target);
-        instanceofSnippets = new InstanceOfSnippets.Templates(providers, target);
+        instanceofSnippets = new InstanceOfSnippets.Templates(providers, target, config.compileThreshold);
         newObjectSnippets = new NewObjectSnippets.Templates(providers, target);
         monitorSnippets = new MonitorSnippets.Templates(providers, target, config.useFastLocking);
         writeBarrierSnippets = new WriteBarrierSnippets.Templates(providers, target, config.useCompressedOops ? config.getOopEncoding() : null);
@@ -286,12 +286,12 @@
 
     @Override
     protected BarrierType fieldInitializationBarrier(Kind entryKind) {
-        return (entryKind == Kind.Object && !useDeferredInitBarriers()) ? BarrierType.IMPRECISE : BarrierType.NONE;
+        return (entryKind == Kind.Object && !runtime.getConfig().useDeferredInitBarriers) ? BarrierType.IMPRECISE : BarrierType.NONE;
     }
 
     @Override
     protected BarrierType arrayInitializationBarrier(Kind entryKind) {
-        return (entryKind == Kind.Object && !useDeferredInitBarriers()) ? BarrierType.PRECISE : BarrierType.NONE;
+        return (entryKind == Kind.Object && !runtime.getConfig().useDeferredInitBarriers) ? BarrierType.PRECISE : BarrierType.NONE;
     }
 
     private void lowerOSRStartNode(OSRStartNode osrStart) {
@@ -378,8 +378,8 @@
         }
     }
 
-    private static boolean addReadBarrier(UnsafeLoadNode load) {
-        if (useG1GC() && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object &&
+    private boolean addReadBarrier(UnsafeLoadNode load) {
+        if (runtime.getConfig().useG1GC && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object &&
                         !StampTool.isPointerAlwaysNull(load.object())) {
             ResolvedJavaType type = StampTool.typeOrNull(load.object());
             if (type != null && !type.isArray()) {
@@ -439,7 +439,8 @@
     protected BarrierType fieldLoadBarrierType(ResolvedJavaField f) {
         HotSpotResolvedJavaField loadField = (HotSpotResolvedJavaField) f;
         BarrierType barrierType = BarrierType.NONE;
-        if (config().useG1GC && loadField.getKind() == Kind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) && loadField.getName().equals("referent")) {
+        if (runtime.getConfig().useG1GC && loadField.getKind() == Kind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) &&
+                        loadField.getName().equals("referent")) {
             barrierType = BarrierType.PRECISE;
         }
         return barrierType;
@@ -453,7 +454,7 @@
 
     @Override
     public int arrayScalingFactor(Kind kind) {
-        if (useCompressedOops() && kind == Kind.Object) {
+        if (runtime.getConfig().useCompressedOops && kind == Kind.Object) {
             return this.runtime.getTarget().getSizeInBytes(Kind.Int);
         }
         return super.arrayScalingFactor(kind);
@@ -466,7 +467,7 @@
 
     @Override
     protected int arrayLengthOffset() {
-        return config().arrayLengthOffset;
+        return runtime.getConfig().arrayLengthOffset;
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java	Wed Nov 26 21:00:02 2014 +0100
@@ -301,9 +301,9 @@
                 compressed = c.isCompressed();
                 raw = 0xDEADDEADDEADDEADL;
             } else if (constant instanceof HotSpotMetaspaceConstant) {
-                HotSpotMetaspaceConstantImpl meta = (HotSpotMetaspaceConstantImpl) constant;
-                compressed = meta.getKind() != target.wordKind;
-                raw = meta.asLong();
+                HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) constant;
+                compressed = meta.isCompressed();
+                raw = meta.rawValue();
             } else {
                 throw GraalInternalError.shouldNotReachHere();
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java	Wed Nov 26 21:00:02 2014 +0100
@@ -417,7 +417,7 @@
 
     @Override
     public Signature lookupSignature(int cpi) {
-        return new HotSpotSignature(lookupUtf8(cpi));
+        return new HotSpotSignature(runtime(), lookupUtf8(cpi));
     }
 
     @Override
@@ -444,7 +444,7 @@
         if ((metaspacePointer & config.compilerToVMSymbolTag) != 0) {
             final long metaspaceSymbol = metaspacePointer & ~config.compilerToVMSymbolTag;
             String name = runtime.getCompilerToVM().getSymbol(metaspaceSymbol);
-            return HotSpotUnresolvedJavaType.create("L" + name + ";");
+            return HotSpotUnresolvedJavaType.create(runtime(), "L" + name + ";");
         } else {
             assert (metaspacePointer & config.compilerToVMKlassTag) == 0;
             return HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(metaspacePointer);
@@ -460,9 +460,9 @@
         } else {
             // Get the method's name and signature.
             String name = getNameRefAt(index);
-            String signature = getSignatureRefAt(index);
+            HotSpotSignature signature = new HotSpotSignature(runtime(), getSignatureRefAt(index));
             if (opcode == Bytecodes.INVOKEDYNAMIC) {
-                HotSpotResolvedObjectTypeImpl holder = HotSpotResolvedObjectTypeImpl.fromObjectClass(MethodHandle.class);
+                HotSpotResolvedObjectType holder = HotSpotResolvedObjectTypeImpl.fromObjectClass(MethodHandle.class);
                 return new HotSpotMethodUnresolved(name, signature, holder);
             } else {
                 final int klassIndex = getKlassRefIndexAt(index);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java	Wed Nov 26 21:00:02 2014 +0100
@@ -120,7 +120,7 @@
      */
     public void linkForeignCall(HotSpotProviders providers, ForeignCallDescriptor descriptor, long address, boolean prependThread, Transition transition, boolean reexecutable,
                     LocationIdentity... killedLocations) {
-        ForeignCallStub stub = new ForeignCallStub(providers, address, descriptor, prependThread, transition, reexecutable, killedLocations);
+        ForeignCallStub stub = new ForeignCallStub(runtime, providers, address, descriptor, prependThread, transition, reexecutable, killedLocations);
         HotSpotForeignCallLinkage linkage = stub.getLinkage();
         HotSpotForeignCallLinkage targetLinkage = stub.getTargetLinkage();
         linkage.setCompiledStub(stub);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java	Wed Nov 26 21:00:02 2014 +0100
@@ -46,23 +46,22 @@
         this.runtime = runtime;
     }
 
-    public HotSpotResolvedJavaType lookupJavaType(Class<?> clazz) {
+    public ResolvedJavaType lookupJavaType(Class<?> clazz) {
         if (clazz == null) {
             throw new IllegalArgumentException("Class parameter was null");
         }
-        return fromClass(clazz);
+        return runtime.fromClass(clazz);
     }
 
-    public HotSpotResolvedObjectTypeImpl lookupJavaType(JavaConstant constant) {
+    public HotSpotResolvedObjectType lookupJavaType(JavaConstant constant) {
         if (constant.isNull() || !(constant instanceof HotSpotObjectConstant)) {
             return null;
         }
-        Object o = ((HotSpotObjectConstantImpl) constant).object();
-        return fromObjectClass(o.getClass());
+        return ((HotSpotObjectConstant) constant).getType();
     }
 
     public Signature parseMethodDescriptor(String signature) {
-        return new HotSpotSignature(signature);
+        return new HotSpotSignature(runtime, signature);
     }
 
     /**
@@ -106,11 +105,11 @@
         final int modifiers = reflectionField.getModifiers();
         final long offset = Modifier.isStatic(modifiers) ? unsafe.staticFieldOffset(reflectionField) : unsafe.objectFieldOffset(reflectionField);
 
-        HotSpotResolvedObjectTypeImpl holder = fromObjectClass(fieldHolder);
-        HotSpotResolvedJavaType type = fromClass(fieldType);
+        HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder);
+        JavaType type = fromClass(fieldType);
 
         if (offset != -1) {
-            HotSpotResolvedObjectTypeImpl resolved = holder;
+            HotSpotResolvedObjectType resolved = holder;
             return resolved.createField(name, type, offset, modifiers);
         } else {
             throw GraalInternalError.shouldNotReachHere("unresolved field " + reflectionField);
@@ -286,7 +285,7 @@
     @Override
     public long getMemorySize(JavaConstant constant) {
         if (constant.getKind() == Kind.Object) {
-            HotSpotResolvedObjectTypeImpl lookupJavaType = this.lookupJavaType(constant);
+            HotSpotResolvedObjectType lookupJavaType = lookupJavaType(constant);
 
             if (lookupJavaType == null) {
                 return 0;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstant.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstant.java	Wed Nov 26 21:00:02 2014 +0100
@@ -34,4 +34,6 @@
     Constant uncompress(CompressEncoding encoding);
 
     HotSpotResolvedObjectType asResolvedJavaType();
+
+    long rawValue();
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstantImpl.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstantImpl.java	Wed Nov 26 21:00:02 2014 +0100
@@ -87,4 +87,8 @@
         }
         return null;
     }
+
+    public long rawValue() {
+        return asLong();
+    }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java	Wed Nov 26 21:00:02 2014 +0100
@@ -176,7 +176,7 @@
      */
     private long readUnsignedInt(int position, int offsetInBytes) {
         long fullOffsetInBytes = computeFullOffset(position, offsetInBytes);
-        return unsafeReadWord(metaspaceMethodData + fullOffsetInBytes) & 0xFFFFFFFFL;
+        return unsafe.getAddress(metaspaceMethodData + fullOffsetInBytes) & 0xFFFFFFFFL;
     }
 
     private int readUnsignedIntAsSignedInt(int position, int offsetInBytes) {
@@ -191,12 +191,12 @@
      */
     private int readInt(int position, int offsetInBytes) {
         long fullOffsetInBytes = computeFullOffset(position, offsetInBytes);
-        return (int) unsafeReadWord(metaspaceMethodData + fullOffsetInBytes);
+        return (int) unsafe.getAddress(metaspaceMethodData + fullOffsetInBytes);
     }
 
     private long readWord(int position, int offsetInBytes) {
         long fullOffsetInBytes = computeFullOffset(position, offsetInBytes);
-        return unsafeReadWord(metaspaceMethodData + fullOffsetInBytes);
+        return unsafe.getAddress(metaspaceMethodData + fullOffsetInBytes);
     }
 
     private static int truncateLongToInt(long value) {
@@ -332,7 +332,11 @@
             return data.readUnsignedByte(position, config.dataLayoutFlagsOffset);
         }
 
-        protected int getDynamicSize(@SuppressWarnings("unused") HotSpotMethodData data, @SuppressWarnings("unused") int position) {
+        /**
+         * @param data
+         * @param position
+         */
+        protected int getDynamicSize(HotSpotMethodData data, int position) {
             return 0;
         }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodUnresolved.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodUnresolved.java	Wed Nov 26 21:00:02 2014 +0100
@@ -33,10 +33,10 @@
     private final Signature signature;
     protected JavaType holder;
 
-    public HotSpotMethodUnresolved(String name, String signature, JavaType holder) {
+    public HotSpotMethodUnresolved(String name, Signature signature, JavaType holder) {
         super(name);
         this.holder = holder;
-        this.signature = new HotSpotSignature(signature);
+        this.signature = signature;
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java	Wed Nov 26 21:00:02 2014 +0100
@@ -43,6 +43,11 @@
     boolean isCompressed();
 
     /**
+     * Gets the resolved Java type of the object represented by this constant.
+     */
+    HotSpotResolvedObjectType getType();
+
+    /**
      * Gets the result of {@link Class#getClassLoader()} for the {@link Class} object represented by
      * this constant.
      *
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java	Wed Nov 26 21:00:02 2014 +0100
@@ -22,6 +22,8 @@
  */
 package com.oracle.graal.hotspot.meta;
 
+import static com.oracle.graal.hotspot.meta.HotSpotResolvedObjectTypeImpl.*;
+
 import java.lang.invoke.*;
 
 import com.oracle.graal.api.code.*;
@@ -43,7 +45,7 @@
         return forObject(object, false);
     }
 
-    public static JavaConstant forObject(Object object, boolean compressed) {
+    static JavaConstant forObject(Object object, boolean compressed) {
         if (object == null) {
             return compressed ? HotSpotCompressedNullConstant.COMPRESSED_NULL : JavaConstant.NULL_POINTER;
         } else {
@@ -51,7 +53,7 @@
         }
     }
 
-    public static JavaConstant forStableArray(Object object, int stableDimension, boolean isDefaultStable) {
+    static JavaConstant forStableArray(Object object, int stableDimension, boolean isDefaultStable) {
         if (object == null) {
             return JavaConstant.NULL_POINTER;
         } else {
@@ -68,7 +70,7 @@
         }
     }
 
-    public static Object asBoxedValue(Constant constant) {
+    static Object asBoxedValue(Constant constant) {
         if (JavaConstant.isNull(constant)) {
             return null;
         } else if (constant instanceof HotSpotObjectConstantImpl) {
@@ -135,6 +137,10 @@
         return new HotSpotObjectConstantImpl(object, false, stableDimension, isDefaultStable);
     }
 
+    public HotSpotResolvedObjectType getType() {
+        return fromObjectClass(object.getClass());
+    }
+
     public JavaConstant getClassLoader() {
         if (object instanceof Class) {
             /*
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java	Wed Nov 26 21:00:02 2014 +0100
@@ -604,7 +604,7 @@
             String localName = getConstantPool().lookupUtf8(nameCpIndex);
             String localType = getConstantPool().lookupUtf8(typeCpIndex);
 
-            locals[i] = new LocalImpl(localName, localType, holder, startBci, endBci, slot);
+            locals[i] = new LocalImpl(localName, runtime().lookupType(localType, holder, false), startBci, endBci, slot);
 
             // Go to the next LocalVariableTableElement
             localVariableTableElement += config.localVariableTableElementSize;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java	Wed Nov 26 21:00:02 2014 +0100
@@ -91,4 +91,6 @@
     HotSpotResolvedObjectType getEnclosingType();
 
     ResolvedJavaMethod getClassInitializer();
+
+    ResolvedJavaField createField(String name, JavaType type, long offset, int modifiers);
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java	Wed Nov 26 21:00:02 2014 +0100
@@ -859,11 +859,6 @@
     }
 
     @Override
-    public JavaConstant newArray(int length) {
-        return HotSpotObjectConstantImpl.forObject(Array.newInstance(mirror(), length));
-    }
-
-    @Override
     public String toString() {
         return "HotSpotType<" + getName() + ", resolved>";
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java	Wed Nov 26 21:00:02 2014 +0100
@@ -284,11 +284,6 @@
     }
 
     @Override
-    public JavaConstant newArray(int length) {
-        return HotSpotObjectConstantImpl.forObject(Array.newInstance(mirror(), length));
-    }
-
-    @Override
     public boolean isTrustedInterfaceType() {
         return false;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java	Wed Nov 26 21:00:02 2014 +0100
@@ -22,8 +22,6 @@
  */
 package com.oracle.graal.hotspot.meta;
 
-import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
-
 import java.util.*;
 
 import com.oracle.graal.api.meta.*;
@@ -41,8 +39,10 @@
     private final String originalString;
     private ResolvedJavaType[] parameterTypes;
     private ResolvedJavaType returnTypeCache;
+    private final HotSpotGraalRuntimeProvider runtime;
 
-    public HotSpotSignature(String signature) {
+    public HotSpotSignature(HotSpotGraalRuntimeProvider runtime, String signature) {
+        this.runtime = runtime;
         assert signature.length() > 0;
         this.originalString = signature;
 
@@ -63,7 +63,8 @@
         }
     }
 
-    public HotSpotSignature(ResolvedJavaType returnType, ResolvedJavaType... parameterTypes) {
+    public HotSpotSignature(HotSpotGraalRuntimeProvider runtime, ResolvedJavaType returnType, ResolvedJavaType... parameterTypes) {
+        this.runtime = runtime;
         this.parameterTypes = parameterTypes.clone();
         this.returnTypeCache = returnType;
         this.returnType = returnType.getName();
@@ -74,7 +75,7 @@
         }
         sb.append(")").append(returnType.getName());
         this.originalString = sb.toString();
-        assert new HotSpotSignature(originalString).equals(this);
+        assert new HotSpotSignature(runtime, originalString).equals(this);
     }
 
     private static int parseSignature(String signature, int start) {
@@ -129,12 +130,12 @@
         return true;
     }
 
-    private static JavaType getUnresolvedOrPrimitiveType(String name) {
+    private static JavaType getUnresolvedOrPrimitiveType(HotSpotGraalRuntimeProvider runtime, String name) {
         if (name.length() == 1) {
             Kind kind = Kind.fromPrimitiveOrVoidTypeChar(name.charAt(0));
-            return HotSpotResolvedPrimitiveType.fromKind(kind);
+            return runtime.getHostProviders().getMetaAccess().lookupJavaType(kind.toJavaClass());
         }
-        return new HotSpotUnresolvedJavaType(name);
+        return new HotSpotUnresolvedJavaType(name, runtime);
     }
 
     @Override
@@ -142,7 +143,7 @@
         if (accessingClass == null) {
             // Caller doesn't care about resolution context so return an unresolved
             // or primitive type (primitive type resolution is context free)
-            return getUnresolvedOrPrimitiveType(parameters.get(index));
+            return getUnresolvedOrPrimitiveType(runtime, parameters.get(index));
         }
         if (parameterTypes == null) {
             parameterTypes = new ResolvedJavaType[parameters.size()];
@@ -150,7 +151,7 @@
 
         ResolvedJavaType type = parameterTypes[index];
         if (!checkValidCache(type, accessingClass)) {
-            type = (ResolvedJavaType) runtime().lookupType(parameters.get(index), (HotSpotResolvedObjectTypeImpl) accessingClass, true);
+            type = (ResolvedJavaType) runtime.lookupType(parameters.get(index), (HotSpotResolvedObjectType) accessingClass, true);
             parameterTypes[index] = type;
         }
         return type;
@@ -172,10 +173,10 @@
         if (accessingClass == null) {
             // Caller doesn't care about resolution context so return an unresolved
             // or primitive type (primitive type resolution is context free)
-            return getUnresolvedOrPrimitiveType(returnType);
+            return getUnresolvedOrPrimitiveType(runtime, returnType);
         }
         if (!checkValidCache(returnTypeCache, accessingClass)) {
-            returnTypeCache = (ResolvedJavaType) runtime().lookupType(returnType, (HotSpotResolvedObjectTypeImpl) accessingClass, true);
+            returnTypeCache = (ResolvedJavaType) runtime.lookupType(returnType, (HotSpotResolvedObjectType) accessingClass, true);
         }
         return returnTypeCache;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java	Wed Nov 26 21:00:02 2014 +0100
@@ -22,9 +22,8 @@
  */
 package com.oracle.graal.hotspot.meta;
 
-import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
-
 import com.oracle.graal.api.meta.*;
+import com.oracle.graal.hotspot.*;
 
 /**
  * Implementation of {@link JavaType} for unresolved HotSpot classes.
@@ -32,28 +31,30 @@
 public class HotSpotUnresolvedJavaType extends HotSpotJavaType {
 
     private static final long serialVersionUID = -2320936267633521314L;
+    private final HotSpotGraalRuntimeProvider runtime;
 
-    public HotSpotUnresolvedJavaType(String name) {
+    public HotSpotUnresolvedJavaType(String name, HotSpotGraalRuntimeProvider runtime) {
         super(name);
         assert name.charAt(0) == '[' || name.charAt(name.length() - 1) == ';' : name;
+        this.runtime = runtime;
     }
 
     /**
      * Creates an unresolved type for a valid {@link JavaType#getName() type name}.
      */
-    public static HotSpotUnresolvedJavaType create(String name) {
-        return new HotSpotUnresolvedJavaType(name);
+    public static HotSpotUnresolvedJavaType create(HotSpotGraalRuntimeProvider runtime, String name) {
+        return new HotSpotUnresolvedJavaType(name, runtime);
     }
 
     @Override
     public JavaType getComponentType() {
         assert getName().charAt(0) == '[' : "no array class" + getName();
-        return new HotSpotUnresolvedJavaType(getName().substring(1));
+        return new HotSpotUnresolvedJavaType(getName().substring(1), runtime);
     }
 
     @Override
     public JavaType getArrayClass() {
-        return new HotSpotUnresolvedJavaType('[' + getName());
+        return new HotSpotUnresolvedJavaType('[' + getName(), runtime);
     }
 
     @Override
@@ -85,6 +86,6 @@
 
     @Override
     public ResolvedJavaType resolve(ResolvedJavaType accessingClass) {
-        return (ResolvedJavaType) runtime().lookupType(getName(), (HotSpotResolvedObjectTypeImpl) accessingClass, true);
+        return (ResolvedJavaType) runtime.lookupType(getName(), (HotSpotResolvedObjectType) accessingClass, true);
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java	Wed Nov 26 21:00:02 2014 +0100
@@ -58,7 +58,7 @@
     @Override
     public boolean inferStamp() {
         if (stamp() == defaultStamp && hub.isConstant()) {
-            updateStamp(StampFactory.exactNonNull(HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(hub.asConstant())));
+            updateStamp(StampFactory.exactNonNull(((HotSpotMetaspaceConstant) hub.asJavaConstant()).asResolvedJavaType()));
             return true;
         }
         return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java	Wed Nov 26 21:00:02 2014 +0100
@@ -56,7 +56,7 @@
     @Override
     public boolean inferStamp() {
         if (stamp() == defaultStamp && hub.isConstant()) {
-            updateStamp(StampFactory.exactNonNull(HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(hub.asConstant())));
+            updateStamp(StampFactory.exactNonNull(((HotSpotMetaspaceConstant) hub.asJavaConstant()).asResolvedJavaType()));
             return true;
         }
         return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java	Wed Nov 26 21:00:02 2014 +0100
@@ -60,7 +60,7 @@
     @Override
     public boolean inferStamp() {
         if (stamp() == defaultStamp && hub.isConstant()) {
-            updateStamp(StampFactory.exactNonNull(HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(hub.asConstant())));
+            updateStamp(StampFactory.exactNonNull(((HotSpotMetaspaceConstant) hub.asJavaConstant()).asResolvedJavaType()));
             return true;
         }
         return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java	Wed Nov 26 21:00:02 2014 +0100
@@ -24,7 +24,6 @@
 
 import static com.oracle.graal.api.meta.DeoptimizationAction.*;
 import static com.oracle.graal.api.meta.DeoptimizationReason.*;
-import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
 import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*;
 import static com.oracle.graal.hotspot.replacements.InstanceOfSnippets.Options.*;
 import static com.oracle.graal.hotspot.replacements.TypeCheckSnippetUtils.*;
@@ -70,15 +69,15 @@
      * 100000 executions are for an object whose type is not one of the top N profiled types (where
      * {@code N == } {@link Options#TypeCheckMaxHints}).
      */
-    public static double hintHitProbabilityThresholdForDeoptimizingSnippet() {
-        return 1.0D - (1.0D / (runtime().getConfig().compileThreshold * 10));
+    public static double hintHitProbabilityThresholdForDeoptimizingSnippet(long compilationThreshold) {
+        return 1.0D - (1.0D / (compilationThreshold * 10));
     }
 
     /**
      * A test against a set of hints derived from a profile with very close to 100% precise coverage
      * of seen types. This snippet deoptimizes on hint miss paths.
      *
-     * @see #hintHitProbabilityThresholdForDeoptimizingSnippet()
+     * @see #hintHitProbabilityThresholdForDeoptimizingSnippet(long)
      */
     @Snippet
     public static Object instanceofWithProfile(Object object, @VarargsParameter KlassPointer[] hints, @VarargsParameter boolean[] hintIsPositive, Object trueValue, Object falseValue,
@@ -215,9 +214,11 @@
         private final SnippetInfo instanceofPrimary = snippet(InstanceOfSnippets.class, "instanceofPrimary");
         private final SnippetInfo instanceofSecondary = snippet(InstanceOfSnippets.class, "instanceofSecondary");
         private final SnippetInfo instanceofDynamic = snippet(InstanceOfSnippets.class, "instanceofDynamic");
+        private final long compilationThreshold;
 
-        public Templates(HotSpotProviders providers, TargetDescription target) {
+        public Templates(HotSpotProviders providers, TargetDescription target, long compilationThreshold) {
             super(providers, providers.getSnippetReflection(), target);
+            this.compilationThreshold = compilationThreshold;
         }
 
         @Override
@@ -232,7 +233,7 @@
                 Arguments args;
 
                 StructuredGraph graph = instanceOf.graph();
-                if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet() && hintInfo.exact == null) {
+                if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet(compilationThreshold) && hintInfo.exact == null) {
                     Hints hints = createHints(hintInfo, providers.getMetaAccess(), false, graph);
                     args = new Arguments(instanceofWithProfile, graph.getGuardsStage(), tool.getLoweringStage());
                     args.add("object", object);
@@ -257,7 +258,7 @@
                 }
                 args.add("trueValue", replacer.trueValue);
                 args.add("falseValue", replacer.falseValue);
-                if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet() && hintInfo.exact == null) {
+                if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet(compilationThreshold) && hintInfo.exact == null) {
                     args.addConst("nullSeen", hintInfo.profile.getNullSeen() != TriState.FALSE);
                 }
                 return args;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java	Wed Nov 26 21:00:02 2014 +0100
@@ -479,7 +479,6 @@
 
         private static int instanceSize(HotSpotResolvedObjectType type) {
             int size = type.instanceSize();
-            assert (size % wordSize()) == 0;
             assert size >= 0;
             return size;
         }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java	Wed Nov 26 11:10:26 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java	Wed Nov 26 21:00:02 2014 +0100
@@ -52,6 +52,8 @@
  */
 public class ForeignCallStub extends Stub {
 
+    private final HotSpotGraalRuntimeProvider runtime;
+
     /**
      * The target of the call.
      */
@@ -75,10 +77,11 @@
      *            be re-executed.
      * @param killedLocations the memory locations killed by the stub call
      */
-    public ForeignCallStub(HotSpotProviders providers, long address, ForeignCallDescriptor descriptor, boolean prependThread, Transition transition, boolean reexecutable,
-                    LocationIdentity... killedLocations) {
+    public ForeignCallStub(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers, long address, ForeignCallDescriptor descriptor, boolean prependThread, Transition transition,
+                    boolean reexecutable, LocationIdentity... killedLocations) {
         super(providers, HotSpotForeignCallLinkageImpl.create(providers.getMetaAccess(), providers.getCodeCache(), providers.getForeignCalls(), descriptor, 0L, PRESERVES_REGISTERS, JavaCall,
                         JavaCallee, transition, reexecutable, killedLocations));
+        this.runtime = runtime;
         this.prependThread = prependThread;
         Class<?>[] targetParameterTypes = createTargetParameters(descriptor);
         ForeignCallDescriptor targetSig = new ForeignCallDescriptor(descriptor.getName() + ":C", descriptor.getResultType(), targetParameterTypes);
@@ -121,7 +124,7 @@
                 for (int i = 0; i < arguments.length; i++) {
                     parameters[i] = metaAccess.lookupJavaType(arguments[i]);
                 }
-                return new HotSpotSignature(metaAccess.lookupJavaType(d.getResultType()), parameters);
+                return new HotSpotSignature(runtime, metaAccess.lookupJavaType(d.getResultType()), parameters);
             }
 
             public String getName() {