< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page

        

@@ -5066,10 +5066,20 @@
   }
 
   // Check for short strings, i.e. smaller than wordSize.
   subs(cnt1, cnt1, elem_per_word);
   br(Assembler::LT, SHORT);
+  // large loop algo should be used for >= 64(large loop) + 16(post loop) bytes
+  cmp(cnt1, 80/elem_size);
+  br(Assembler::LT, NEXT_WORD);
+  RuntimeAddress stub = elem_size == 1
+          ? RuntimeAddress(StubRoutines::aarch64::large_array_equals_byte())
+          : RuntimeAddress(StubRoutines::aarch64::large_array_equals_char());
+  assert(stub.target() != NULL, "array_equals_long_* stub has not been generated");
+  trampoline_call(stub);
+  cbz(result, DONE);
+  mov(result, false); // reset result
   // Main 8 byte comparison loop.
   bind(NEXT_WORD); {
     ldr(tmp1, Address(post(a1, wordSize)));
     ldr(tmp2, Address(post(a2, wordSize)));
     subs(cnt1, cnt1, elem_per_word);
< prev index next >