s390.md: ("COMPARE"): New mode macro.
authorAdrian Straetling <straetling@de.ibm.com>
Mon, 9 May 2005 17:11:23 +0000 (17:11 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Mon, 9 May 2005 17:11:23 +0000 (17:11 +0000)
2005-05-09  Adrian Straetling  <straetling@de.ibm.com>

* config/s390/s390.md: ("COMPARE"): New mode macro.
("beq", "bne", "bgt", "bgtu", "blt", "bltu", "bge", "bgeu",
"ble", "bleu", "bunordered", "bordered", "buneq", "bunlt",
"bungt", "bunle", "bunge", "bltgt"): Merge.

From-SVN: r99452

gcc/ChangeLog
gcc/config/s390/s390.md

index abc2104..00a9f52 100644 (file)
@@ -1,5 +1,12 @@
 2005-05-09  Adrian Straetling  <straetling@de.ibm.com>
 
+       * config/s390/s390.md: ("COMPARE"): New mode macro.
+       ("beq", "bne", "bgt", "bgtu", "blt", "bltu", "bge", "bgeu",
+       "ble", "bleu", "bunordered", "bordered", "buneq", "bunlt",
+       "bungt", "bunle", "bunge", "bltgt"): Merge.
+
+2005-05-09  Adrian Straetling  <straetling@de.ibm.com>
+
        * config/s390/s390.md: ("INT"): New mode macro.
        ("one_cmpldi2", "one_cmplsi2", "one_cmplhi2", "one_cmplqi2"):
        Merge.
index 5a258e4..f502990 100644 (file)
 ;; same template.
 (define_mode_macro INT [(DI "TARGET_64BIT") SI HI QI])
 
+;; This macro allows to unify all 'bCOND' expander patterns.
+(define_code_macro COMPARE [eq ne gt gtu lt ltu ge geu le leu unordered 
+                           ordered uneq unlt ungt unle unge ltgt])
+
 
 ;; ICM mask required to load MODE value into the highest subreg
 ;; of a SImode register.
 ;; Branch instruction patterns.
 ;;
 
-(define_expand "beq"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (EQ, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bne"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (NE, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bgt"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (GT, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bgtu"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (GTU, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "blt"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (LT, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bltu"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (LTU, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bge"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (GE, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bgeu"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (GEU, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "ble"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (LE, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bleu"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (LEU, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bunordered"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (UNORDERED, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bordered"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (ORDERED, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "buneq"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (UNEQ, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bunlt"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (UNLT, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bungt"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (UNGT, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bunle"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (UNLE, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bunge"
-  [(match_operand 0 "" "")]
-  ""
-  "s390_emit_jump (operands[0],
-    s390_emit_compare (UNGE, s390_compare_op0, s390_compare_op1)); DONE;")
-
-(define_expand "bltgt"
-  [(match_operand 0 "" "")]
+(define_expand "b<code>"
+  [(set (pc)
+        (if_then_else (COMPARE (match_operand 0 "" "")
+                               (const_int 0))
+                      (match_dup 0)
+                      (pc)))]
   ""
   "s390_emit_jump (operands[0],
-    s390_emit_compare (LTGT, s390_compare_op0, s390_compare_op1)); DONE;")
+    s390_emit_compare (<CODE>, s390_compare_op0, s390_compare_op1)); DONE;")
 
 
 ;;