""
"neg %0,%1\;and %0,%0,%1\;cntlz %0,%0\;sfi %0,%0,32")
-;; There is no need for (set (condition) (compare (ffs) 0)) because that
-;; can be simplified to an ordinary comparison. A parallel set and compare
-;; might be used, so include it.
-
-(define_insn ""
- [(set (match_operand:CC 2 "cc_reg_operand" "=x")
- (compare:CC (ffs:SI (match_operand:SI 1 "register_operand" "r"))
- (const_int 0)))
- (set (match_operand:SI 0 "register_operand" "=&r")
- (ffs:SI (match_dup 1)))]
- ""
- "neg %0,%1\;and %0,%0,%1\;cntlz %0,%0\;sfi. %0,%0,32"
- [(set_attr "type" "compare")])
-
(define_insn "mulsi3"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
""
"cror 0,0,0")
\f
-;; Define the subtract-one-and-jump insns.
+;; Define the subtract-one-and-jump insns, starting with the template
+;; so loop.c knows what to generate.
+
+(define_expand "decrement_and_branchsi"
+ [(parallel [(set (pc) (if_then_else (ne (match_operand:SI 0 "register_operand" "c")
+ (const_int 1))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0) (plus:SI (match_dup 0) (const_int -1)))])]
+ ""
+ "")
+
;; We need to be able to do this for any operand, including MEM, or we
;; will cause reload to blow up since we don't allow output reloads on
;; JUMP_INSNs.
#
#")
-;; Similar, but we can use GE since we have a REG_NOTES.
+;; Similar, but we can use GE since we have a REG_NONNEG.
(define_insn ""
[(set (pc)
(if_then_else (ge (match_operand:SI 1 "register_operand" "0,*r,*r")