--- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp Wed Aug 15 19:22:46 2018 -0700
+++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp Thu Aug 16 09:09:18 2018 +0200
@@ -10567,7 +10567,7 @@
XMMRegister tmp1Reg, XMMRegister tmp2Reg,
XMMRegister tmp3Reg, XMMRegister tmp4Reg,
Register tmp5, Register result) {
- Label copy_chars_loop, return_length, return_zero, done, below_threshold;
+ Label copy_chars_loop, return_length, return_zero, done;
// rsi: src
// rdi: dst
@@ -10590,13 +10590,12 @@
set_vector_masking(); // opening of the stub context for programming mask registers
- Label copy_32_loop, copy_loop_tail, restore_k1_return_zero;
-
- // alignement
- Label post_alignement;
-
- // if length of the string is less than 16, handle it in an old fashioned
- // way
+ Label copy_32_loop, copy_loop_tail, restore_k1_return_zero, below_threshold;
+
+ // alignment
+ Label post_alignment;
+
+ // if length of the string is less than 16, handle it in an old fashioned way
testl(len, -32);
jcc(Assembler::zero, below_threshold);
@@ -10609,7 +10608,7 @@
kmovql(k3, k1);
testl(len, -64);
- jcc(Assembler::zero, post_alignement);
+ jcc(Assembler::zero, post_alignment);
movl(tmp5, dst);
andl(tmp5, (32 - 1));
@@ -10618,7 +10617,7 @@
// bail out when there is nothing to be done
testl(tmp5, 0xFFFFFFFF);
- jcc(Assembler::zero, post_alignement);
+ jcc(Assembler::zero, post_alignment);
// ~(~0 << len), where len is the # of remaining elements to process
movl(result, 0xFFFFFFFF);
@@ -10638,8 +10637,8 @@
addptr(dst, tmp5);
subl(len, tmp5);
- bind(post_alignement);
- // end of alignement
+ bind(post_alignment);
+ // end of alignment
movl(tmp5, len);
andl(tmp5, (32 - 1)); // tail count (in chars)
@@ -10694,12 +10693,13 @@
jmp(return_zero);
clear_vector_masking(); // closing of the stub context for programming mask registers
- }
+
+ bind(below_threshold);
+ }
+
if (UseSSE42Intrinsics) {
Label copy_32_loop, copy_16, copy_tail;
- bind(below_threshold);
-
movl(result, len);
movl(tmp5, 0xff00ff00); // create mask to test for Unicode chars in vectors
@@ -10812,8 +10812,7 @@
Label copy_32_loop, copy_tail;
Register tmp3_aliased = len;
- // if length of the string is less than 16, handle it in an old fashioned
- // way
+ // if length of the string is less than 16, handle it in an old fashioned way
testl(len, -16);
jcc(Assembler::zero, below_threshold);
@@ -10927,7 +10926,10 @@
addptr(dst, 8);
bind(copy_bytes);
- }
+ } else {
+ bind(below_threshold);
+ }
+
testl(len, len);
jccb(Assembler::zero, done);
lea(src, Address(src, len, Address::times_1));