Lines Matching refs:regstack
366 straighten_stack (rtx_insn *insn, stack_ptr regstack) in straighten_stack() argument
375 if (regstack->top <= 0) in straighten_stack()
378 temp_stack.reg_set = regstack->reg_set; in straighten_stack()
380 for (top = temp_stack.top = regstack->top; top >= 0; top--) in straighten_stack()
383 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); in straighten_stack()
389 pop_stack (stack_ptr regstack, int regno) in pop_stack() argument
391 int top = regstack->top; in pop_stack()
393 CLEAR_HARD_REG_BIT (regstack->reg_set, regno); in pop_stack()
394 regstack->top--; in pop_stack()
396 if (regstack->reg [top] != regno) in pop_stack()
399 for (i = regstack->top; i >= 0; i--) in pop_stack()
400 if (regstack->reg [i] == regno) in pop_stack()
404 regstack->reg [j] = regstack->reg [j + 1]; in pop_stack()
757 get_hard_regnum (stack_ptr regstack, rtx reg) in get_hard_regnum() argument
763 for (i = regstack->top; i >= 0; i--) in get_hard_regnum()
764 if (regstack->reg[i] == REGNO (reg)) in get_hard_regnum()
767 return i >= 0 ? (FIRST_STACK_REG + regstack->top - i) : -1; in get_hard_regnum()
778 emit_pop_insn (rtx_insn *insn, stack_ptr regstack, rtx reg, in emit_pop_insn() argument
794 if (get_hard_regnum (regstack, reg1) >= 0) in emit_pop_insn()
795 pop_insn = emit_pop_insn (insn, regstack, reg1, where); in emit_pop_insn()
796 if (get_hard_regnum (regstack, reg2) >= 0) in emit_pop_insn()
797 pop_insn = emit_pop_insn (insn, regstack, reg2, where); in emit_pop_insn()
802 hard_regno = get_hard_regnum (regstack, reg); in emit_pop_insn()
816 regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)] in emit_pop_insn()
817 = regstack->reg[regstack->top]; in emit_pop_insn()
818 regstack->top -= 1; in emit_pop_insn()
819 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (reg)); in emit_pop_insn()
832 emit_swap_insn (rtx_insn *insn, stack_ptr regstack, rtx reg) in emit_swap_insn() argument
839 hard_regno = get_hard_regnum (regstack, reg); in emit_swap_insn()
850 regstack->reg[++regstack->top] = REGNO (reg); in emit_swap_insn()
855 other_reg = regstack->top - (hard_regno - FIRST_STACK_REG); in emit_swap_insn()
856 std::swap (regstack->reg[regstack->top], regstack->reg[other_reg]); in emit_swap_insn()
987 BLOCK_INFO (current_block)->stack_in = *regstack; in emit_swap_insn()
1017 swap_to_top (rtx_insn *insn, stack_ptr regstack, rtx src1, rtx src2) in swap_to_top() argument
1022 temp_stack = *regstack; in swap_to_top()
1046 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); in swap_to_top()
1054 move_for_stack_reg (rtx_insn *insn, stack_ptr regstack, rtx pat) in move_for_stack_reg() argument
1077 for (i = regstack->top; i >= 0; i--) in move_for_stack_reg()
1078 if (regstack->reg[i] == REGNO (src)) in move_for_stack_reg()
1082 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG); in move_for_stack_reg()
1087 return move_nan_for_stack_reg (insn, regstack, dest); in move_for_stack_reg()
1093 emit_pop_insn (insn, regstack, src, EMIT_AFTER); in move_for_stack_reg()
1096 regstack->reg[i] = REGNO (dest); in move_for_stack_reg()
1097 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); in move_for_stack_reg()
1098 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); in move_for_stack_reg()
1116 emit_pop_insn (insn, regstack, dest, EMIT_AFTER); in move_for_stack_reg()
1124 if (get_hard_regnum (regstack, dest) >= FIRST_STACK_REG) in move_for_stack_reg()
1128 replace_reg (psrc, get_hard_regnum (regstack, src)); in move_for_stack_reg()
1130 regstack->reg[++regstack->top] = REGNO (dest); in move_for_stack_reg()
1131 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); in move_for_stack_reg()
1141 emit_swap_insn (insn, regstack, src); in move_for_stack_reg()
1147 regstack->top--; in move_for_stack_reg()
1148 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); in move_for_stack_reg()
1151 && regstack->top < REG_STACK_SIZE - 1) in move_for_stack_reg()
1190 emit_swap_insn (insn, regstack, dest); in move_for_stack_reg()
1192 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG in move_for_stack_reg()
1195 gcc_assert (regstack->top < REG_STACK_SIZE); in move_for_stack_reg()
1197 regstack->reg[++regstack->top] = REGNO (dest); in move_for_stack_reg()
1198 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); in move_for_stack_reg()
1209 move_nan_for_stack_reg (rtx_insn *insn, stack_ptr regstack, rtx dest) in move_nan_for_stack_reg() argument
1218 return move_for_stack_reg (insn, regstack, pat); in move_nan_for_stack_reg()
1375 compare_for_stack_reg (rtx_insn *insn, stack_ptr regstack, in compare_for_stack_reg() argument
1389 && get_hard_regnum (regstack, *src2) == FIRST_STACK_REG)) in compare_for_stack_reg()
1418 emit_swap_insn (insn, regstack, *src1); in compare_for_stack_reg()
1423 replace_reg (src2, get_hard_regnum (regstack, *src2)); in compare_for_stack_reg()
1431 emit_pop_insn (insn, regstack, XEXP (src1_note, 0), in compare_for_stack_reg()
1436 pop_stack (regstack, REGNO (XEXP (src1_note, 0))); in compare_for_stack_reg()
1454 if (get_hard_regnum (regstack, XEXP (src2_note, 0)) == FIRST_STACK_REG in compare_for_stack_reg()
1457 pop_stack (regstack, REGNO (XEXP (src2_note, 0))); in compare_for_stack_reg()
1466 emit_pop_insn (insn, regstack, XEXP (src2_note, 0), in compare_for_stack_reg()
1477 subst_all_stack_regs_in_debug_insn (rtx_insn *insn, struct stack_def *regstack) in subst_all_stack_regs_in_debug_insn() argument
1486 int hard_regno = get_hard_regnum (regstack, x); in subst_all_stack_regs_in_debug_insn()
1507 subst_stack_regs_pat (rtx_insn *insn, stack_ptr regstack, rtx pat) in subst_stack_regs_pat() argument
1523 if (TEST_HARD_REG_BIT (regstack->reg_set, REGNO (*src))) in subst_stack_regs_pat()
1524 emit_pop_insn (insn, regstack, *src, EMIT_AFTER); in subst_stack_regs_pat()
1561 emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE); in subst_stack_regs_pat()
1581 if (get_hard_regnum (regstack, u) == -1) in subst_stack_regs_pat()
1586 |= move_nan_for_stack_reg (insn2, regstack, u); in subst_stack_regs_pat()
1589 if (get_hard_regnum (regstack, t) == -1) in subst_stack_regs_pat()
1591 |= move_nan_for_stack_reg (insn, regstack, t); in subst_stack_regs_pat()
1614 control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat); in subst_stack_regs_pat()
1625 regstack->reg[++regstack->top] = REGNO (*dest) + count; in subst_stack_regs_pat()
1626 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest) + count); in subst_stack_regs_pat()
1651 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1661 regstack->top--; in subst_stack_regs_pat()
1662 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1)); in subst_stack_regs_pat()
1698 emit_swap_insn (insn, regstack, *dest); in subst_stack_regs_pat()
1707 src1_hard_regnum = get_hard_regnum (regstack, *src1); in subst_stack_regs_pat()
1708 src2_hard_regnum = get_hard_regnum (regstack, *src2); in subst_stack_regs_pat()
1717 |= move_nan_for_stack_reg (insn2, regstack, *src1); in subst_stack_regs_pat()
1724 |= move_nan_for_stack_reg (insn2, regstack, *src2); in subst_stack_regs_pat()
1729 emit_swap_insn (insn, regstack, *dest); in subst_stack_regs_pat()
1733 replace_reg (src1, get_hard_regnum (regstack, *src1)); in subst_stack_regs_pat()
1735 replace_reg (src2, get_hard_regnum (regstack, *src2)); in subst_stack_regs_pat()
1747 if (REGNO (src1_reg) == regstack->reg[regstack->top]) in subst_stack_regs_pat()
1749 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1750 replace_reg (dest, get_hard_regnum (regstack, *dest)); in subst_stack_regs_pat()
1754 int regno = get_hard_regnum (regstack, src1_reg); in subst_stack_regs_pat()
1756 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1759 regstack->reg[regstack->top - (regno - FIRST_STACK_REG)] in subst_stack_regs_pat()
1760 = regstack->reg[regstack->top]; in subst_stack_regs_pat()
1763 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1766 regstack->top--; in subst_stack_regs_pat()
1771 if (REGNO (src2_reg) == regstack->reg[regstack->top]) in subst_stack_regs_pat()
1773 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1774 replace_reg (dest, get_hard_regnum (regstack, *dest)); in subst_stack_regs_pat()
1778 int regno = get_hard_regnum (regstack, src2_reg); in subst_stack_regs_pat()
1780 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1783 regstack->reg[regstack->top - (regno - FIRST_STACK_REG)] in subst_stack_regs_pat()
1784 = regstack->reg[regstack->top]; in subst_stack_regs_pat()
1787 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1790 regstack->top--; in subst_stack_regs_pat()
1794 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1795 replace_reg (dest, get_hard_regnum (regstack, *dest)); in subst_stack_regs_pat()
1821 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1831 regstack->top--; in subst_stack_regs_pat()
1832 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1)); in subst_stack_regs_pat()
1843 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1853 emit_pop_insn (insn, regstack, XEXP (src1_note, 0), in subst_stack_regs_pat()
1879 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1897 regstack->top++; in subst_stack_regs_pat()
1907 regstack->reg[regstack->top] in subst_stack_regs_pat()
1908 = regstack->reg[regstack->top - 1]; in subst_stack_regs_pat()
1912 regstack->reg[regstack->top - 1] = REGNO (*dest); in subst_stack_regs_pat()
1913 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1932 swap_to_top (insn, regstack, *src1, *src2); in subst_stack_regs_pat()
1943 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1944 regstack->reg[regstack->top]); in subst_stack_regs_pat()
1945 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1946 regstack->reg[regstack->top - 1]); in subst_stack_regs_pat()
1947 regstack->top -= 2; in subst_stack_regs_pat()
1950 regstack->reg[++regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
1951 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1972 swap_to_top (insn, regstack, *src1, *src2); in subst_stack_regs_pat()
1978 regstack->reg[regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
1979 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
2000 regstack->reg[regstack->top - 1] = REGNO (*dest); in subst_stack_regs_pat()
2001 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
2045 compare_for_stack_reg (insn, regstack, pat_src, in subst_stack_regs_pat()
2063 if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG in subst_stack_regs_pat()
2064 && REGNO (*dest) != regstack->reg[regstack->top]) in subst_stack_regs_pat()
2069 if ((REGNO (*src1) == regstack->reg[regstack->top] in subst_stack_regs_pat()
2071 || (REGNO (*src2) == regstack->reg[regstack->top] in subst_stack_regs_pat()
2074 int idx1 = (get_hard_regnum (regstack, *src1) in subst_stack_regs_pat()
2076 int idx2 = (get_hard_regnum (regstack, *src2) in subst_stack_regs_pat()
2081 regstack->reg[regstack->top - idx1] = REGNO (*src2); in subst_stack_regs_pat()
2082 regstack->reg[regstack->top - idx2] = REGNO (*src1); in subst_stack_regs_pat()
2090 emit_swap_insn (insn, regstack, *dest); in subst_stack_regs_pat()
2102 replace_reg (src1, get_hard_regnum (regstack, *src1)); in subst_stack_regs_pat()
2104 replace_reg (src2, get_hard_regnum (regstack, *src2)); in subst_stack_regs_pat()
2115 gcc_assert (regno != regstack->reg[regstack->top]); in subst_stack_regs_pat()
2117 emit_pop_insn (insn, regstack, XEXP (src_note[i], 0), in subst_stack_regs_pat()
2124 if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG) in subst_stack_regs_pat()
2125 regstack->reg[++regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
2126 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
2154 subst_asm_stack_regs (rtx_insn *insn, stack_ptr regstack) in subst_asm_stack_regs() argument
2259 temp_stack = *regstack; in subst_asm_stack_regs()
2298 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); in subst_asm_stack_regs()
2306 int regnum = get_hard_regnum (regstack, recog_data.operand[i]); in subst_asm_stack_regs()
2316 int regnum = get_hard_regnum (regstack, note_reg[i]); in subst_asm_stack_regs()
2327 int regnum = get_hard_regnum (regstack, clobber_reg[i]); in subst_asm_stack_regs()
2354 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_asm_stack_regs()
2355 regstack->reg[regstack->top]); in subst_asm_stack_regs()
2356 regstack->top--; in subst_asm_stack_regs()
2373 regstack->reg[++regstack->top] = i; in subst_asm_stack_regs()
2374 SET_HARD_REG_BIT (regstack->reg_set, i); in subst_asm_stack_regs()
2395 insn = emit_pop_insn (insn, regstack, recog_data.operand[i], in subst_asm_stack_regs()
2409 && TEST_HARD_REG_BIT (regstack->reg_set, in subst_asm_stack_regs()
2412 insn = emit_pop_insn (insn, regstack, recog_data.operand[i], in subst_asm_stack_regs()
2426 subst_stack_regs (rtx_insn *insn, stack_ptr regstack) in subst_stack_regs() argument
2434 int top = regstack->top; in subst_stack_regs()
2442 straighten_stack (insn, regstack); in subst_stack_regs()
2446 while (regstack->top >= 0) in subst_stack_regs()
2448 CLEAR_HARD_REG_BIT (regstack->reg_set, FIRST_STACK_REG + regstack->top); in subst_stack_regs()
2449 regstack->top--; in subst_stack_regs()
2469 subst_asm_stack_regs (insn, regstack); in subst_stack_regs()
2482 |= subst_stack_regs_pat (insn, regstack, in subst_stack_regs()
2488 |= subst_stack_regs_pat (insn, regstack, PATTERN (insn)); in subst_stack_regs()
2502 regstack->top = -1; in subst_stack_regs()
2503 CLEAR_HARD_REG_SET (regstack->reg_set); in subst_stack_regs()
2517 insn = emit_pop_insn (insn, regstack, XEXP (note, 0), EMIT_AFTER); in subst_stack_regs()
2892 struct stack_def regstack; in compensate_edge() local
2949 regstack = *source_stack; in compensate_edge()
2958 change_stack (BB_END (source), ®stack, target_stack, in compensate_edge()
2972 change_stack (after, ®stack, target_stack, EMIT_BEFORE); in compensate_edge()
3040 struct stack_def regstack; in convert_regs_1() local
3084 regstack = bi->stack_in; in convert_regs_1()
3105 subst_all_stack_regs_in_debug_insn (insn, ®stack); in convert_regs_1()
3122 print_stack (dump_file, ®stack); in convert_regs_1()
3124 control_flow_insn_deleted |= subst_stack_regs (insn, ®stack); in convert_regs_1()
3154 print_stack (dump_file, ®stack); in convert_regs_1()
3168 && ! TEST_HARD_REG_BIT (regstack.reg_set, reg)) in convert_regs_1()
3177 control_flow_insn_deleted |= subst_stack_regs (insn, ®stack); in convert_regs_1()
3205 gcc_assert (regstack.reg_set == bi->out_reg_set || any_malformed_asm); in convert_regs_1()
3206 bi->stack_out = regstack; in convert_regs_1()