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