aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-03-11 19:10:28 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-03-11 19:10:28 -0500
commitb49e978eeb127b2df5125bfe80b841c464eef8fd (patch)
tree0866a19f91c89aaaf72fe53b5ce114e478fa4055
parente14fa9c45a5fd9b4be62dedd78daa5559f4c83fc (diff)
downloadgcc-b49e978eeb127b2df5125bfe80b841c464eef8fd.zip
gcc-b49e978eeb127b2df5125bfe80b841c464eef8fd.tar.gz
gcc-b49e978eeb127b2df5125bfe80b841c464eef8fd.tar.bz2
(RTX_COST, case MULT): Handle s8addx and s4addx.
(RTX_COST, case MULT): Correctly assign cost to multiplies by a power of two. (RTX_COST, case ASHIFT, ASHIFTRT, LSHIFTRT, IF_THEN_ELSE): New cases. From-SVN: r3710
-rw-r--r--gcc/config/alpha/alpha.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 23adda2..67123e8 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -1290,12 +1290,26 @@ extern char *current_function_name;
case MINUS: \
if (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
return COSTS_N_INSNS (6); \
+ else if (GET_CODE (XEXP (X, 0)) == MULT \
+ && const48_operand (XEXP (XEXP (X, 0), 1), VOIDmode)) \
+ return 2 + rtx_cost (XEXP (XEXP (X, 0), 0)) + rtx_cost (XEXP (X, 1)); \
break; \
case MULT: \
if (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
return COSTS_N_INSNS (6); \
- else \
+ else if (GET_CODE (XEXP (X, 1)) != CONST_INT \
+ || exact_log2 (INTVAL (XEXP (X, 1))) < 0) \
return COSTS_N_INSNS (21); \
+ else if (const48_operand (XEXP (X, 1), VOIDmode)) \
+ break; \
+ return COSTS_N_INSNS (2); \
+ case ASHIFT: \
+ if (GET_CODE (XEXP (X, 1)) == CONST_INT \
+ && INTVAL (XEXP (X, 1)) <= 3) \
+ break; \
+ /* ... fall through ... */ \
+ case ASHIFTRT: case LSHIFTRT: case IF_THEN_ELSE: \
+ return COSTS_N_INSNS (2); \
case DIV: \
case UDIV: \
case MOD: \