< prev index next >

src/hotspot/cpu/aarch64/vm_version_aarch64.cpp

Print this page
@@ -49,25 +49,16 @@
  uintptr_t VM_Version::_pac_mask;
  
  SpinWait VM_Version::_spin_wait;
  
  static SpinWait get_spin_wait_desc() {
-   if (strcmp(OnSpinWaitInst, "nop") == 0) {
-     return SpinWait(SpinWait::NOP, OnSpinWaitInstCount);
-   } else if (strcmp(OnSpinWaitInst, "isb") == 0) {
-     return SpinWait(SpinWait::ISB, OnSpinWaitInstCount);
-   } else if (strcmp(OnSpinWaitInst, "yield") == 0) {
-     return SpinWait(SpinWait::YIELD, OnSpinWaitInstCount);
-   } else if (strcmp(OnSpinWaitInst, "none") != 0) {
-     vm_exit_during_initialization("The options for OnSpinWaitInst are nop, isb, yield, and none", OnSpinWaitInst);
+   SpinWait spin_wait(OnSpinWaitInst, OnSpinWaitInstCount);
+   if (spin_wait.inst() == SpinWait::SB && !VM_Version::supports_sb()) {
+     vm_exit_during_initialization("OnSpinWaitInst is SB but current CPU does not support SB instruction");
    }
  
-   if (!FLAG_IS_DEFAULT(OnSpinWaitInstCount) && OnSpinWaitInstCount > 0) {
-     vm_exit_during_initialization("OnSpinWaitInstCount cannot be used for OnSpinWaitInst 'none'");
-   }
- 
-   return SpinWait{};
+   return spin_wait;
  }
  
  void VM_Version::initialize() {
    _supports_atomic_getset4 = true;
    _supports_atomic_getadd4 = true;

@@ -230,11 +221,15 @@
      if (FLAG_IS_DEFAULT(UseSIMDForMemoryOps)) {
        FLAG_SET_DEFAULT(UseSIMDForMemoryOps, true);
      }
  
      if (FLAG_IS_DEFAULT(OnSpinWaitInst)) {
-       FLAG_SET_DEFAULT(OnSpinWaitInst, "isb");
+       if (model_is(0xd4f) && VM_Version::supports_sb()) {
+         FLAG_SET_DEFAULT(OnSpinWaitInst, "sb");
+       } else {
+         FLAG_SET_DEFAULT(OnSpinWaitInst, "isb");
+       }
      }
  
      if (FLAG_IS_DEFAULT(OnSpinWaitInstCount)) {
        FLAG_SET_DEFAULT(OnSpinWaitInstCount, 1);
      }
< prev index next >