diff options
author | Michael Hayes <m.hayes@gcc.gnu.org> | 1999-10-16 00:31:18 +0000 |
---|---|---|
committer | Michael Hayes <m.hayes@gcc.gnu.org> | 1999-10-16 00:31:18 +0000 |
commit | 37641f7dbd9523e44bf2647a45659edc64b8d8b2 (patch) | |
tree | e1b88d44a6fccdd92eb73845827931f3e9041ce1 /gcc | |
parent | 6c7811a860fe1d7f66516f006fc5e88555453576 (diff) | |
download | gcc-37641f7dbd9523e44bf2647a45659edc64b8d8b2.zip gcc-37641f7dbd9523e44bf2647a45659edc64b8d8b2.tar.gz gcc-37641f7dbd9523e44bf2647a45659edc64b8d8b2.tar.bz2 |
Try again!?
From-SVN: r30032
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/c4x/c4x.md | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/gcc/config/c4x/c4x.md b/gcc/config/c4x/c4x.md index 30eb83c..3b40c37 100644 --- a/gcc/config/c4x/c4x.md +++ b/gcc/config/c4x/c4x.md @@ -5040,6 +5040,40 @@ " [(set_attr "type" "db,jmpc,jmpc,jmpc")]) +(define_insn "*db_noclobber" + [(set (pc) + (if_then_else (ne (match_operand:QI 0 "addr_reg_operand" "+a") + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus:QI (match_dup 0) + (const_int -1)))] + "reload_completed && TARGET_DB && TARGET_LOOP_UNSIGNED" + "dbu%#\\t%0,%l1" + [(set_attr "type" "db")]) + +(define_split + [(set (pc) + (if_then_else (ne (match_operand:QI 0 "addr_reg_operand" "") + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus:QI (match_dup 0) + (const_int -1))) + (clobber (reg:CC_NOOV 21))] + "reload_completed && TARGET_DB && TARGET_LOOP_UNSIGNED" + [(parallel [(set (pc) + (if_then_else (ne (match_dup 0) + (const_int 0)) + (label_ref (match_dup 1)) + (pc))) + (set (match_dup 0) + (plus:QI (match_dup 0) + (const_int -1)))])] + "") + ; This insn is used for some loop tests, typically loops reversed when ; strength reduction is used. It is actually created when the instruction @@ -5076,6 +5110,45 @@ " [(set_attr "type" "db,jmpc,jmpc,jmpc")]) +(define_insn "*decrement_and_branch_until_zero_noclobber" + [(set (pc) + (if_then_else (ge (plus:QI (match_operand:QI 0 "addr_reg_operand" "+a") + (const_int -1)) + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus:QI (match_dup 0) + (const_int -1)))] + "reload_completed && (TARGET_DB && (find_reg_note (insn, REG_NONNEG, 0) + || TARGET_LOOP_UNSIGNED))" + "dbu%#\\t%0,%l1" + [(set_attr "type" "db")]) + +(define_split + [(set (pc) + (if_then_else (ge (plus:QI (match_operand:QI 0 "addr_reg_operand" "") + (const_int -1)) + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus:QI (match_dup 0) + (const_int -1))) + (clobber (reg:CC_NOOV 21))] + "reload_completed && (TARGET_DB && (find_reg_note (insn, REG_NONNEG, 0) + || TARGET_LOOP_UNSIGNED))" + [(parallel [(set (pc) + (if_then_else (ge (plus:QI (match_dup 0) + (const_int -1)) + (const_int 0)) + (label_ref (match_dup 1)) + (pc))) + (set (match_dup 0) + (plus:QI (match_dup 0) + (const_int -1)))])] + "") + ; ; MISC INSTRUCTIONS ; |