;; Insn type. Used to default other attribute values.
-;
-; Insn are devide in two classes:
-; mem: Use of base and/or index register for address generation
-; reg: Use of second and third register not for address generation
-;
-(define_attr "atype" "mem,reg" (const_string "reg"))
+;; Define an insn type attribute. This is used in function unit delay
+;; computations.
-;
-; Insn may take 1,2,3 or many cycles
-; For the scheduling it does not matter, if a instruction has
-; a issue_delay from 4 or more cycles, since the address dependency
-; between two insns needs at least 4 cycles.
-;
+(define_attr "type" "integer,load,lr,la,store,imul,lmul,fmul,idiv,ldiv,fdiv,branch,jsr,other,o2,o3"
+ (const_string "integer"))
-(define_attr "cycle" "1,2,3,n" (const_string "1"))
+;; Insn are devide in two classes:
+;; mem: Insn accesssing memory
+;; reg: Insn operands all in registers
-;
-; There are three classes of insns:
-; set: instruction setting a (potential) address relevant register
-; xset: instruction setting no address relevant register
-; la: instruction setting a (potential) address relevant register,
-; but behave 'better' on the pipeline
-;
+(define_attr "atype" "reg,mem"
+ (const_string "reg"))
-(define_attr "type" "set,xset,la" (const_string "xset"))
+;; Generic pipeline function unit.
-;
-; Set operations changing a target register, which could be used for
-; address generation. Adjust cost will check, if realy applicable.
-;
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "integer") 1 1)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "set")
- (eq_attr "cycle" "1"))
- 5 1 [(eq_attr "atype" "mem")] )
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "load") 1 1)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "set")
- (eq_attr "cycle" "2")) 5 2)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "la") 1 1)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "set")
- (eq_attr "cycle" "3")) 5 3)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "lr") 1 1)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "set")
- (eq_attr "cycle" "n")) 5 4)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "store") 1 1)
-(define_function_unit "memory" 1 0
- (eq_attr "type" "la") 2 1)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "jsr") 5 5)
-;
-; xset insns, which don't set any valid address register.
-; Only the issue delay matters.
-;
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "imul") 7 7)
+
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "fmul") 6 6)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "xset")
- (eq_attr "cycle" "1")) 1 1)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "idiv") 33 33)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "xset")
- (eq_attr "cycle" "2")) 1 2)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "fdiv") 33 33)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "xset")
- (eq_attr "cycle" "3")) 1 3)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "o2") 2 2)
-(define_function_unit "memory" 1 0
- (and (eq_attr "type" "xset")
- (eq_attr "cycle" "n")) 1 4)
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "o3") 3 3)
-; Operand type. Used to default length attribute values
+(define_function_unit "integer" 1 0
+ (eq_attr "type" "other") 5 5)
+
+;; Operand type. Used to default length attribute values
(define_attr "op_type"
"NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE"
;; Define attributes for `asm' insns.
-(define_asm_attributes [(set_attr "type" "xset")
+(define_asm_attributes [(set_attr "type" "other")
(set_attr "op_type" "NN")])
;;
return \"tmhh\\t%0,%x1\";
}"
[(set_attr "op_type" "RX")
- (set_attr "type" "xset")])
+ (set_attr "type" "integer")])
(define_insn "*cmpdi_tm"
return \"tmll\\t%0,%x1\";
}"
[(set_attr "op_type" "RX")
- (set_attr "type" "xset")])
+ (set_attr "type" "integer")])
(define_insn "*ltgr"
"s390_match_ccmode(insn, CCSmode) && TARGET_64BIT"
"ltgr\\t%2,%0"
[(set_attr "op_type" "RRE")
- (set_attr "type" "set")])
+ (set_attr "type" "integer")])
(define_insn "*cmpdi_ccs_0_64"
[(set (reg 33)
"s390_match_ccmode(insn, CCSmode) && TARGET_64BIT"
"ltgr\\t%0,%0"
[(set_attr "op_type" "RRE")
- (set_attr "type" "set")])
+ (set_attr "type" "integer")])
(define_insn "*cmpdi_ccs_0_31"
[(set (reg 33)
"s390_match_ccmode(insn, CCSmode)"
"srda\\t%0,0"
[(set_attr "op_type" "RS")
- (set_attr "type" "set")])
+ (set_attr "type" "integer")])
(define_insn "*cmpdi_ccs"
[(set (reg 33)
operands[1] = GEN_INT (1 << (15 - INTVAL(operands[2])));
return \"tmh\\t%0,%x1\";
}"
- [(set_attr "op_type" "RI")
- (set_attr "type" "xset")])
+ [(set_attr "op_type" "RI")])
(define_insn "*cmpsi_tm"
[(set (reg 33)
}
return \"tml\\t%0,%x1\";
}"
- [(set_attr "op_type" "RX")
- (set_attr "type" "xset")])
-
+ [(set_attr "op_type" "RX")])
(define_insn "*ltr"
[(set (reg 33)
(match_dup 0))]
"s390_match_ccmode(insn, CCSmode)"
"ltr\\t%2,%0"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*icm15"
[(set (reg 33)
"s390_match_ccmode(insn, CCSmode)"
"icm\\t%2,15,%0"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*icm15_cconly"
[(set (reg 33)
"s390_match_ccmode(insn, CCSmode)"
"icm\\t%2,15,%0"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*cmpsi_ccs_0"
[(set (reg 33)
(match_operand:SI 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCSmode)"
"ltr\\t%0,%0"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*cmpsidi_ccs"
[(set (reg 33)
"s390_match_ccmode(insn, CCSmode)"
"ch\\t%0,%1"
[(set_attr "op_type" "RR")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
(define_insn "*cmpsi_ccs"
[(set (reg 33)
chi\\t%0,%c1
c\\t%0,%1"
[(set_attr "op_type" "RR,RI,RX")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "xset,xset,xset")])
+ (set_attr "atype" "reg,reg,mem")])
(define_insn "*cmpsi_ccu"
[(set (reg 33)
"s390_match_ccmode(insn, CCUmode)"
"clc\\t%O0(4,%R0),%1"
[(set_attr "op_type" "SS")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
-
+ (set_attr "atype" "mem")])
; HI instructions
"s390_match_ccmode(insn, CCSmode)"
"icm\\t%2,3,%0"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*cmphi_cct_0"
[(set (reg 33)
(match_operand:HI 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCTmode)"
"tml\\t%0,65535"
- [(set_attr "op_type" "RX")
- (set_attr "type" "xset")])
+ [(set_attr "op_type" "RX")])
(define_insn "*cmphi_ccs_0"
[(set (reg 33)
"s390_match_ccmode(insn, CCSmode)"
"icm\\t%2,3,%0"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*cmphi_ccu"
[(set (reg 33)
"s390_match_ccmode(insn, CCUmode)"
"clm\\t%0,3,%1"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
(define_insn "*cmphi_ccu_mem"
[(set (reg 33)
"s390_match_ccmode(insn, CCUmode)"
"clc\\t%O0(2,%R0),%1"
[(set_attr "op_type" "SS")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
; QI instructions
"s390_match_ccmode(insn, CCSmode)"
"icm\\t%2,1,%0"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*tm_0"
[(set (reg 33)
INTVAL(operands[1]) >= 0 && INTVAL(operands[1]) < 256"
"tm\\t%0,%1"
[(set_attr "op_type" "RI")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
(define_insn "*cmpqi_cct_0"
[(set (reg 33)
(match_operand:QI 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCTmode)"
"tml\\t%0,255"
- [(set_attr "op_type" "RI")
- (set_attr "type" "xset")])
+ [(set_attr "op_type" "RI")])
(define_insn "*cmpqi_ccs_0"
[(set (reg 33)
(clobber (match_scratch:QI 2 "=d"))]
"s390_match_ccmode(insn, CCSmode)"
"icm\\t%2,1,%0"
- [(set_attr "op_type" "RS")
- (set_attr "type" "xset")])
+ [(set_attr "op_type" "RS")])
(define_insn "*cmpqi_ccu_0"
[(set (reg 33)
"s390_match_ccmode(insn, CCUmode)"
"cli\\t%0,0"
[(set_attr "op_type" "SI")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
(define_insn "*cmpqi_ccu"
[(set (reg 33)
"s390_match_ccmode(insn, CCUmode)"
"clm\\t%0,1,%1"
[(set_attr "op_type" "RS")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
(define_insn "*cmpqi_ccu_immed"
[(set (reg 33)
INTVAL(operands[1]) >= 0 && INTVAL(operands[1]) < 256"
"cli\\t%0,%1"
[(set_attr "op_type" "SI")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
(define_insn "*cmpqi_ccu_mem"
[(set (reg 33)
"s390_match_ccmode(insn, CCUmode)"
"clc\\t%O0(1,%R0),%1"
[(set_attr "op_type" "SS")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
; DF instructions
(match_operand:DF 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"ltdbr\\t%0,%0"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*cmpdf_ccs_0_ibm"
[(set (reg 33)
(match_operand:DF 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
"ltdr\\t%0,%0"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*cmpdf_ccs"
[(set (reg 33)
cdbr\\t%0,%1
cdb\\t%0,%1"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "xset,xset")])
+ (set_attr "atype" "reg,mem")])
(define_insn "*cmpdf_ccs_ibm"
[(set (reg 33)
cdr\\t%0,%1
cd\\t%0,%1"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "xset,xset")])
+ (set_attr "atype" "reg,mem")])
; SF instructions
(match_operand:SF 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"ltebr\\t%0,%0"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*cmpsf_ccs_0_ibm"
[(set (reg 33)
(match_operand:SF 1 "const0_operand" "")))]
"s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
"lter\\t%0,%0"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*cmpsf_ccs"
[(set (reg 33)
cebr\\t%0,%1
ceb\\t%0,%1"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "xset,xset")])
+ (set_attr "atype" "reg,mem")])
(define_insn "*cmpsf_ccs"
[(set (reg 33)
cer\\t%0,%1
ce\\t%0,%1"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "xset,xset")])
+ (set_attr "atype" "reg,mem")])
;;
}"
[(set_attr "op_type" "NN,NN,RS,RS,SS")
(set_attr "atype" "reg,reg,mem,mem,mem")
- (set_attr "type" "set")
+ (set_attr "type" "o2")
(set_attr "length" "12,8,10,10,*")])
;
stg\\t%1,%0
mvc\\t%O0(8,%R0),%1"
[(set_attr "op_type" "RRE,RI,RIL,RXE,RXE,SS")
- (set_attr "atype" "reg,reg,reg,mem,mem,mem")
- (set_attr "type" "set,set,la,set,set,set")])
+ (set_attr "type" "integer,integer,la,integer,integer,integer")
+ (set_attr "atype" "reg,reg,reg,mem,mem,mem")])
(define_insn "*movdi_31"
[(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,m,Q")
}"
[(set_attr "op_type" "NN,NN,RS,RS,SS")
(set_attr "atype" "reg,reg,mem,mem,mem")
- (set_attr "type" "set")
+ (set_attr "type" "o2")
(set_attr "length" "4,8,8,8,*")])
st\\t%1,%0
mvc\\t%O0(4,%R0),%1"
[(set_attr "op_type" "RR,RI,RX,RX,SS")
- (set_attr "atype" "reg,reg,mem,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "type" "lr,*,load,store,store")
+ (set_attr "atype" "reg,reg,mem,mem,mem")])
;
lh\\t%0,%1
sth\\t%1,%0"
[(set_attr "op_type" "RR,RI,RX,RX")
- (set_attr "atype" "reg,reg,mem,mem")
- (set_attr "type" "xset")])
-
+ (set_attr "atype" "reg,reg,mem,mem")])
;
; movqi instruction pattern(s).
stc\\t%1,%0
mvi\\t%0,%b1"
[(set_attr "op_type" "RR,RI,RXE,RX,SI")
- (set_attr "atype" "reg,reg,mem,mem,mem")
- (set_attr "type" "xset")])
-
+ (set_attr "atype" "reg,reg,mem,mem,mem")])
(define_insn "movqi"
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q")
stc\\t%1,%0
mvi\\t%0,%b1"
[(set_attr "op_type" "RR,RX,RX,RX,SI")
- (set_attr "atype" "reg,reg,mem,mem,mem")
- (set_attr "type" "xset")])
-
+ (set_attr "atype" "reg,reg,mem,mem,mem")])
;
; moveqstrictqi instruction pattern(s).
icm\\t%0,3,%1
stcm\\t%1,3,%0"
[(set_attr "op_type" "RS,RS")
- (set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem")])
;
l\\t%0,%1
st\\t%1,%0"
[(set_attr "op_type" "RR,RS,RS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "reg,mem,mem")])
;
lgr\\t%0,%1
mvc\\t%O0(8,%R0),%1"
[(set_attr "op_type" "RR,RX,RX,RXE,RXE,RR,SS")
- (set_attr "atype" "reg,mem,mem,mem,mem,mem,mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "reg,mem,mem,mem,mem,mem,mem")])
(define_insn "*movdf_31"
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,m,d,Q")
lgr\\t%0,%1
mvc\\t%O0(8,%R0),%1"
[(set_attr "op_type" "RXE,RXE,RR,SS")
- (set_attr "atype" "mem,mem,mem,mem")
- (set_attr "type" "xset")])
+ (set_attr "atype" "mem,mem,mem,mem")])
(define_insn "*movdf_soft_31"
[(set (match_operand:DF 0 "nonimmediate_operand" "=!d,d,m,Q")
return \"lmg\\t%1,%0,%2\";
}"
[(set_attr "op_type" "RXE")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*load_multiple_si"
[(match_parallel 0 "load_multiple_operation"
return \"lm\\t%1,%0,%2\";
}"
[(set_attr "op_type" "RXE")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
;
; store multiple pattern(s).
}"
[(set_attr "op_type" "RXE")
(set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
(define_insn "*store_multiple_si"
}"
[(set_attr "op_type" "RXE")
(set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
;;
;; String instructions.
"mvcle\\t%0,%1,0\;jo\\t.-4"
[(set_attr "op_type" "NN")
(set_attr "atype" "mem")
- (set_attr "cycle" "n")
+ (set_attr "type" "other")
(set_attr "length" "8")])
(define_insn "clrstrsi_31"
"mvcle\\t%0,%1,0\;jo\\t.-4"
[(set_attr "op_type" "NN")
(set_attr "atype" "mem")
- (set_attr "cycle" "n")
+ (set_attr "type" "other")
(set_attr "length" "8")])
;
"clc\\t%O0(%c2,%R0),%1"
[(set_attr "op_type" "SS")
(set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
; Compare a block that is larger than 255 bytes in length.
"clcl\\t%0,%1"
[(set_attr "op_type" "RR")
(set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
(define_insn "cmpstr_31"
[(set (reg:CCU 33)
"clcl\\t%0,%1"
[(set_attr "op_type" "RR")
(set_attr "atype" "mem")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
; Convert condition code to integer in range (-1, 0, 1)
[(set_attr "op_type" "NN")
(set_attr "length" "16")
(set_attr "atype" "reg")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
(define_insn "cmpint_di"
[(set (match_operand:DI 0 "register_operand" "=d")
[(set_attr "op_type" "NN")
(set_attr "length" "22")
(set_attr "atype" "reg")
- (set_attr "type" "xset")])
+ (set_attr "type" "other")])
;;
;;- Conversion instructions.
lgfr\\t%0,%1
lgf\\t%0,%1"
[(set_attr "op_type" "RRE,RXE")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
;
"sllg\\t%0,%1,48\;srag\\t%0,%0,48"
[(set_attr "op_type" "NN")
(set_attr "length" "12")
- (set_attr "cycle" "2")
- (set_attr "type" "set")])
-
+ (set_attr "type" "o2")])
;
; extendqidi2 instruction pattern(s).
"sllg\\t%0,%1,56\;srag\\t%0,%0,56"
[(set_attr "op_type" "NN")
(set_attr "length" "12")
- (set_attr "cycle" "2")
- (set_attr "type" "set")])
-
+ (set_attr "type" "o2")])
;
; extendhisi2 instruction pattern(s).
lr\\t%0,%1\;sll\\t%0,16\;sra\\t%0,16
lh\\t%0,%1"
[(set_attr "op_type" "NN,NN,RX")
- (set_attr "cycle" "2,3,1")
+ (set_attr "type" "o2,o3,integer")
(set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")
(set_attr "length" "8,10,*")])
sll\\t%0,24\;sra\\t%0,24
icm\\t%0,8,%1\;sra\\t%0,24"
[(set_attr "op_type" "NN,NN")
- (set_attr "cycle" "2")
+ (set_attr "type" "o2")
(set_attr "atype" "reg,mem")
- (set_attr "type" "set")
(set_attr "length" "8,8")])
sll\\t%0,24\;sra\\t%0,24
icm\\t%0,8,%1\;sra\\t%0,24"
[(set_attr "op_type" "NN,NN")
- (set_attr "cycle" "2")
+ (set_attr "type" "o2")
(set_attr "atype" "reg,mem")
- (set_attr "type" "set")
(set_attr "length" "8,8")])
llgfr\\t%0,%1
llgf\\t%0,%1"
[(set_attr "op_type" "RRE,RXE")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
;
llgfr\\t%0,%1\;iilh\\t%0,0
llgh\\t%0,%1"
[(set_attr "op_type" "NN,RXE")
- (set_attr "cycle" "2,1")
+ (set_attr "type" "o2,integer")
(set_attr "atype" "reg,mem")
- (set_attr "length" "12,*")
- (set_attr "type" "set")])
-
+ (set_attr "length" "12,*")])
;
; zero_extendqidi2 instruction pattern(s)
sllg\\t%0,%1,56\;srlg\\t%0,%0,56
llgc\\t%0,%1"
[(set_attr "op_type" "NN,RXE")
- (set_attr "cycle" "2,1")
+ (set_attr "type" "o2,integer")
(set_attr "atype" "reg,mem")
- (set_attr "type" "set")
(set_attr "length" "12,*")])
icm\\t%0,12,%2
icm\\t%0,12,%1\;srl\\t%0,16"
[(set_attr "op_type" "RX,NN")
- (set_attr "cycle" "1,2")
+ (set_attr "type" "integer,o2")
(set_attr "atype" "reg,mem")
- (set_attr "type" "set")
(set_attr "length" "*,8")])
""
"sr\\t%0,%0\;ic\\t%0,%1"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "2")
+ (set_attr "type" "o2")
(set_attr "atype" "mem")
- (set_attr "type" "set")
(set_attr "length" "6")])
(define_insn "zero_extendqisi2_reg_31"
""
"icm\\t%0,14,%2"
[(set_attr "op_type" "RX")
- (set_attr "atype" "mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "mem")])
(define_insn "*zero_extendqisi2_64"
[(set (match_operand:SI 0 "register_operand" "=!d,d")
sllg\\t%0,%1,56\;srlg\\t%0,%0,56
llgc\\t%0,%1"
[(set_attr "op_type" "NN,RXE")
- (set_attr "cycle" "2,1")
+ (set_attr "type" "o2,integer")
(set_attr "atype" "reg,mem")
(set_attr "length" "12,*")])
"TARGET_64BIT"
"sllg\\t%0,%1,56\;srlg\\t%0,%0,56"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "2")
+ (set_attr "type" "o2")
(set_attr "length" "12")])
"TARGET_64BIT"
"iilh\\t%0,0\;nill\\t%0,0x00FF"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "2")
+ (set_attr "type" "o2")
(set_attr "length" "8")])
"TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cgdbr\\t%0,%h2,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n")])
+ (set_attr "type" "other")])
;
; fixuns_truncdfsi2 and fix_truncdfsi2 instruction pattern(s).
"TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cfdbr\\t%0,%h2,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n" )])
+ (set_attr "type" "other" )])
(define_insn "fix_truncdfsi2_ibm"
[(set (match_operand:SI 0 "register_operand" "=d")
return \"l\\t%0,%N4\";
}"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "n")
+ (set_attr "type" "other")
(set_attr "length" "20")])
;
"TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cgebr\\t%0,%h2,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n")])
+ (set_attr "type" "other")])
;
; fixuns_truncsfsi2 and fix_truncsfsi2 instruction pattern(s).
"TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cfebr\\t%0,%h2,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n")])
+ (set_attr "type" "other")])
;
; floatdidf2 instruction pattern(s).
"TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cdgbr\\t%0,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n" )])
+ (set_attr "type" "other" )])
;
; floatdisf2 instruction pattern(s).
"TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cegbr\\t%0,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n" )])
+ (set_attr "type" "other" )])
;
; floatsidf2 instruction pattern(s).
"TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cdfbr\\t%0,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n" )])
+ (set_attr "type" "other" )])
(define_insn "floatsidf2_ibm"
[(set (match_operand:DF 0 "register_operand" "=f")
return \"sd\\t%0,%2\";
}"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "n" )
+ (set_attr "type" "other" )
(set_attr "length" "20")])
;
"TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
"cefbr\\t%0,%1"
[(set_attr "op_type" "RRE")
- (set_attr "cycle" "n" )])
+ (set_attr "type" "other" )])
;
; truncdfsf2 instruction pattern(s).
aghi\\t%0,%h2
ag\\t%0,%2"
[(set_attr "op_type" "RRE,RI,RXE")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,reg,mem")])
;
; For weakness of reload, need (set (reg x) (plus (reg y) (reg x)))
aghi\\t%0,%h1
ag\\t%0,%1"
[(set_attr "op_type" "RRE,RI,RXE")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,reg,mem")])
(define_insn "adddi3_31"
[(set (match_operand:DI 0 "register_operand" "=d,d")
"TARGET_64BIT"
"brxlg\\t%0,%2,.+6"
[(set_attr "op_type" "RIE")
- (set_attr "atype" "reg")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg")])
(define_insn "*reload_la_64"
[(set (match_operand:DI 0 "register_operand" "=d")
ahi\\t%0,%h2
a\\t%0,%2"
[(set_attr "op_type" "RR,RI,RX")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,reg,mem")])
(define_insn "*addsi3_cconly"
[(set (reg 33)
ahi\\t%0,%h2
a\\t%0,%2"
[(set_attr "op_type" "RR,RI,RX")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,reg,mem")])
(define_insn "*addsi3_cconly2"
[(set (reg 33)
ahi\\t%0,%h2
a\\t%0,%2"
[(set_attr "op_type" "RR,RI,RX")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,reg,mem")])
(define_insn "addsi3"
[(set (match_operand:SI 0 "register_operand" "=d,d,d")
ahi\\t%0,%h2
a\\t%0,%2"
[(set_attr "op_type" "RR,RI,RX")
- (set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,reg,mem")])
(define_insn "do_la"
[(set (match_operand:SI 0 "register_operand" "=a")
""
"brxle\\t%0,%2,.+4"
[(set_attr "op_type" "RSI")
- (set_attr "atype" "reg")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg")])
(define_insn "*reload_la_31"
[(set (match_operand:SI 0 "register_operand" "=d")
sgr\\t%0,%2
sg\\t%0,%2"
[(set_attr "op_type" "RRE,RRE")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
(define_insn "subdi3"
[(set (match_operand:DI 0 "register_operand" "=d,d")
sr\\t%0,%2
s\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
(define_insn "*subsi3_cconly"
[(set (reg 33)
sr\\t%0,%2
s\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
(define_insn "subsi3"
[(set (match_operand:SI 0 "register_operand" "=d,d")
sr\\t%0,%2
s\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
;
; subhi3 instruction pattern(s).
rtx temp1_1 = gen_reg_rtx (SImode);
rtx temp2_0 = gen_reg_rtx (SImode);
rtx temp2_1 = gen_reg_rtx (SImode);
-
+
emit_move_insn (temp1_0, operand_subword (operands[1], 0 ,1, DImode));
emit_move_insn (temp1_1, operand_subword (operands[1], 1 ,1, DImode));
emit_move_insn (temp2_0, operand_subword (operands[2], 0 ,1, DImode));
mghi\\t%0,%h2
msg\\t%0,%2"
[(set_attr "op_type" "RRE,RI,RX")
- (set_attr "cycle" "n")
(set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "type" "imul")])
+
+;
+; mulsidi3 instruction pattern(s).
+;
+
+;(define_expand "mulsidi3"
+; [(set (match_operand:DI 0 "register_operand" "")
+; (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" ""))
+; (sign_extend:DI (match_operand:SI 2 "general_operand" ""))))]
+; ""
+; "
+;{
+; emit_insn (gen_extendsidi2 (operands[0], operands[1]));
+; emit_insn (gen_muldisidi3 (operands[0], operands[0], operands[2]));
+; DONE;
+;}")
+
+;(define_insn "muldisidi3"
+; [(set (match_operand:DI 0 "register_operand" "=d,d")
+; (mult:DI (match_operand:DI 1 "register_operand" "0,0")
+; (sign_extend:DI (match_operand:SI 2 "general_operand" "d,m"))))
+; (clobber (reg:CC 33))]
+; "!TARGET_64BIT"
+; "@
+; mr\\t%0,%2
+; m\\t%0,%2"
+; [(set_attr "op_type" "RR,RX")
+; (set_attr "atype" "reg,mem")
+; (set_attr "type" "imul")])
;
; mulsi3 instruction pattern(s).
mhi\\t%0,%h2
ms\\t%0,%2"
[(set_attr "op_type" "RRE,RI,RX")
- (set_attr "cycle" "n")
(set_attr "atype" "reg,reg,mem")
- (set_attr "type" "set")])
+ (set_attr "type" "imul")])
(define_insn "mulsi_6432"
[(set (match_operand:DI 0 "register_operand" "=d,d")
mr\\t%0,%2
m\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
(set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "type" "imul")])
;
mdbr\\t%0,%2
mdb\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fmul")
(set_attr "atype" "reg,mem")])
(define_insn "*muldf3_ibm"
mdr\\t%0,%2
md\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fmul")
(set_attr "atype" "reg,mem")])
;
meebr\\t%0,%2
meeb\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fmul")
(set_attr "atype" "reg,mem")])
(define_insn "*mulsf3_ibm"
mer\\t%0,%2
me\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fmul")
(set_attr "atype" "reg,mem")])
dsgr\\t%0,%2
dsg\\t%0,%2"
[(set_attr "op_type" "RRE,RXE")
- (set_attr "cycle" "n")
+ (set_attr "type" "idiv")
(set_attr "atype" "reg,mem")])
;
dlgr\\t%0,%2
dlg\\t%0,%2"
[(set_attr "op_type" "RRE,RXE")
- (set_attr "cycle" "n")
+ (set_attr "type" "idiv")
(set_attr "atype" "reg,mem")])
;
dr\\t%0,%2
d\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "idiv")
(set_attr "atype" "reg,mem")])
;
ddbr\\t%0,%2
ddb\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fdiv")
(set_attr "atype" "reg,mem")])
(define_insn "*divdf3_ibm"
ddr\\t%0,%2
dd\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fdiv")
(set_attr "atype" "reg,mem")])
;
debr\\t%0,%2
deb\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fdiv")
(set_attr "atype" "reg,mem")])
(define_insn "*divsf3"
der\\t%0,%2
de\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "fdiv")
(set_attr "atype" "reg,mem")])
ng\\t%0,%2
nc\\t%O0(8,%R0),%2"
[(set_attr "op_type" "RR,RX,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
(define_insn "*anddi3_cconly"
[(set (reg 33)
ngr\\t%0,%2
ng\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
(define_insn "anddi3"
[(set (match_operand:DI 0 "r_or_s_operand" "=d,d,Q")
ng\\t%0,%2
nc\\t%O0(8,%R0),%2"
[(set_attr "op_type" "RR,RX,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
;
; andsi3 instruction pattern(s).
n\\t%0,%2
nc\\t%O0(4,%R0),%2"
[(set_attr "op_type" "RR,RX,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
(define_insn "*andsi3_cconly"
[(set (reg 33)
nr\\t%0,%2
n\\t%0,%2"
[(set_attr "op_type" "RR,RX")
- (set_attr "atype" "reg,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem")])
(define_insn "andsi3"
[(set (match_operand:SI 0 "r_or_s_operand" "=d,d,Q")
n\\t%0,%2
nc\\t%O0(4,%R0),%2"
[(set_attr "op_type" "RR,RX,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
;
; andhi3 instruction pattern(s).
oc\\t%O0(8,%R0),%2
oill\\t%0,%2"
[(set_attr "op_type" "RRE,RXE,SS,RI")
- (set_attr "atype" "reg,mem,mem,reg")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem,reg")])
;
; iorsi3 instruction pattern(s).
o\\t%0,%2
oc\\t%O0(4,%R0),%2"
[(set_attr "op_type" "RR,RX,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
;
; iorhi3 instruction pattern(s).
xg\\t%0,%2
xc\\t%O0(8,%R0),%2"
[(set_attr "op_type" "RRE,RXE,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
;
; xorsi3 instruction pattern(s).
x\\t%0,%2
xc\\t%O0(4,%R0),%2"
[(set_attr "op_type" "RR,RX,SS")
- (set_attr "atype" "reg,mem,mem")
- (set_attr "type" "set")])
+ (set_attr "atype" "reg,mem,mem")])
;
; xorhi3 instruction pattern(s).
(clobber (reg:CC 33))]
"TARGET_64BIT"
"lcgr\\t%0,%1"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
(define_insn "*negdi2_31"
[(set (match_operand:DI 0 "register_operand" "=d")
(clobber (reg:CC 33))]
""
"lcr\\t%0,%1"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
;
; negdf2 instruction pattern(s).
(clobber (reg:CC 33))]
"TARGET_64BIT"
"lpgr\\t%0,%1"
- [(set_attr "op_type" "RRE")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RRE")])
;
; abssi2 instruction pattern(s).
(clobber (reg:CC 33))]
""
"lpr\\t%0,%1"
- [(set_attr "op_type" "RR")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RR")])
;
; abshi2 instruction pattern(s).
""
"sll\\t%1,16\;sra\\t%1,16\;lpr\\t%0,%1"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "3")
+ (set_attr "type" "o3")
(set_attr "length" "10")])
;
"@
rllg\\t%0,%1,%c2
rllg\\t%0,%1,0(%2)"
- [(set_attr "op_type" "RSE")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RSE")])
;
; rotlsi3 instruction pattern(s).
"@
rll\\t%0,%1,%c2
rll\\t%0,%1,0(%2)"
- [(set_attr "op_type" "RSE")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RSE")])
;;
"@
sldl\\t%0,%c2
sldl\\t%0,0(%2)"
- [(set_attr "op_type" "RS")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RS")])
(define_insn "*ashldi3_64"
[(set (match_operand:DI 0 "register_operand" "=d,d")
"@
sllg\\t%0,%1,%2
sllg\\t%0,%1,0(%2)"
- [(set_attr "op_type" "RSE")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RSE")])
;
; ashrdi3 instruction pattern(s).
"@
srag\\t%0,%1,%c2
srag\\t%0,%1,0(%2)"
- [(set_attr "op_type" "RSE")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RSE")])
;
; ashlsi3 instruction pattern(s).
"@
sll\\t%0,%c2
sll\\t%0,0(%2)"
- [(set_attr "op_type" "RS")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RS")])
;
; ashrsi3 instruction pattern(s).
"@
sra\\t%0,%c2
sra\\t%0,0(%2)"
- [(set_attr "op_type" "RS")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RS")])
;
; ashlhi3 instruction pattern(s).
"@
srlg\\t%0,%1,%c2
srlg\\t%0,%1,0(%2)"
- [(set_attr "op_type" "RS,RS")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RS,RS")])
;
; lshrsi3 instruction pattern(s).
"@
srl\\t%0,%c2
srl\\t%0,0(%2)"
- [(set_attr "op_type" "RS")
- (set_attr "type" "set")])
+ [(set_attr "op_type" "RS")])
;
; lshrhi3 instruction pattern(s).
"TARGET_64BIT"
"brasl\\t%2,%0"
[(set_attr "op_type" "RIL")
- (set_attr "cycle" "n")])
+ (set_attr "type" "jsr")])
(define_insn "bras"
[(call (mem:QI (match_operand:SI 0 "bras_sym_operand" "X"))
"TARGET_SMALL_EXEC"
"bras\\t%2,%0"
[(set_attr "op_type" "RI")
- (set_attr "cycle" "n")])
+ (set_attr "type" "jsr")])
(define_insn "basr_64"
[(call (mem:QI (match_operand:DI 0 "register_operand" "a"))
"TARGET_64BIT"
"basr\\t%2,%0"
[(set_attr "op_type" "RR")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
(define_insn "basr_31"
"!TARGET_64BIT"
"basr\\t%2,%0"
[(set_attr "op_type" "RR")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
(define_insn "bas_64"
"TARGET_64BIT"
"bas\\t%2,%a0"
[(set_attr "op_type" "RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
(define_insn "bas_31"
"!TARGET_64BIT"
"bas\\t%2,%a0"
[(set_attr "op_type" "RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
"TARGET_64BIT"
"brasl\\t%3,%1"
[(set_attr "op_type" "RIL")
- (set_attr "cycle" "n")])
+ (set_attr "type" "jsr")])
(define_insn "bras_r"
[(set (match_operand 0 "register_operand" "=df")
"TARGET_SMALL_EXEC"
"bras\\t%3,%1"
[(set_attr "op_type" "RI")
- (set_attr "cycle" "n")])
+ (set_attr "type" "jsr")])
(define_insn "basr_r_64"
[(set (match_operand 0 "register_operand" "=df")
"TARGET_64BIT"
"basr\\t%3,%1"
[(set_attr "op_type" "RR")
- (set_attr "cycle" "n")])
+ (set_attr "type" "jsr")])
(define_insn "basr_r_31"
[(set (match_operand 0 "register_operand" "=df")
"!TARGET_64BIT"
"basr\\t%3,%1"
[(set_attr "op_type" "RR")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
(define_insn "bas_r_64"
"TARGET_64BIT"
"bas\\t%3,%a1"
[(set_attr "op_type" "RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
(define_insn "bas_r_31"
"!TARGET_64BIT"
"bas\\t%3,%a1"
[(set_attr "op_type" "RX")
- (set_attr "cycle" "n")
+ (set_attr "type" "jsr")
(set_attr "atype" "mem")])
return \"basr\\t13,0\;ahi\\t13,%Y0\";
}"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "2")
+ (set_attr "type" "o2")
(set_attr "length" "8")])
(define_insn "ltorg"
return \"0:\";
}"
[(set_attr "op_type" "NN")
- (set_attr "cycle" "n")
+ (set_attr "type" "branch")
(set_attr "length" "4096")])