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