RFR: 8324734: Remove too-strict assert(VM_Version::supports_evex()) in Assembler::locate_operand()
Vladimir Kozlov
kvn at openjdk.org
Fri Jan 26 21:02:34 UTC 2024
On Fri, 26 Jan 2024 19:42:08 GMT, Roman Kennke <rkennke at openjdk.org> wrote:
> VM_Version could distinguish between CPU features that are supported by the CPU
We can start with just EVEX check. It is not big change:
$ git diff
diff --git a/src/hotspot/cpu/x86/vm_version_x86.cpp b/src/hotspot/cpu/x86/vm_version_x86.cpp
index df1ea6edd30..8b4ca442b5a 100644
--- a/src/hotspot/cpu/x86/vm_version_x86.cpp
+++ b/src/hotspot/cpu/x86/vm_version_x86.cpp
@@ -809,7 +809,8 @@ void VM_Version::get_processor_features() {
_stepping = cpu_stepping();
if (cpu_family() > 4) { // it supports CPUID
- _features = feature_flags();
+ _features = feature_flags(); // It can be changed by VM flags
+ _cpu_features = _features; // Preserve features
// Logical processors are only available on P4s and above,
// and only if hyperthreading is available.
_logical_processors_per_package = logical_processor_count();
diff --git a/src/hotspot/cpu/x86/vm_version_x86.hpp b/src/hotspot/cpu/x86/vm_version_x86.hpp
index e521a6ee3bc..de86ce51541 100644
--- a/src/hotspot/cpu/x86/vm_version_x86.hpp
+++ b/src/hotspot/cpu/x86/vm_version_x86.hpp
@@ -640,7 +640,7 @@ class VM_Version : public Abstract_VM_Version {
}
//
- // Feature identification
+ // Feature identification which can be affected by VM flags
//
static bool supports_cpuid() { return _features != 0; }
static bool supports_cmov() { return (_features & CPU_CMOV) != 0; }
@@ -703,6 +703,11 @@ class VM_Version : public Abstract_VM_Version {
static bool supports_cet_ss() { return (_features & CPU_CET_SS) != 0; }
static bool supports_cet_ibt() { return (_features & CPU_CET_IBT) != 0; }
+ //
+ // Feature identification not affected by VM flags
+ //
+ static bool cpu_supports_evex() { return (_cpu_features & CPU_AVX512F) != 0; }
+
// Intel features
static bool is_intel_family_core() { return is_intel() &&
extended_cpu_family() == CPU_FAMILY_INTEL_CORE; }
diff --git a/src/hotspot/share/runtime/abstract_vm_version.hpp b/src/hotspot/share/runtime/abstract_vm_version.hpp
index d8ffca8de81..05675cc683a 100644
--- a/src/hotspot/share/runtime/abstract_vm_version.hpp
+++ b/src/hotspot/share/runtime/abstract_vm_version.hpp
@@ -54,10 +54,13 @@ class Abstract_VM_Version: AllStatic {
static const char* _s_vm_release;
static const char* _s_internal_vm_info_string;
- // CPU feature flags.
+ // CPU feature flags which can be restricted by VM flags.
static uint64_t _features;
static const char* _features_string;
+ // CPU feature flags not affected by VM flags.
+ static uint64_t _cpu_features;
+
// These are set by machine-dependent initializations
#ifndef SUPPORTS_NATIVE_CX8
static bool _supports_cx8;
-------------
PR Comment: https://git.openjdk.org/jdk/pull/17590#issuecomment-1912689152
More information about the hotspot-compiler-dev
mailing list