aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-03-29 19:16:12 +0000
committerPaul Brook <paul@codesourcery.com>2006-03-29 19:16:12 +0000
commitac96cc6bac1bf9e3e296b1b838a69542432d75f4 (patch)
tree6b380422268493e0c25247411054533dae8a0ebd
parent04d6d2f8fcbd73931d6f95d5322052f30984250e (diff)
2006-03-29 Paul Brook <paul@codesourcery.com>
* gcc/config/arm/vfp.md (movsf_vfp): Disparage w<->r alternatives. (thumb2_movsf_vfp, movdf_vfp, thumb2_movdf_vfp): Ditto. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/csl/arm-4_1@112505 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog.csl5
-rw-r--r--gcc/config/arm/vfp.md18
2 files changed, 15 insertions, 8 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index b1a97c72cc9..3c0e97498d1 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,8 @@
+2006-03-29 Paul Brook <paul@codesourcery.com>
+
+ * gcc/config/arm/vfp.md (movsf_vfp): Disparage w<->r alternatives.
+ (thumb2_movsf_vfp, movdf_vfp, thumb2_movdf_vfp): Ditto.
+
2005-03-21 Paul Brook <paul@codesourcery.com>
* gcc/config/arm/thumb2.md (divsi3, udivsi3): New define_insn.
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index 7e3f8695e7c..1542a5d7a4a 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -232,10 +232,12 @@
;; SFmode moves
+;; Disparage the w<->r cases because reloading an invalid address is
+;; preferable to loading the value via integer registers.
(define_insn "*movsf_vfp"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=w,r,w ,Uv,r ,m,w,r")
- (match_operand:SF 1 "general_operand" " r,w,UvE,w, mE,r,w,r"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=w,?r,w ,Uv,r ,m,w,r")
+ (match_operand:SF 1 "general_operand" " ?r,w,UvE,w, mE,r,w,r"))]
"TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
&& ( s_register_operand (operands[0], SFmode)
|| s_register_operand (operands[1], SFmode))"
@@ -255,8 +257,8 @@
)
(define_insn "*thumb2_movsf_vfp"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=w,r,w ,Uv,r ,m,w,r")
- (match_operand:SF 1 "general_operand" " r,w,UvE,w, mE,r,w,r"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=w,?r,w ,Uv,r ,m,w,r")
+ (match_operand:SF 1 "general_operand" " ?r,w,UvE,w, mE,r,w,r"))]
"TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP
&& ( s_register_operand (operands[0], SFmode)
|| s_register_operand (operands[1], SFmode))"
@@ -279,8 +281,8 @@
;; DFmode moves
(define_insn "*movdf_vfp"
- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,r,r, m,w ,Uv,w,r")
- (match_operand:DF 1 "soft_df_operand" " r,w,mF,r,UvF,w, w,r"))]
+ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,r, m,w ,Uv,w,r")
+ (match_operand:DF 1 "soft_df_operand" " ?r,w,mF,r,UvF,w, w,r"))]
"TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
&& ( register_operand (operands[0], DFmode)
|| register_operand (operands[1], DFmode))"
@@ -314,8 +316,8 @@
)
(define_insn "*thumb2_movdf_vfp"
- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,r,r, m,w ,Uv,w,r")
- (match_operand:DF 1 "soft_df_operand" " r,w,mF,r,UvF,w, w,r"))]
+ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,r, m,w ,Uv,w,r")
+ (match_operand:DF 1 "soft_df_operand" " ?r,w,mF,r,UvF,w, w,r"))]
"TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP"
"*
{