< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page
rev 53717 : imported patch JDK-8217909.patch

@@ -167,12 +167,29 @@
 //
 
 // Empty register class.
 reg_class no_reg();
 
-// Class for all pointer registers (including RSP and RBP)
-reg_class any_reg_with_rbp(RAX, RAX_H,
+// Class for all pointer registers (including RSP and RBP, excluding R12)
+reg_class any_reg_with_rbp_no_r12(RAX, RAX_H,
+                                  RDX, RDX_H,
+                                  RBP, RBP_H,
+                                  RDI, RDI_H,
+                                  RSI, RSI_H,
+                                  RCX, RCX_H,
+                                  RBX, RBX_H,
+                                  RSP, RSP_H,
+                                  R8,  R8_H,
+                                  R9,  R9_H,
+                                  R10, R10_H,
+                                  R11, R11_H,
+                                  R13, R13_H,
+                                  R14, R14_H,
+                                  R15, R15_H);
+
+// Class for all pointer registers (including RSP and RBP andR12)
+reg_class any_reg_with_rbp_with_r12(RAX, RAX_H,
                            RDX, RDX_H,
                            RBP, RBP_H,
                            RDI, RDI_H,
                            RSI, RSI_H,
                            RCX, RCX_H,

@@ -185,12 +202,30 @@
                            R12, R12_H,
                            R13, R13_H,
                            R14, R14_H,
                            R15, R15_H);
 
-// Class for all pointer registers (including RSP, but excluding RBP)
-reg_class any_reg_no_rbp(RAX, RAX_H,
+reg_class_dynamic any_reg_with_rbp(any_reg_with_rbp_no_r12, any_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all pointer registers (including RSP, but excluding RBP and R12)
+reg_class any_reg_no_rbp_no_r12(RAX, RAX_H,
+                                RDX, RDX_H,
+                                RDI, RDI_H,
+                                RSI, RSI_H,
+                                RCX, RCX_H,
+                                RBX, RBX_H,
+                                RSP, RSP_H,
+                                R8,  R8_H,
+                                R9,  R9_H,
+                                R10, R10_H,
+                                R11, R11_H,
+                                R13, R13_H,
+                                R14, R14_H,
+                                R15, R15_H);
+
+// Class for all pointer registers (including RSP and R12, but excluding RBP)
+reg_class any_reg_no_rbp_with_r12(RAX, RAX_H,
                          RDX, RDX_H,
                          RDI, RDI_H,
                          RSI, RSI_H,
                          RCX, RCX_H,
                          RBX, RBX_H,

@@ -202,17 +237,19 @@
                          R12, R12_H,
                          R13, R13_H,
                          R14, R14_H,
                          R15, R15_H);
 
+reg_class_dynamic any_reg_no_rbp(any_reg_no_rbp_no_r12, any_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects at runtime between register classes
 // any_reg_no_rbp and any_reg_with_rbp (depending on the value of the flag PreserveFramePointer).
 // Equivalent to: return PreserveFramePointer ? any_reg_no_rbp : any_reg_with_rbp;
 reg_class_dynamic any_reg(any_reg_no_rbp, any_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all pointer registers (excluding RSP)
-reg_class ptr_reg_with_rbp(RAX, RAX_H,
+// Class for all pointer registers (excluding RSP, excluding R12)
+reg_class ptr_reg_with_rbp_no_r12(RAX, RAX_H,
                            RDX, RDX_H,
                            RBP, RBP_H,
                            RDI, RDI_H,
                            RSI, RSI_H,
                            RCX, RCX_H,

@@ -222,59 +259,127 @@
                            R10, R10_H,
                            R11, R11_H,
                            R13, R13_H,
                            R14, R14_H);
 
-// Class for all pointer registers (excluding RSP and RBP)
-reg_class ptr_reg_no_rbp(RAX, RAX_H,
+// Class for all pointer registers (excluding RSP, including R12)
+reg_class ptr_reg_with_rbp_with_r12(RAX, RAX_H,
                          RDX, RDX_H,
+                           RBP, RBP_H,
                          RDI, RDI_H,
                          RSI, RSI_H,
                          RCX, RCX_H,
                          RBX, RBX_H,
                          R8,  R8_H,
                          R9,  R9_H,
                          R10, R10_H,
                          R11, R11_H,
+                           R12, R12_H,
                          R13, R13_H,
                          R14, R14_H);
 
+reg_class_dynamic ptr_reg_with_rbp(ptr_reg_with_rbp_no_r12, ptr_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all pointer registers (excluding RSP and RBP and R12)
+reg_class ptr_reg_no_rbp_no_r12(RAX, RAX_H,
+                         RDX, RDX_H,
+                         RDI, RDI_H,
+                         RSI, RSI_H,
+                         RCX, RCX_H,
+                         RBX, RBX_H,
+                         R8,  R8_H,
+                         R9,  R9_H,
+                         R10, R10_H,
+                         R11, R11_H,
+                         R13, R13_H,
+                         R14, R14_H);
+
+// Class for all pointer registers (excluding RSP and RBP, including R12)
+reg_class ptr_reg_no_rbp_with_r12(RAX, RAX_H,
+                         RDX, RDX_H,
+                         RDI, RDI_H,
+                         RSI, RSI_H,
+                         RCX, RCX_H,
+                         RBX, RBX_H,
+                         R8,  R8_H,
+                         R9,  R9_H,
+                         R10, R10_H,
+                         R11, R11_H,
+                         R12, R12_H,
+                         R13, R13_H,
+                         R14, R14_H);
+
+reg_class_dynamic ptr_reg_no_rbp(ptr_reg_no_rbp_no_r12, ptr_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between ptr_reg_no_rbp and ptr_reg_with_rbp.
 reg_class_dynamic ptr_reg(ptr_reg_no_rbp, ptr_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all pointer registers (excluding RAX and RSP)
-reg_class ptr_no_rax_reg_with_rbp(RDX, RDX_H,
+// Class for all pointer registers (excluding RAX and RSP and R12)
+reg_class ptr_no_rax_reg_with_rbp_no_r12(RDX, RDX_H,
+                                         RBP, RBP_H,
+                                         RDI, RDI_H,
+                                         RSI, RSI_H,
+                                         RCX, RCX_H,
+                                         RBX, RBX_H,
+                                         R8,  R8_H,
+                                         R9,  R9_H,
+                                         R10, R10_H,
+                                         R11, R11_H,
+                                         R13, R13_H,
+                                         R14, R14_H);
+
+// Class for all pointer registers (excluding RAX and RSP, including R12)
+reg_class ptr_no_rax_reg_with_rbp_with_r12(RDX, RDX_H,
                                   RBP, RBP_H,
                                   RDI, RDI_H,
                                   RSI, RSI_H,
                                   RCX, RCX_H,
                                   RBX, RBX_H,
                                   R8,  R8_H,
                                   R9,  R9_H,
                                   R10, R10_H,
                                   R11, R11_H,
+                                           R12, R12_H,
+                                           R13, R13_H,
+                                           R14, R14_H);
+
+reg_class_dynamic ptr_no_rax_reg_with_rbp(ptr_no_rax_reg_with_rbp_no_r12, ptr_no_rax_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all pointer registers (excluding RAX, RSP, RBP, and R12)
+reg_class ptr_no_rax_reg_no_rbp_no_r12(RDX, RDX_H,
+                                       RDI, RDI_H,
+                                       RSI, RSI_H,
+                                       RCX, RCX_H,
+                                       RBX, RBX_H,
+                                       R8,  R8_H,
+                                       R9,  R9_H,
+                                       R10, R10_H,
+                                       R11, R11_H,
                                   R13, R13_H,
                                   R14, R14_H);
 
-// Class for all pointer registers (excluding RAX, RSP, and RBP)
-reg_class ptr_no_rax_reg_no_rbp(RDX, RDX_H,
+// Class for all pointer registers (excluding RAX, RSP, RBP, including R12)
+reg_class ptr_no_rax_reg_no_rbp_with_r12(RDX, RDX_H,
                                 RDI, RDI_H,
                                 RSI, RSI_H,
                                 RCX, RCX_H,
                                 RBX, RBX_H,
                                 R8,  R8_H,
                                 R9,  R9_H,
                                 R10, R10_H,
                                 R11, R11_H,
+                                         R12, R12_H,
                                 R13, R13_H,
                                 R14, R14_H);
 
+reg_class_dynamic ptr_no_rax_reg_no_rbp(ptr_no_rax_reg_no_rbp_no_r12, ptr_no_rax_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between ptr_no_rax_reg_no_rbp and ptr_no_rax_reg_with_rbp.
 reg_class_dynamic ptr_no_rax_reg(ptr_no_rax_reg_no_rbp, ptr_no_rax_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all pointer registers (excluding RAX, RBX, and RSP)
-reg_class ptr_no_rax_rbx_reg_with_rbp(RDX, RDX_H,
+// Class for all pointer registers (excluding RAX, RBX, RSP and R12)
+reg_class ptr_no_rax_rbx_reg_with_rbp_no_r12(RDX, RDX_H,
                                       RBP, RBP_H,
                                       RDI, RDI_H,
                                       RSI, RSI_H,
                                       RCX, RCX_H,
                                       R8,  R8_H,

@@ -282,22 +387,53 @@
                                       R10, R10_H,
                                       R11, R11_H,
                                       R13, R13_H,
                                       R14, R14_H);
 
-// Class for all pointer registers (excluding RAX, RBX, RSP, and RBP)
-reg_class ptr_no_rax_rbx_reg_no_rbp(RDX, RDX_H,
+// Class for all pointer registers (excluding RAX, RBX, RSP, including R12)
+reg_class ptr_no_rax_rbx_reg_with_rbp_with_r12(RDX, RDX_H,
+                                               RBP, RBP_H,
                                     RDI, RDI_H,
                                     RSI, RSI_H,
                                     RCX, RCX_H,
                                     R8,  R8_H,
                                     R9,  R9_H,
                                     R10, R10_H,
                                     R11, R11_H,
+                                               R12, R12_H,
                                     R13, R13_H,
                                     R14, R14_H);
 
+reg_class_dynamic ptr_no_rax_rbx_reg_with_rbp(ptr_no_rax_rbx_reg_with_rbp_no_r12, ptr_no_rax_rbx_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all pointer registers (excluding RAX, RBX, RSP, RBP and R12)
+reg_class ptr_no_rax_rbx_reg_no_rbp_no_r12(RDX, RDX_H,
+                                           RDI, RDI_H,
+                                           RSI, RSI_H,
+                                           RCX, RCX_H,
+                                           R8,  R8_H,
+                                           R9,  R9_H,
+                                           R10, R10_H,
+                                           R11, R11_H,
+                                           R13, R13_H,
+                                           R14, R14_H);
+
+// Class for all pointer registers (excluding RAX, RBX, RSP, and RBP, including R12)
+reg_class ptr_no_rax_rbx_reg_no_rbp_with_r12(RDX, RDX_H,
+                                             RDI, RDI_H,
+                                             RSI, RSI_H,
+                                             RCX, RCX_H,
+                                             R8,  R8_H,
+                                             R9,  R9_H,
+                                             R10, R10_H,
+                                             R11, R11_H,
+                                             R12, R12_H,
+                                             R13, R13_H,
+                                             R14, R14_H);
+
+reg_class_dynamic ptr_no_rax_rbx_reg_no_rbp(ptr_no_rax_rbx_reg_no_rbp_no_r12, ptr_no_rax_rbx_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between ptr_no_rax_rbx_reg_no_rbp and ptr_no_rax_rbx_reg_with_rbp.
 reg_class_dynamic ptr_no_rax_rbx_reg(ptr_no_rax_rbx_reg_no_rbp, ptr_no_rax_rbx_reg_with_rbp, %{ PreserveFramePointer %});
 
 // Singleton class for RAX pointer register
 reg_class ptr_rax_reg(RAX, RAX_H);

@@ -315,12 +451,12 @@
 reg_class ptr_rsp_reg(RSP, RSP_H);
 
 // Singleton class for TLS pointer
 reg_class ptr_r15_reg(R15, R15_H);
 
-// Class for all long registers (excluding RSP)
-reg_class long_reg_with_rbp(RAX, RAX_H,
+// Class for all long registers (excluding RSP and R12)
+reg_class long_reg_with_rbp_no_r12(RAX, RAX_H,
                             RDX, RDX_H,
                             RBP, RBP_H,
                             RDI, RDI_H,
                             RSI, RSI_H,
                             RCX, RCX_H,

@@ -330,57 +466,123 @@
                             R10, R10_H,
                             R11, R11_H,
                             R13, R13_H,
                             R14, R14_H);
 
-// Class for all long registers (excluding RSP and RBP)
-reg_class long_reg_no_rbp(RAX, RAX_H,
+// Class for all long registers (excluding RSP, including R12)
+reg_class long_reg_with_rbp_with_r12(RAX, RAX_H,
+                                     RDX, RDX_H,
+                                     RBP, RBP_H,
+                                     RDI, RDI_H,
+                                     RSI, RSI_H,
+                                     RCX, RCX_H,
+                                     RBX, RBX_H,
+                                     R8,  R8_H,
+                                     R9,  R9_H,
+                                     R10, R10_H,
+                                     R11, R11_H,
+                                     R12, R12_H,
+                                     R13, R13_H,
+                                     R14, R14_H);
+
+reg_class_dynamic long_reg_with_rbp(long_reg_with_rbp_no_r12, long_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all long registers (excluding RSP, RBP, R12)
+reg_class long_reg_no_rbp_no_r12(RAX, RAX_H,
+                                 RDX, RDX_H,
+                                 RDI, RDI_H,
+                                 RSI, RSI_H,
+                                 RCX, RCX_H,
+                                 RBX, RBX_H,
+                                 R8,  R8_H,
+                                 R9,  R9_H,
+                                 R10, R10_H,
+                                 R11, R11_H,
+                                 R13, R13_H,
+                                 R14, R14_H);
+
+// Class for all long registers (excluding RSP, RBP, including R12)
+reg_class long_reg_no_rbp_with_r12(RAX, RAX_H,
                           RDX, RDX_H,
                           RDI, RDI_H,
                           RSI, RSI_H,
                           RCX, RCX_H,
                           RBX, RBX_H,
                           R8,  R8_H,
                           R9,  R9_H,
                           R10, R10_H,
                           R11, R11_H,
+                                   R12, R12_H,
                           R13, R13_H,
                           R14, R14_H);
 
+reg_class_dynamic long_reg_no_rbp(long_reg_no_rbp_no_r12, long_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between long_reg_no_rbp and long_reg_with_rbp.
 reg_class_dynamic long_reg(long_reg_no_rbp, long_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all long registers (excluding RAX, RDX and RSP)
-reg_class long_no_rax_rdx_reg_with_rbp(RBP, RBP_H,
+// Class for all long registers (excluding RAX, RDX, RSP and R12)
+reg_class long_no_rax_rdx_reg_with_rbp_no_r12(RBP, RBP_H,
+                                              RDI, RDI_H,
+                                              RSI, RSI_H,
+                                              RCX, RCX_H,
+                                              RBX, RBX_H,
+                                              R8,  R8_H,
+                                              R9,  R9_H,
+                                              R10, R10_H,
+                                              R11, R11_H,
+                                              R13, R13_H,
+                                              R14, R14_H);
+
+// Class for all long registers (excluding RAX, RDX and RSP, including R12)
+reg_class long_no_rax_rdx_reg_with_rbp_with_r12(RBP, RBP_H,
                                        RDI, RDI_H,
                                        RSI, RSI_H,
                                        RCX, RCX_H,
                                        RBX, RBX_H,
                                        R8,  R8_H,
                                        R9,  R9_H,
                                        R10, R10_H,
                                        R11, R11_H,
+                                                R12, R12_H,
                                        R13, R13_H,
                                        R14, R14_H);
 
-// Class for all long registers (excluding RAX, RDX, RSP, and RBP)
-reg_class long_no_rax_rdx_reg_no_rbp(RDI, RDI_H,
+reg_class_dynamic long_no_rax_rdx_reg_with_rbp(long_no_rax_rdx_reg_with_rbp_no_r12, long_no_rax_rdx_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all long registers (excluding RAX, RDX, RSP, RBP and R12)
+reg_class long_no_rax_rdx_reg_no_rbp_no_r12(RDI, RDI_H,
                                      RSI, RSI_H,
                                      RCX, RCX_H,
                                      RBX, RBX_H,
                                      R8,  R8_H,
                                      R9,  R9_H,
                                      R10, R10_H,
                                      R11, R11_H,
                                      R13, R13_H,
                                      R14, R14_H);
 
+// Class for all long registers (excluding RAX, RDX, RSP, and RBP, including R12)
+reg_class long_no_rax_rdx_reg_no_rbp_with_r12(RDI, RDI_H,
+                                              RSI, RSI_H,
+                                              RCX, RCX_H,
+                                              RBX, RBX_H,
+                                              R8,  R8_H,
+                                              R9,  R9_H,
+                                              R10, R10_H,
+                                              R11, R11_H,
+                                              R12, R12_H,
+                                              R13, R13_H,
+                                              R14, R14_H);
+
+reg_class_dynamic long_no_rax_rdx_reg_no_rbp(long_no_rax_rdx_reg_no_rbp_no_r12, long_no_rax_rdx_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between long_no_rax_rdx_reg_no_rbp and long_no_rax_rdx_reg_with_rbp.
 reg_class_dynamic long_no_rax_rdx_reg(long_no_rax_rdx_reg_no_rbp, long_no_rax_rdx_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all long registers (excluding RCX and RSP)
-reg_class long_no_rcx_reg_with_rbp(RBP, RBP_H,
+// Class for all long registers (excluding RCX, RSP and R12)
+reg_class long_no_rcx_reg_with_rbp_no_r12(RBP, RBP_H,
                                    RDI, RDI_H,
                                    RSI, RSI_H,
                                    RAX, RAX_H,
                                    RDX, RDX_H,
                                    RBX, RBX_H,

@@ -389,23 +591,56 @@
                                    R10, R10_H,
                                    R11, R11_H,
                                    R13, R13_H,
                                    R14, R14_H);
 
-// Class for all long registers (excluding RCX, RSP, and RBP)
-reg_class long_no_rcx_reg_no_rbp(RDI, RDI_H,
+// Class for all long registers (excluding RCX and RSP, including R12)
+reg_class long_no_rcx_reg_with_rbp_with_r12(RBP, RBP_H,
+                                            RDI, RDI_H,
                                  RSI, RSI_H,
                                  RAX, RAX_H,
                                  RDX, RDX_H,
                                  RBX, RBX_H,
                                  R8,  R8_H,
                                  R9,  R9_H,
                                  R10, R10_H,
                                  R11, R11_H,
+                                            R12, R12_H,
                                  R13, R13_H,
                                  R14, R14_H);
 
+reg_class_dynamic long_no_rcx_reg_with_rbp(long_no_rcx_reg_with_rbp_no_r12, long_no_rcx_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all long registers (excluding RCX, RSP, RBP and R12)
+reg_class long_no_rcx_reg_no_rbp_no_r12(RDI, RDI_H,
+                                        RSI, RSI_H,
+                                        RAX, RAX_H,
+                                        RDX, RDX_H,
+                                        RBX, RBX_H,
+                                        R8,  R8_H,
+                                        R9,  R9_H,
+                                        R10, R10_H,
+                                        R11, R11_H,
+                                        R13, R13_H,
+                                        R14, R14_H);
+
+// Class for all long registers (excluding RCX, RSP, and RBP, including R12)
+reg_class long_no_rcx_reg_no_rbp_with_r12(RDI, RDI_H,
+                                          RSI, RSI_H,
+                                          RAX, RAX_H,
+                                          RDX, RDX_H,
+                                          RBX, RBX_H,
+                                          R8,  R8_H,
+                                          R9,  R9_H,
+                                          R10, R10_H,
+                                          R11, R11_H,
+                                          R12, R12_H,
+                                          R13, R13_H,
+                                          R14, R14_H);
+
+reg_class_dynamic long_no_rcx_reg_no_rbp(long_no_rcx_reg_no_rbp_no_r12, long_no_rcx_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between long_no_rcx_reg_no_rbp and long_no_rcx_reg_with_rbp.
 reg_class_dynamic long_no_rcx_reg(long_no_rcx_reg_no_rbp, long_no_rcx_reg_with_rbp, %{ PreserveFramePointer %});
 
 // Singleton class for RAX long register
 reg_class long_rax_reg(RAX, RAX_H);

@@ -414,12 +649,27 @@
 reg_class long_rcx_reg(RCX, RCX_H);
 
 // Singleton class for RDX long register
 reg_class long_rdx_reg(RDX, RDX_H);
 
-// Class for all int registers (excluding RSP)
-reg_class int_reg_with_rbp(RAX,
+// Class for all int registers (excluding RSP and R12)
+reg_class int_reg_with_rbp_no_r12(RAX,
+                                  RDX,
+                                  RBP,
+                                  RDI,
+                                  RSI,
+                                  RCX,
+                                  RBX,
+                                  R8,
+                                  R9,
+                                  R10,
+                                  R11,
+                                  R13,
+                                  R14);
+
+// Class for all int registers (excluding RSP, including R12)
+reg_class int_reg_with_rbp_with_r12(RAX,
                            RDX,
                            RBP,
                            RDI,
                            RSI,
                            RCX,

@@ -429,29 +679,48 @@
                            R10,
                            R11,
                            R13,
                            R14);
 
-// Class for all int registers (excluding RSP and RBP)
-reg_class int_reg_no_rbp(RAX,
+reg_class_dynamic int_reg_with_rbp(int_reg_with_rbp_no_r12, int_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all int registers (excluding RSP, RBP and R12)
+reg_class int_reg_no_rbp_no_r12(RAX,
+                                RDX,
+                                RDI,
+                                RSI,
+                                RCX,
+                                RBX,
+                                R8,
+                                R9,
+                                R10,
+                                R11,
+                                R13,
+                                R14);
+
+// Class for all int registers (excluding RSP and RBP, including R12)
+reg_class int_reg_no_rbp_with_r12(RAX,
                          RDX,
                          RDI,
                          RSI,
                          RCX,
                          RBX,
                          R8,
                          R9,
                          R10,
                          R11,
+                                  R12,
                          R13,
                          R14);
 
+reg_class_dynamic int_reg_no_rbp(int_reg_no_rbp_no_r12, int_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between int_reg_no_rbp and int_reg_with_rbp.
 reg_class_dynamic int_reg(int_reg_no_rbp, int_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all int registers (excluding RCX and RSP)
-reg_class int_no_rcx_reg_with_rbp(RAX,
+// Class for all int registers (excluding RCX, RSP and R12)
+reg_class int_no_rcx_reg_with_rbp_no_r12(RAX,
                                   RDX,
                                   RBP,
                                   RDI,
                                   RSI,
                                   RBX,

@@ -460,28 +729,61 @@
                                   R10,
                                   R11,
                                   R13,
                                   R14);
 
-// Class for all int registers (excluding RCX, RSP, and RBP)
-reg_class int_no_rcx_reg_no_rbp(RAX,
+// Class for all int registers (excluding RCX and RSP, including R12)
+reg_class int_no_rcx_reg_with_rbp_with_r12(RAX,
                                 RDX,
+                                           RBP,
                                 RDI,
                                 RSI,
                                 RBX,
                                 R8,
                                 R9,
                                 R10,
                                 R11,
+                                           R12,
                                 R13,
                                 R14);
 
+reg_class_dynamic int_no_rcx_reg_with_rbp(int_no_rcx_reg_with_rbp_no_r12, int_no_rcx_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all int registers (excluding RCX, RSP, RBP and R12)
+reg_class int_no_rcx_reg_no_rbp_no_r12(RAX,
+                                       RDX,
+                                       RDI,
+                                       RSI,
+                                       RBX,
+                                       R8,
+                                       R9,
+                                       R10,
+                                       R11,
+                                       R13,
+                                       R14);
+
+// Class for all int registers (excluding RCX, RSP, and RBP, including R12)
+reg_class int_no_rcx_reg_no_rbp_with_r12(RAX,
+                                         RDX,
+                                         RDI,
+                                         RSI,
+                                         RBX,
+                                         R8,
+                                         R9,
+                                         R10,
+                                         R11,
+                                         R12,
+                                         R13,
+                                         R14);
+
+reg_class_dynamic int_no_rcx_reg_no_rbp(int_no_rcx_reg_no_rbp_no_r12, int_no_rcx_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between int_no_rcx_reg_no_rbp and int_no_rcx_reg_with_rbp.
 reg_class_dynamic int_no_rcx_reg(int_no_rcx_reg_no_rbp, int_no_rcx_reg_with_rbp, %{ PreserveFramePointer %});
 
-// Class for all int registers (excluding RAX, RDX, and RSP)
-reg_class int_no_rax_rdx_reg_with_rbp(RBP,
+// Class for all int registers (excluding RAX, RDX, RSP and R12)
+reg_class int_no_rax_rdx_reg_with_rbp_no_r12(RBP,
                                       RDI,
                                       RSI,
                                       RCX,
                                       RBX,
                                       R8,

@@ -489,22 +791,53 @@
                                       R10,
                                       R11,
                                       R13,
                                       R14);
 
-// Class for all int registers (excluding RAX, RDX, RSP, and RBP)
-reg_class int_no_rax_rdx_reg_no_rbp(RDI,
+// Class for all int registers (excluding RAX, RDX and RSP, including R12)
+reg_class int_no_rax_rdx_reg_with_rbp_with_r12(RBP,
+                                               RDI,
                                     RSI,
                                     RCX,
                                     RBX,
                                     R8,
                                     R9,
                                     R10,
                                     R11,
+                                               R12,
                                     R13,
                                     R14);
 
+reg_class_dynamic int_no_rax_rdx_reg_with_rbp(int_no_rax_rdx_reg_with_rbp_no_r12, int_no_rax_rdx_reg_with_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
+// Class for all int registers (excluding RAX, RDX, RSP, RBP and R12)
+reg_class int_no_rax_rdx_reg_no_rbp_no_r12(RDI,
+                                           RSI,
+                                           RCX,
+                                           RBX,
+                                           R8,
+                                           R9,
+                                           R10,
+                                           R11,
+                                           R13,
+                                           R14);
+
+// Class for all int registers (excluding RAX, RDX, RSP, and RBP, including R12)
+reg_class int_no_rax_rdx_reg_no_rbp_with_r12(RDI,
+                                             RSI,
+                                             RCX,
+                                             RBX,
+                                             R8,
+                                             R9,
+                                             R10,
+                                             R11,
+                                             R12,
+                                             R13,
+                                             R14);
+
+reg_class_dynamic int_no_rax_rdx_reg_no_rbp(int_no_rax_rdx_reg_no_rbp_no_r12, int_no_rax_rdx_reg_no_rbp_with_r12, %{ (UseCompressedOops || UseCompressedClassPointers || UseZGC) %});
+
 // Dynamic register class that selects between int_no_rax_rdx_reg_no_rbp and int_no_rax_rdx_reg_with_rbp.
 reg_class_dynamic int_no_rax_rdx_reg(int_no_rax_rdx_reg_no_rbp, int_no_rax_rdx_reg_with_rbp, %{ PreserveFramePointer %});
 
 // Singleton class for RAX int register
 reg_class int_rax_reg(RAX);
< prev index next >