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