JDK-8256956 : RegisterImpl::max_slots_per_register is incorrect on AMD64
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 9,11,16
  • Priority: P5
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2020-11-24
  • Updated: 2024-12-20
  • Resolved: 2020-11-26
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 11 JDK 16
11.0.14Fixed 16 b27Fixed
Related Reports
Relates :  
Description
Suggested fix:
------------------------
diff --git a/src/hotspot/cpu/x86/register_x86.hpp b/src/hotspot/cpu/x86/register_x86.hpp
index 0c4004d..1461742 100644
--- a/src/hotspot/cpu/x86/register_x86.hpp
+++ b/src/hotspot/cpu/x86/register_x86.hpp
@@ -50,7 +50,7 @@ class RegisterImpl: public AbstractRegisterImpl {
 #else
     number_of_registers      = 16,
     number_of_byte_registers = 16,
-    max_slots_per_register   = 1
+    max_slots_per_register   = 2
 #endif // AMD64
   };
 
@@ -256,10 +256,7 @@ class ConcreteRegisterImpl : public AbstractRegisterImpl {
   // There is no requirement that any ordering here matches any ordering c2 gives
   // it's optoregs.
 
-    number_of_registers = RegisterImpl::number_of_registers +
-#ifdef AMD64
-      RegisterImpl::number_of_registers +  // "H" half of a 64bit register
-#endif // AMD64
+    number_of_registers = RegisterImpl::number_of_registers * RegisterImpl::max_slots_per_register +
       2 * FloatRegisterImpl::number_of_registers +
       XMMRegisterImpl::max_slots_per_register * XMMRegisterImpl::number_of_registers +
       KRegisterImpl::number_of_registers + // mask registers
------------------------
Comments
Fix request I'd like to backport this fix to jdk11u. It applies cleanly and no risk. Thanks.
06-11-2021

Changeset: b1d14993 Author: Jie Fu <jiefu@openjdk.org> Date: 2020-11-26 02:41:42 +0000 URL: https://github.com/openjdk/jdk/commit/b1d14993
26-11-2020

RegisterImpl::max_slots_per_register which was introduced in JDK 9 by JDK-8076276 does not have any usages in current code. ILW = Incorrect slot size per register (unused code), not an issue with current code, no workaround = LLH = P5
25-11-2020

Testing is in progress.
24-11-2020