changeset 12586:68e8834ad888

UnsafeArrayCopySnippets: minor refactoring
author Bernhard Urban <bernhard.urban@jku.at>
date Thu, 24 Oct 2013 18:34:58 +0200
parents 968fedf712dd
children e0634d52796f
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopySnippets.java
diffstat 1 files changed, 24 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopySnippets.java	Thu Oct 24 18:34:28 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopySnippets.java	Thu Oct 24 18:34:58 2013 +0200
@@ -139,47 +139,55 @@
 
     @Snippet
     public static void arraycopyByte(byte[] src, int srcPos, byte[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Byte, getArrayLocation(Kind.Byte));
+        Kind kind = Kind.Byte;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyBoolean(boolean[] src, int srcPos, boolean[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Boolean, getArrayLocation(Kind.Boolean));
+        Kind kind = Kind.Boolean;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyChar(char[] src, int srcPos, char[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Char, getArrayLocation(Kind.Char));
+        Kind kind = Kind.Char;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyShort(short[] src, int srcPos, short[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Short, getArrayLocation(Kind.Short));
+        Kind kind = Kind.Short;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyInt(int[] src, int srcPos, int[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Int, getArrayLocation(Kind.Int));
+        Kind kind = Kind.Int;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyFloat(float[] src, int srcPos, float[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Float, getArrayLocation(Kind.Float));
+        Kind kind = Kind.Float;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyLong(long[] src, int srcPos, long[] dest, int destPos, int length) {
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Long, getArrayLocation(Kind.Long));
+        Kind kind = Kind.Long;
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     @Snippet
     public static void arraycopyDouble(double[] src, int srcPos, double[] dest, int destPos, int length) {
+        Kind kind = Kind.Double;
         /*
          * TODO atomicity problem on 32-bit architectures: The JVM spec requires double values to be
          * copied atomically, but not long values. For example, on Intel 32-bit this code is not
          * atomic as long as the vector kind remains Kind.Long.
          */
-        vectorizedCopy(src, srcPos, dest, destPos, length, Kind.Double, getArrayLocation(Kind.Double));
+        vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind));
     }
 
     /**
@@ -190,20 +198,21 @@
      */
     @Snippet
     public static void arraycopyObject(Object[] src, int srcPos, Object[] dest, int destPos, int length) {
-        final int scale = arrayIndexScale(Kind.Object);
-        int arrayBaseOffset = arrayBaseOffset(Kind.Object);
-        LocationIdentity arrayLocation = getArrayLocation(Kind.Object);
+        Kind kind = Kind.Object;
+        final int scale = arrayIndexScale(kind);
+        int arrayBaseOffset = arrayBaseOffset(kind);
+        LocationIdentity arrayLocation = getArrayLocation(kind);
         if (src == dest && srcPos < destPos) { // bad aliased case
             long start = (long) (length - 1) * scale;
             for (long i = start; i >= 0; i -= scale) {
-                Object a = UnsafeLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, Kind.Object, arrayLocation);
-                DirectObjectStoreNode.storeObject(dest, arrayBaseOffset, i + (long) destPos * scale, a, getArrayLocation(Kind.Object));
+                Object a = UnsafeLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, kind, arrayLocation);
+                DirectObjectStoreNode.storeObject(dest, arrayBaseOffset, i + (long) destPos * scale, a, getArrayLocation(kind));
             }
         } else {
             long end = (long) length * scale;
             for (long i = 0; i < end; i += scale) {
-                Object a = UnsafeLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, Kind.Object, arrayLocation);
-                DirectObjectStoreNode.storeObject(dest, arrayBaseOffset, i + (long) destPos * scale, a, getArrayLocation(Kind.Object));
+                Object a = UnsafeLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, kind, arrayLocation);
+                DirectObjectStoreNode.storeObject(dest, arrayBaseOffset, i + (long) destPos * scale, a, getArrayLocation(kind));
             }
         }
     }