aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gnu.org>1996-10-16 08:17:32 +0000
committerTorbjorn Granlund <tege@gnu.org>1996-10-16 08:17:32 +0000
commit4801403e107d8c28757aa661f4ababc6b2fb7bf7 (patch)
tree6f1bc9dad7ae68ec7f27954e07e205d37ebd7036 /gcc
parent293a36ebf10d89b7bc994e18a4d01b84b6eb91b7 (diff)
downloadgcc-4801403e107d8c28757aa661f4ababc6b2fb7bf7.zip
gcc-4801403e107d8c28757aa661f4ababc6b2fb7bf7.tar.gz
gcc-4801403e107d8c28757aa661f4ababc6b2fb7bf7.tar.bz2
(parallel inc/dec and branch-if-zero/nonzero): 4 new patterns.
From-SVN: r12968
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i386/i386.md68
1 files changed, 68 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 341f100..524877d 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -5725,6 +5725,74 @@
return AS1 (%J0,%l3);
}")
+(define_insn ""
+ [(set (pc)
+ (if_then_else (ne (match_operand:SI 0 "general_operand" "g")
+ (const_int 0))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (const_int -1)))]
+ ""
+ "*
+{
+ operands[2] = const1_rtx;
+ output_asm_insn (AS2 (sub%L0,%2,%0), operands);
+ return \"jnc %l1\";
+}")
+
+(define_insn ""
+ [(set (pc)
+ (if_then_else (eq (match_operand:SI 0 "general_operand" "g")
+ (const_int 0))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (const_int -1)))]
+ ""
+ "*
+{
+ operands[2] = const1_rtx;
+ output_asm_insn (AS2 (sub%L0,%2,%0), operands);
+ return \"jc %l1\";
+}")
+
+(define_insn ""
+ [(set (pc)
+ (if_then_else (ne (match_operand:SI 0 "general_operand" "g")
+ (const_int 0))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (const_int 1)))]
+ ""
+ "*
+{
+ operands[2] = const1_rtx;
+ output_asm_insn (AS2 (add%L0,%2,%0), operands);
+ return \"jnc %l1\";
+}")
+
+(define_insn ""
+ [(set (pc)
+ (if_then_else (eq (match_operand:SI 0 "general_operand" "g")
+ (const_int 0))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (const_int 1)))]
+ ""
+ "*
+{
+ operands[2] = const1_rtx;
+ output_asm_insn (AS2 (add%L0,%2,%0), operands);
+ return \"jc %l1\";
+}")
+
;; Implement switch statements when generating PIC code. Switches are
;; implemented by `tablejump' when not using -fpic.