]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
h8300-protos.h: Add a prototype for h8300_expand_branch.
authorKazu Hirata <kazu@cs.umass.edu>
Wed, 18 Feb 2004 22:12:59 +0000 (22:12 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Wed, 18 Feb 2004 22:12:59 +0000 (22:12 +0000)
* 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().

From-SVN: r78052

gcc/ChangeLog
gcc/config/h8300/h8300-protos.h
gcc/config/h8300/h8300.c
gcc/config/h8300/h8300.md

index e0af65acbbd72bd6f66daf3cfe4919c417156d0e..8face630335fdd39bc7210ddb9cdd40d930f9594 100644 (file)
@@ -1,3 +1,11 @@
+2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * 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().
+
 2004-02-18  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/h8300/h8300-protos.h: Add prototypes for
index 4f03f9815f1c944cfd8edefd3a58991621a70add..7ad2df861cdc8d1c9c0b9147c5d1ba367906840f 100644 (file)
@@ -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[]);
index b34ddd32c31a2c30bbef17f38bddf4e3e4fa4c49..ad509558dbaa25bc41c56c8984b134c2d68fdb0e 100644 (file)
@@ -2675,6 +2675,20 @@ compute_logical_op_cc (enum machine_mode mode, rtx *operands)
   return cc;
 }
 \f
+/* 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));
+}
+\f
 /* Shifts.
 
    We devote a fair bit of code to getting efficient shifts since we
index dd77e3279ecd17c2521975d7ecdf8cf7d870dddc..25462cfc1bd512027c3869027c3db4a37ab70474 100644 (file)
 ;; 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)