+static void mark_regs_pat PROTO((rtx, HARD_REG_SET *));
+static void straighten_stack PROTO((rtx, stack));
+static void record_label_references PROTO((rtx, rtx));
+static rtx *get_true_reg PROTO((rtx *));
+static int constrain_asm_operands PROTO((int, rtx *, char **, int *,
+ enum reg_class *));
+
+static void record_asm_reg_life PROTO((rtx,stack, rtx *, char **,
+ int, int));
+static void record_reg_life_pat PROTO((rtx, HARD_REG_SET *,
+ HARD_REG_SET *, int));
+static void get_asm_operand_length PROTO((rtx, int, int *, int *));
+static void record_reg_life PROTO((rtx, int, stack));
+static void find_blocks PROTO((rtx));
+static int uses_reg_or_mem PROTO((rtx));
+static rtx stack_result PROTO((tree));
+static void stack_reg_life_analysis PROTO((rtx, HARD_REG_SET *));
+static void replace_reg PROTO((rtx *, int));
+static void remove_regno_note PROTO((rtx, enum reg_note, int));
+static int get_hard_regnum PROTO((stack, rtx));
+static void delete_insn_for_stacker PROTO((rtx));
+static rtx emit_pop_insn PROTO((rtx, stack, rtx, rtx (*) ()));
+static void emit_swap_insn PROTO((rtx, stack, rtx));
+static void move_for_stack_reg PROTO((rtx, stack, rtx));
+static void swap_rtx_condition PROTO((rtx));
+static void compare_for_stack_reg PROTO((rtx, stack, rtx));
+static void subst_stack_regs_pat PROTO((rtx, stack, rtx));
+static void subst_asm_stack_regs PROTO((rtx, stack, rtx *, rtx **,
+ char **, int, int));
+static void subst_stack_regs PROTO((rtx, stack));
+static void change_stack PROTO((rtx, stack, stack, rtx (*) ()));
+
+static void goto_block_pat PROTO((rtx, stack, rtx));
+static void convert_regs PROTO((void));
+static void print_blocks PROTO((FILE *, rtx, rtx));
+static void dump_stack_info PROTO((FILE *));
+\f
+/* Mark all registers needed for this pattern. */
+
+static void
+mark_regs_pat (pat, set)
+ rtx pat;
+ HARD_REG_SET *set;
+{
+ enum machine_mode mode;
+ register int regno;
+ register int count;
+
+ if (GET_CODE (pat) == SUBREG)
+ {
+ mode = GET_MODE (pat);
+ regno = SUBREG_WORD (pat);
+ regno += REGNO (SUBREG_REG (pat));
+ }
+ else
+ regno = REGNO (pat), mode = GET_MODE (pat);
+
+ for (count = HARD_REGNO_NREGS (regno, mode);
+ count; count--, regno++)
+ SET_HARD_REG_BIT (*set, regno);
+}
+\f
+/* Reorganise the stack into ascending numbers,
+ after this insn. */
+
+static void
+straighten_stack (insn, regstack)
+ rtx insn;
+ stack regstack;
+{
+ struct stack_def temp_stack;
+ int top;
+
+ temp_stack.reg_set = regstack->reg_set;
+
+ for (top = temp_stack.top = regstack->top; top >= 0; top--)
+ temp_stack.reg[top] = FIRST_STACK_REG + temp_stack.top - top;
+
+ change_stack (insn, regstack, &temp_stack, emit_insn_after);
+}