166 public static long vectorizedMismatchLarge(Object a, long aOffset,
167 Object b, long bOffset,
168 long length,
169 int log2ArrayIndexScale) {
170 long off = 0;
171 long remaining = length;
172 int i ;
173 while (remaining > 7) {
174 int size = (int) Math.min(Integer.MAX_VALUE, remaining);
175 i = vectorizedMismatch(
176 a, aOffset + off,
177 b, bOffset + off,
178 size, log2ArrayIndexScale);
179 if (i >= 0)
180 return off + i;
181
182 i = size - ~i;
183 off += i;
184 remaining -= i;
185 }
186 return ~off;
187 }
188
189 // Booleans
190 // Each boolean element takes up one byte
191
192 public static int mismatch(boolean[] a,
193 boolean[] b,
194 int length) {
195 int i = 0;
196 if (length > 7) {
197 if (a[0] != b[0])
198 return 0;
199 i = vectorizedMismatch(
200 a, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET,
201 b, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET,
202 length, LOG2_ARRAY_BOOLEAN_INDEX_SCALE);
203 if (i >= 0)
204 return i;
205 i = length - ~i;
206 }
|
166 public static long vectorizedMismatchLarge(Object a, long aOffset,
167 Object b, long bOffset,
168 long length,
169 int log2ArrayIndexScale) {
170 long off = 0;
171 long remaining = length;
172 int i ;
173 while (remaining > 7) {
174 int size = (int) Math.min(Integer.MAX_VALUE, remaining);
175 i = vectorizedMismatch(
176 a, aOffset + off,
177 b, bOffset + off,
178 size, log2ArrayIndexScale);
179 if (i >= 0)
180 return off + i;
181
182 i = size - ~i;
183 off += i;
184 remaining -= i;
185 }
186 return ~remaining;
187 }
188
189 // Booleans
190 // Each boolean element takes up one byte
191
192 public static int mismatch(boolean[] a,
193 boolean[] b,
194 int length) {
195 int i = 0;
196 if (length > 7) {
197 if (a[0] != b[0])
198 return 0;
199 i = vectorizedMismatch(
200 a, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET,
201 b, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET,
202 length, LOG2_ARRAY_BOOLEAN_INDEX_SCALE);
203 if (i >= 0)
204 return i;
205 i = length - ~i;
206 }
|