diff options
author | jules <jules@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-04-15 14:39:22 +0000 |
---|---|---|
committer | jules <jules@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-04-15 14:39:22 +0000 |
commit | 93bda8332e7f5defb88fe06be06d29e8ebc73dbb (patch) | |
tree | 3307259b566036b040ad6fb53a3da135d84fe218 /gcc/config/arm/vfp.md | |
parent | 8a84c748fb5e8af580e9411e056a58451f301de2 (diff) | |
download | gcc-93bda8332e7f5defb88fe06be06d29e8ebc73dbb.tar.gz |
gcc/
* config/arm/thumb2.md (thumb2_movsi_insn): Split ldr and str
alternatives according to use of high and low regs.
* config/arm/vfp.md (thumb2_movsi_vfp): Likewise.
* config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Use high regs when
optimizing for size on Thumb-2.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158378 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm/vfp.md')
-rw-r--r-- | gcc/config/arm/vfp.md | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md index 57c2192d1e9..02d527b79c5 100644 --- a/gcc/config/arm/vfp.md +++ b/gcc/config/arm/vfp.md @@ -86,9 +86,11 @@ (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")] ) +;; See thumb2.md:thumb2_movsi_insn for an explanation of the split +;; high/low register alternatives for loads and stores here. (define_insn "*thumb2_movsi_vfp" - [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m,*t,r, *t,*t, *Uv") - (match_operand:SI 1 "general_operand" "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))] + [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r, l,*hk,m, *m,*t, r,*t,*t, *Uv") + (match_operand:SI 1 "general_operand" "rk, I,K,j,mi,*mi,l,*hk, r,*t,*t,*Uvi,*t"))] "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT && ( s_register_operand (operands[0], SImode) || s_register_operand (operands[1], SImode))" @@ -102,25 +104,27 @@ case 3: return \"movw%?\\t%0, %1\"; case 4: - return \"ldr%?\\t%0, %1\"; case 5: - return \"str%?\\t%1, %0\"; + return \"ldr%?\\t%0, %1\"; case 6: - return \"fmsr%?\\t%0, %1\\t%@ int\"; case 7: - return \"fmrs%?\\t%0, %1\\t%@ int\"; + return \"str%?\\t%1, %0\"; case 8: + return \"fmsr%?\\t%0, %1\\t%@ int\"; + case 9: + return \"fmrs%?\\t%0, %1\\t%@ int\"; + case 10: return \"fcpys%?\\t%0, %1\\t%@ int\"; - case 9: case 10: + case 11: case 12: return output_move_vfp (operands); default: gcc_unreachable (); } " [(set_attr "predicable" "yes") - (set_attr "type" "*,*,*,*,load1,store1,r_2_f,f_2_r,fcpys,f_load,f_store") - (set_attr "pool_range" "*,*,*,*,4096,*,*,*,*,1020,*") - (set_attr "neg_pool_range" "*,*,*,*, 0,*,*,*,*,1008,*")] + (set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_load,f_store") + (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,*,1020,*") + (set_attr "neg_pool_range" "*,*,*,*, 0, 0,*,*,*,*,*,1008,*")] ) |