diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28d171c..f609d3f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-02-05 Nick Clifton <nickc@redhat.com> + + * config/mn10300/mn10300.c (mn10300_hard_regno_mode_ok): Do not + accept extended registers in any mode when compiling for the + MN10300. + 2014-02-05 Yury Gribov <y.gribov@samsung.com> * cif-code.def (ATTRIBUTE_MISMATCH): New CIF code. diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index 1b95819..a2133f2 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -68,7 +68,6 @@ static int cc_flags_for_mode(enum machine_mode); static int cc_flags_for_code(enum rtx_code); /* Implement TARGET_OPTION_OVERRIDE. */ - static void mn10300_option_override (void) { @@ -1413,7 +1412,6 @@ mn10300_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i, if (addr && CONSTANT_ADDRESS_P (addr)) return GENERAL_REGS; } - /* Otherwise assume no secondary reloads are needed. */ return NO_REGS; } @@ -2614,7 +2612,10 @@ mn10300_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode) || REGNO_REG_CLASS (regno) == FP_ACC_REGS) /* Do not store integer values in FP registers. */ return GET_MODE_CLASS (mode) == MODE_FLOAT && ((regno & 1) == 0); - + + if (! TARGET_AM33 && REGNO_REG_CLASS (regno) == EXTENDED_REGS) + return false; + if (((regno) & 1) == 0 || GET_MODE_SIZE (mode) == 4) return true;