i386.md (addsi3_cc): Add "binary_operator_ok" to the condition.

* i386.md (addsi3_cc): Add "binary_operator_ok" to the condition.
	(addsi3_carry): Likewise.
	(sbbsi3_cc): Add "binary_operator_ok" to the condition.
	(sbbsi3_carry): Likewise.
	(mulsi3): Rewrite to expander, ensure that only one operand is memory.
	(mulhi3): Likewise.
	(test?i_1): Ensure that only one operand is memory.
	(conditional move patterns): likewise.
	(shift and rotate patterns): Rewrite to expander, add
	"binary_operator_ok" to the condition.

From-SVN: r30747
This commit is contained in:
Jan Hubicka 1999-12-02 00:48:05 +01:00 committed by Jan Hubicka
parent 7c6b971dcc
commit d525dfdf29
2 changed files with 214 additions and 62 deletions

View File

@ -1,5 +1,16 @@
Fri Nov 26 10:59:12 CET 1999 Jan Hubicka <hubicka@freesoft.cz>
* i386.md (addsi3_cc): Add "binary_operator_ok" to the condition.
(addsi3_carry): Likewise.
(sbbsi3_cc): Add "binary_operator_ok" to the condition.
(sbbsi3_carry): Likewise.
(mulsi3): Rewrite to expander, ensure that only one operand is memory.
(mulhi3): Likewise.
(test?i_1): Ensure that only one operand is memory.
(conditional move patterns): likewise.
(shift and rotate patterns): Rewrite to expander, add
"binary_operator_ok" to the condition.
* i386.md (QImode patterns): Remove '*' before the 'r' constraints.
* i386.h (procesor_costs): Add movzbl_load field.
(HARD_REGNO_MODE_OK): Accept QImode on non PARTIAL_REGISTER_STALL in

View File

@ -3012,7 +3012,7 @@
(match_operand:SI 2 "general_operand" "ri,rm")))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r")
(plus:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (PLUS, SImode, operands)"
"add{l}\\t{%2, %0|%0, %2}"
[(set_attr "type" "alu")])
@ -3022,7 +3022,7 @@
(plus:SI (match_operand:SI 2 "general_operand" "ri,rm")
(ltu:SI (reg:CC 17) (const_int 0)))))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (PLUS, SImode, operands)"
"adc{l}\\t{%2, %0|%0, %2}"
[(set_attr "type" "alu")
(set_attr "pent_pair" "pu")
@ -3526,7 +3526,7 @@
(match_operand:SI 2 "general_operand" "ri,rm")))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r")
(minus:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (MINUS, SImode, operands)"
"sub{l}\\t{%2, %0|%0, %2}"
[(set_attr "type" "alu")])
@ -3536,7 +3536,7 @@
(plus:SI (match_operand:SI 2 "general_operand" "ri,rm")
(ltu:SI (reg:CC 17) (const_int 0)))))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (MINUS, SImode, operands)"
"sbb{l}\\t{%2, %0|%0, %2}"
[(set_attr "type" "alu")
(set_attr "pent_pair" "pu")
@ -3690,12 +3690,20 @@
;; Multiply instructions
(define_insn "mulsi3"
(define_expand "mulsi3"
[(parallel [(set (match_operand:SI 0 "register_operand" "")
(mult:SI (match_operand:SI 1 "register_operand" "")
(match_operand:SI 2 "general_operand" "")))
(clobber (reg:CC 17))])]
""
"")
(define_insn "*mulsi3_1"
[(set (match_operand:SI 0 "register_operand" "=r,r,r")
(mult:SI (match_operand:SI 1 "nonimmediate_operand" "%rm,0,0")
(match_operand:SI 2 "general_operand" "K,i,mr")))
(clobber (reg:CC 17))]
""
"GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM"
; For the {r,0,i} alternative (i.e., register <- register * immediate),
; there are two ways of writing the exact same machine instruction
; in assembly language. One, for example, is:
@ -3715,12 +3723,20 @@
[(set_attr "type" "imul")
(set_attr "length" "2,3,2")])
(define_insn "mulhi3"
(define_expand "mulhi3"
[(parallel [(set (match_operand:HI 0 "register_operand" "")
(mult:HI (match_operand:HI 1 "register_operand" "")
(match_operand:HI 2 "general_operand" "")))
(clobber (reg:CC 17))])]
""
"")
(define_insn "*mulhi3_1"
[(set (match_operand:HI 0 "register_operand" "=r,r")
(mult:HI (match_operand:HI 1 "nonimmediate_operand" "%rm,0")
(match_operand:HI 2 "general_operand" "K,g")))
(clobber (reg:CC 17))]
""
"GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM"
; %%% There was a note about "Assembler has weird restrictions",
; concerning alternative 1 when op1 == op0. True?
"@
@ -4057,7 +4073,7 @@
(compare:CCNO (and:SI (match_operand:SI 0 "nonimmediate_operand" "%*a,r,rm")
(match_operand:SI 1 "general_operand" "in,in,rin"))
(const_int 0)))]
""
"GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
"test{l}\\t{%1, %0|%0, %1}"
[(set_attr "type" "icmp")
(set_attr "pent_pair" "uv,np,uv")])
@ -4067,7 +4083,7 @@
(compare:CCNO (and:HI (match_operand:HI 0 "nonimmediate_operand" "%*a,r,rm")
(match_operand:HI 1 "general_operand" "n,n,rn"))
(const_int 0)))]
""
"GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
"test{w}\\t{%1, %0|%0, %1}"
[(set_attr "type" "icmp")
(set_attr "pent_pair" "uv,np,uv")])
@ -4077,7 +4093,7 @@
(compare:CCNO (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm")
(match_operand:QI 1 "general_operand" "n,n,qn"))
(const_int 0)))]
""
"GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
"test{b}\\t{%1, %0|%0, %1}"
[(set_attr "type" "icmp")
(set_attr "pent_pair" "uv,np,uv")])
@ -5471,12 +5487,20 @@
DONE;
}")
(define_insn "ashlsi3"
(define_expand "ashlsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ASHIFT, SImode, operands); DONE;")
(define_insn "*ashlsi3_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r")
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0,r")
(match_operand:QI 2 "nonmemory_operand" "cI,M")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ASHIFT, SImode, operands)"
"*
{
switch (get_attr_type (insn))
@ -5535,7 +5559,7 @@
(const_int 0)))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(ashift:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ASHIFT, SImode, operands)"
"*
{
switch (get_attr_type (insn))
@ -5561,12 +5585,20 @@
]
(const_string "ishift")))])
(define_insn "ashlhi3"
(define_expand "ashlhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
(ashift:HI (match_operand:HI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ASHIFT, HImode, operands); DONE;")
(define_insn "*ashlhi3_1"
[(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ashift:HI (match_operand:HI 1 "nonimmediate_operand" "0")
(match_operand:QI 2 "nonmemory_operand" "cI")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ASHIFT, HImode, operands)"
"*
{
switch (get_attr_type (insn))
@ -5611,7 +5643,7 @@
(const_int 0)))
(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ashift:HI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ASHIFT, HImode, operands)"
"*
{
switch (get_attr_type (insn))
@ -5637,13 +5669,21 @@
]
(const_string "ishift")))])
(define_expand "ashlqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ASHIFT, QImode, operands); DONE;")
;; %%% Potential partial reg stall on alternative 2. What to do?
(define_insn "ashlqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "=qm,*r")
(define_insn "*ashlqi3_1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=qm,r")
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "cI,cI")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ASHIFT, QImode, operands)"
"*
{
switch (get_attr_type (insn))
@ -5690,7 +5730,7 @@
(const_int 0)))
(set (match_operand:QI 0 "nonimmediate_operand" "=qm")
(ashift:QI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ASHIFT, QImode, operands)"
"*
{
switch (get_attr_type (insn))
@ -5821,19 +5861,28 @@
(ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "*a,0")
(match_operand:SI 2 "const_int_operand" "i,i")))
(clobber (reg:CC 17))]
"INTVAL (operands[2]) == 31 && (TARGET_USE_CLTD || optimize_size)"
"INTVAL (operands[2]) == 31 && (TARGET_USE_CLTD || optimize_size)
&& ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
"@
{cltd|cdq}
sar{l}\\t{%2, %0|%0, %2}"
[(set_attr "type" "imovx,ishift")
(set_attr "length" "1,*")])
(define_insn "ashrsi3"
(define_expand "ashrsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ASHIFTRT, SImode, operands); DONE;")
(define_insn "*ashrsi3_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
"@
sar{l}\\t{%2, %0|%0, %2}
sar{l}\\t{%b2, %0|%0, %b2}"
@ -5847,18 +5896,26 @@
(const_int 0)))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(ashiftrt:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ASHIFTRT, SImode, operands)"
"@
sar{l}\\t{%2, %0|%0, %2}
sar{l}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "ashrhi3"
(define_expand "ashrhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ASHIFTRT, HImode, operands); DONE;")
(define_insn "*ashrhi3_1"
[(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(ashiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
"@
sar{w}\\t{%2, %0|%0, %2}
sar{w}\\t{%b2, %0|%0, %b2}"
@ -5872,18 +5929,26 @@
(const_int 0)))
(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(ashiftrt:HI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ASHIFTRT, HImode, operands)"
"@
sar{w}\\t{%2, %0|%0, %2}
sar{w}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "ashrqi3"
(define_expand "ashrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ASHIFTRT, QImode, operands); DONE;")
(define_insn "*ashrqi3_1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=qm,qm")
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
"@
sar{b}\\t{%2, %0|%0, %2}
sar{b}\\t{%b2, %0|%0, %b2}"
@ -5897,7 +5962,7 @@
(const_int 0)))
(set (match_operand:QI 0 "nonimmediate_operand" "=rm,rm")
(ashiftrt:QI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ASHIFTRT, QImode, operands)"
"@
sar{b}\\t{%2, %0|%0, %2}
sar{b}\\t{%b2, %0|%0, %b2}"
@ -5960,12 +6025,20 @@
[(const_int 0)]
"ix86_split_lshrdi (operands, NULL_RTX); DONE;")
(define_insn "lshrsi3"
(define_expand "lshrsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (LSHIFTRT, SImode, operands); DONE;")
(define_insn "*lshrsi3_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"@
shr{l}\\t{%2, %0|%0, %2}
shr{l}\\t{%b2, %0|%0, %b2}"
@ -5979,18 +6052,26 @@
(const_int 0)))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(lshiftrt:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"@
shr{l}\\t{%2, %0|%0, %2}
shr{l}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "lshrhi3"
(define_expand "lshrhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (LSHIFTRT, HImode, operands); DONE;")
(define_insn "*lshrhi3_1"
[(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(lshiftrt:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"@
shr{w}\\t{%2, %0|%0, %2}
shr{w}\\t{%b2, %0|%0, %b2}"
@ -6004,18 +6085,26 @@
(const_int 0)))
(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(lshiftrt:HI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (LSHIFTRT, HImode, operands)"
"@
shr{w}\\t{%2, %0|%0, %2}
shr{w}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "lshrqi3"
(define_expand "lshrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (LSHIFTRT, QImode, operands); DONE;")
(define_insn "*lshrqi3_1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=qm,qm")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
"@
shr{b}\\t{%2, %0|%0, %2}
shr{b}\\t{%b2, %0|%0, %b2}"
@ -6029,7 +6118,7 @@
(const_int 0)))
(set (match_operand:QI 0 "nonimmediate_operand" "=rm,rm")
(lshiftrt:QI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (LSHIFTRT, QImode, operands)"
"@
shr{b}\\t{%2, %0|%0, %2}
shr{b}\\t{%b2, %0|%0, %b2}"
@ -6037,12 +6126,20 @@
;; Rotate instructions
(define_insn "rotlsi3"
(define_expand "rotlsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
(rotate:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ROTATE, SImode, operands); DONE;")
(define_insn "*rotlsi3_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(rotate:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ROTATE, SImode, operands)"
"@
rol{l}\\t{%2, %0|%0, %2}
rol{l}\\t{%b2, %0|%0, %b2}"
@ -6056,18 +6153,26 @@
(const_int 0)))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(rotate:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ROTATE, SImode, operands)"
"@
rol{l}\\t{%2, %0|%0, %2}
rol{l}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "rotlhi3"
(define_expand "rotlhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
(rotate:HI (match_operand:HI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ROTATE, HImode, operands); DONE;")
(define_insn "*rotlhi3_1"
[(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(rotate:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ROTATE, HImode, operands)"
"@
rol{w}\\t{%2, %0|%0, %2}
rol{w}\\t{%b2, %0|%0, %b2}"
@ -6081,18 +6186,26 @@
(const_int 0)))
(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(rotate:HI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ROTATE, HImode, operands)"
"@
rol{w}\\t{%2, %0|%0, %2}
rol{w}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "rotlqi3"
(define_expand "rotlqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(rotate:QI (match_operand:QI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ROTATE, QImode, operands); DONE;")
(define_insn "*rotlqi3_1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=qm,qm")
(rotate:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ROTATE, QImode, operands)"
"@
rol{b}\\t{%2, %0|%0, %2}
rol{b}\\t{%b2, %0|%0, %b2}"
@ -6106,18 +6219,26 @@
(const_int 0)))
(set (match_operand:QI 0 "nonimmediate_operand" "=rm,rm")
(rotate:QI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ROTATE, QImode, operands)"
"@
rol{b}\\t{%2, %0|%0, %2}
rol{b}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "rotrsi3"
(define_expand "rotrsi3"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
(rotatert:SI (match_operand:SI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ROTATERT, SImode, operands); DONE;")
(define_insn "*rotrsi3_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(rotatert:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ROTATERT, SImode, operands)"
"@
ror{l}\\t{%2, %0|%0, %2}
ror{l}\\t{%b2, %0|%0, %b2}"
@ -6131,18 +6252,26 @@
(const_int 0)))
(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(rotatert:SI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ROTATERT, SImode, operands)"
"@
ror{l}\\t{%2, %0|%0, %2}
ror{l}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "rotrhi3"
(define_expand "rotrhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "")
(rotatert:HI (match_operand:HI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ROTATERT, HImode, operands); DONE;")
(define_insn "*rotrhi3"
[(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(rotatert:HI (match_operand:HI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ROTATERT, HImode, operands)"
"@
ror{w}\\t{%2, %0|%0, %2}
ror{w}\\t{%b2, %0|%0, %b2}"
@ -6156,18 +6285,26 @@
(const_int 0)))
(set (match_operand:HI 0 "nonimmediate_operand" "=rm,rm")
(rotatert:HI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ROTATERT, HImode, operands)"
"@
ror{w}\\t{%2, %0|%0, %2}
ror{w}\\t{%b2, %0|%0, %b2}"
[(set_attr "type" "ishift")])
(define_insn "rotrqi3"
(define_expand "rotrqi3"
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(rotatert:QI (match_operand:QI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "nonmemory_operand" "")))
(clobber (reg:CC 17))]
""
"ix86_expand_binary_operator (ROTATERT, QImode, operands); DONE;")
(define_insn "*rotrqi3_1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=qm,qm")
(rotatert:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")
(match_operand:QI 2 "nonmemory_operand" "I,c")))
(clobber (reg:CC 17))]
""
"ix86_binary_operator_ok (ROTATERT, QImode, operands)"
"@
ror{b}\\t{%2, %0|%0, %2}
ror{b}\\t{%b2, %0|%0, %b2}"
@ -6181,7 +6318,7 @@
(const_int 0)))
(set (match_operand:QI 0 "nonimmediate_operand" "=rm,rm")
(rotatert:QI (match_dup 1) (match_dup 2)))]
""
"ix86_binary_operator_ok (ROTATERT, QImode, operands)"
"@
ror{b}\\t{%2, %0|%0, %2}
ror{b}\\t{%b2, %0|%0, %b2}"
@ -7964,7 +8101,8 @@
[(reg 17) (const_int 0)])
(match_operand:SI 2 "nonimmediate_operand" "rm,0")
(match_operand:SI 3 "nonimmediate_operand" "0,rm")))]
"TARGET_CMOVE"
"TARGET_CMOVE
&& (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)"
"@
cmov%C1\\t{%2, %0|%0, %2}
cmov%c1\\t{%3, %0|%0, %3}"
@ -7976,7 +8114,8 @@
[(reg:CC 17) (const_int 0)])
(match_operand:SI 2 "nonimmediate_operand" "rm,0")
(match_operand:SI 3 "nonimmediate_operand" "0,rm")))]
"TARGET_CMOVE"
"TARGET_CMOVE
&& (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)"
"@
cmov%C1\\t{%2, %0|%0, %2}
cmov%c1\\t{%3, %0|%0, %3}"
@ -7996,7 +8135,8 @@
[(reg 17) (const_int 0)])
(match_operand:HI 2 "nonimmediate_operand" "rm,0")
(match_operand:HI 3 "nonimmediate_operand" "0,rm")))]
"TARGET_CMOVE"
"TARGET_CMOVE
&& (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)"
"@
cmov%C1\\t{%2, %0|%0, %2}
cmov%c1\\t{%3, %0|%0, %3}"
@ -8008,7 +8148,8 @@
[(reg:CC 17) (const_int 0)])
(match_operand:HI 2 "nonimmediate_operand" "rm,0")
(match_operand:HI 3 "nonimmediate_operand" "0,rm")))]
"TARGET_CMOVE"
"TARGET_CMOVE
&& (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)"
"@
cmov%C1\\t{%2, %0|%0, %2}
cmov%c1\\t{%3, %0|%0, %3}"