diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.c | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e87a78..f557e82 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-10-24 Aldy Hernandez <aldyh@redhat.com> + + * config/mn10300/mn10300.c (secondary_reload_class): Treat pseudos + like memory. + 2000-10-24 Jim Wilson <wilson@cygnus.com> * expmed.c (store_bit_field): Move integer pun code down after @@ -30,7 +35,6 @@ * expr.c (do_store_flag): Don't crash if either side of a comparison is error_mark_node. ->>>>>>> 1.8059 2000-10-24 Jakub Jelinek <jakub@redhat.com> * sibcall.c (purge_mem_unchanging_flag): New function. diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index fcd86a2..5c7edfa 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -555,9 +555,15 @@ secondary_reload_class (class, mode, in) /* Memory loads less than a full word wide can't have an address or stack pointer destination. They must use a data register as an intermediate register. */ - if (GET_CODE (in) == MEM + if ((GET_CODE (in) == MEM + || (GET_CODE (in) == REG + && REGNO (in) >= FIRST_PSEUDO_REGISTER) + || (GET_CODE (in) == SUBREG + && GET_CODE (SUBREG_REG (in)) == REG + && REGNO (SUBREG_REG (in)) >= FIRST_PSEUDO_REGISTER)) && (mode == QImode || mode == HImode) - && (class == ADDRESS_REGS || class == SP_REGS)) + && (class == ADDRESS_REGS || class == SP_REGS + || class == DATA_OR_ADDRESS_REGS)) { if (TARGET_AM33) return DATA_OR_EXTENDED_REGS; |