hotspot/src/cpu/x86/vm/vm_version_x86.cpp
changeset 27414 39d976b80fb4
parent 26434 09ad55e5f486
child 28954 7dda6c26cc98
--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp	Fri Oct 17 10:09:43 2014 -1000
+++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp	Fri Oct 17 15:35:25 2014 -0700
@@ -865,14 +865,19 @@
   if (supports_bmi1()) {
     // tzcnt does not require VEX prefix
     if (FLAG_IS_DEFAULT(UseCountTrailingZerosInstruction)) {
-      UseCountTrailingZerosInstruction = true;
+      if (!UseBMI1Instructions && !FLAG_IS_DEFAULT(UseBMI1Instructions)) {
+        // Don't use tzcnt if BMI1 is switched off on command line.
+        UseCountTrailingZerosInstruction = false;
+      } else {
+        UseCountTrailingZerosInstruction = true;
+      }
     }
   } else if (UseCountTrailingZerosInstruction) {
     warning("tzcnt instruction is not available on this CPU");
     FLAG_SET_DEFAULT(UseCountTrailingZerosInstruction, false);
   }
 
-  // BMI instructions use an encoding with VEX prefix.
+  // BMI instructions (except tzcnt) use an encoding with VEX prefix.
   // VEX prefix is generated only when AVX > 0.
   if (supports_bmi1() && supports_avx()) {
     if (FLAG_IS_DEFAULT(UseBMI1Instructions)) {