DONE;
})
-(define_insn "atomic_fetch_<fetchop_name>si_hard"
+(define_insn_and_split "atomic_fetch_<fetchop_name>si_hard"
[(set (match_operand:SI 0 "arith_reg_dest" "=&r")
(mem:SI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:SI (match_dup 1))
" <fetchop_name> %2,r0" "\n"
" movco.l r0,@%1" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name>_fetchsi_hard (gen_reg_rtx (SImode),
+ operands[1], operands[2]));
}
[(set_attr "length" "10")])
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_fetch_notsi_hard"
+(define_insn_and_split "atomic_fetch_notsi_hard"
[(set (match_operand:SI 0 "arith_reg_dest" "=&r")
(mem:SI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:SI (match_dup 1))
" not r0,r0" "\n"
" movco.l r0,@%1" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not_fetchsi_hard (gen_reg_rtx (SImode), operands[1]));
}
[(set_attr "length" "10")])
-(define_insn "atomic_fetch_<fetchop_name><mode>_hard"
+(define_insn_and_split "atomic_fetch_<fetchop_name><mode>_hard"
[(set (match_operand:QIHI 0 "arith_reg_dest" "=&r")
(mem:QIHI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHI (match_dup 1))
" mov.l @r15+,r0" "\n"
" movco.l r0,@%3" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name><mode>_hard (operands[1], operands[2]));
}
[(set_attr "length" "28")])
+(define_insn "atomic_<fetchop_name><mode>_hard"
+ [(set (mem:QIHI (match_operand:SI 0 "arith_reg_operand" "r"))
+ (unspec:QIHI
+ [(FETCHOP:QIHI (mem:QIHI (match_dup 0))
+ (match_operand:QIHI 1 "<fetchop_predicate_1>"
+ "<fetchop_constraint_1_llcs>"))]
+ UNSPEC_ATOMIC))
+ (set (reg:SI T_REG) (const_int 1))
+ (clobber (reg:SI R0_REG))
+ (clobber (match_scratch:SI 2 "=&r"))
+ (clobber (match_scratch:SI 3 "=0"))]
+ "TARGET_ATOMIC_HARD_LLCS"
+{
+ return "\r mov #-4,%2" "\n"
+ " and %0,%2" "\n"
+ " xor %2,%0" "\n"
+ " add r15,%0" "\n"
+ " add #-4,%0" "\n"
+ "0: movli.l @%2,r0" "\n"
+ " mov.l r0,@-r15" "\n"
+ " mov.<bw> @%0,r0" "\n"
+ " <fetchop_name> %1,r0" "\n"
+ " mov.<bw> r0,@%0" "\n"
+ " mov.l @r15+,r0" "\n"
+ " movco.l r0,@%2" "\n"
+ " bf 0b";
+}
+ [(set_attr "length" "26")])
+
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_fetch_not<mode>_hard"
+(define_insn_and_split "atomic_fetch_not<mode>_hard"
[(set (match_operand:QIHI 0 "arith_reg_dest" "=&r")
(mem:QIHI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHI (match_dup 1))
" mov.l @r15+,r0" "\n"
" movco.l r0,@%2" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not<mode>_hard (operands[1]));
+}
+ [(set_attr "length" "26")])
+
+(define_insn "atomic_not<mode>_hard"
+ [(set (mem:QIHI (match_operand:SI 0 "arith_reg_operand" "r"))
+ (unspec:QIHI [(not:QIHI (mem:QIHI (match_dup 0)))] UNSPEC_ATOMIC))
+ (set (reg:SI T_REG) (const_int 1))
+ (clobber (reg:SI R0_REG))
+ (clobber (match_scratch:SI 1 "=&r"))
+ (clobber (match_scratch:SI 2 "=0"))]
+ "TARGET_ATOMIC_HARD_LLCS"
+{
+ return "\r mov #-4,%1" "\n"
+ " and %0,%1" "\n"
+ " xor %1,%0" "\n"
+ " add r15,%0" "\n"
+ " add #-4,%0" "\n"
+ "0: movli.l @%1,r0" "\n"
+ " mov.l r0,@-r15" "\n"
+ " mov.<bw> @%0,r0" "\n"
+ " not r0,r0" "\n"
+ " mov.<bw> r0,@%0" "\n"
+ " mov.l @r15+,r0" "\n"
+ " movco.l r0,@%1" "\n"
+ " bf 0b";
}
[(set_attr "length" "26")])
-(define_insn "atomic_fetch_<fetchop_name><mode>_soft_gusa"
+(define_insn_and_split "atomic_fetch_<fetchop_name><mode>_soft_gusa"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&u")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "u")))
(set (mem:QIHISI (match_dup 1))
" <fetchop_name> %2,%3" "\n"
" mov.<bwl> %3,@%1" "\n"
"1: mov r1,r15";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name>_fetch<mode>_soft_gusa (
+ gen_reg_rtx (<MODE>mode), operands[1], operands[2]));
}
[(set_attr "length" "18")])
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_fetch_not<mode>_soft_gusa"
+(define_insn_and_split "atomic_fetch_not<mode>_soft_gusa"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&u")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "u")))
(set (mem:QIHISI (match_dup 1))
" not %0,%2" "\n"
" mov.<bwl> %2,@%1" "\n"
"1: mov r1,r15";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not_fetch<mode>_soft_gusa (gen_reg_rtx (<MODE>mode),
+ operands[1]));
}
[(set_attr "length" "16")])
-(define_insn "atomic_fetch_<fetchop_name><mode>_soft_tcb"
+(define_insn_and_split "atomic_fetch_<fetchop_name><mode>_soft_tcb"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHISI (match_dup 1))
" mov.<bwl> r0,@%1" "\n"
"1: mov #0,r0" "\n"
" mov.l r0,@(%O3,gbr)";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name><mode>_soft_tcb (
+ operands[1], operands[2], operands[3]));
}
[(set_attr "length" "20")])
+(define_insn "atomic_<fetchop_name><mode>_soft_tcb"
+ [(set (mem:QIHISI (match_operand:SI 0 "arith_reg_operand" "r"))
+ (unspec:QIHISI
+ [(FETCHOP:QIHISI
+ (mem:QIHISI (match_dup 0))
+ (match_operand:QIHISI 1 "<fetchop_predicate_1>"
+ "<fetchop_constraint_1_tcb>"))]
+ UNSPEC_ATOMIC))
+ (use (match_operand:SI 2 "gbr_displacement"))
+ (clobber (reg:SI R0_REG))
+ (clobber (reg:SI R1_REG))]
+ "TARGET_ATOMIC_SOFT_TCB"
+{
+ return "\r mova 1f,r0" "\n"
+ " mov #(0f-1f),r1" "\n"
+ " .align 2" "\n"
+ " mov.l r0,@(%O2,gbr)" "\n"
+ "0: mov.<bwl> @%0,r0" "\n"
+ " <fetchop_name> %1,r0" "\n"
+ " mov.<bwl> r0,@%0" "\n"
+ "1: mov #0,r0" "\n"
+ " mov.l r0,@(%O2,gbr)";
+}
+ [(set_attr "length" "18")])
+
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_fetch_not<mode>_soft_tcb"
+(define_insn_and_split "atomic_fetch_not<mode>_soft_tcb"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHISI (match_dup 1))
" mov.<bwl> r0,@%1" "\n"
"1: mov #0,r0" "\n"
" mov.l r0,@(%O2,gbr)";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not<mode>_soft_tcb (operands[1], operands[2]));
}
[(set_attr "length" "20")])
-(define_insn "atomic_fetch_<fetchop_name><mode>_soft_imask"
+(define_insn "atomic_not<mode>_soft_tcb"
+ [(set (mem:QIHISI (match_operand:SI 0 "arith_reg_operand" "r"))
+ (unspec:QIHISI [(not:QIHISI (mem:QIHISI (match_dup 0)))] UNSPEC_ATOMIC))
+ (use (match_operand:SI 1 "gbr_displacement"))
+ (clobber (reg:SI R0_REG))
+ (clobber (reg:SI R1_REG))]
+ "TARGET_ATOMIC_SOFT_TCB"
+{
+ return "\r mova 1f,r0" "\n"
+ " mov #(0f-1f),r1" "\n"
+ " .align 2" "\n"
+ " mov.l r0,@(%O1,gbr)" "\n"
+ "0: mov.<bwl> @%0,r0" "\n"
+ " not r0,r0" "\n"
+ " mov.<bwl> r0,@%0" "\n"
+ "1: mov #0,r0" "\n"
+ " mov.l r0,@(%O1,gbr)";
+}
+ [(set_attr "length" "18")])
+
+(define_insn_and_split "atomic_fetch_<fetchop_name><mode>_soft_imask"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHISI (match_dup 1))
" <fetchop_name> %2,r0" "\n"
" mov.<bwl> r0,@%1" "\n"
" ldc %3,sr";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name>_fetch<mode>_soft_imask (
+ gen_reg_rtx (<MODE>mode), operands[1], operands[2]));
}
[(set_attr "length" "18")])
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_fetch_not<mode>_soft_imask"
+(define_insn_and_split "atomic_fetch_not<mode>_soft_imask"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHISI (match_dup 1))
" not r0,r0" "\n"
" mov.<bwl> r0,@%1" "\n"
" ldc %2,sr";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not_fetch<mode>_soft_imask (gen_reg_rtx (<MODE>mode),
+ operands[1]));
}
[(set_attr "length" "18")])
DONE;
})
-(define_insn "atomic_fetch_nandsi_hard"
+(define_insn_and_split "atomic_fetch_nandsi_hard"
[(set (match_operand:SI 0 "arith_reg_dest" "=&r")
(mem:SI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:SI (match_dup 1))
" not r0,r0" "\n"
" movco.l r0,@%1" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand_fetchsi_hard (gen_reg_rtx (SImode), operands[1],
+ operands[2]));
}
[(set_attr "length" "12")])
-(define_insn "atomic_fetch_nand<mode>_hard"
+(define_insn_and_split "atomic_fetch_nand<mode>_hard"
[(set (match_operand:QIHI 0 "arith_reg_dest" "=&r")
(mem:QIHI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHI (match_dup 1))
" mov.l @r15+,r0" "\n"
" movco.l r0,@%3" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand<mode>_hard (operands[1], operands[2]));
}
[(set_attr "length" "30")])
-(define_insn "atomic_fetch_nand<mode>_soft_gusa"
+(define_insn "atomic_nand<mode>_hard"
+ [(set (mem:QIHI (match_operand:SI 0 "arith_reg_operand" "r"))
+ (unspec:QIHI
+ [(not:QIHI (and:QIHI (mem:QIHI (match_dup 0))
+ (match_operand:QIHI 1 "logical_operand" "rK08")))]
+ UNSPEC_ATOMIC))
+ (set (reg:SI T_REG) (const_int 1))
+ (clobber (reg:SI R0_REG))
+ (clobber (match_scratch:SI 2 "=&r"))
+ (clobber (match_scratch:SI 3 "=0"))]
+ "TARGET_ATOMIC_HARD_LLCS"
+{
+ return "\r mov #-4,%2" "\n"
+ " and %0,%2" "\n"
+ " xor %2,%0" "\n"
+ " add r15,%0" "\n"
+ " add #-4,%0" "\n"
+ "0: movli.l @%2,r0" "\n"
+ " mov.l r0,@-r15" "\n"
+ " mov.<bw> @%0,r0" "\n"
+ " and %1,r0" "\n"
+ " not r0,r0" "\n"
+ " mov.<bw> r0,@%0" "\n"
+ " mov.l @r15+,r0" "\n"
+ " movco.l r0,@%2" "\n"
+ " bf 0b";
+}
+ [(set_attr "length" "28")])
+
+(define_insn_and_split "atomic_fetch_nand<mode>_soft_gusa"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&u")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "u")))
(set (mem:QIHISI (match_dup 1))
" not %3,%3" "\n"
" mov.<bwl> %3,@%1" "\n"
"1: mov r1,r15";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand_fetch<mode>_soft_gusa (gen_reg_rtx (<MODE>mode),
+ operands[1], operands[2]));
}
[(set_attr "length" "20")])
-(define_insn "atomic_fetch_nand<mode>_soft_tcb"
+(define_insn_and_split "atomic_fetch_nand<mode>_soft_tcb"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHISI (match_dup 1))
" mov.<bwl> r0,@%1" "\n"
"1: mov #0,r0" "\n"
" mov.l r0,@(%O3,gbr)";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand<mode>_soft_tcb (operands[1], operands[2],
+ operands[3]));
}
[(set_attr "length" "22")])
-(define_insn "atomic_fetch_nand<mode>_soft_imask"
+(define_insn "atomic_nand<mode>_soft_tcb"
+ [(set (mem:QIHISI (match_operand:SI 0 "arith_reg_operand" "r"))
+ (unspec:QIHISI
+ [(not:QIHISI
+ (and:QIHISI (mem:QIHISI (match_dup 0))
+ (match_operand:QIHISI 1 "logical_operand" "rK08")))]
+ UNSPEC_ATOMIC))
+ (use (match_operand:SI 2 "gbr_displacement"))
+ (clobber (reg:SI R0_REG))
+ (clobber (reg:SI R1_REG))]
+ "TARGET_ATOMIC_SOFT_TCB"
+{
+ return "\r mova 1f,r0" "\n"
+ " .align 2" "\n"
+ " mov #(0f-1f),r1" "\n"
+ " mov.l r0,@(%O2,gbr)" "\n"
+ "0: mov.<bwl> @%0,r0" "\n"
+ " and %1,r0" "\n"
+ " not r0,r0" "\n"
+ " mov.<bwl> r0,@%0" "\n"
+ "1: mov #0,r0" "\n"
+ " mov.l r0,@(%O2,gbr)";
+}
+ [(set_attr "length" "20")])
+
+(define_insn_and_split "atomic_fetch_nand<mode>_soft_imask"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r")))
(set (mem:QIHISI (match_dup 1))
" not r0,r0" "\n"
" mov.<bwl> r0,@%1" "\n"
" ldc %3,sr";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand_fetch<mode>_soft_imask (gen_reg_rtx (<MODE>mode),
+ operands[1], operands[2]));
}
[(set_attr "length" "20")])
}
[(set_attr "length" "8")])
-(define_insn "atomic_<fetchop_name>_fetch<mode>_hard"
+(define_insn_and_split "atomic_<fetchop_name>_fetch<mode>_hard"
[(set (match_operand:QIHI 0 "arith_reg_dest" "=&r")
(FETCHOP:QIHI
(mem:QIHI (match_operand:SI 1 "arith_reg_operand" "r"))
" mov.l @r15+,r0" "\n"
" movco.l r0,@%3" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name><mode>_hard (operands[1], operands[2]));
}
[(set_attr "length" "28")])
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_not_fetch<mode>_hard"
+(define_insn_and_split "atomic_not_fetch<mode>_hard"
[(set (match_operand:QIHI 0 "arith_reg_dest" "=&r")
(not:QIHI (mem:QIHI (match_operand:SI 1 "arith_reg_operand" "r"))))
(set (mem:QIHI (match_dup 1))
" mov.l @r15+,r0" "\n"
" movco.l r0,@%2" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not<mode>_hard (operands[1]));
}
[(set_attr "length" "28")])
}
[(set_attr "length" "16")])
-(define_insn "atomic_<fetchop_name>_fetch<mode>_soft_tcb"
+(define_insn_and_split "atomic_<fetchop_name>_fetch<mode>_soft_tcb"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(FETCHOP:QIHISI
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r"))
"1: mov r0,%0" "\n"
" mov #0,r0" "\n"
" mov.l r0,@(%O3,gbr)";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_<fetchop_name><mode>_soft_tcb (
+ operands[1], operands[2], operands[3]));
}
[(set_attr "length" "20")])
;; Combine pattern for xor (val, -1) / nand (val, -1).
-(define_insn "atomic_not_fetch<mode>_soft_tcb"
+(define_insn_and_split "atomic_not_fetch<mode>_soft_tcb"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(not:QIHISI (mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r"))))
(set (mem:QIHISI (match_dup 1))
"1: mov r0,%0" "\n"
" mov #0,r0" "\n"
" mov.l r0,@(%O2,gbr)";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_not<mode>_soft_tcb (operands[1], operands[2]));
}
[(set_attr "length" "20")])
}
[(set_attr "length" "10")])
-(define_insn "atomic_nand_fetch<mode>_hard"
+(define_insn_and_split "atomic_nand_fetch<mode>_hard"
[(set (match_operand:QIHI 0 "arith_reg_dest" "=&r")
(not:QIHI
(and:QIHI (mem:QIHI (match_operand:SI 1 "arith_reg_operand" "r"))
" mov.l @r15+,r0" "\n"
" movco.l r0,@%3" "\n"
" bf 0b";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand<mode>_hard (operands[1], operands[2]));
}
[(set_attr "length" "28")])
}
[(set_attr "length" "18")])
-(define_insn "atomic_nand_fetch<mode>_soft_tcb"
+(define_insn_and_split "atomic_nand_fetch<mode>_soft_tcb"
[(set (match_operand:QIHISI 0 "arith_reg_dest" "=&r")
(not:QIHISI (and:QIHISI
(mem:QIHISI (match_operand:SI 1 "arith_reg_operand" "r"))
" mov.<bwl> r0,@%1" "\n"
"1: mov #0,r0" "\n"
" mov.l r0,@(%O3,gbr)";
+}
+ "&& can_create_pseudo_p () && optimize
+ && sh_reg_dead_or_unused_after_insn (insn, REGNO (operands[0]))"
+ [(const_int 0)]
+{
+ emit_insn (gen_atomic_nand<mode>_soft_tcb (operands[1], operands[2],
+ operands[3]));
}
[(set_attr "length" "22")])