< prev index next > src/hotspot/cpu/aarch64/vm_version_aarch64.cpp
Print this page
int VM_Version::_initial_sve_vector_length;
int VM_Version::_max_supported_sve_vector_length;
bool VM_Version::_rop_protection;
uintptr_t VM_Version::_pac_mask;
- SpinWait VM_Version::_spin_wait;
-
const char* VM_Version::_features_names[MAX_CPU_FEATURES] = { nullptr };
static SpinWait get_spin_wait_desc() {
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");
}
int VM_Version::_initial_sve_vector_length;
int VM_Version::_max_supported_sve_vector_length;
bool VM_Version::_rop_protection;
uintptr_t VM_Version::_pac_mask;
const char* VM_Version::_features_names[MAX_CPU_FEATURES] = { nullptr };
+ SpinWait VM_Version::_spin_wait;
+
static SpinWait get_spin_wait_desc() {
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");
}
_cpu_info_string = ss.as_string(true);
_features_string = _cpu_info_string + features_offset;
}
- void VM_Version::insert_features_names(uint64_t features, stringStream& ss) {
- int i = 0;
- ss.join([&]() {
- while (i < MAX_CPU_FEATURES) {
- if (supports_feature((VM_Version::Feature_Flag)i)) {
- return _features_names[i++];
- }
- i += 1;
- }
- return (const char*)nullptr;
- }, ", ");
- }
-
#if defined(LINUX)
static bool check_info_file(const char* fpath,
const char* virt1, VirtualizationType vt1,
const char* virt2, VirtualizationType vt2) {
char line[500];
desc_len = (int)strlen(_cpu_desc);
os::snprintf_checked(_cpu_desc + desc_len, CPU_DETAILED_DESC_BUF_SIZE - desc_len, " %s", _cpu_info_string);
_initialized = true;
}
+
+ void VM_Version::insert_features_names(uint64_t features, stringStream& ss) {
+ int i = 0;
+ ss.join([&]() {
+ const char* str = nullptr;
+ while ((i < MAX_CPU_FEATURES) && (str == nullptr)) {
+ if (supports_feature((VM_Version::Feature_Flag)i)) {
+ str = _features_names[i];
+ }
+ i += 1;
+ }
+ return str;
+ }, ", ");
+ }
+
+ void VM_Version::get_cpu_features_name(void* features_buffer, stringStream& ss) {
+ uint64_t features = *(uint64_t*)features_buffer;
+ insert_features_names(features, ss);
+ }
+
+ void VM_Version::get_missing_features_name(void* features_buffer, stringStream& ss) {
+ uint64_t features_to_test = *(uint64_t*)features_buffer;
+ int i = 0;
+ ss.join([&]() {
+ const char* str = nullptr;
+ while ((i < MAX_CPU_FEATURES) && (str == nullptr)) {
+ Feature_Flag flag = (Feature_Flag)i;
+ if (supports_feature(features_to_test, flag) && !supports_feature(flag)) {
+ str = _features_names[i];
+ }
+ i += 1;
+ }
+ return str;
+ }, ", ");
+ }
+
+ int VM_Version::cpu_features_size() {
+ return sizeof(_features);
+ }
+
+ void VM_Version::store_cpu_features(void* buf) {
+ *(uint64_t*)buf = _features;
+ }
+
+ bool VM_Version::supports_features(void* features_buffer) {
+ uint64_t features_to_test = *(uint64_t*)features_buffer;
+ return (_features & features_to_test) == features_to_test;
+ }
< prev index next >