+2013-11-23 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/bfin/bfin-protos.h (push_multiple_operation): Delete.
+ (pop_multiple_operation): Delete.
+ (analyze_push_multiple_operation): Declare.
+ (analyze_pop_multiple_operation): Declare.
+ * config/bfin/bfin.c (push_multiple_operation): Rename to...
+ (analyze_push_multiple_operation): ...this and remove mode argument.
+ (pop_multiple_operation): Rename to...
+ (analyze_pop_multiple_operation): ...this and remove mode argument.
+ * config/bfin/predicates.md (push_multiple_operation): Define.
+ (pop_multiple_operation): Likewise.
+
2013-11-23 Alan Modra <amodra@gmail.com>
* config/rs6000/vsx.md (fusion peepholes): Disable when !TARGET_VSX.
extern void bfin_expand_prologue (void);
extern void bfin_expand_epilogue (int, int, bool);
-extern int push_multiple_operation (rtx, enum machine_mode);
-extern int pop_multiple_operation (rtx, enum machine_mode);
+extern int analyze_push_multiple_operation (rtx);
+extern int analyze_pop_multiple_operation (rtx);
extern void output_push_multiple (rtx, rtx *);
extern void output_pop_multiple (rtx, rtx *);
extern int bfin_hard_regno_rename_ok (unsigned int, unsigned int);
static int n_regs_to_save;
int
-push_multiple_operation (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
+analyze_push_multiple_operation (rtx op)
{
int lastdreg = 8, lastpreg = 6;
int i, group;
}
int
-pop_multiple_operation (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
+analyze_pop_multiple_operation (rtx op)
{
int lastdreg = 8, lastpreg = 6;
int i, group;
int ok;
/* Validate the insn again, and compute first_[dp]reg_to_save. */
- ok = push_multiple_operation (PATTERN (insn), VOIDmode);
+ ok = analyze_push_multiple_operation (PATTERN (insn));
gcc_assert (ok);
if (first_dreg_to_save == 8)
int ok;
/* Validate the insn again, and compute first_[dp]reg_to_save. */
- ok = pop_multiple_operation (PATTERN (insn), VOIDmode);
+ ok = analyze_pop_multiple_operation (PATTERN (insn));
gcc_assert (ok);
if (first_dreg_to_save == 8)
if (GET_CODE (pat) == PARALLEL)
{
- if (push_multiple_operation (pat, VOIDmode)
- || pop_multiple_operation (pat, VOIDmode))
+ if (analyze_push_multiple_operation (pat)
+ || analyze_pop_multiple_operation (pat))
this_cycles = n_regs_to_save;
}
else
gcc_assert (REG_P (op));
return IREG_P (op);
})
+
+(define_predicate "push_multiple_operation"
+ (and (match_code "parallel")
+ (match_test "analyze_push_multiple_operation (op)")))
+
+(define_predicate "pop_multiple_operation"
+ (and (match_code "parallel")
+ (match_test "analyze_pop_multiple_operation (op)")))