Mercurial > hg > graal-compiler
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)); } } }