< prev index next > src/hotspot/cpu/aarch64/vm_version_aarch64.cpp
Print this page
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;
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 >