})
;; SH2A instructions for bitwise operations.
+;; FIXME: Convert multiple instruction insns to insn_and_split.
+;; FIXME: Use iterators to fold at least and,xor,or insn variations.
;; Clear a bit in a memory location.
(define_insn "bclr_m2a"
(not:QI (ashift:QI (const_int 1)
(match_operand:QI 1 "const_int_operand" "K03,K03")))
(match_dup 0)))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bclr.b %1,%0
bclr.b %1,@(0,%t0)"
(ashift:QI (const_int 1)
(match_operand:QI 1 "const_int_operand" "K03,K03"))
(match_dup 0)))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bset.b %1,%0
bset.b %1,@(0,%t0)"
(ior:QI
(ashift:QI (const_int 1) (match_dup 1))
(match_dup 0))))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bst.b %1,%0
bst.b %1,@(0,%t0)"
(match_operand:QI 0 "bitwise_memory_operand" "Sbw,Sbv")
(const_int 1)
(match_operand 1 "const_int_operand" "K03,K03")))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bld.b %1,%0
bld.b %1,@(0,%t0)"
(match_operand:QI 0 "bitwise_memory_operand" "Sbw,m")
(const_int 1)
(match_operand 1 "const_int_operand" "K03,K03")))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bld.b %1,%0
bld.b %1,@(0,%t0)"
(zero_extract:SI (match_operand:SI 0 "arith_reg_operand" "r")
(const_int 1)
(match_operand 1 "const_int_operand" "K03")))]
- "TARGET_SH2A"
+ "TARGET_SH2A && satisfies_constraint_K03 (operands[1])"
"bld %1,%0")
(define_insn "*bld_regqi"
(zero_extract:SI (match_operand:QI 0 "arith_reg_operand" "r")
(const_int 1)
(match_operand 1 "const_int_operand" "K03")))]
- "TARGET_SH2A"
+ "TARGET_SH2A && satisfies_constraint_K03 (operands[1])"
"bld %1,%0")
;; Take logical and of a specified bit of memory with the T bit and
(match_operand:QI 0 "bitwise_memory_operand" "Sbw,m")
(const_int 1)
(match_operand 1 "const_int_operand" "K03,K03"))))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
band.b %1,%0
band.b %1,@(0,%t0)"
(const_int 1)
(match_operand 2 "const_int_operand" "K03,K03"))
(match_operand:SI 3 "register_operand" "r,r")))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[2])"
{
static const char* alt[] =
{
(match_operand:QI 0 "bitwise_memory_operand" "Sbw,m")
(const_int 1)
(match_operand 1 "const_int_operand" "K03,K03"))))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bor.b %1,%0
bor.b %1,@(0,%t0)"
(const_int 1)
(match_operand 2 "const_int_operand" "K03,K03"))
(match_operand:SI 3 "register_operand" "=r,r")))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[2])"
{
static const char* alt[] =
{
(match_operand:QI 0 "bitwise_memory_operand" "Sbw,m")
(const_int 1)
(match_operand 1 "const_int_operand" "K03,K03"))))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[1])"
"@
bxor.b %1,%0
bxor.b %1,@(0,%t0)"
(const_int 1)
(match_operand 2 "const_int_operand" "K03,K03"))
(match_operand:SI 3 "register_operand" "=r,r")))]
- "TARGET_SH2A && TARGET_BITOPS"
+ "TARGET_SH2A && TARGET_BITOPS && satisfies_constraint_K03 (operands[2])"
{
static const char* alt[] =
{