diff options
author | David Edelsohn <edelsohn@gnu.org> | 2004-08-13 14:38:47 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2004-08-13 10:38:47 -0400 |
commit | 85d346f13c0c237c34624d0f00819df44168d1a6 (patch) | |
tree | 3cda598721a58487c19d5fc34453622586fd77db /gcc | |
parent | 20f3bb804a38fe104b4e6ec982fb959b5279879e (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 11 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 10 |
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")) |