8209511: C2 asserts with UseSSE < 4 and AVX enabled: "Label was never bound to a location, but it was used as a jmp target'
authorthartmann
Thu, 16 Aug 2018 09:09:18 +0200
changeset 51419 c11be049acb8
parent 51418 45d1f2ec5342
child 51420 6bb7b8d0da76
8209511: C2 asserts with UseSSE < 4 and AVX enabled: "Label was never bound to a location, but it was used as a jmp target' Summary: Make sure label is bound even if SSE is disabled. Reviewed-by: kvn
src/hotspot/cpu/x86/macroAssembler_x86.cpp
--- 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));