src/share/vm/adlc/output_c.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8068945-8u-patched Cdiff src/share/vm/adlc/output_c.cpp

src/share/vm/adlc/output_c.cpp

Print this page
rev 7385 : 8075798: Allow ADLC register class to depend on runtime conditions also for cisc-spillable classes
Summary: Introduce a new register class, reg_class_dynamic, that supports also cist-spillable masks.
Reviewed-by: kvn, dlong, roland

*** 153,182 **** // Generate a list of register masks, one for each class. fprintf(fp_hpp,"\n"); fprintf(fp_hpp,"// Register masks, one for each register class.\n"); _register->_rclasses.reset(); for (rc_name = NULL; (rc_name = _register->_rclasses.iter()) != NULL;) { - const char *prefix = ""; RegClass *reg_class = _register->getRegClass(rc_name); assert(reg_class, "Using an undefined register class"); ! ! const char* rc_name_to_upper = toUpper(rc_name); ! ! if (reg_class->_user_defined == NULL) { ! fprintf(fp_hpp, "extern const RegMask _%s%s_mask;\n", prefix, rc_name_to_upper); ! fprintf(fp_hpp, "inline const RegMask &%s%s_mask() { return _%s%s_mask; }\n", prefix, rc_name_to_upper, prefix, rc_name_to_upper); ! } else { ! fprintf(fp_hpp, "inline const RegMask &%s%s_mask() { %s }\n", prefix, rc_name_to_upper, reg_class->_user_defined); ! } ! ! if (reg_class->_stack_or_reg) { ! assert(reg_class->_user_defined == NULL, "no user defined reg class here"); ! fprintf(fp_hpp, "extern const RegMask _%sSTACK_OR_%s_mask;\n", prefix, rc_name_to_upper); ! fprintf(fp_hpp, "inline const RegMask &%sSTACK_OR_%s_mask() { return _%sSTACK_OR_%s_mask; }\n", prefix, rc_name_to_upper, prefix, rc_name_to_upper); ! } ! delete[] rc_name_to_upper; ! } } } // Generate an enumeration of user-defined register classes --- 153,165 ---- // Generate a list of register masks, one for each class. fprintf(fp_hpp,"\n"); fprintf(fp_hpp,"// Register masks, one for each register class.\n"); _register->_rclasses.reset(); for (rc_name = NULL; (rc_name = _register->_rclasses.iter()) != NULL;) { RegClass *reg_class = _register->getRegClass(rc_name); assert(reg_class, "Using an undefined register class"); ! reg_class->declare_register_masks(fp_hpp); } } } // Generate an enumeration of user-defined register classes
*** 188,226 **** // Generate a list of register masks, one for each class. fprintf(fp_cpp,"\n"); fprintf(fp_cpp,"// Register masks, one for each register class.\n"); _register->_rclasses.reset(); for (rc_name = NULL; (rc_name = _register->_rclasses.iter()) != NULL;) { - const char *prefix = ""; RegClass *reg_class = _register->getRegClass(rc_name); assert(reg_class, "Using an undefined register class"); ! ! if (reg_class->_user_defined != NULL) { ! continue; ! } ! ! int len = RegisterForm::RegMask_Size(); ! const char* rc_name_to_upper = toUpper(rc_name); ! fprintf(fp_cpp, "const RegMask _%s%s_mask(", prefix, rc_name_to_upper); ! ! { ! int i; ! for(i = 0; i < len - 1; i++) { ! fprintf(fp_cpp," 0x%x,", reg_class->regs_in_word(i, false)); ! } ! fprintf(fp_cpp," 0x%x );\n", reg_class->regs_in_word(i, false)); ! } ! ! if (reg_class->_stack_or_reg) { ! int i; ! fprintf(fp_cpp, "const RegMask _%sSTACK_OR_%s_mask(", prefix, rc_name_to_upper); ! for(i = 0; i < len - 1; i++) { ! fprintf(fp_cpp," 0x%x,",reg_class->regs_in_word(i, true)); ! } ! fprintf(fp_cpp," 0x%x );\n",reg_class->regs_in_word(i, true)); ! } ! delete[] rc_name_to_upper; } } } // Compute an index for an array in the pipeline_reads_NNN arrays --- 171,183 ---- // Generate a list of register masks, one for each class. fprintf(fp_cpp,"\n"); fprintf(fp_cpp,"// Register masks, one for each register class.\n"); _register->_rclasses.reset(); for (rc_name = NULL; (rc_name = _register->_rclasses.iter()) != NULL;) { RegClass *reg_class = _register->getRegClass(rc_name); assert(reg_class, "Using an undefined register class"); ! reg_class->build_register_masks(fp_cpp); } } } // Compute an index for an array in the pipeline_reads_NNN arrays
src/share/vm/adlc/output_c.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File