;; T -- Memory reference with index register and long displacement.
;; A -- Multiple letter constraint followed by Q, R, S, or T:
;; Offsettable memory reference of type specified by second letter.
+;; B -- Multiple letter constraint followed by Q, R, S, or T:
+;; Memory reference of the type specified by second letter that
+;; does *not* refer to a literal pool entry.
;; U -- Pointer with short displacement.
;; W -- Pointer with long displacement.
;; Y -- Shift count operand.
(define_insn "*cmpdi_cct"
[(set (reg 33)
- (compare (match_operand:DI 0 "nonimmediate_operand" "d,d,d,m,Q")
- (match_operand:DI 1 "general_operand" "d,K,m,d,Q")))]
- "s390_match_ccmode (insn, CCTmode) && TARGET_64BIT
- && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
+ (compare (match_operand:DI 0 "nonimmediate_operand" "%d,d,d,Q")
+ (match_operand:DI 1 "general_operand" "d,K,m,BQ")))]
+ "s390_match_ccmode (insn, CCTmode) && TARGET_64BIT"
"@
cgr\t%0,%1
cghi\t%0,%c1
cg\t%0,%1
- cg\t%1,%0
#"
- [(set_attr "op_type" "RRE,RI,RXY,RXY,SS")])
+ [(set_attr "op_type" "RRE,RI,RXY,SS")])
(define_insn "*cmpsi_cct"
[(set (reg 33)
- (compare (match_operand:SI 0 "nonimmediate_operand" "d,d,d,d,R,T,Q")
- (match_operand:SI 1 "general_operand" "d,K,R,T,d,d,Q")))]
- "s390_match_ccmode (insn, CCTmode)
- && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
+ (compare (match_operand:SI 0 "nonimmediate_operand" "%d,d,d,d,Q")
+ (match_operand:SI 1 "general_operand" "d,K,R,T,BQ")))]
+ "s390_match_ccmode (insn, CCTmode)"
"@
cr\t%0,%1
chi\t%0,%c1
c\t%0,%1
cy\t%0,%1
- c\t%1,%0
- cy\t%1,%0
#"
- [(set_attr "op_type" "RR,RI,RX,RXY,RX,RXY,SS")])
+ [(set_attr "op_type" "RR,RI,RX,RXY,SS")])
; Compare (signed) instructions
(define_insn "*cmpdi_ccu"
[(set (reg 33)
- (compare (match_operand:DI 0 "nonimmediate_operand" "d,d,Q")
- (match_operand:DI 1 "general_operand" "d,m,Q")))]
- "s390_match_ccmode (insn, CCUmode) && TARGET_64BIT
- && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
+ (compare (match_operand:DI 0 "nonimmediate_operand" "d,d,Q,BQ")
+ (match_operand:DI 1 "general_operand" "d,m,BQ,Q")))]
+ "s390_match_ccmode (insn, CCUmode) && TARGET_64BIT"
"@
clgr\t%0,%1
clg\t%0,%1
+ #
#"
- [(set_attr "op_type" "RRE,RXY,SS")])
+ [(set_attr "op_type" "RRE,RXY,SS,SS")])
(define_insn "*cmpsi_ccu"
[(set (reg 33)
- (compare (match_operand:SI 0 "nonimmediate_operand" "d,d,d,Q")
- (match_operand:SI 1 "general_operand" "d,R,T,Q")))]
- "s390_match_ccmode (insn, CCUmode)
- && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))"
+ (compare (match_operand:SI 0 "nonimmediate_operand" "d,d,d,Q,BQ")
+ (match_operand:SI 1 "general_operand" "d,R,T,BQ,Q")))]
+ "s390_match_ccmode (insn, CCUmode)"
"@
clr\t%0,%1
cl\t%0,%1
cly\t%0,%1
+ #
#"
- [(set_attr "op_type" "RR,RX,RXY,SS")])
+ [(set_attr "op_type" "RR,RX,RXY,SS,SS")])
(define_insn "*cmphi_ccu"
[(set (reg 33)
- (compare (match_operand:HI 0 "nonimmediate_operand" "d,d,Q")
- (match_operand:HI 1 "general_operand" "Q,S,Q")))]
+ (compare (match_operand:HI 0 "nonimmediate_operand" "d,d,Q,BQ")
+ (match_operand:HI 1 "general_operand" "Q,S,BQ,Q")))]
"s390_match_ccmode (insn, CCUmode)
- && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))
&& !register_operand (operands[1], HImode)"
"@
clm\t%0,3,%S1
clmy\t%0,3,%S1
+ #
#"
- [(set_attr "op_type" "RS,RSY,SS")])
+ [(set_attr "op_type" "RS,RSY,SS,SS")])
(define_insn "*cmpqi_ccu"
[(set (reg 33)
- (compare (match_operand:QI 0 "nonimmediate_operand" "d,d,Q,S,Q")
- (match_operand:QI 1 "general_operand" "Q,S,n,n,Q")))]
+ (compare (match_operand:QI 0 "nonimmediate_operand" "d,d,Q,S,Q,BQ")
+ (match_operand:QI 1 "general_operand" "Q,S,n,n,BQ,Q")))]
"s390_match_ccmode (insn, CCUmode)
- && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))
&& !register_operand (operands[1], QImode)"
"@
clm\t%0,1,%S1
clmy\t%0,1,%S1
cli\t%S0,%b1
cliy\t%S0,%b1
+ #
#"
- [(set_attr "op_type" "RS,RSY,SI,SIY,SS")])
+ [(set_attr "op_type" "RS,RSY,SI,SIY,SS,SS")])
; Block compare (CLC) instruction patterns.