aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2004-08-13 14:38:47 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2004-08-13 10:38:47 -0400
commit85d346f13c0c237c34624d0f00819df44168d1a6 (patch)
tree3cda598721a58487c19d5fc34453622586fd77db
parent20f3bb804a38fe104b4e6ec982fb959b5279879e (diff)
downloadgcc-85d346f13c0c237c34624d0f00819df44168d1a6.zip
gcc-85d346f13c0c237c34624d0f00819df44168d1a6.tar.gz
gcc-85d346f13c0c237c34624d0f00819df44168d1a6.tar.bz2
rs6000.c (any_parallel_operand): New predicate.
* 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
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/rs6000/rs6000.c11
-rw-r--r--gcc/config/rs6000/rs6000.h5
-rw-r--r--gcc/config/rs6000/rs6000.md10
4 files changed, 31 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 44b45aa..801149a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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,
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8ed2625..56008c0 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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)
{
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 4b7db3a..6cbb477 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -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, \
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 8cd7063..198291e 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -14393,7 +14393,7 @@
"{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")
@@ -14404,7 +14404,7 @@
(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")
@@ -14500,10 +14500,10 @@
[(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"))
@@ -14513,7 +14513,7 @@
"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"))