aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2008-05-23 20:46:59 -0400
committerDJ Delorie <dj@gcc.gnu.org>2008-05-23 20:46:59 -0400
commit80b093dfb8c8b11e30be7468d31f5e0b599f10b3 (patch)
tree3628615dff3fa623a5e493ef624ee543ace52f73
parente7854e7d79c8ae82bf1b4c19c8ed279af7795228 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/m32c/m32c.c29
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;
}