summaryrefslogtreecommitdiff
path: root/gcc/config/arm/vfp.md
diff options
context:
space:
mode:
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-13 11:19:23 +0000
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-13 11:19:23 +0000
commitb4e8a3003fbd33ff6e48543b81d7249797ca035c (patch)
treedbf7c69580904f9cdf1218fe8977cffd36e519a0 /gcc/config/arm/vfp.md
parente9f9125599afd0e7e7e15dd883a8e7cdeda41565 (diff)
downloadgcc-b4e8a3003fbd33ff6e48543b81d7249797ca035c.tar.gz
* arm.c (arm_legitimate_address_p): New argument, OUTER. Pass through
to arm_legitimate_index_p. Update all callers with SET as default value. (arm_legitimate_index_p): New argument, OUTER. Restrict the index range if OUTER is a sign-extend operation on QImode. Correctly reject shift operations on sign-extended QImode addresses. (bad_signed_byte_operand): Delete. (arm_extendqisi_mem_op): New function. * arm.h (EXTRA_CONSTRAINT_ARM): Delete. Replace with... (EXTRA_CONSTRAINT_STR_ARM): ... this. Handle extended address constraints. (CONSTRAINT_LEN): New. (EXTRA_CONSTRAINT): Delete. Replace with... (EXTRA_CONSTRAINT_STR): ... this. (PREDICATE_CODES): Remove bad_signed_byte_operand. * arm.md (extendqihi_insn): Use new constraint Uq. Rework. Length is now always default. (define_splits for bad sign-extend loads): Delete. (arm_extendqisi, arm_extendqisi_v5): Likewise. * arm/vfp.md (arm_movsi_vfp, arm_movdi_vfp, movsf_vfp, movdf_vfp): Rework 'U' constraint to 'Uv'. * arm-protos.h: Remove bad_signed_byte_operand. Add arm_extendqisi_mem_op. * doc/md.texi (ARM constraints): Rename VFP constraint (now Uv). Add Uq constraint. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79440 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm/vfp.md')
-rw-r--r--gcc/config/arm/vfp.md16
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index 5ae6c41f75a..dd313a9bdca 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -111,8 +111,8 @@
;; ??? 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 ,m,!w,r,!w,!w, U")
- (match_operand:SI 1 "general_operand" "rI,K,mi,r,r,!w,!w,Ui,!w"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r ,m,!w,r,!w,!w, Uv")
+ (match_operand:SI 1 "general_operand" "rI,K,mi,r,r,!w,!w,Uvi,!w"))]
"TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT
&& ( s_register_operand (operands[0], SImode)
|| s_register_operand (operands[1], SImode))"
@@ -136,8 +136,8 @@
;; DImode moves
(define_insn "*arm_movdi_vfp"
- [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,o<>,w,r,w,w ,U")
- (match_operand:DI 1 "di_operand" "rIK,mi,r ,r,w,w,Ui,w"))]
+ [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,o<>,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"
"*
switch (which_alternative)
@@ -168,8 +168,8 @@
;; SFmode moves
(define_insn "*movsf_vfp"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=w,r,w ,U,r ,m,w,r")
- (match_operand:SF 1 "general_operand" " r,w,UE,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))"
@@ -192,8 +192,8 @@
;; DFmode moves
(define_insn "*movdf_vfp"
- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,r,r, m,w ,U,w,r")
- (match_operand:DF 1 "soft_df_operand" " r,w,mF,r,UF,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"
"*
{