summaryrefslogtreecommitdiff
path: root/gcc/config/h8300
diff options
context:
space:
mode:
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-18 22:12:59 +0000
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-18 22:12:59 +0000
commitab5a13fd97582f83cde6a2e17dd5622b8e309a49 (patch)
treed4030985d9c2416412f28e8e10ee1ec46b9f3ab5 /gcc/config/h8300
parenta578a1cc7edb615151a18ca57cac9ca3b787d4b2 (diff)
downloadgcc-ab5a13fd97582f83cde6a2e17dd5622b8e309a49.tar.gz
* config/h8300/h8300-protos.h: Add a prototype for
h8300_expand_branch. * config/h8300/h8300.c (h8300_expand_branch): New. * config/h8300/h8300.md (ble, bleu, bge, bgeu, blt, bltu, bgt, bgtu, beq, bne): Call h8300_expand_branch(). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78052 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/h8300')
-rw-r--r--gcc/config/h8300/h8300-protos.h1
-rw-r--r--gcc/config/h8300/h8300.c14
-rw-r--r--gcc/config/h8300/h8300.md80
3 files changed, 35 insertions, 60 deletions
diff --git a/gcc/config/h8300/h8300-protos.h b/gcc/config/h8300/h8300-protos.h
index 4f03f9815f1..7ad2df861cd 100644
--- a/gcc/config/h8300/h8300-protos.h
+++ b/gcc/config/h8300/h8300-protos.h
@@ -45,6 +45,7 @@ extern const char *output_logical_op (enum machine_mode, rtx *);
extern unsigned int compute_logical_op_length (enum machine_mode,
rtx *);
extern int compute_logical_op_cc (enum machine_mode, rtx *);
+extern void h8300_expand_branch (enum rtx_code, rtx);
extern void expand_a_shift (enum machine_mode, int, rtx[]);
extern int h8300_shift_needs_scratch_p (int, enum machine_mode);
extern int expand_a_rotate (rtx[]);
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index b34ddd32c31..ad509558dba 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -2675,6 +2675,20 @@ compute_logical_op_cc (enum machine_mode mode, rtx *operands)
return cc;
}
+/* Expand a conditional branch. */
+
+void
+h8300_expand_branch (enum rtx_code code, rtx label)
+{
+ rtx tmp;
+
+ tmp = gen_rtx_fmt_ee (code, VOIDmode, cc0_rtx, const0_rtx);
+ tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp,
+ gen_rtx_LABEL_REF (VOIDmode, label),
+ pc_rtx);
+ emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp));
+}
+
/* Shifts.
We devote a fair bit of code to getting efficient shifts since we
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index dd77e3279ec..25462cfc1bd 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -1566,94 +1566,54 @@
;; Conditional jump instructions
(define_expand "ble"
- [(set (pc)
- (if_then_else (le (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (LE, operands[0]); DONE;")
(define_expand "bleu"
- [(set (pc)
- (if_then_else (leu (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (LEU, operands[0]); DONE;")
(define_expand "bge"
- [(set (pc)
- (if_then_else (ge (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (GE, operands[0]); DONE;")
(define_expand "bgeu"
- [(set (pc)
- (if_then_else (geu (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (GEU, operands[0]); DONE;")
(define_expand "blt"
- [(set (pc)
- (if_then_else (lt (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (LT, operands[0]); DONE;")
(define_expand "bltu"
- [(set (pc)
- (if_then_else (ltu (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (LTU, operands[0]); DONE;")
(define_expand "bgt"
- [(set (pc)
- (if_then_else (gt (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (GT, operands[0]); DONE;")
(define_expand "bgtu"
- [(set (pc)
- (if_then_else (gtu (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (GTU, operands[0]); DONE;")
(define_expand "beq"
- [(set (pc)
- (if_then_else (eq (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (EQ, operands[0]); DONE;")
(define_expand "bne"
- [(set (pc)
- (if_then_else (ne (cc0)
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
+ [(match_operand 0 "" "")]
""
- "")
+ "h8300_expand_branch (NE, operands[0]); DONE;")
(define_insn "branch_true"
[(set (pc)