Lines Matching refs:regstack
365 straighten_stack (rtx insn, stack regstack) in straighten_stack() argument
374 if (regstack->top <= 0) in straighten_stack()
377 COPY_HARD_REG_SET (temp_stack.reg_set, regstack->reg_set); in straighten_stack()
379 for (top = temp_stack.top = regstack->top; top >= 0; top--) in straighten_stack()
382 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); in straighten_stack()
388 pop_stack (stack regstack, int regno) in pop_stack() argument
390 int top = regstack->top; in pop_stack()
392 CLEAR_HARD_REG_BIT (regstack->reg_set, regno); in pop_stack()
393 regstack->top--; in pop_stack()
395 if (regstack->reg [top] != regno) in pop_stack()
398 for (i = regstack->top; i >= 0; i--) in pop_stack()
399 if (regstack->reg [i] == regno) in pop_stack()
403 regstack->reg [j] = regstack->reg [j + 1]; in pop_stack()
735 get_hard_regnum (stack regstack, rtx reg) in get_hard_regnum() argument
741 for (i = regstack->top; i >= 0; i--) in get_hard_regnum()
742 if (regstack->reg[i] == REGNO (reg)) in get_hard_regnum()
745 return i >= 0 ? (FIRST_STACK_REG + regstack->top - i) : -1; in get_hard_regnum()
756 emit_pop_insn (rtx insn, stack regstack, rtx reg, enum emit_where where) in emit_pop_insn() argument
769 if (get_hard_regnum (regstack, reg1) >= 0) in emit_pop_insn()
770 pop_insn = emit_pop_insn (insn, regstack, reg1, where); in emit_pop_insn()
771 if (get_hard_regnum (regstack, reg2) >= 0) in emit_pop_insn()
772 pop_insn = emit_pop_insn (insn, regstack, reg2, where); in emit_pop_insn()
777 hard_regno = get_hard_regnum (regstack, reg); in emit_pop_insn()
793 regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)] in emit_pop_insn()
794 = regstack->reg[regstack->top]; in emit_pop_insn()
795 regstack->top -= 1; in emit_pop_insn()
796 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (reg)); in emit_pop_insn()
809 emit_swap_insn (rtx insn, stack regstack, rtx reg) in emit_swap_insn() argument
817 hard_regno = get_hard_regnum (regstack, reg); in emit_swap_insn()
828 regstack->reg[++regstack->top] = REGNO (reg); in emit_swap_insn()
833 other_reg = regstack->top - (hard_regno - FIRST_STACK_REG); in emit_swap_insn()
835 tmp = regstack->reg[other_reg]; in emit_swap_insn()
836 regstack->reg[other_reg] = regstack->reg[regstack->top]; in emit_swap_insn()
837 regstack->reg[regstack->top] = tmp; in emit_swap_insn()
890 BLOCK_INFO (current_block)->stack_in = *regstack; in emit_swap_insn()
916 swap_to_top (rtx insn, stack regstack, rtx src1, rtx src2) in swap_to_top() argument
921 temp_stack = *regstack; in swap_to_top()
949 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); in swap_to_top()
957 move_for_stack_reg (rtx insn, stack regstack, rtx pat) in move_for_stack_reg() argument
980 for (i = regstack->top; i >= 0; i--) in move_for_stack_reg()
981 if (regstack->reg[i] == REGNO (src)) in move_for_stack_reg()
985 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG); in move_for_stack_reg()
990 return move_nan_for_stack_reg (insn, regstack, dest); in move_for_stack_reg()
996 emit_pop_insn (insn, regstack, src, EMIT_AFTER); in move_for_stack_reg()
999 regstack->reg[i] = REGNO (dest); in move_for_stack_reg()
1000 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); in move_for_stack_reg()
1001 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); in move_for_stack_reg()
1019 emit_pop_insn (insn, regstack, dest, EMIT_AFTER); in move_for_stack_reg()
1027 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG); in move_for_stack_reg()
1029 replace_reg (psrc, get_hard_regnum (regstack, src)); in move_for_stack_reg()
1031 regstack->reg[++regstack->top] = REGNO (dest); in move_for_stack_reg()
1032 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); in move_for_stack_reg()
1041 emit_swap_insn (insn, regstack, src); in move_for_stack_reg()
1047 regstack->top--; in move_for_stack_reg()
1048 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); in move_for_stack_reg()
1051 && regstack->top < REG_STACK_SIZE - 1) in move_for_stack_reg()
1081 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG); in move_for_stack_reg()
1083 gcc_assert (regstack->top < REG_STACK_SIZE); in move_for_stack_reg()
1085 regstack->reg[++regstack->top] = REGNO (dest); in move_for_stack_reg()
1086 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); in move_for_stack_reg()
1097 move_nan_for_stack_reg (rtx insn, stack regstack, rtx dest) in move_nan_for_stack_reg() argument
1106 return move_for_stack_reg (insn, regstack, pat); in move_nan_for_stack_reg()
1236 compare_for_stack_reg (rtx insn, stack regstack, rtx pat_src) in compare_for_stack_reg() argument
1248 && get_hard_regnum (regstack, *src2) == FIRST_STACK_REG)) in compare_for_stack_reg()
1271 emit_swap_insn (insn, regstack, *src1); in compare_for_stack_reg()
1276 replace_reg (src2, get_hard_regnum (regstack, *src2)); in compare_for_stack_reg()
1280 pop_stack (regstack, REGNO (XEXP (src1_note, 0))); in compare_for_stack_reg()
1297 if (get_hard_regnum (regstack, XEXP (src2_note, 0)) == FIRST_STACK_REG in compare_for_stack_reg()
1300 pop_stack (regstack, REGNO (XEXP (src2_note, 0))); in compare_for_stack_reg()
1313 emit_pop_insn (insn, regstack, XEXP (src2_note, 0), in compare_for_stack_reg()
1324 subst_stack_regs_pat (rtx insn, stack regstack, rtx pat) in subst_stack_regs_pat() argument
1338 emit_pop_insn (insn, regstack, *src, EMIT_AFTER); in subst_stack_regs_pat()
1343 gcc_assert (get_hard_regnum (regstack, *src) != -1); in subst_stack_regs_pat()
1365 emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE); in subst_stack_regs_pat()
1387 if (get_hard_regnum (regstack, u) == -1) in subst_stack_regs_pat()
1392 |= move_nan_for_stack_reg (insn2, regstack, u); in subst_stack_regs_pat()
1395 if (get_hard_regnum (regstack, t) == -1) in subst_stack_regs_pat()
1397 |= move_nan_for_stack_reg (insn, regstack, t); in subst_stack_regs_pat()
1420 control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat); in subst_stack_regs_pat()
1427 compare_for_stack_reg (insn, regstack, pat_src); in subst_stack_regs_pat()
1436 regstack->reg[++regstack->top] = REGNO (*dest) + count; in subst_stack_regs_pat()
1437 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest) + count); in subst_stack_regs_pat()
1462 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1472 regstack->top--; in subst_stack_regs_pat()
1473 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1)); in subst_stack_regs_pat()
1509 emit_swap_insn (insn, regstack, *dest); in subst_stack_regs_pat()
1518 src1_hard_regnum = get_hard_regnum (regstack, *src1); in subst_stack_regs_pat()
1519 src2_hard_regnum = get_hard_regnum (regstack, *src2); in subst_stack_regs_pat()
1525 emit_swap_insn (insn, regstack, *dest); in subst_stack_regs_pat()
1529 replace_reg (src1, get_hard_regnum (regstack, *src1)); in subst_stack_regs_pat()
1531 replace_reg (src2, get_hard_regnum (regstack, *src2)); in subst_stack_regs_pat()
1543 if (REGNO (src1_reg) == regstack->reg[regstack->top]) in subst_stack_regs_pat()
1545 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1546 replace_reg (dest, get_hard_regnum (regstack, *dest)); in subst_stack_regs_pat()
1550 int regno = get_hard_regnum (regstack, src1_reg); in subst_stack_regs_pat()
1552 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1555 regstack->reg[regstack->top - (regno - FIRST_STACK_REG)] in subst_stack_regs_pat()
1556 = regstack->reg[regstack->top]; in subst_stack_regs_pat()
1559 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1562 regstack->top--; in subst_stack_regs_pat()
1567 if (REGNO (src2_reg) == regstack->reg[regstack->top]) in subst_stack_regs_pat()
1569 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1570 replace_reg (dest, get_hard_regnum (regstack, *dest)); in subst_stack_regs_pat()
1574 int regno = get_hard_regnum (regstack, src2_reg); in subst_stack_regs_pat()
1576 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1579 regstack->reg[regstack->top - (regno - FIRST_STACK_REG)] in subst_stack_regs_pat()
1580 = regstack->reg[regstack->top]; in subst_stack_regs_pat()
1583 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1586 regstack->top--; in subst_stack_regs_pat()
1590 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1591 replace_reg (dest, get_hard_regnum (regstack, *dest)); in subst_stack_regs_pat()
1616 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1626 regstack->top--; in subst_stack_regs_pat()
1627 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1)); in subst_stack_regs_pat()
1647 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1671 swap_to_top (insn, regstack, *src1, *src2); in subst_stack_regs_pat()
1682 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1683 regstack->reg[regstack->top]); in subst_stack_regs_pat()
1684 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_stack_regs_pat()
1685 regstack->reg[regstack->top - 1]); in subst_stack_regs_pat()
1686 regstack->top -= 2; in subst_stack_regs_pat()
1689 regstack->reg[++regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
1690 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1711 swap_to_top (insn, regstack, *src1, *src2); in subst_stack_regs_pat()
1716 regstack->reg[regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
1717 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1742 swap_to_top (insn, regstack, *src1, *src2); in subst_stack_regs_pat()
1747 regstack->reg[regstack->top - 1] = REGNO (*dest); in subst_stack_regs_pat()
1748 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1764 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1774 regstack->reg[regstack->top + 1] = REGNO (*dest); in subst_stack_regs_pat()
1775 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1790 emit_swap_insn (insn, regstack, *src1); in subst_stack_regs_pat()
1800 regstack->reg[regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
1801 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1804 regstack->top++; in subst_stack_regs_pat()
1827 compare_for_stack_reg (insn, regstack, pat_src); in subst_stack_regs_pat()
1849 if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG in subst_stack_regs_pat()
1850 && REGNO (*dest) != regstack->reg[regstack->top]) in subst_stack_regs_pat()
1855 if ((REGNO (*src1) == regstack->reg[regstack->top] in subst_stack_regs_pat()
1857 || (REGNO (*src2) == regstack->reg[regstack->top] in subst_stack_regs_pat()
1860 int idx1 = (get_hard_regnum (regstack, *src1) in subst_stack_regs_pat()
1862 int idx2 = (get_hard_regnum (regstack, *src2) in subst_stack_regs_pat()
1867 regstack->reg[regstack->top - idx1] = REGNO (*src2); in subst_stack_regs_pat()
1868 regstack->reg[regstack->top - idx2] = REGNO (*src1); in subst_stack_regs_pat()
1876 emit_swap_insn (insn, regstack, *dest); in subst_stack_regs_pat()
1888 replace_reg (src1, get_hard_regnum (regstack, *src1)); in subst_stack_regs_pat()
1890 replace_reg (src2, get_hard_regnum (regstack, *src2)); in subst_stack_regs_pat()
1901 gcc_assert (regno != regstack->reg[regstack->top]); in subst_stack_regs_pat()
1903 emit_pop_insn (insn, regstack, XEXP (src_note[i], 0), in subst_stack_regs_pat()
1910 if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG) in subst_stack_regs_pat()
1911 regstack->reg[++regstack->top] = REGNO (*dest); in subst_stack_regs_pat()
1912 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); in subst_stack_regs_pat()
1940 subst_asm_stack_regs (rtx insn, stack regstack) in subst_asm_stack_regs() argument
2048 temp_stack = *regstack; in subst_asm_stack_regs()
2090 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); in subst_asm_stack_regs()
2098 int regnum = get_hard_regnum (regstack, recog_data.operand[i]); in subst_asm_stack_regs()
2108 int regnum = get_hard_regnum (regstack, note_reg[i]); in subst_asm_stack_regs()
2119 int regnum = get_hard_regnum (regstack, clobber_reg[i]); in subst_asm_stack_regs()
2152 CLEAR_HARD_REG_BIT (regstack->reg_set, in subst_asm_stack_regs()
2153 regstack->reg[regstack->top]); in subst_asm_stack_regs()
2154 regstack->top--; in subst_asm_stack_regs()
2171 regstack->reg[++regstack->top] = i; in subst_asm_stack_regs()
2172 SET_HARD_REG_BIT (regstack->reg_set, i); in subst_asm_stack_regs()
2193 insn = emit_pop_insn (insn, regstack, recog_data.operand[i], in subst_asm_stack_regs()
2207 && TEST_HARD_REG_BIT (regstack->reg_set, in subst_asm_stack_regs()
2210 insn = emit_pop_insn (insn, regstack, recog_data.operand[i], in subst_asm_stack_regs()
2224 subst_stack_regs (rtx insn, stack regstack) in subst_stack_regs() argument
2232 int top = regstack->top; in subst_stack_regs()
2240 straighten_stack (insn, regstack); in subst_stack_regs()
2244 while (regstack->top >= 0) in subst_stack_regs()
2246 CLEAR_HARD_REG_BIT (regstack->reg_set, FIRST_STACK_REG + regstack->top); in subst_stack_regs()
2247 regstack->top--; in subst_stack_regs()
2267 subst_asm_stack_regs (insn, regstack); in subst_stack_regs()
2280 |= subst_stack_regs_pat (insn, regstack, in subst_stack_regs()
2286 |= subst_stack_regs_pat (insn, regstack, PATTERN (insn)); in subst_stack_regs()
2300 regstack->top = -1; in subst_stack_regs()
2301 CLEAR_HARD_REG_SET (regstack->reg_set); in subst_stack_regs()
2315 insn = emit_pop_insn (insn, regstack, XEXP (note, 0), EMIT_AFTER); in subst_stack_regs()
2665 struct stack_def regstack; in compensate_edge() local
2722 regstack = *source_stack; in compensate_edge()
2731 change_stack (BB_END (source), ®stack, target_stack, in compensate_edge()
2744 change_stack (after, ®stack, target_stack, EMIT_BEFORE); in compensate_edge()
2815 struct stack_def regstack; in convert_regs_1() local
2857 regstack = bi->stack_in; in convert_regs_1()
2879 print_stack (dump_file, ®stack); in convert_regs_1()
2881 control_flow_insn_deleted |= subst_stack_regs (insn, ®stack); in convert_regs_1()
2894 print_stack (dump_file, ®stack); in convert_regs_1()
2908 && ! TEST_HARD_REG_BIT (regstack.reg_set, reg)) in convert_regs_1()
2917 control_flow_insn_deleted |= subst_stack_regs (insn, ®stack); in convert_regs_1()
2944 GO_IF_HARD_REG_EQUAL (regstack.reg_set, bi->out_reg_set, win); in convert_regs_1()
2947 bi->stack_out = regstack; in convert_regs_1()