aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@gcc.gnu.org>1995-12-01 14:32:15 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1995-12-01 14:32:15 +0000
commit8f61c2cc9307e64f343159d3ad84ecdc80b478a0 (patch)
tree2a4aee72ed270b1c06ddf8f89b3720d9bf3fe512
parent24a25d457591216fd2d5f5805f44c51fb62ba603 (diff)
downloadgcc-8f61c2cc9307e64f343159d3ad84ecdc80b478a0.zip
gcc-8f61c2cc9307e64f343159d3ad84ecdc80b478a0.tar.gz
gcc-8f61c2cc9307e64f343159d3ad84ecdc80b478a0.tar.bz2
Split decrement_and_branch_until_zero until define_expand/define_insn
From-SVN: r10660
-rw-r--r--gcc/config/fx80/fx80.md15
-rw-r--r--gcc/config/m68k/m68k.md16
-rw-r--r--gcc/config/m88k/m88k.md18
3 files changed, 46 insertions, 3 deletions
diff --git a/gcc/config/fx80/fx80.md b/gcc/config/fx80/fx80.md
index 641ba9a..d12fb58 100644
--- a/gcc/config/fx80/fx80.md
+++ b/gcc/config/fx80/fx80.md
@@ -2337,7 +2337,20 @@
;; dbra patterns that use REG_NOTES info generated by strength_reduce.
-(define_insn "decrement_and_branch_until_zero"
+(define_expand "decrement_and_branch_until_zero"
+ [(parallel [(set (pc)
+ (if_then_else
+ (ge (match_operand:SI 0 "general_operand" "")
+ (const_int 1))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (const_int -1)))])]
+ ""
+ "")
+
+(define_insn ""
[(set (pc)
(if_then_else
(ge (match_operand:SI 0 "general_operand" "d,m,g")
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 9e2a60a..1f243ac 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -5782,7 +5782,21 @@
#endif /* not MOTOROLA */
}")
-(define_insn "decrement_and_branch_until_zero"
+(define_expand "decrement_and_branch_until_zero"
+ [(parallel [(set (pc)
+ (if_then_else
+ (ge (plus:SI (match_operand:SI 0 "general_operand" "")
+ (const_int -1))
+ (const_int 0))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (const_int -1)))])]
+ ""
+ "")
+
+(define_insn ""
[(set (pc)
(if_then_else
(ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
diff --git a/gcc/config/m88k/m88k.md b/gcc/config/m88k/m88k.md
index 188e6cc..3f6642b 100644
--- a/gcc/config/m88k/m88k.md
+++ b/gcc/config/m88k/m88k.md
@@ -3995,7 +3995,23 @@
;; reloads, hence the `m' constraints. The `!' constraints direct reload
;; to not choose the register alternatives in the event a reload is needed.
-(define_insn "decrement_and_branch_until_zero"
+(define_expand "decrement_and_branch_until_zero"
+ [(parallel [(set (pc)
+ (if_then_else
+ (match_operator 0 "relop_no_unsigned"
+ [(match_operand:SI 1 "register_operand" "")
+ (const_int 0)])
+ (label_ref (match_operand 2 "" ""))
+ (pc)))
+ (set (match_dup 1)
+ (plus:SI (match_dup 1)
+ (match_operand:SI 3 "add_operand" "")))
+ (clobber (match_scratch:SI 4 ""))
+ (clobber (match_scratch:SI 5 "=X,X,&r,&r"))])]
+ ""
+ "")
+
+(define_insn ""
[(set (pc)
(if_then_else
(match_operator 0 "relop_no_unsigned"