aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@wasabisystems.com>2004-12-15 14:03:58 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2004-12-15 14:03:58 +0000
commit06d5588c56e70b6f89f3cdab25c381b237759bd7 (patch)
tree25904ed54b71b4f304ae2802ea6ecbbb202cc94e /gcc
parent9593d79ac2e3b5f48078fe5e9287f28222d23354 (diff)
downloadgcc-06d5588c56e70b6f89f3cdab25c381b237759bd7.zip
gcc-06d5588c56e70b6f89f3cdab25c381b237759bd7.tar.gz
gcc-06d5588c56e70b6f89f3cdab25c381b237759bd7.tar.bz2
arm.c (arm_xscale_rtx_costs): Increase cost of COMPARE of MULT.
* config/arm/arm.c (arm_xscale_rtx_costs): Increase cost of COMPARE of MULT. * config/arm/arm.md (mulsi3_compare0): Don't check arm_arch_xscale. (mulsi_compare0_scratch, mulsi3_addsi_compare0): Likewise. (mulsi3addsi_compare0_scratch): Likewise. From-SVN: r92199
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/arm/arm.c9
-rw-r--r--gcc/config/arm/arm.md8
3 files changed, 22 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e1e09b3..0acb9a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2004-12-15 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * config/arm/arm.c (arm_xscale_rtx_costs): Increase cost of
+ COMPARE of MULT.
+ * config/arm/arm.md (mulsi3_compare0): Don't check
+ arm_arch_xscale.
+ (mulsi_compare0_scratch, mulsi3_addsi_compare0): Likewise.
+ (mulsi3addsi_compare0_scratch): Likewise.
+
2004-12-15 Eric Botcazou <ebotcazou@libertysurf.fr>
PR other/18665
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 9db8b79..188ff32 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -4398,6 +4398,15 @@ arm_xscale_rtx_costs (rtx x, int code, int outer_code, int *total)
+ (REG_OR_SUBREG_REG (XEXP (x, 1)) ? 0 : 4);
return true;
+ case COMPARE:
+ /* A COMPARE of a MULT is slow on XScale; the muls instruction
+ will stall until the multiplication is complete. */
+ if (GET_CODE (XEXP (x, 0)) == MULT)
+ *total = 4 + rtx_cost (XEXP (x, 0), code);
+ else
+ *total = arm_rtx_costs_1 (x, code, outer_code);
+ return true;
+
default:
*total = arm_rtx_costs_1 (x, code, outer_code);
return true;
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index f464aa4..3255f05 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -1097,7 +1097,7 @@
(const_int 0)))
(set (match_operand:SI 0 "s_register_operand" "=&r,&r")
(mult:SI (match_dup 2) (match_dup 1)))]
- "TARGET_ARM && !arm_arch_xscale"
+ "TARGET_ARM"
"mul%?s\\t%0, %2, %1"
[(set_attr "conds" "set")
(set_attr "insn" "muls")]
@@ -1110,7 +1110,7 @@
(match_operand:SI 1 "s_register_operand" "%?r,0"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=&r,&r"))]
- "TARGET_ARM && !arm_arch_xscale"
+ "TARGET_ARM"
"mul%?s\\t%0, %2, %1"
[(set_attr "conds" "set")
(set_attr "insn" "muls")]
@@ -1141,7 +1141,7 @@
(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")
(plus:SI (mult:SI (match_dup 2) (match_dup 1))
(match_dup 3)))]
- "TARGET_ARM && !arm_arch_xscale"
+ "TARGET_ARM"
"mla%?s\\t%0, %2, %1, %3"
[(set_attr "conds" "set")
(set_attr "insn" "mlas")]
@@ -1156,7 +1156,7 @@
(match_operand:SI 3 "s_register_operand" "?r,r,0,0"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=&r,&r,&r,&r"))]
- "TARGET_ARM && !arm_arch_xscale"
+ "TARGET_ARM"
"mla%?s\\t%0, %2, %1, %3"
[(set_attr "conds" "set")
(set_attr "insn" "mlas")]