--- old/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java 2018-06-18 13:46:24.611000000 -0700 +++ new/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java 2018-06-18 13:46:24.250000000 -0700 @@ -165,6 +165,8 @@ boolean[] b, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 7) { i = vectorizedMismatch( a, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, @@ -185,6 +187,8 @@ boolean[] b, int bFromIndex, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 7) { int aOffset = Unsafe.ARRAY_BOOLEAN_BASE_OFFSET + aFromIndex; int bOffset = Unsafe.ARRAY_BOOLEAN_BASE_OFFSET + bFromIndex; @@ -227,6 +231,8 @@ // assert length <= b.length int i = 0; + if (a[i] != b[i]) + return i; if (length > 7) { i = vectorizedMismatch( a, Unsafe.ARRAY_BYTE_BASE_OFFSET, @@ -274,6 +280,8 @@ // assert length >= 0 int i = 0; + if (a[i] != b[i]) + return i; if (length > 7) { int aOffset = Unsafe.ARRAY_BYTE_BASE_OFFSET + aFromIndex; int bOffset = Unsafe.ARRAY_BYTE_BASE_OFFSET + bFromIndex; @@ -299,6 +307,8 @@ char[] b, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 3) { i = vectorizedMismatch( a, Unsafe.ARRAY_CHAR_BASE_OFFSET, @@ -319,6 +329,8 @@ char[] b, int bFromIndex, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 3) { int aOffset = Unsafe.ARRAY_CHAR_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_CHAR_INDEX_SCALE); int bOffset = Unsafe.ARRAY_CHAR_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_CHAR_INDEX_SCALE); @@ -344,6 +356,8 @@ short[] b, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 3) { i = vectorizedMismatch( a, Unsafe.ARRAY_SHORT_BASE_OFFSET, @@ -364,6 +378,8 @@ short[] b, int bFromIndex, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 3) { int aOffset = Unsafe.ARRAY_SHORT_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_SHORT_INDEX_SCALE); int bOffset = Unsafe.ARRAY_SHORT_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_SHORT_INDEX_SCALE); @@ -389,6 +405,8 @@ int[] b, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 1) { i = vectorizedMismatch( a, Unsafe.ARRAY_INT_BASE_OFFSET, @@ -409,6 +427,8 @@ int[] b, int bFromIndex, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 1) { int aOffset = Unsafe.ARRAY_INT_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_INT_INDEX_SCALE); int bOffset = Unsafe.ARRAY_INT_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_INT_INDEX_SCALE); @@ -440,6 +460,8 @@ float[] b, int bFromIndex, int length) { int i = 0; + if (a[i] != b[i]) + return i; if (length > 1) { int aOffset = Unsafe.ARRAY_FLOAT_BASE_OFFSET + (aFromIndex << LOG2_ARRAY_FLOAT_INDEX_SCALE); int bOffset = Unsafe.ARRAY_FLOAT_BASE_OFFSET + (bFromIndex << LOG2_ARRAY_FLOAT_INDEX_SCALE);