aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/ia64/ia64.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/ia64/ia64.md')
-rw-r--r--gcc/config/ia64/ia64.md150
1 files changed, 26 insertions, 124 deletions
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index 77b0894e24d..cf746f52b68 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -82,15 +82,12 @@
(UNSPEC_VECT_EXTR 31)
(UNSPEC_LDA 40)
(UNSPEC_LDS 41)
- (UNSPEC_LDS_A 42)
- (UNSPEC_LDSA 43)
- (UNSPEC_LDCCLR 44)
- (UNSPEC_LDCNC 45)
- (UNSPEC_CHKACLR 46)
- (UNSPEC_CHKANC 47)
- (UNSPEC_CHKS 48)
- (UNSPEC_FR_RECIP_APPROX_RES 49)
- (UNSPEC_FR_SQRT_RECIP_APPROX_RES 50)
+ (UNSPEC_LDSA 42)
+ (UNSPEC_LDCCLR 43)
+ (UNSPEC_CHKACLR 45)
+ (UNSPEC_CHKS 47)
+ (UNSPEC_FR_RECIP_APPROX_RES 48)
+ (UNSPEC_FR_SQRT_RECIP_APPROX_RES 49)
])
(define_constants
@@ -188,10 +185,6 @@
(define_attr "control_speculative" "no,yes" (const_string "no"))
(define_attr "check_load" "no,yes" (const_string "no"))
-
-(define_attr "speculable1" "no,yes" (const_string "no"))
-
-(define_attr "speculable2" "no,yes" (const_string "no"))
;; DFA descriptions of ia64 processors used for insn scheduling and
;; bundling.
@@ -241,9 +234,7 @@
ld1%O1 %0 = %1%P1
st1%Q0 %0 = %1%P0
mov %0 = %1"
- [(set_attr "itanium_class" "icmp,icmp,unknown,unknown,tbit,ialu,ld,st,ialu")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, no, no, no, no, no, yes,no,no")])
+ [(set_attr "itanium_class" "icmp,icmp,unknown,unknown,tbit,ialu,ld,st,ialu")])
(define_split
[(set (match_operand:BI 0 "register_operand" "")
@@ -282,7 +273,7 @@
operands[1] = op1;
})
-(define_insn "movqi_internal"
+(define_insn "*movqi_internal"
[(set (match_operand:QI 0 "destination_operand" "=r,r,r, m, r,*f,*f")
(match_operand:QI 1 "move_operand" "rO,J,m,rO,*f,rO,*f"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -294,9 +285,7 @@
getf.sig %0 = %1
setf.sig %0 = %r1
mov %0 = %1"
- [(set_attr "itanium_class" "ialu,ialu,ld,st,frfr,tofr,fmisc")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, no, yes,no,no, no, no")])
+ [(set_attr "itanium_class" "ialu,ialu,ld,st,frfr,tofr,fmisc")])
(define_expand "movhi"
[(set (match_operand:HI 0 "general_operand" "")
@@ -309,7 +298,7 @@
operands[1] = op1;
})
-(define_insn "movhi_internal"
+(define_insn "*movhi_internal"
[(set (match_operand:HI 0 "destination_operand" "=r,r,r, m, r,*f,*f")
(match_operand:HI 1 "move_operand" "rO,J,m,rO,*f,rO,*f"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -321,9 +310,7 @@
getf.sig %0 = %1
setf.sig %0 = %r1
mov %0 = %1"
- [(set_attr "itanium_class" "ialu,ialu,ld,st,frfr,tofr,fmisc")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, no, yes,no,no, no, no")])
+ [(set_attr "itanium_class" "ialu,ialu,ld,st,frfr,tofr,fmisc")])
(define_expand "movsi"
[(set (match_operand:SI 0 "general_operand" "")
@@ -336,7 +323,7 @@
operands[1] = op1;
})
-(define_insn "movsi_internal"
+(define_insn "*movsi_internal"
[(set (match_operand:SI 0 "destination_operand" "=r,r,r,r,r, m, r,*f,*f, r,*d")
(match_operand:SI 1 "move_operand" "rO,J,j,i,m,rO,*f,rO,*f,*d,rK"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -353,9 +340,7 @@
mov %0 = %1
mov %0 = %r1"
;; frar_m, toar_m ??? why not frar_i and toar_i
- [(set_attr "itanium_class" "ialu,ialu,ialu,long_i,ld,st,frfr,tofr,fmisc,frar_m,toar_m")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, no, no, no, yes,no,no, no, no, no, no")])
+ [(set_attr "itanium_class" "ialu,ialu,ialu,long_i,ld,st,frfr,tofr,fmisc,frar_m,toar_m")])
(define_expand "movdi"
[(set (match_operand:DI 0 "general_operand" "")
@@ -368,7 +353,7 @@
operands[1] = op1;
})
-(define_insn "movdi_internal"
+(define_insn "*movdi_internal"
[(set (match_operand:DI 0 "destination_operand"
"=r,r,r,r,r, m, r,*f,*f,*f, Q, r,*b, r,*e, r,*d, r,*c")
(match_operand:DI 1 "move_operand"
@@ -402,9 +387,7 @@
return alt[which_alternative];
}
- [(set_attr "itanium_class" "ialu,ialu,ialu,long_i,ld,st,frfr,tofr,fmisc,fld,stf,frbr,tobr,frar_i,toar_i,frar_m,toar_m,frpr,topr")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, no, no, no, yes,no,no, no, no, yes,no, no, no, no, no, no, no, no, no")])
+ [(set_attr "itanium_class" "ialu,ialu,ialu,long_i,ld,st,frfr,tofr,fmisc,fld,stf,frbr,tobr,frar_i,toar_i,frar_m,toar_m,frpr,topr")])
(define_mode_iterator MODE [BI QI HI SI DI SF DF XF TI])
(define_mode_iterator MODE_FOR_EXTEND [QI HI SI])
@@ -489,26 +472,6 @@
(XF "ldfe.c.clr %0 = %1%P1")
(TI "ldfp8.c.clr %X0 = %1%P1")])
-(define_mode_attr output_c_nc [
- (BI "ld1.c.nc%O1 %0 = %1%P1")
- (QI "ld1.c.nc%O1 %0 = %1%P1")
- (HI "ld2.c.nc%O1 %0 = %1%P1")
- (SI "ld4.c.nc%O1 %0 = %1%P1")
- (DI
- "@
- ld8.c.nc%O1 %0 = %1%P1
- ldf8.c.nc %0 = %1%P1")
- (SF
- "@
- ldfs.c.nc %0 = %1%P1
- ld4.c.nc%O1 %0 = %1%P1")
- (DF
- "@
- ldfd.c.nc %0 = %1%P1
- ld8.c.nc%O1 %0 = %1%P1")
- (XF "ldfe.c.nc %0 = %1%P1")
- (TI "ldfp8.c.nc %X0 = %1%P1")])
-
(define_mode_attr ld_reg_constr [(BI "=*r") (QI "=r") (HI "=r") (SI "=r") (DI "=r,*f") (SF "=f,*r") (DF "=f,*r") (XF "=f") (TI "=*x")])
(define_mode_attr ldc_reg_constr [(BI "+*r") (QI "+r") (HI "+r") (SI "+r") (DI "+r,*f") (SF "+f,*r") (DF "+f,*r") (XF "+f") (TI "+*x")])
(define_mode_attr chk_reg_constr [(BI "*r") (QI "r") (HI "r") (SI "r") (DI "r,*f") (SF "f,*r") (DF "f,*r") (XF "f") (TI "*x")])
@@ -567,15 +530,6 @@
(set_attr "data_speculative" "<attr_yes>")
(set_attr "control_speculative" "<attr_yes>")])
-(define_insn "mov<mode>_speculative_a"
- [(set (match_operand:MODE 0 "<reg_pred_prefix>_register_operand" "<ld_reg_constr>")
- (unspec:MODE [(match_operand:MODE 1 "memory_operand" "<mem_constr>")] UNSPEC_LDS_A))]
- "ia64_move_ok (operands[0], operands[1])"
- "<output_sa>"
- [(set_attr "itanium_class" "<ld_class>")
- (set_attr "data_speculative" "<attr_yes>")
- (set_attr "control_speculative" "<attr_yes>")])
-
(define_insn "zero_extend<mode>di2_speculative_advanced"
[(set (match_operand:DI 0 "gr_register_operand" "=r")
(zero_extend:DI (unspec:MODE_FOR_EXTEND [(match_operand:MODE_FOR_EXTEND 1 "memory_operand" "<mem_constr>")] UNSPEC_LDSA)))]
@@ -585,15 +539,6 @@
(set_attr "data_speculative" "<attr_yes>")
(set_attr "control_speculative" "<attr_yes>")])
-(define_insn "zero_extend<mode>di2_speculative_a"
- [(set (match_operand:DI 0 "gr_register_operand" "=r")
- (zero_extend:DI (unspec:MODE_FOR_EXTEND [(match_operand:MODE_FOR_EXTEND 1 "memory_operand" "<mem_constr>")] UNSPEC_LDS_A)))]
- ""
- "<output_sa>"
- [(set_attr "itanium_class" "<ld_class>")
- (set_attr "data_speculative" "<attr_yes>")
- (set_attr "control_speculative" "<attr_yes>")])
-
(define_insn "mov<mode>_clr"
[(set (match_operand:MODE 0 "<reg_pred_prefix>_register_operand" "<ldc_reg_constr>")
(if_then_else:MODE (ne (unspec [(match_dup 0)] UNSPEC_LDCCLR) (const_int 0))
@@ -604,16 +549,6 @@
[(set_attr "itanium_class" "<ld_class>")
(set_attr "check_load" "<attr_yes>")])
-(define_insn "mov<mode>_nc"
- [(set (match_operand:MODE 0 "<reg_pred_prefix>_register_operand" "<ldc_reg_constr>")
- (if_then_else:MODE (ne (unspec [(match_dup 0)] UNSPEC_LDCNC) (const_int 0))
- (match_operand:MODE 1 "memory_operand" "<mem_constr>")
- (match_dup 0)))]
- "ia64_move_ok (operands[0], operands[1])"
- "<output_c_nc>"
- [(set_attr "itanium_class" "<ld_class>")
- (set_attr "check_load" "<attr_yes>")])
-
(define_insn "zero_extend<mode>di2_clr"
[(set (match_operand:DI 0 "gr_register_operand" "+r")
(if_then_else:DI (ne (unspec [(match_dup 0)] UNSPEC_LDCCLR) (const_int 0))
@@ -624,16 +559,6 @@
[(set_attr "itanium_class" "<ld_class>")
(set_attr "check_load" "<attr_yes>")])
-(define_insn "zero_extend<mode>di2_nc"
- [(set (match_operand:DI 0 "gr_register_operand" "+r")
- (if_then_else:DI (ne (unspec [(match_dup 0)] UNSPEC_LDCNC) (const_int 0))
- (zero_extend:DI (match_operand:MODE_FOR_EXTEND 1 "memory_operand" "<mem_constr>"))
- (match_dup 0)))]
- ""
- "<output_c_nc>"
- [(set_attr "itanium_class" "<ld_class>")
- (set_attr "check_load" "<attr_yes>")])
-
(define_insn "advanced_load_check_clr_<mode>"
[(set (pc)
(if_then_else (ne (unspec [(match_operand:MODE 0 "<reg_pred_prefix>_register_operand" "<chk_reg_constr>")] UNSPEC_CHKACLR) (const_int 0))
@@ -643,15 +568,6 @@
"chk.a.clr %0, %l1"
[(set_attr "itanium_class" "<chka_class>")])
-(define_insn "advanced_load_check_nc_<mode>"
- [(set (pc)
- (if_then_else (ne (unspec [(match_operand:MODE 0 "<reg_pred_prefix>_register_operand" "<chk_reg_constr>")] UNSPEC_CHKANC) (const_int 0))
- (pc)
- (label_ref (match_operand 1 "" ""))))]
- ""
- "chk.a.clr %0, %l1"
- [(set_attr "itanium_class" "<chka_class>")])
-
(define_insn "speculation_check_<mode>"
[(set (pc)
(if_then_else (ne (unspec [(match_operand:MODE 0 "<reg_pred_prefix>_register_operand" "<chk_reg_constr>")] UNSPEC_CHKS) (const_int 0))
@@ -947,7 +863,7 @@
operands[1] = op1;
})
-(define_insn_and_split "movti_internal"
+(define_insn_and_split "*movti_internal"
[(set (match_operand:TI 0 "destination_operand" "=r, *fm,*x,*f, Q")
(match_operand:TI 1 "general_operand" "r*fim,r, Q, *fOQ,*f"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -963,9 +879,7 @@
ia64_split_tmode_move (operands);
DONE;
}
- [(set_attr "itanium_class" "unknown,unknown,fldp,unknown,unknown")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, no, yes, no, no")])
+ [(set_attr "itanium_class" "unknown,unknown,fldp,unknown,unknown")])
;; Floating Point Moves
;;
@@ -983,7 +897,7 @@
operands[1] = op1;
})
-(define_insn "movsf_internal"
+(define_insn "*movsf_internal"
[(set (match_operand:SF 0 "destination_operand" "=f,f, Q,*r, f,*r,*r, m")
(match_operand:SF 1 "general_operand" "fG,Q,fG,fG,*r,*r, m,*r"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -996,9 +910,7 @@
mov %0 = %1
ld4%O1 %0 = %1%P1
st4%Q0 %0 = %1%P0"
- [(set_attr "itanium_class" "fmisc,fld,stf,frfr,tofr,ialu,ld,st")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, yes,no, no, no, no, yes,no")])
+ [(set_attr "itanium_class" "fmisc,fld,stf,frfr,tofr,ialu,ld,st")])
(define_expand "movdf"
[(set (match_operand:DF 0 "general_operand" "")
@@ -1011,7 +923,7 @@
operands[1] = op1;
})
-(define_insn "movdf_internal"
+(define_insn "*movdf_internal"
[(set (match_operand:DF 0 "destination_operand" "=f,f, Q,*r, f,*r,*r, m")
(match_operand:DF 1 "general_operand" "fG,Q,fG,fG,*r,*r, m,*r"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -1024,9 +936,7 @@
mov %0 = %1
ld8%O1 %0 = %1%P1
st8%Q0 %0 = %1%P0"
- [(set_attr "itanium_class" "fmisc,fld,stf,frfr,tofr,ialu,ld,st")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, yes,no, no, no, no, yes,no")])
+ [(set_attr "itanium_class" "fmisc,fld,stf,frfr,tofr,ialu,ld,st")])
;; With no offsettable memory references, we've got to have a scratch
;; around to play with the second word if the variable winds up in GRs.
@@ -1041,7 +951,7 @@
;; ??? There's no easy way to mind volatile acquire/release semantics.
-(define_insn "movxf_internal"
+(define_insn "*movxf_internal"
[(set (match_operand:XF 0 "destination_operand" "=f,f, m")
(match_operand:XF 1 "general_operand" "fG,m,fG"))]
"ia64_move_ok (operands[0], operands[1])"
@@ -1049,9 +959,7 @@
mov %0 = %F1
ldfe %0 = %1%P1
stfe %0 = %F1%P0"
- [(set_attr "itanium_class" "fmisc,fld,stf")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, yes,no")])
+ [(set_attr "itanium_class" "fmisc,fld,stf")])
;; Same as for movxf, but for RFmode.
(define_expand "movrf"
@@ -1141,9 +1049,7 @@
"@
zxt1 %0 = %1
ld1%O1 %0 = %1%P1"
- [(set_attr "itanium_class" "xtd,ld")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, yes")])
+ [(set_attr "itanium_class" "xtd,ld")])
(define_insn "zero_extendhidi2"
[(set (match_operand:DI 0 "gr_register_operand" "=r,r")
@@ -1152,9 +1058,7 @@
"@
zxt2 %0 = %1
ld2%O1 %0 = %1%P1"
- [(set_attr "itanium_class" "xtd,ld")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, yes")])
+ [(set_attr "itanium_class" "xtd,ld")])
(define_insn "zero_extendsidi2"
[(set (match_operand:DI 0 "grfr_register_operand" "=r,r,?f")
@@ -1165,9 +1069,7 @@
addp4 %0 = %1, r0
ld4%O1 %0 = %1%P1
fmix.r %0 = f0, %1"
- [(set_attr "itanium_class" "ialu,ld,fmisc")
- (set_attr "speculable1" "yes")
- (set_attr "speculable2" "no, yes,no")])
+ [(set_attr "itanium_class" "ialu,ld,fmisc")])
;; Convert between floating point types of different sizes.