src/hotspot/cpu/x86/x86_64.ad
changeset 53841 48b50573dee4
parent 53542 5c80e6994d8a
child 53844 8323fdac6da5
equal deleted inserted replaced
53840:9a0fd1f82406 53841:48b50573dee4
   167 //
   167 //
   168 
   168 
   169 // Empty register class.
   169 // Empty register class.
   170 reg_class no_reg();
   170 reg_class no_reg();
   171 
   171 
   172 // Class for all pointer registers (including RSP and RBP)
   172 // Class for all pointer/long registers
   173 reg_class any_reg_with_rbp(RAX, RAX_H,
   173 reg_class all_reg(RAX, RAX_H,
   174                            RDX, RDX_H,
   174                   RDX, RDX_H,
   175                            RBP, RBP_H,
   175                   RBP, RBP_H,
   176                            RDI, RDI_H,
   176                   RDI, RDI_H,
   177                            RSI, RSI_H,
   177                   RSI, RSI_H,
   178                            RCX, RCX_H,
   178                   RCX, RCX_H,
   179                            RBX, RBX_H,
   179                   RBX, RBX_H,
   180                            RSP, RSP_H,
   180                   RSP, RSP_H,
   181                            R8,  R8_H,
   181                   R8,  R8_H,
   182                            R9,  R9_H,
   182                   R9,  R9_H,
   183                            R10, R10_H,
   183                   R10, R10_H,
   184                            R11, R11_H,
   184                   R11, R11_H,
   185                            R12, R12_H,
   185                   R12, R12_H,
   186                            R13, R13_H,
   186                   R13, R13_H,
   187                            R14, R14_H,
   187                   R14, R14_H,
   188                            R15, R15_H);
   188                   R15, R15_H);
   189 
   189 
   190 // Class for all pointer registers (including RSP, but excluding RBP)
   190 // Class for all int registers
   191 reg_class any_reg_no_rbp(RAX, RAX_H,
   191 reg_class all_int_reg(RAX
   192                          RDX, RDX_H,
   192                       RDX,
   193                          RDI, RDI_H,
   193                       RBP,
   194                          RSI, RSI_H,
   194                       RDI,
   195                          RCX, RCX_H,
   195                       RSI,
   196                          RBX, RBX_H,
   196                       RCX,
   197                          RSP, RSP_H,
   197                       RBX,
   198                          R8,  R8_H,
   198                       R8,
   199                          R9,  R9_H,
   199                       R9,
   200                          R10, R10_H,
   200                       R10,
   201                          R11, R11_H,
   201                       R11,
   202                          R12, R12_H,
   202                       R12,
   203                          R13, R13_H,
   203                       R13,
   204                          R14, R14_H,
   204                       R14);
   205                          R15, R15_H);
   205 
   206 
   206 // Class for all pointer registers
   207 // Dynamic register class that selects at runtime between register classes
   207 reg_class any_reg %{
   208 // any_reg_no_rbp and any_reg_with_rbp (depending on the value of the flag PreserveFramePointer).
   208   return _ANY_REG_mask;
   209 // Equivalent to: return PreserveFramePointer ? any_reg_no_rbp : any_reg_with_rbp;
   209 %}
   210 reg_class_dynamic any_reg(any_reg_no_rbp, any_reg_with_rbp, %{ PreserveFramePointer %});
       
   211 
   210 
   212 // Class for all pointer registers (excluding RSP)
   211 // Class for all pointer registers (excluding RSP)
   213 reg_class ptr_reg_with_rbp(RAX, RAX_H,
   212 reg_class ptr_reg %{
   214                            RDX, RDX_H,
   213   return _PTR_REG_mask;
   215                            RBP, RBP_H,
   214 %}
   216                            RDI, RDI_H,
       
   217                            RSI, RSI_H,
       
   218                            RCX, RCX_H,
       
   219                            RBX, RBX_H,
       
   220                            R8,  R8_H,
       
   221                            R9,  R9_H,
       
   222                            R10, R10_H,
       
   223                            R11, R11_H,
       
   224                            R13, R13_H,
       
   225                            R14, R14_H);
       
   226 
   215 
   227 // Class for all pointer registers (excluding RSP and RBP)
   216 // Class for all pointer registers (excluding RSP and RBP)
   228 reg_class ptr_reg_no_rbp(RAX, RAX_H,
   217 reg_class ptr_reg_no_rbp %{
   229                          RDX, RDX_H,
   218   return _PTR_REG_NO_RBP_mask;
   230                          RDI, RDI_H,
   219 %}
   231                          RSI, RSI_H,
       
   232                          RCX, RCX_H,
       
   233                          RBX, RBX_H,
       
   234                          R8,  R8_H,
       
   235                          R9,  R9_H,
       
   236                          R10, R10_H,
       
   237                          R11, R11_H,
       
   238                          R13, R13_H,
       
   239                          R14, R14_H);
       
   240 
       
   241 // Dynamic register class that selects between ptr_reg_no_rbp and ptr_reg_with_rbp.
       
   242 reg_class_dynamic ptr_reg(ptr_reg_no_rbp, ptr_reg_with_rbp, %{ PreserveFramePointer %});
       
   243 
   220 
   244 // Class for all pointer registers (excluding RAX and RSP)
   221 // Class for all pointer registers (excluding RAX and RSP)
   245 reg_class ptr_no_rax_reg_with_rbp(RDX, RDX_H,
   222 reg_class ptr_no_rax_reg %{
   246                                   RBP, RBP_H,
   223   return _PTR_NO_RAX_REG_mask;
   247                                   RDI, RDI_H,
   224 %}
   248                                   RSI, RSI_H,
       
   249                                   RCX, RCX_H,
       
   250                                   RBX, RBX_H,
       
   251                                   R8,  R8_H,
       
   252                                   R9,  R9_H,
       
   253                                   R10, R10_H,
       
   254                                   R11, R11_H,
       
   255                                   R13, R13_H,
       
   256                                   R14, R14_H);
       
   257 
       
   258 // Class for all pointer registers (excluding RAX, RSP, and RBP)
       
   259 reg_class ptr_no_rax_reg_no_rbp(RDX, RDX_H,
       
   260                                 RDI, RDI_H,
       
   261                                 RSI, RSI_H,
       
   262                                 RCX, RCX_H,
       
   263                                 RBX, RBX_H,
       
   264                                 R8,  R8_H,
       
   265                                 R9,  R9_H,
       
   266                                 R10, R10_H,
       
   267                                 R11, R11_H,
       
   268                                 R13, R13_H,
       
   269                                 R14, R14_H);
       
   270 
       
   271 // Dynamic register class that selects between ptr_no_rax_reg_no_rbp and ptr_no_rax_reg_with_rbp.
       
   272 reg_class_dynamic ptr_no_rax_reg(ptr_no_rax_reg_no_rbp, ptr_no_rax_reg_with_rbp, %{ PreserveFramePointer %});
       
   273 
   225 
   274 // Class for all pointer registers (excluding RAX, RBX, and RSP)
   226 // Class for all pointer registers (excluding RAX, RBX, and RSP)
   275 reg_class ptr_no_rax_rbx_reg_with_rbp(RDX, RDX_H,
   227 reg_class ptr_no_rax_rbx_reg %{
   276                                       RBP, RBP_H,
   228   return _PTR_NO_RAX_RBX_REG_mask;
   277                                       RDI, RDI_H,
   229 %}
   278                                       RSI, RSI_H,
   230 
   279                                       RCX, RCX_H,
   231 // Class for all long registers (excluding RSP)
   280                                       R8,  R8_H,
   232 reg_class long_reg %{
   281                                       R9,  R9_H,
   233   return _LONG_REG_mask;
   282                                       R10, R10_H,
   234 %}
   283                                       R11, R11_H,
   235 
   284                                       R13, R13_H,
   236 // Class for all long registers (excluding RAX, RDX and RSP)
   285                                       R14, R14_H);
   237 reg_class long_no_rax_rdx_reg %{
   286 
   238   return _LONG_NO_RAX_RDX_REG_mask;
   287 // Class for all pointer registers (excluding RAX, RBX, RSP, and RBP)
   239 %}
   288 reg_class ptr_no_rax_rbx_reg_no_rbp(RDX, RDX_H,
   240 
   289                                     RDI, RDI_H,
   241 // Class for all long registers (excluding RCX and RSP)
   290                                     RSI, RSI_H,
   242 reg_class long_no_rcx_reg %{
   291                                     RCX, RCX_H,
   243   return _LONG_NO_RCX_REG_mask;
   292                                     R8,  R8_H,
   244 %}
   293                                     R9,  R9_H,
   245 
   294                                     R10, R10_H,
   246 // Class for all int registers (excluding RSP)
   295                                     R11, R11_H,
   247 reg_class int_reg %{
   296                                     R13, R13_H,
   248   return _INT_REG_mask;
   297                                     R14, R14_H);
   249 %}
   298 
   250 
   299 // Dynamic register class that selects between ptr_no_rax_rbx_reg_no_rbp and ptr_no_rax_rbx_reg_with_rbp.
   251 // Class for all int registers (excluding RAX, RDX, and RSP)
   300 reg_class_dynamic ptr_no_rax_rbx_reg(ptr_no_rax_rbx_reg_no_rbp, ptr_no_rax_rbx_reg_with_rbp, %{ PreserveFramePointer %});
   252 reg_class int_no_rax_rdx_reg %{
       
   253   return _INT_NO_RAX_RDX_REG_mask;
       
   254 %}
       
   255 
       
   256 // Class for all int registers (excluding RCX and RSP)
       
   257 reg_class int_no_rcx_reg %{
       
   258   return _INT_NO_RCX_REG_mask;
       
   259 %}
   301 
   260 
   302 // Singleton class for RAX pointer register
   261 // Singleton class for RAX pointer register
   303 reg_class ptr_rax_reg(RAX, RAX_H);
   262 reg_class ptr_rax_reg(RAX, RAX_H);
   304 
   263 
   305 // Singleton class for RBX pointer register
   264 // Singleton class for RBX pointer register
   315 reg_class ptr_rsp_reg(RSP, RSP_H);
   274 reg_class ptr_rsp_reg(RSP, RSP_H);
   316 
   275 
   317 // Singleton class for TLS pointer
   276 // Singleton class for TLS pointer
   318 reg_class ptr_r15_reg(R15, R15_H);
   277 reg_class ptr_r15_reg(R15, R15_H);
   319 
   278 
   320 // Class for all long registers (excluding RSP)
       
   321 reg_class long_reg_with_rbp(RAX, RAX_H,
       
   322                             RDX, RDX_H,
       
   323                             RBP, RBP_H,
       
   324                             RDI, RDI_H,
       
   325                             RSI, RSI_H,
       
   326                             RCX, RCX_H,
       
   327                             RBX, RBX_H,
       
   328                             R8,  R8_H,
       
   329                             R9,  R9_H,
       
   330                             R10, R10_H,
       
   331                             R11, R11_H,
       
   332                             R13, R13_H,
       
   333                             R14, R14_H);
       
   334 
       
   335 // Class for all long registers (excluding RSP and RBP)
       
   336 reg_class long_reg_no_rbp(RAX, RAX_H,
       
   337                           RDX, RDX_H,
       
   338                           RDI, RDI_H,
       
   339                           RSI, RSI_H,
       
   340                           RCX, RCX_H,
       
   341                           RBX, RBX_H,
       
   342                           R8,  R8_H,
       
   343                           R9,  R9_H,
       
   344                           R10, R10_H,
       
   345                           R11, R11_H,
       
   346                           R13, R13_H,
       
   347                           R14, R14_H);
       
   348 
       
   349 // Dynamic register class that selects between long_reg_no_rbp and long_reg_with_rbp.
       
   350 reg_class_dynamic long_reg(long_reg_no_rbp, long_reg_with_rbp, %{ PreserveFramePointer %});
       
   351 
       
   352 // Class for all long registers (excluding RAX, RDX and RSP)
       
   353 reg_class long_no_rax_rdx_reg_with_rbp(RBP, RBP_H,
       
   354                                        RDI, RDI_H,
       
   355                                        RSI, RSI_H,
       
   356                                        RCX, RCX_H,
       
   357                                        RBX, RBX_H,
       
   358                                        R8,  R8_H,
       
   359                                        R9,  R9_H,
       
   360                                        R10, R10_H,
       
   361                                        R11, R11_H,
       
   362                                        R13, R13_H,
       
   363                                        R14, R14_H);
       
   364 
       
   365 // Class for all long registers (excluding RAX, RDX, RSP, and RBP)
       
   366 reg_class long_no_rax_rdx_reg_no_rbp(RDI, RDI_H,
       
   367                                      RSI, RSI_H,
       
   368                                      RCX, RCX_H,
       
   369                                      RBX, RBX_H,
       
   370                                      R8,  R8_H,
       
   371                                      R9,  R9_H,
       
   372                                      R10, R10_H,
       
   373                                      R11, R11_H,
       
   374                                      R13, R13_H,
       
   375                                      R14, R14_H);
       
   376 
       
   377 // Dynamic register class that selects between long_no_rax_rdx_reg_no_rbp and long_no_rax_rdx_reg_with_rbp.
       
   378 reg_class_dynamic long_no_rax_rdx_reg(long_no_rax_rdx_reg_no_rbp, long_no_rax_rdx_reg_with_rbp, %{ PreserveFramePointer %});
       
   379 
       
   380 // Class for all long registers (excluding RCX and RSP)
       
   381 reg_class long_no_rcx_reg_with_rbp(RBP, RBP_H,
       
   382                                    RDI, RDI_H,
       
   383                                    RSI, RSI_H,
       
   384                                    RAX, RAX_H,
       
   385                                    RDX, RDX_H,
       
   386                                    RBX, RBX_H,
       
   387                                    R8,  R8_H,
       
   388                                    R9,  R9_H,
       
   389                                    R10, R10_H,
       
   390                                    R11, R11_H,
       
   391                                    R13, R13_H,
       
   392                                    R14, R14_H);
       
   393 
       
   394 // Class for all long registers (excluding RCX, RSP, and RBP)
       
   395 reg_class long_no_rcx_reg_no_rbp(RDI, RDI_H,
       
   396                                  RSI, RSI_H,
       
   397                                  RAX, RAX_H,
       
   398                                  RDX, RDX_H,
       
   399                                  RBX, RBX_H,
       
   400                                  R8,  R8_H,
       
   401                                  R9,  R9_H,
       
   402                                  R10, R10_H,
       
   403                                  R11, R11_H,
       
   404                                  R13, R13_H,
       
   405                                  R14, R14_H);
       
   406 
       
   407 // Dynamic register class that selects between long_no_rcx_reg_no_rbp and long_no_rcx_reg_with_rbp.
       
   408 reg_class_dynamic long_no_rcx_reg(long_no_rcx_reg_no_rbp, long_no_rcx_reg_with_rbp, %{ PreserveFramePointer %});
       
   409 
       
   410 // Singleton class for RAX long register
   279 // Singleton class for RAX long register
   411 reg_class long_rax_reg(RAX, RAX_H);
   280 reg_class long_rax_reg(RAX, RAX_H);
   412 
   281 
   413 // Singleton class for RCX long register
   282 // Singleton class for RCX long register
   414 reg_class long_rcx_reg(RCX, RCX_H);
   283 reg_class long_rcx_reg(RCX, RCX_H);
   415 
   284 
   416 // Singleton class for RDX long register
   285 // Singleton class for RDX long register
   417 reg_class long_rdx_reg(RDX, RDX_H);
   286 reg_class long_rdx_reg(RDX, RDX_H);
   418 
       
   419 // Class for all int registers (excluding RSP)
       
   420 reg_class int_reg_with_rbp(RAX,
       
   421                            RDX,
       
   422                            RBP,
       
   423                            RDI,
       
   424                            RSI,
       
   425                            RCX,
       
   426                            RBX,
       
   427                            R8,
       
   428                            R9,
       
   429                            R10,
       
   430                            R11,
       
   431                            R13,
       
   432                            R14);
       
   433 
       
   434 // Class for all int registers (excluding RSP and RBP)
       
   435 reg_class int_reg_no_rbp(RAX,
       
   436                          RDX,
       
   437                          RDI,
       
   438                          RSI,
       
   439                          RCX,
       
   440                          RBX,
       
   441                          R8,
       
   442                          R9,
       
   443                          R10,
       
   444                          R11,
       
   445                          R13,
       
   446                          R14);
       
   447 
       
   448 // Dynamic register class that selects between int_reg_no_rbp and int_reg_with_rbp.
       
   449 reg_class_dynamic int_reg(int_reg_no_rbp, int_reg_with_rbp, %{ PreserveFramePointer %});
       
   450 
       
   451 // Class for all int registers (excluding RCX and RSP)
       
   452 reg_class int_no_rcx_reg_with_rbp(RAX,
       
   453                                   RDX,
       
   454                                   RBP,
       
   455                                   RDI,
       
   456                                   RSI,
       
   457                                   RBX,
       
   458                                   R8,
       
   459                                   R9,
       
   460                                   R10,
       
   461                                   R11,
       
   462                                   R13,
       
   463                                   R14);
       
   464 
       
   465 // Class for all int registers (excluding RCX, RSP, and RBP)
       
   466 reg_class int_no_rcx_reg_no_rbp(RAX,
       
   467                                 RDX,
       
   468                                 RDI,
       
   469                                 RSI,
       
   470                                 RBX,
       
   471                                 R8,
       
   472                                 R9,
       
   473                                 R10,
       
   474                                 R11,
       
   475                                 R13,
       
   476                                 R14);
       
   477 
       
   478 // Dynamic register class that selects between int_no_rcx_reg_no_rbp and int_no_rcx_reg_with_rbp.
       
   479 reg_class_dynamic int_no_rcx_reg(int_no_rcx_reg_no_rbp, int_no_rcx_reg_with_rbp, %{ PreserveFramePointer %});
       
   480 
       
   481 // Class for all int registers (excluding RAX, RDX, and RSP)
       
   482 reg_class int_no_rax_rdx_reg_with_rbp(RBP,
       
   483                                       RDI,
       
   484                                       RSI,
       
   485                                       RCX,
       
   486                                       RBX,
       
   487                                       R8,
       
   488                                       R9,
       
   489                                       R10,
       
   490                                       R11,
       
   491                                       R13,
       
   492                                       R14);
       
   493 
       
   494 // Class for all int registers (excluding RAX, RDX, RSP, and RBP)
       
   495 reg_class int_no_rax_rdx_reg_no_rbp(RDI,
       
   496                                     RSI,
       
   497                                     RCX,
       
   498                                     RBX,
       
   499                                     R8,
       
   500                                     R9,
       
   501                                     R10,
       
   502                                     R11,
       
   503                                     R13,
       
   504                                     R14);
       
   505 
       
   506 // Dynamic register class that selects between int_no_rax_rdx_reg_no_rbp and int_no_rax_rdx_reg_with_rbp.
       
   507 reg_class_dynamic int_no_rax_rdx_reg(int_no_rax_rdx_reg_no_rbp, int_no_rax_rdx_reg_with_rbp, %{ PreserveFramePointer %});
       
   508 
   287 
   509 // Singleton class for RAX int register
   288 // Singleton class for RAX int register
   510 reg_class int_rax_reg(RAX);
   289 reg_class int_rax_reg(RAX);
   511 
   290 
   512 // Singleton class for RBX int register
   291 // Singleton class for RBX int register
   527 %}
   306 %}
   528 
   307 
   529 //----------SOURCE BLOCK-------------------------------------------------------
   308 //----------SOURCE BLOCK-------------------------------------------------------
   530 // This is a block of C++ code which provides values, functions, and
   309 // This is a block of C++ code which provides values, functions, and
   531 // definitions necessary in the rest of the architecture description
   310 // definitions necessary in the rest of the architecture description
       
   311 source_hpp %{
       
   312 
       
   313 extern RegMask _ANY_REG_mask;
       
   314 extern RegMask _PTR_REG_mask;
       
   315 extern RegMask _PTR_REG_NO_RBP_mask;
       
   316 extern RegMask _PTR_NO_RAX_REG_mask;
       
   317 extern RegMask _PTR_NO_RAX_RBX_REG_mask;
       
   318 extern RegMask _LONG_REG_mask;
       
   319 extern RegMask _LONG_NO_RAX_RDX_REG_mask;
       
   320 extern RegMask _LONG_NO_RCX_REG_mask;
       
   321 extern RegMask _INT_REG_mask;
       
   322 extern RegMask _INT_NO_RAX_RDX_REG_mask;
       
   323 extern RegMask _INT_NO_RCX_REG_mask;
       
   324 
       
   325 extern RegMask _STACK_OR_PTR_REG_mask;
       
   326 extern RegMask _STACK_OR_LONG_REG_mask;
       
   327 extern RegMask _STACK_OR_INT_REG_mask;
       
   328 
       
   329 inline const RegMask& STACK_OR_PTR_REG_mask()  { return _STACK_OR_PTR_REG_mask;  }
       
   330 inline const RegMask& STACK_OR_LONG_REG_mask() { return _STACK_OR_LONG_REG_mask; }
       
   331 inline const RegMask& STACK_OR_INT_REG_mask()  { return _STACK_OR_INT_REG_mask;  }
       
   332 
       
   333 %}
       
   334 
   532 source %{
   335 source %{
   533 #define   RELOC_IMM64    Assembler::imm_operand
   336 #define   RELOC_IMM64    Assembler::imm_operand
   534 #define   RELOC_DISP32   Assembler::disp32_operand
   337 #define   RELOC_DISP32   Assembler::disp32_operand
   535 
   338 
   536 #define __ _masm.
   339 #define __ _masm.
       
   340 
       
   341 RegMask _ANY_REG_mask;
       
   342 RegMask _PTR_REG_mask;
       
   343 RegMask _PTR_REG_NO_RBP_mask;
       
   344 RegMask _PTR_NO_RAX_REG_mask;
       
   345 RegMask _PTR_NO_RAX_RBX_REG_mask;
       
   346 RegMask _LONG_REG_mask;
       
   347 RegMask _LONG_NO_RAX_RDX_REG_mask;
       
   348 RegMask _LONG_NO_RCX_REG_mask;
       
   349 RegMask _INT_REG_mask;
       
   350 RegMask _INT_NO_RAX_RDX_REG_mask;
       
   351 RegMask _INT_NO_RCX_REG_mask;
       
   352 RegMask _STACK_OR_PTR_REG_mask;
       
   353 RegMask _STACK_OR_LONG_REG_mask;
       
   354 RegMask _STACK_OR_INT_REG_mask;
       
   355 
       
   356 static bool need_r12_heapbase() {
       
   357   return UseCompressedOops || UseCompressedClassPointers || UseZGC;
       
   358 }
       
   359 
       
   360 void reg_mask_init() {
       
   361   // _ALL_REG_mask is generated by adlc from the all_reg register class below.
       
   362   // We derive a number of subsets from it.
       
   363   _ANY_REG_mask = _ALL_REG_mask;
       
   364 
       
   365   if (PreserveFramePointer) {
       
   366     _ANY_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()));
       
   367     _ANY_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()->next()));
       
   368   }
       
   369   if (need_r12_heapbase()) {
       
   370     _ANY_REG_mask.Remove(OptoReg::as_OptoReg(r12->as_VMReg()));
       
   371     _ANY_REG_mask.Remove(OptoReg::as_OptoReg(r12->as_VMReg()->next()));
       
   372   }
       
   373 
       
   374   _PTR_REG_mask = _ANY_REG_mask;
       
   375   _PTR_REG_mask.Remove(OptoReg::as_OptoReg(rsp->as_VMReg()));
       
   376   _PTR_REG_mask.Remove(OptoReg::as_OptoReg(rsp->as_VMReg()->next()));
       
   377   _PTR_REG_mask.Remove(OptoReg::as_OptoReg(r15->as_VMReg()));
       
   378   _PTR_REG_mask.Remove(OptoReg::as_OptoReg(r15->as_VMReg()->next()));
       
   379 
       
   380   _STACK_OR_PTR_REG_mask = _PTR_REG_mask;
       
   381   _STACK_OR_PTR_REG_mask.OR(STACK_OR_STACK_SLOTS_mask());
       
   382 
       
   383   _PTR_REG_NO_RBP_mask = _PTR_REG_mask;
       
   384   _PTR_REG_NO_RBP_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()));
       
   385   _PTR_REG_NO_RBP_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()->next()));
       
   386 
       
   387   _PTR_NO_RAX_REG_mask = _PTR_REG_mask;
       
   388   _PTR_NO_RAX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()));
       
   389   _PTR_NO_RAX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()->next()));
       
   390 
       
   391   _PTR_NO_RAX_RBX_REG_mask = _PTR_NO_RAX_REG_mask;
       
   392   _PTR_NO_RAX_RBX_REG_mask.Remove(OptoReg::as_OptoReg(rbx->as_VMReg()));
       
   393   _PTR_NO_RAX_RBX_REG_mask.Remove(OptoReg::as_OptoReg(rbx->as_VMReg()->next()));
       
   394 
       
   395   _LONG_REG_mask = _PTR_REG_mask;
       
   396   _STACK_OR_LONG_REG_mask = _LONG_REG_mask;
       
   397   _STACK_OR_LONG_REG_mask.OR(STACK_OR_STACK_SLOTS_mask());
       
   398 
       
   399   _LONG_NO_RAX_RDX_REG_mask = _LONG_REG_mask;
       
   400   _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()));
       
   401   _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()->next()));
       
   402   _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rdx->as_VMReg()));
       
   403   _LONG_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rdx->as_VMReg()->next()));
       
   404 
       
   405   _LONG_NO_RCX_REG_mask = _LONG_REG_mask;
       
   406   _LONG_NO_RCX_REG_mask.Remove(OptoReg::as_OptoReg(rcx->as_VMReg()));
       
   407   _LONG_NO_RCX_REG_mask.Remove(OptoReg::as_OptoReg(rcx->as_VMReg()->next()));
       
   408 
       
   409   _INT_REG_mask = _ALL_INT_REG_mask;
       
   410   if (PreserveFramePointer) {
       
   411     _INT_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg()));
       
   412   }
       
   413   if (need_r12_heapbase()) {
       
   414     _INT_REG_mask.Remove(OptoReg::as_OptoReg(r12->as_VMReg()));
       
   415   }
       
   416 
       
   417   _STACK_OR_INT_REG_mask = _INT_REG_mask;
       
   418   _STACK_OR_INT_REG_mask.OR(STACK_OR_STACK_SLOTS_mask());
       
   419 
       
   420   _INT_NO_RAX_RDX_REG_mask = _INT_REG_mask;
       
   421   _INT_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rax->as_VMReg()));
       
   422   _INT_NO_RAX_RDX_REG_mask.Remove(OptoReg::as_OptoReg(rdx->as_VMReg()));
       
   423 
       
   424   _INT_NO_RCX_REG_mask = _INT_REG_mask;
       
   425   _INT_NO_RCX_REG_mask.Remove(OptoReg::as_OptoReg(rcx->as_VMReg()));
       
   426 }
   537 
   427 
   538 static bool generate_vzeroupper(Compile* C) {
   428 static bool generate_vzeroupper(Compile* C) {
   539   return (VM_Version::supports_vzeroupper() && (C->max_vector_size() > 16 || C->clear_upper_avx() == true)) ? true: false;  // Generate vzeroupper
   429   return (VM_Version::supports_vzeroupper() && (C->max_vector_size() > 16 || C->clear_upper_avx() == true)) ? true: false;  // Generate vzeroupper
   540 }
   430 }
   541 
   431