changeset 16079:df8d39e2000b

Merge.
author Doug Simon <doug.simon@oracle.com>
date Wed, 11 Jun 2014 08:35:43 +0200
parents 0dd4bbe37f19 (current diff) 77783d8a45ef (diff)
children 46cf1de19854
files
diffstat 2 files changed, 34 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java	Wed Jun 11 08:35:18 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java	Wed Jun 11 08:35:43 2014 +0200
@@ -77,6 +77,7 @@
                     assert snippetGraph != null : "ObjectCloneSnippets should be installed";
                     return lowerReplacement(snippetGraph.copy(), tool);
                 }
+                assert false : "unhandled array type " + type.getComponentType().getKind();
             } else {
                 type = getConcreteType(getObject().stamp(), tool.assumptions(), tool.getMetaAccess());
                 if (type != null) {
@@ -106,7 +107,7 @@
     /*
      * Looks at the given stamp and determines if it is an exact type (or can be assumed to be an
      * exact type) and if it is a cloneable type.
-     *
+     * 
      * If yes, then the exact type is returned, otherwise it returns null.
      */
     private static ResolvedJavaType getConcreteType(Stamp stamp, Assumptions assumptions, MetaAccessProvider metaAccess) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java	Wed Jun 11 08:35:18 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java	Wed Jun 11 08:35:43 2014 +0200
@@ -36,10 +36,14 @@
     public static final EnumMap<Kind, Method> arrayCloneMethods = new EnumMap<>(Kind.class);
 
     static {
+        arrayCloneMethods.put(Kind.Boolean, getCloneMethod("booleanArrayClone", boolean[].class));
         arrayCloneMethods.put(Kind.Byte, getCloneMethod("byteArrayClone", byte[].class));
         arrayCloneMethods.put(Kind.Char, getCloneMethod("charArrayClone", char[].class));
+        arrayCloneMethods.put(Kind.Short, getCloneMethod("shortArrayClone", short[].class));
         arrayCloneMethods.put(Kind.Int, getCloneMethod("intArrayClone", int[].class));
+        arrayCloneMethods.put(Kind.Float, getCloneMethod("floatArrayClone", float[].class));
         arrayCloneMethods.put(Kind.Long, getCloneMethod("longArrayClone", long[].class));
+        arrayCloneMethods.put(Kind.Double, getCloneMethod("doubleArrayClone", double[].class));
         arrayCloneMethods.put(Kind.Object, getCloneMethod("objectArrayClone", Object[].class));
     }
 
@@ -52,6 +56,13 @@
     }
 
     @Snippet(removeAllFrameStates = true)
+    public static boolean[] booleanArrayClone(boolean[] src) {
+        boolean[] result = (boolean[]) NewArrayNode.newUninitializedArray(Boolean.TYPE, src.length);
+        ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Boolean);
+        return result;
+    }
+
+    @Snippet(removeAllFrameStates = true)
     public static byte[] byteArrayClone(byte[] src) {
         byte[] result = (byte[]) NewArrayNode.newUninitializedArray(Byte.TYPE, src.length);
         ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Byte);
@@ -59,6 +70,13 @@
     }
 
     @Snippet(removeAllFrameStates = true)
+    public static short[] shortArrayClone(short[] src) {
+        short[] result = (short[]) NewArrayNode.newUninitializedArray(Short.TYPE, src.length);
+        ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Short);
+        return result;
+    }
+
+    @Snippet(removeAllFrameStates = true)
     public static char[] charArrayClone(char[] src) {
         char[] result = (char[]) NewArrayNode.newUninitializedArray(Character.TYPE, src.length);
         ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Char);
@@ -73,6 +91,13 @@
     }
 
     @Snippet(removeAllFrameStates = true)
+    public static float[] floatArrayClone(float[] src) {
+        float[] result = (float[]) NewArrayNode.newUninitializedArray(Float.TYPE, src.length);
+        ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Float);
+        return result;
+    }
+
+    @Snippet(removeAllFrameStates = true)
     public static long[] longArrayClone(long[] src) {
         long[] result = (long[]) NewArrayNode.newUninitializedArray(Long.TYPE, src.length);
         ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Long);
@@ -80,6 +105,13 @@
     }
 
     @Snippet(removeAllFrameStates = true)
+    public static double[] doubleArrayClone(double[] src) {
+        double[] result = (double[]) NewArrayNode.newUninitializedArray(Double.TYPE, src.length);
+        ArrayCopyCallNode.disjointArraycopy(src, 0, result, 0, src.length, Kind.Double);
+        return result;
+    }
+
+    @Snippet(removeAllFrameStates = true)
     public static Object[] objectArrayClone(Object[] src) {
         Object[] result = (Object[]) DynamicNewArrayNode.newUninitializedArray(GuardingPiNode.guardingNonNull(src.getClass().getComponentType()), src.length);
         ArrayCopyCallNode.disjointUninitializedArraycopy(src, 0, result, 0, src.length, Kind.Object);