diff options
author | DJ Delorie <dj@redhat.com> | 2007-01-25 20:16:57 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2007-01-25 20:16:57 -0500 |
commit | db9c839733fa461c08576e7fbbd0e305af7fecfb (patch) | |
tree | a30dc8dad6329edbcb6b7666db96ff78e7727b67 | |
parent | 21f14ff9556fb50f0280bcb570d87cd08d367774 (diff) | |
download | gcc-db9c839733fa461c08576e7fbbd0e305af7fecfb.zip gcc-db9c839733fa461c08576e7fbbd0e305af7fecfb.tar.gz gcc-db9c839733fa461c08576e7fbbd0e305af7fecfb.tar.bz2 |
m32c.c (m32c_cannot_change_mode_class): We don't allow changes to modes which don't fit in those registers.
* config/m32c/m32c.c (m32c_cannot_change_mode_class): We don't
allow changes to modes which don't fit in those registers.
From-SVN: r121199
-rw-r--r-- | gcc/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/config/m32c/m32c.c | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4cf04ef..25223c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2007-01-25 DJ Delorie <dj@redhat.com> + * config/m32c/m32c.c (m32c_cannot_change_mode_class): We don't + allow changes to modes which don't fit in those registers. + * reload1.c (choose_reload_regs): Check for invalid subregs before computing their locations, not after. diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index de5f22a..b28d747 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -846,11 +846,19 @@ int m32c_cannot_change_mode_class (enum machine_mode from, enum machine_mode to, int rclass) { + int rn; #if DEBUG0 fprintf (stderr, "cannot change from %s to %s in %s\n", mode_name[from], mode_name[to], class_names[rclass]); #endif + /* If the larger mode isn't allowed in any of these registers, we + can't allow the change. */ + for (rn = 0; rn < FIRST_PSEUDO_REGISTER; rn++) + if (class_contents[rclass][0] & (1 << rn)) + if (! m32c_hard_regno_ok (rn, to)) + return 1; + if (to == QImode) return (class_contents[rclass][0] & 0x1ffa); |