* 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
+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,
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)
{
}
/* Returns 1 if op is an altivec register. */
+
int
altivec_register_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
{
#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}}, \
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, \
"{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"))