]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
h8300-protos.h: Add a prototype for h8300_regs_ok_for_stm.
authorKazu Hirata <kazu@cs.umass.edu>
Tue, 10 Feb 2004 23:58:59 +0000 (23:58 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Tue, 10 Feb 2004 23:58:59 +0000 (23:58 +0000)
* config/h8300/h8300-protos.h: Add a prototype for
h8300_regs_ok_for_stm.
* config/h8300/h8300.c (h8300_regs_ok_for_stm): New.
* config/h8300/h8300.md (stm_h8300s_2_advanced,
stm_h8300s_2_normal, stm_h8300s_2, stm_h8300s_3_advanced,
stm_h8300s_3_normal, stm_h8300s_3, stm_h8300s_4_advanced,
stm_h8300s_4_normal, stm_h8300s_4, ldm_h8300s_2_advanced,
ldm_h8300s_2_normal, ldm_h8300s_2, ldm_h8300s_3_advanced,
ldm_h8300s_3_normal, ldm_h8300s_3, ldm_h8300s_4_advanced,
ldm_h8300s_4_normal, ldm_h8300s_4): Use
h8300_regs_ok_for_stm().

From-SVN: r77624

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

index 1311c647c6682565d3504b8c60f3ea471e62055d..bafbbb63a806e4f816f3cd35887e878cd1cfcd5d 100644 (file)
@@ -1,3 +1,17 @@
+2004-02-10  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * config/h8300/h8300-protos.h: Add a prototype for
+       h8300_regs_ok_for_stm.
+       * config/h8300/h8300.c (h8300_regs_ok_for_stm): New.
+       * config/h8300/h8300.md (stm_h8300s_2_advanced,
+       stm_h8300s_2_normal, stm_h8300s_2, stm_h8300s_3_advanced,
+       stm_h8300s_3_normal, stm_h8300s_3, stm_h8300s_4_advanced,
+       stm_h8300s_4_normal, stm_h8300s_4, ldm_h8300s_2_advanced,
+       ldm_h8300s_2_normal, ldm_h8300s_2, ldm_h8300s_3_advanced,
+       ldm_h8300s_3_normal, ldm_h8300s_3, ldm_h8300s_4_advanced,
+       ldm_h8300s_4_normal, ldm_h8300s_4): Use
+       h8300_regs_ok_for_stm().
+
 2004-02-10  Danny Smith  <dannysmith@users.sourceforge.net>
 
        PR c/14088
index df78dacb0491b8e3bf64c479e95ee3717bded797..2595a3c162cf4523bfe78538d7b3dc6803339343 100644 (file)
@@ -102,6 +102,7 @@ extern void h8300_expand_prologue (void);
 extern void h8300_expand_epilogue (void);
 extern int h8300_current_function_interrupt_function_p (void);
 extern int h8300_initial_elimination_offset (int, int);
+extern int h8300_regs_ok_for_stm (int, rtx[]);
 extern int h8300_hard_regno_rename_ok (unsigned int, unsigned int);
 
 struct cpp_reader;
index 546a346d36360f81ff87f1b146f1a88a79d96ed0..ee735bed80950e20f6c8e00633585adfead58c94 100644 (file)
@@ -4576,6 +4576,37 @@ same_cmp_following_p (rtx i1)
          && any_condjump_p (i2) && onlyjump_p (i2));
 }
 
+/* Return nonzero if OPERANDS are valid for stm (or ldm) that pushes
+   (or pops) N registers.  OPERANDS are asssumed to be an array of
+   registers.  */
+
+int
+h8300_regs_ok_for_stm (int n, rtx operands[])
+{
+  switch (n)
+    {
+    case 2:
+      return ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
+             || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
+             || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5));
+    case 3:
+      return ((REGNO (operands[0]) == 0
+              && REGNO (operands[1]) == 1
+              && REGNO (operands[2]) == 2)
+             || (REGNO (operands[0]) == 4
+                 && REGNO (operands[1]) == 5
+                 && REGNO (operands[2]) == 6));
+
+    case 4:
+      return (REGNO (operands[0]) == 0
+             && REGNO (operands[1]) == 1
+             && REGNO (operands[2]) == 2
+             && REGNO (operands[3]) == 3);
+    }
+
+  abort ();
+}
+
 /* Return nonzero if register OLD_REG can be renamed to register NEW_REG.  */
 
 int
index 99a72a35633f3dc288569a4188ba6d86893f5444..b4c89f77518b704e61bc4b06ccbad8aaa2b2bb2e 100644 (file)
       (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int -8)))
           (match_operand:SI 1 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
-       || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
-       || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))"
+   && h8300_regs_ok_for_stm (2, operands)"
   "stm.l\\t%S0-%S1,@-er7"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
       (set (mem:SI (plus:HI (reg:HI SP_REG) (const_int -8)))
           (match_operand:SI 1 "register_operand" ""))])]
   "TARGET_H8300S && TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
-       || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
-       || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))"
+   && h8300_regs_ok_for_stm (2, operands)"
   "stm.l\\t%S0-%S1,@-er7"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
   [(match_operand:SI 0 "register_operand" "")
    (match_operand:SI 1 "register_operand" "")]
   "TARGET_H8300S
-   && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
-       || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
-       || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))"
+   && h8300_regs_ok_for_stm (2, operands)"
   "
 {
   if (!TARGET_NORMAL_MODE)
       (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int -12)))
           (match_operand:SI 2 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0
-       && REGNO (operands[1]) == 1
-       && REGNO (operands[2]) == 2)
-       || (REGNO (operands[0]) == 4
-          && REGNO (operands[1]) == 5
-          && REGNO (operands[2]) == 6))"
+   && h8300_regs_ok_for_stm (3, operands)"
   "stm.l\\t%S0-%S2,@-er7"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
       (set (mem:SI (plus:HI (reg:HI SP_REG) (const_int -12)))
           (match_operand:SI 2 "register_operand" ""))])]
   "TARGET_H8300S && TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0
-       && REGNO (operands[1]) == 1
-       && REGNO (operands[2]) == 2)
-       || (REGNO (operands[0]) == 4
-          && REGNO (operands[1]) == 5
-          && REGNO (operands[2]) == 6))"
+   && h8300_regs_ok_for_stm (3, operands)"
   "stm.l\\t%S0-%S2,@-er7"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
    (match_operand:SI 1 "register_operand" "")
    (match_operand:SI 2 "register_operand" "")]
   "TARGET_H8300S
-   && ((REGNO (operands[0]) == 0
-       && REGNO (operands[1]) == 1
-       && REGNO (operands[2]) == 2)
-       || (REGNO (operands[0]) == 4
-          && REGNO (operands[1]) == 5
-          && REGNO (operands[2]) == 6))"
+   && h8300_regs_ok_for_stm (3, operands)"
   "
 {
   if (!TARGET_NORMAL_MODE)
       (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int -16)))
           (match_operand:SI 3 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && REGNO (operands[0]) == 0
-   && REGNO (operands[1]) == 1
-   && REGNO (operands[2]) == 2
-   && REGNO (operands[3]) == 3"
+   && h8300_regs_ok_for_stm (4, operands)"
   "stm.l\\t%S0-%S3,@-er7"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
       (set (mem:SI (plus:HI (reg:HI SP_REG) (const_int -16)))
           (match_operand:SI 3 "register_operand" ""))])]
   "TARGET_H8300S && TARGET_NORMAL_MODE
-   && REGNO (operands[0]) == 0
-   && REGNO (operands[1]) == 1
-   && REGNO (operands[2]) == 2
-   && REGNO (operands[3]) == 3"
+   && h8300_regs_ok_for_stm (4, operands)"
   "stm.l\\t%S0-%S3,@-er7"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
    (match_operand:SI 2 "register_operand" "")
    (match_operand:SI 3 "register_operand" "")]
   "TARGET_H8300S
-   && REGNO (operands[0]) == 0
-   && REGNO (operands[1]) == 1
-   && REGNO (operands[2]) == 2
-   && REGNO (operands[3]) == 3"
+   && h8300_regs_ok_for_stm (4, operands)"
   "
 {
   if (!TARGET_NORMAL_MODE)
       (set (mem:SI (reg:SI SP_REG))
           (match_operand:SI 1 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
-       || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
-       || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))"
+   && h8300_regs_ok_for_stm (2, operands)"
   "ldm.l\\t@er7+,%S0-%S1"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
       (set (mem:SI (reg:HI SP_REG))
           (match_operand:SI 1 "register_operand" ""))])]
   "TARGET_H8300S && TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
-       || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
-       || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))"
+   && h8300_regs_ok_for_stm (2, operands)"
   "ldm.l\\t@er7+,%S0-%S1"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
   [(match_operand:SI 0 "register_operand" "")
    (match_operand:SI 1 "register_operand" "")]
   "TARGET_H8300S
-   && ((REGNO (operands[0]) == 0 && REGNO (operands[1]) == 1)
-       || (REGNO (operands[0]) == 2 && REGNO (operands[1]) == 3)
-       || (REGNO (operands[0]) == 4 && REGNO (operands[1]) == 5))"
+   && h8300_regs_ok_for_stm (2, operands)"
   "
 {
   if (!TARGET_NORMAL_MODE)
       (set (mem:SI (reg:SI SP_REG))
           (match_operand:SI 2 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0
-       && REGNO (operands[1]) == 1
-       && REGNO (operands[2]) == 2)
-       || (REGNO (operands[0]) == 4
-          && REGNO (operands[1]) == 5
-          && REGNO (operands[2]) == 6))"
+   && h8300_regs_ok_for_stm (3, operands)"
   "ldm.l\\t@er7+,%S0-%S2"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
       (set (mem:SI (reg:HI SP_REG))
           (match_operand:SI 2 "register_operand" ""))])]
   "TARGET_H8300S && TARGET_NORMAL_MODE
-   && ((REGNO (operands[0]) == 0
-       && REGNO (operands[1]) == 1
-       && REGNO (operands[2]) == 2)
-       || (REGNO (operands[0]) == 4
-          && REGNO (operands[1]) == 5
-          && REGNO (operands[2]) == 6))"
+   && h8300_regs_ok_for_stm (3, operands)"
   "ldm.l\\t@er7+,%S0-%S2"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
    (match_operand:SI 1 "register_operand" "")
    (match_operand:SI 2 "register_operand" "")]
   "TARGET_H8300S
-   && ((REGNO (operands[0]) == 0
-       && REGNO (operands[1]) == 1
-       && REGNO (operands[2]) == 2)
-       || (REGNO (operands[0]) == 4
-          && REGNO (operands[1]) == 5
-          && REGNO (operands[2]) == 6))"
+   && h8300_regs_ok_for_stm (3, operands)"
   "
 {
   if (!TARGET_NORMAL_MODE)
       (set (mem:SI (reg:SI SP_REG))
           (match_operand:SI 3 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && REGNO (operands[0]) == 0
-   && REGNO (operands[1]) == 1
-   && REGNO (operands[2]) == 2
-   && REGNO (operands[3]) == 3"
+   && h8300_regs_ok_for_stm (4, operands)"
   "ldm.l\\t@er7+,%S0-%S3"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
       (set (mem:SI (reg:HI SP_REG))
           (match_operand:SI 3 "register_operand" ""))])]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && REGNO (operands[0]) == 0
-   && REGNO (operands[1]) == 1
-   && REGNO (operands[2]) == 2
-   && REGNO (operands[3]) == 3"
+   && h8300_regs_ok_for_stm (4, operands)"
   "ldm.l\\t@er7+,%S0-%S3"
   [(set_attr "cc" "none")
    (set_attr "length" "4")])
    (match_operand:SI 2 "register_operand" "")
    (match_operand:SI 3 "register_operand" "")]
   "TARGET_H8300S && !TARGET_NORMAL_MODE
-   && REGNO (operands[0]) == 0
-   && REGNO (operands[1]) == 1
-   && REGNO (operands[2]) == 2
-   && REGNO (operands[3]) == 3"
+   && h8300_regs_ok_for_stm (4, operands)"
   "
 {
   if (!TARGET_NORMAL_MODE)