diff options
author | Paul Brook <paul@codesourcery.com> | 2006-01-20 23:23:03 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2006-01-20 23:23:03 +0000 |
commit | d5b6e6379432747666f5d6517f485566360bd9db (patch) | |
tree | ff0a211ad4b96788f9cfdf7f0a671026b72872ce /gcc | |
parent | 974c2c56f4aa3ae4458f6f46fc8fa5f4de8d476b (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 18 | ||||
-rw-r--r-- | gcc/config/arm/iwmmxt.md | 4 | ||||
-rw-r--r-- | gcc/config/arm/vfp.md | 8 |
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) |