diff options
author | DJ Delorie <dj@redhat.com> | 2008-05-23 20:46:59 -0400 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2008-05-23 20:46:59 -0400 |
commit | 80b093dfb8c8b11e30be7468d31f5e0b599f10b3 (patch) | |
tree | 3628615dff3fa623a5e493ef624ee543ace52f73 | |
parent | e7854e7d79c8ae82bf1b4c19c8ed279af7795228 (diff) | |
download | gcc-80b093dfb8c8b11e30be7468d31f5e0b599f10b3.zip gcc-80b093dfb8c8b11e30be7468d31f5e0b599f10b3.tar.gz gcc-80b093dfb8c8b11e30be7468d31f5e0b599f10b3.tar.bz2 |
m32c.c (m32c_return_addr_rtx): Change pointer type for A24 to PSImode.
* config/m32c/m32c.c (m32c_return_addr_rtx): Change pointer type
for A24 to PSImode.
(m32c_address_cost): Detail costs for indirect offsets.
From-SVN: r135842
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/m32c/m32c.c | 29 |
2 files changed, 31 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2eda8f4..cde9086 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-05-23 DJ Delorie <dj@redhat.com> + + * config/m32c/m32c.c (m32c_return_addr_rtx): Change pointer type + for A24 to PSImode. + (m32c_address_cost): Detail costs for indirect offsets. + 2008-05-23 Rafael Espindola <espindola@google.com> * see.c (see_get_extension_data): Don't use SUBREG_REG to test diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 2e5558f..697e42a 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -1099,7 +1099,8 @@ m32c_return_addr_rtx (int count) if (TARGET_A24) { - mode = SImode; + /* It's four bytes */ + mode = PSImode; offset = 4; } else @@ -2199,16 +2200,36 @@ m32c_rtx_costs (rtx x, int code, int outer_code, int *total) static int m32c_address_cost (rtx addr) { + int i; /* fprintf(stderr, "\naddress_cost\n"); debug_rtx(addr);*/ switch (GET_CODE (addr)) { case CONST_INT: - return COSTS_N_INSNS(1); + i = INTVAL (addr); + if (i == 0) + return COSTS_N_INSNS(1); + if (0 < i && i <= 255) + return COSTS_N_INSNS(2); + if (0 < i && i <= 65535) + return COSTS_N_INSNS(3); + return COSTS_N_INSNS(4); case SYMBOL_REF: - return COSTS_N_INSNS(3); + return COSTS_N_INSNS(4); case REG: - return COSTS_N_INSNS(2); + return COSTS_N_INSNS(1); + case PLUS: + if (GET_CODE (XEXP (addr, 1)) == CONST_INT) + { + i = INTVAL (XEXP (addr, 1)); + if (i == 0) + return COSTS_N_INSNS(1); + if (0 < i && i <= 255) + return COSTS_N_INSNS(2); + if (0 < i && i <= 65535) + return COSTS_N_INSNS(3); + } + return COSTS_N_INSNS(4); default: return 0; } |