diff options
author | Paul Brook <paul@codesourcery.com> | 2008-02-26 22:21:08 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2008-02-26 22:21:08 +0000 |
commit | f5c630c3126fe4e6e681c4638752b64979b40029 (patch) | |
tree | a93b71eb25e3150012204305e4a0a67366469f8b /gcc/config/arm/vfp.md | |
parent | 0d158b6e40709be6c0f9e25c5406e3f303e4744c (diff) | |
download | gcc-f5c630c3126fe4e6e681c4638752b64979b40029.zip gcc-f5c630c3126fe4e6e681c4638752b64979b40029.tar.gz gcc-f5c630c3126fe4e6e681c4638752b64979b40029.tar.bz2 |
arm.c (thumb_set_frame_pointer): Ensure SP is first operand for Thumb-2.
2008-02-26 Paul Brook <paul@codesourcery.com>
* config/arm/arm.c (thumb_set_frame_pointer): Ensure SP is first
operand for Thumb-2.
* config/arm/arm.h (reg_class): Add CORE_REGS.
(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Ditto.
(BASE_REG_CLASS): Use CORE_REGS.
(PREFERRED_RELOAD_CLASS): Add STACK_REG.
(REGNO_MODE_OK_FOR_REG_BASE_P): Use REGNO_MODE_OK_FOR_BASE_P.
(REGNO_OK_FOR_INDEX_P): Exclude SP.
(ARM_REG_OK_FOR_INDEX_P): Always define. Use
ARM_REGNO_OK_FOR_INDEX_P.
(ARM_PRINT_OPERAND_ADDRESS): Swap operands for [reg, sp].
* config/arm/arm.md (arm_addsi3, thumb1_addsi3, arm_subsi3_insn,
arm_movsi_insn, thumb1_movsi_insni, stack_tie): Add "k" alternatives.
(ldm/stm peepholes): Ditto.
* config/arm/thumb2.md (thumb2_movdi): Add "k" alternatives.
* config/arm/vfp.md (arm_movsi_vfp, thumb2_movsi_vfp): Ditto.
* config/arm/iwmmxt.md (iwmmxt_movsi_insn): Ditto.
* config/arm/constraints.md: Enable "k" constraint on ARM.
From-SVN: r132687
Diffstat (limited to 'gcc/config/arm/vfp.md')
-rw-r--r-- | gcc/config/arm/vfp.md | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md index 39f0a22..23aa202 100644 --- a/gcc/config/arm/vfp.md +++ b/gcc/config/arm/vfp.md @@ -120,77 +120,77 @@ ;; ??? For now do not allow loading constants into vfp regs. This causes ;; problems because small constants get converted into adds. (define_insn "*arm_movsi_vfp" - [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r ,m,*t,r,*t,*t, *Uv") - (match_operand:SI 1 "general_operand" "rI,K,N,mi,r,r,*t,*t,*Uvi,*t"))] + [(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,N,mi,rk,r,*t,*t,*Uvi,*t"))] "TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT && ( s_register_operand (operands[0], SImode) || s_register_operand (operands[1], SImode))" "* switch (which_alternative) { - case 0: + case 0: case 1: return \"mov%?\\t%0, %1\"; - case 1: - return \"mvn%?\\t%0, #%B1\"; case 2: - return \"movw%?\\t%0, %1\"; + return \"mvn%?\\t%0, #%B1\"; case 3: - return \"ldr%?\\t%0, %1\"; + return \"movw%?\\t%0, %1\"; case 4: - return \"str%?\\t%1, %0\"; + return \"ldr%?\\t%0, %1\"; case 5: - return \"fmsr%?\\t%0, %1\\t%@ int\"; + return \"str%?\\t%1, %0\"; case 6: - return \"fmrs%?\\t%0, %1\\t%@ int\"; + return \"fmsr%?\\t%0, %1\\t%@ int\"; case 7: + return \"fmrs%?\\t%0, %1\\t%@ int\"; + case 8: return \"fcpys%?\\t%0, %1\\t%@ int\"; - case 8: case 9: + case 9: case 10: return output_move_vfp (operands); default: gcc_unreachable (); } " [(set_attr "predicable" "yes") - (set_attr "type" "*,*,*,load1,store1,r_2_f,f_2_r,ffarith,f_loads,f_stores") - (set_attr "pool_range" "*,*,*,4096,*,*,*,*,1020,*") - (set_attr "neg_pool_range" "*,*,*,4084,*,*,*,*,1008,*")] + (set_attr "type" "*,*,*,*,load1,store1,r_2_f,f_2_r,ffarith,f_loads,f_stores") + (set_attr "pool_range" "*,*,*,*,4096,*,*,*,*,1020,*") + (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")] ) (define_insn "*thumb2_movsi_vfp" - [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,m,*t,r,*t,*t, *Uv") - (match_operand:SI 1 "general_operand" "rI,K,N,mi,r,r,*t,*t,*Uvi,*t"))] + [(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,N,mi,rk,r,*t,*t,*Uvi,*t"))] "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT && ( s_register_operand (operands[0], SImode) || s_register_operand (operands[1], SImode))" "* switch (which_alternative) { - case 0: + case 0: case 1: return \"mov%?\\t%0, %1\"; - case 1: - return \"mvn%?\\t%0, #%B1\"; case 2: - return \"movw%?\\t%0, %1\"; + return \"mvn%?\\t%0, #%B1\"; case 3: - return \"ldr%?\\t%0, %1\"; + return \"movw%?\\t%0, %1\"; case 4: - return \"str%?\\t%1, %0\"; + return \"ldr%?\\t%0, %1\"; case 5: - return \"fmsr%?\\t%0, %1\\t%@ int\"; + return \"str%?\\t%1, %0\"; case 6: - return \"fmrs%?\\t%0, %1\\t%@ int\"; + return \"fmsr%?\\t%0, %1\\t%@ int\"; case 7: + return \"fmrs%?\\t%0, %1\\t%@ int\"; + case 8: return \"fcpys%?\\t%0, %1\\t%@ int\"; - case 8: case 9: + case 9: case 10: return output_move_vfp (operands); default: gcc_unreachable (); } " [(set_attr "predicable" "yes") - (set_attr "type" "*,*,*,load1,store1,r_2_f,f_2_r,ffarith,f_load,f_store") - (set_attr "pool_range" "*,*,*,4096,*,*,*,*,1020,*") - (set_attr "neg_pool_range" "*,*,*, 0,*,*,*,*,1008,*")] + (set_attr "type" "*,*,*,*,load1,store1,r_2_f,f_2_r,ffarith,f_load,f_store") + (set_attr "pool_range" "*,*,*,*,4096,*,*,*,*,1020,*") + (set_attr "neg_pool_range" "*,*,*,*, 0,*,*,*,*,1008,*")] ) |