src/share/vm/adlc/output_c.cpp

changeset 3317
db2e64ca2d5a
parent 3310
6729bbc1fcd6
child 4037
da91efe96a93
     1.1 --- a/src/share/vm/adlc/output_c.cpp	Wed Sep 14 09:22:51 2011 +0200
     1.2 +++ b/src/share/vm/adlc/output_c.cpp	Tue Nov 22 09:45:57 2011 +0100
     1.3 @@ -162,11 +162,17 @@
     1.4        RegClass   *reg_class = _register->getRegClass(rc_name);
     1.5        assert( reg_class, "Using an undefined register class");
     1.6  
     1.7 -      int len = RegisterForm::RegMask_Size();
     1.8 -      fprintf(fp_hpp, "extern const RegMask %s%s_mask;\n", prefix, toUpper( rc_name ) );
     1.9 +      if (reg_class->_user_defined == NULL) {
    1.10 +        fprintf(fp_hpp, "extern const RegMask _%s%s_mask;\n", prefix, toUpper( rc_name ) );
    1.11 +        fprintf(fp_hpp, "inline const RegMask &%s%s_mask() { return _%s%s_mask; }\n", prefix, toUpper( rc_name ), prefix, toUpper( rc_name ));
    1.12 +      } else {
    1.13 +        fprintf(fp_hpp, "inline const RegMask &%s%s_mask() { %s }\n", prefix, toUpper( rc_name ), reg_class->_user_defined);
    1.14 +      }
    1.15  
    1.16        if( reg_class->_stack_or_reg ) {
    1.17 -        fprintf(fp_hpp, "extern const RegMask %sSTACK_OR_%s_mask;\n", prefix, toUpper( rc_name ) );
    1.18 +        assert(reg_class->_user_defined == NULL, "no user defined reg class here");
    1.19 +        fprintf(fp_hpp, "extern const RegMask _%sSTACK_OR_%s_mask;\n", prefix, toUpper( rc_name ) );
    1.20 +        fprintf(fp_hpp, "inline const RegMask &%sSTACK_OR_%s_mask() { return _%sSTACK_OR_%s_mask; }\n", prefix, toUpper( rc_name ), prefix, toUpper( rc_name ) );
    1.21        }
    1.22      }
    1.23    }
    1.24 @@ -188,8 +194,10 @@
    1.25        RegClass   *reg_class = _register->getRegClass(rc_name);
    1.26        assert( reg_class, "Using an undefined register class");
    1.27  
    1.28 +      if (reg_class->_user_defined != NULL) continue;
    1.29 +
    1.30        int len = RegisterForm::RegMask_Size();
    1.31 -      fprintf(fp_cpp, "const RegMask %s%s_mask(", prefix, toUpper( rc_name ) );
    1.32 +      fprintf(fp_cpp, "const RegMask _%s%s_mask(", prefix, toUpper( rc_name ) );
    1.33        { int i;
    1.34          for( i = 0; i < len-1; i++ )
    1.35            fprintf(fp_cpp," 0x%x,",reg_class->regs_in_word(i,false));
    1.36 @@ -198,7 +206,7 @@
    1.37  
    1.38        if( reg_class->_stack_or_reg ) {
    1.39          int i;
    1.40 -        fprintf(fp_cpp, "const RegMask %sSTACK_OR_%s_mask(", prefix, toUpper( rc_name ) );
    1.41 +        fprintf(fp_cpp, "const RegMask _%sSTACK_OR_%s_mask(", prefix, toUpper( rc_name ) );
    1.42          for( i = 0; i < len-1; i++ )
    1.43            fprintf(fp_cpp," 0x%x,",reg_class->regs_in_word(i,true));
    1.44          fprintf(fp_cpp," 0x%x );\n",reg_class->regs_in_word(i,true));
    1.45 @@ -2690,7 +2698,7 @@
    1.46        if (strcmp(first_reg_class, "stack_slots") == 0) {
    1.47          fprintf(fp,"  return &(Compile::current()->FIRST_STACK_mask());\n");
    1.48        } else {
    1.49 -        fprintf(fp,"  return &%s_mask;\n", toUpper(first_reg_class));
    1.50 +        fprintf(fp,"  return &%s_mask();\n", toUpper(first_reg_class));
    1.51        }
    1.52      } else {
    1.53        // Build a switch statement to return the desired mask.
    1.54 @@ -2702,7 +2710,7 @@
    1.55          if( !strcmp(reg_class, "stack_slots") ) {
    1.56            fprintf(fp, "  case %d: return &(Compile::current()->FIRST_STACK_mask());\n", index);
    1.57          } else {
    1.58 -          fprintf(fp, "  case %d: return &%s_mask;\n", index, toUpper(reg_class));
    1.59 +          fprintf(fp, "  case %d: return &%s_mask();\n", index, toUpper(reg_class));
    1.60          }
    1.61        }
    1.62        fprintf(fp,"  }\n");
    1.63 @@ -4080,8 +4088,6 @@
    1.64    fprintf(fp_cpp,"OptoReg::Name Matcher::inline_cache_reg() {");
    1.65    fprintf(fp_cpp," return OptoReg::Name(%s_num); }\n\n",
    1.66            _frame->_inline_cache_reg);
    1.67 -  fprintf(fp_cpp,"const RegMask &Matcher::inline_cache_reg_mask() {");
    1.68 -  fprintf(fp_cpp," return INLINE_CACHE_REG_mask; }\n\n");
    1.69    fprintf(fp_cpp,"int Matcher::inline_cache_reg_encode() {");
    1.70    fprintf(fp_cpp," return _regEncode[inline_cache_reg()]; }\n\n");
    1.71  
    1.72 @@ -4089,8 +4095,6 @@
    1.73    fprintf(fp_cpp,"OptoReg::Name Matcher::interpreter_method_oop_reg() {");
    1.74    fprintf(fp_cpp," return OptoReg::Name(%s_num); }\n\n",
    1.75            _frame->_interpreter_method_oop_reg);
    1.76 -  fprintf(fp_cpp,"const RegMask &Matcher::interpreter_method_oop_reg_mask() {");
    1.77 -  fprintf(fp_cpp," return INTERPRETER_METHOD_OOP_REG_mask; }\n\n");
    1.78    fprintf(fp_cpp,"int Matcher::interpreter_method_oop_reg_encode() {");
    1.79    fprintf(fp_cpp," return _regEncode[interpreter_method_oop_reg()]; }\n\n");
    1.80  
    1.81 @@ -4101,11 +4105,6 @@
    1.82    else
    1.83      fprintf(fp_cpp," return OptoReg::Name(%s_num); }\n\n",
    1.84              _frame->_interpreter_frame_pointer_reg);
    1.85 -  fprintf(fp_cpp,"const RegMask &Matcher::interpreter_frame_pointer_reg_mask() {");
    1.86 -  if (_frame->_interpreter_frame_pointer_reg == NULL)
    1.87 -    fprintf(fp_cpp," static RegMask dummy; return dummy; }\n\n");
    1.88 -  else
    1.89 -    fprintf(fp_cpp," return INTERPRETER_FRAME_POINTER_REG_mask; }\n\n");
    1.90  
    1.91    // Frame Pointer definition
    1.92    /* CNC - I can not contemplate having a different frame pointer between

mercurial