rs6000.c (any_parallel_operand): New predicate.
authorDavid Edelsohn <edelsohn@gnu.org>
Fri, 13 Aug 2004 14:38:47 +0000 (14:38 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Fri, 13 Aug 2004 14:38:47 +0000 (10:38 -0400)
* config/rs6000/rs6000.c (any_parallel_operand): New predicate.
* config/rs6000/rs6000.h (PREDICATE_CODES): Add
any_parallel_operand, lmw_operation, stmw_operation,
mfcr_operation, mtcrf_operation.
* config/rs6000/rs6000.md (save_fpregs_{si,di}): Use
any_parallel_operand.
(return_and_restore_fpregs_{si,di}): Same.

From-SVN: r85937

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md

index 44b45aadad09e4da8918e8390f7e7725bed5bc5a..801149af860ab30a622d6ac550e6084bfa4c57a8 100644 (file)
@@ -1,3 +1,13 @@
+2004-08-12  David Edelsohn  <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.c (any_parallel_operand): New predicate.
+       * config/rs6000/rs6000.h (PREDICATE_CODES): Add
+       any_parallel_operand, lmw_operation, stmw_operation,
+       mfcr_operation, mtcrf_operation.
+       * config/rs6000/rs6000.md (save_fpregs_{si,di}): Use
+       any_parallel_operand.
+       (return_and_restore_fpregs_{si,di}): Same.
+
 2004-08-12  Zack Weinberg  <zack@codesourcery.com>
 
        * genrecog.c (add_to_sequence): When processing a MATCH_PARALLEL,
index 8ed2625a0a6a69386d1bff545154be7b6790bbb9..56008c0b2e73d881b6f197d0635d39df365d394e 100644 (file)
@@ -1672,7 +1672,17 @@ any_operand (rtx op ATTRIBUTE_UNUSED,
   return 1;
 }
 
+/* Returns 1 always.  */
+
+int
+any_parallel_operand (rtx op ATTRIBUTE_UNUSED, 
+                     enum machine_mode mode ATTRIBUTE_UNUSED)
+{
+  return 1;
+}
+
 /* Returns 1 if op is the count register.  */
+
 int
 count_register_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
 {
@@ -1689,6 +1699,7 @@ count_register_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
 }
 
 /* Returns 1 if op is an altivec register.  */
+
 int
 altivec_register_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
 {
index 4b7db3a390ee47fe091ec5b3eedb5a24f015b642..6cbb477c5433fbb23db32c102272379480ec641d 100644 (file)
@@ -2530,6 +2530,7 @@ extern char rs6000_reg_names[][8];        /* register names (0 vs. %r0).  */
 #define PREDICATE_CODES                                                           \
   {"any_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,            \
                   LABEL_REF, SUBREG, REG, MEM, PARALLEL}},                \
+  {"any_parallel_operand", {PARALLEL}},                                           \
   {"zero_constant", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
                    LABEL_REF, SUBREG, REG, MEM}},                         \
   {"short_cint_operand", {CONST_INT}},                                    \
@@ -2580,7 +2581,11 @@ extern char rs6000_reg_names[][8];       /* register names (0 vs. %r0).  */
                     CONST_DOUBLE, SYMBOL_REF}},                           \
   {"load_multiple_operation", {PARALLEL}},                                \
   {"store_multiple_operation", {PARALLEL}},                               \
+  {"lmw_operation", {PARALLEL}},                                          \
+  {"stmw_operation", {PARALLEL}},                                         \
   {"vrsave_operation", {PARALLEL}},                                       \
+  {"mfcr_operation", {PARALLEL}},                                         \
+  {"mtcrf_operation", {PARALLEL}},                                        \
   {"branch_comparison_operator", {EQ, NE, LE, LT, GE,                     \
                                  GT, LEU, LTU, GEU, GTU,                  \
                                  UNORDERED, ORDERED,                      \
index 8cd7063b8cf8ff411e206b801714c5c86593d076..198291e22b40be589bde2c8b162c88c44d286d30 100644 (file)
   "{stm|stmw} %2,%1")
 
 (define_insn "*save_fpregs_si"
-  [(match_parallel 0 "any_operand"
+  [(match_parallel 0 "any_parallel_operand"
                   [(clobber (match_operand:SI 1 "register_operand" "=l"))
                    (use (match_operand:SI 2 "call_operand" "s"))
                    (set (match_operand:DF 3 "memory_operand" "=m")
    (set_attr "length" "4")])
 
 (define_insn "*save_fpregs_di"
-  [(match_parallel 0 "any_operand"
+  [(match_parallel 0 "any_parallel_operand"
                   [(clobber (match_operand:DI 1 "register_operand" "=l"))
                    (use (match_operand:DI 2 "call_operand" "s"))
                    (set (match_operand:DF 3 "memory_operand" "=m")
   [(set_attr "type" "jmpreg")])
 
 ; FIXME: This would probably be somewhat simpler if the Cygnus sibcall
-; stuff was in GCC.  Oh, and "any_operand" is a bit flexible...
+; stuff was in GCC.  Oh, and "any_parallel_operand" is a bit flexible...
 
 (define_insn "*return_and_restore_fpregs_si"
- [(match_parallel 0 "any_operand"
+ [(match_parallel 0 "any_parallel_operand"
                   [(return)
                   (use (match_operand:SI 1 "register_operand" "l"))
                   (use (match_operand:SI 2 "call_operand" "s"))
  "b %z2")
 
 (define_insn "*return_and_restore_fpregs_di"
- [(match_parallel 0 "any_operand"
+ [(match_parallel 0 "any_parallel_operand"
                   [(return)
                   (use (match_operand:DI 1 "register_operand" "l"))
                   (use (match_operand:DI 2 "call_operand" "s"))