aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-01-20 23:23:03 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2006-01-20 23:23:03 +0000
commitd5b6e6379432747666f5d6517f485566360bd9db (patch)
treeff0a211ad4b96788f9cfdf7f0a671026b72872ce
parent974c2c56f4aa3ae4458f6f46fc8fa5f4de8d476b (diff)
downloadgcc-d5b6e6379432747666f5d6517f485566360bd9db.zip
gcc-d5b6e6379432747666f5d6517f485566360bd9db.tar.gz
gcc-d5b6e6379432747666f5d6517f485566360bd9db.tar.bz2
[multiple changes]
2006-01-20 Paul Brook <paul@codesourcery.com> Merge from csl-arm-branch. 2005-09-21 Kazu Hirata <kazu@codesourcery.com> * config/arm/arm.md (movdi): Force operands[1] to a register if we have a non-register source. (*arm_movdi, *movdf_soft_insn): Require that one of the operands be a register. * config/arm/iwmmxt.md (*iwmmxt_arm_movdi): Likewise. * config/arm/vfp.md (*arm_movdi_vfp, *movdf_vfp): Likewise. From-SVN: r110048
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/arm/arm.md18
-rw-r--r--gcc/config/arm/iwmmxt.md4
-rw-r--r--gcc/config/arm/vfp.md8
4 files changed, 29 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d5f4562..cf357d5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2006-01-20 Paul Brook <paul@codesourcery.com>
+
+ Merge from csl-arm-branch.
+ 2005-09-21 Kazu Hirata <kazu@codesourcery.com>
+ * config/arm/arm.md (movdi): Force operands[1] to a register
+ if we have a non-register source.
+ (*arm_movdi, *movdf_soft_insn): Require that one of the
+ operands be a register.
+ * config/arm/iwmmxt.md (*iwmmxt_arm_movdi): Likewise.
+ * config/arm/vfp.md (*arm_movdi_vfp, *movdf_vfp): Likewise.
+
2006-01-20 DJ Delorie <dj@redhat.com>
* varasm.c (initialize_constant_valid_p): Allow pointers
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 239961a..a3a7556 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -4092,13 +4092,10 @@
(match_operand:DI 1 "general_operand" ""))]
"TARGET_EITHER"
"
- if (TARGET_THUMB)
+ if (!no_new_pseudos)
{
- if (!no_new_pseudos)
- {
- if (GET_CODE (operands[0]) != REG)
- operands[1] = force_reg (DImode, operands[1]);
- }
+ if (GET_CODE (operands[0]) != REG)
+ operands[1] = force_reg (DImode, operands[1]);
}
"
)
@@ -4107,8 +4104,10 @@
[(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, r, r, m")
(match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,r"))]
"TARGET_ARM
- && !(TARGET_HARD_FLOAT && (TARGET_MAVERICK || TARGET_VFP))
- && !TARGET_IWMMXT"
+ && !(TARGET_HARD_FLOAT && (TARGET_MAVERICK || TARGET_VFP))
+ && !TARGET_IWMMXT
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))"
"*
switch (which_alternative)
{
@@ -5272,7 +5271,8 @@
[(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=r,r,r,r,m")
(match_operand:DF 1 "soft_df_operand" "rDa,Db,Dc,mF,r"))]
"TARGET_ARM && TARGET_SOFT_FLOAT
- "
+ && ( register_operand (operands[0], DFmode)
+ || register_operand (operands[1], DFmode))"
"*
switch (which_alternative)
{
diff --git a/gcc/config/arm/iwmmxt.md b/gcc/config/arm/iwmmxt.md
index 44b1966..380d4b9 100644
--- a/gcc/config/arm/iwmmxt.md
+++ b/gcc/config/arm/iwmmxt.md
@@ -66,7 +66,9 @@
(define_insn "*iwmmxt_arm_movdi"
[(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, m,y,y,yr,y,yrUy")
(match_operand:DI 1 "di_operand" "rIK,mi,r,y,yr,y,yrUy,y"))]
- "TARGET_REALLY_IWMMXT"
+ "TARGET_REALLY_IWMMXT
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))"
"*
{
switch (which_alternative)
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index 5809a45..c85f58c 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -148,7 +148,9 @@
(define_insn "*arm_movdi_vfp"
[(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,m,w,r,w,w, Uv")
(match_operand:DI 1 "di_operand" "rIK,mi,r,r,w,w,Uvi,w"))]
- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"
+ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
+ && ( register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode))"
"*
switch (which_alternative)
{
@@ -207,7 +209,9 @@
(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"))]
- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"
+ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
+ && ( register_operand (operands[0], DFmode)
+ || register_operand (operands[1], DFmode))"
"*
{
switch (which_alternative)