Lines Matching refs:reg

156 		struct hardreg *reg;  member
183 return op->reg->name; in show_op()
381 static void flush_reg(struct bb_state *state, struct hardreg *reg) in flush_reg() argument
385 if (reg->busy) in flush_reg()
386 output_comment(state, "reg %s flushed while busy is %d!", reg->name, reg->busy); in flush_reg()
387 if (!reg->contains) in flush_reg()
389 reg->dead = 0; in flush_reg()
390 reg->used = 1; in flush_reg()
391 FOR_EACH_PTR_TAG(reg->contains, pseudo) { in flush_reg()
396 flush_one_pseudo(state, reg, pseudo); in flush_reg()
398 free_ptr_list(&reg->contains); in flush_reg()
401 …uct storage_hash *find_pseudo_storage(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg) in find_pseudo_storage() argument
430 if (reg && !reg->used) { in find_pseudo_storage()
432 src->storage->regno = reg - hardregs; in find_pseudo_storage()
440 static void mark_reg_dead(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg) in mark_reg_dead() argument
444 FOR_EACH_PTR_TAG(reg->contains, p) { in mark_reg_dead()
449 output_comment(state, "marking pseudo %s in reg %s dead", show_pseudo(pseudo), reg->name); in mark_reg_dead()
451 reg->dead++; in mark_reg_dead()
455 static void add_pseudo_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg) in add_pseudo_reg() argument
457 output_comment(state, "added pseudo %s to reg %s", show_pseudo(pseudo), reg->name); in add_pseudo_reg()
458 add_ptr_list_tag(&reg->contains, pseudo, TAG_DIRTY); in add_pseudo_reg()
477 struct hardreg *reg = hardregs; in empty_reg() local
479 for (i = 0; i < REGNO; i++, reg++) { in empty_reg()
480 if (!reg->contains) in empty_reg()
481 return reg; in empty_reg()
490 struct hardreg *reg; in target_reg() local
493 reg = preferred_reg(state, target); in target_reg()
494 if (reg && !reg->contains) in target_reg()
497 reg = empty_reg(state); in target_reg()
498 if (reg) in target_reg()
506 reg = hardregs + i; in target_reg()
507 if (!reg->busy) { in target_reg()
508 flush_reg(state, reg); in target_reg()
516 add_pseudo_reg(state, pseudo, reg); in target_reg()
517 return reg; in target_reg()
523 struct hardreg *reg; in find_in_reg() local
528 reg = hardregs + i; in find_in_reg()
529 FOR_EACH_PTR_TAG(reg->contains, p) { in find_in_reg()
532 …t_comment(state, "found pseudo %s in reg %s (busy=%d)", show_pseudo(pseudo), reg->name, reg->busy); in find_in_reg()
533 return reg; in find_in_reg()
542 struct hardreg *reg = find_in_reg(state, pseudo); in flush_pseudo() local
544 if (reg) in flush_pseudo()
545 flush_reg(state, reg); in flush_pseudo()
548 static void flush_cc_cache_to_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg) in flush_cc_cache_to_reg() argument
554 output_insn(state, "%s %s", opcodes[opcode], reg->name); in flush_cc_cache_to_reg()
642 struct hardreg *reg; in getreg() local
644 reg = find_in_reg(state, pseudo); in getreg()
645 if (reg) in getreg()
646 return reg; in getreg()
647 reg = target_reg(state, pseudo, target); in getreg()
648 return fill_reg(state, reg, pseudo); in getreg()
659 struct hardreg *reg; in copy_reg() local
669 reg = preferred_reg(state, target); in copy_reg()
670 if (reg && !reg->contains) { in copy_reg()
671 output_comment(state, "copying %s to preferred target %s", show_pseudo(target), reg->name); in copy_reg()
672 move_reg(state, src, reg); in copy_reg()
673 return reg; in copy_reg()
677 reg = hardregs + i; in copy_reg()
678 if (!reg->contains) { in copy_reg()
679 output_comment(state, "copying %s to %s", show_pseudo(target), reg->name); in copy_reg()
680 output_insn(state, "movl %s,%s", src->name, reg->name); in copy_reg()
681 return reg; in copy_reg()
693 op->reg->busy--; in put_operand()
718 op->reg = getreg(state, pseudo, target); in get_register_operand()
719 op->reg->busy++; in get_register_operand()
735 struct hardreg *reg; in get_generic_operand() local
760 reg = find_in_reg(state, pseudo); in get_generic_operand()
761 if (reg) { in get_generic_operand()
763 op->reg = reg; in get_generic_operand()
764 reg->busy++; in get_generic_operand()
774 op->reg = hardregs + src->regno; in get_generic_operand()
775 op->reg->busy++; in get_generic_operand()
797 struct hardreg *reg; in generic() local
814 reg = target_reg(state, pseudo, NULL); in generic()
815 output_insn(state, "lea %s,%s", show_op(state, op), reg->name); in generic()
816 return reg->name; in generic()
864 static void kill_dead_reg(struct hardreg *reg) in kill_dead_reg() argument
866 if (reg->dead) { in kill_dead_reg()
869 FOR_EACH_PTR_TAG(reg->contains, p) { in kill_dead_reg()
872 reg->dead--; in kill_dead_reg()
875 PACK_PTR_LIST(&reg->contains); in kill_dead_reg()
876 assert(!reg->dead); in kill_dead_reg()
893 dst = target_copy_reg(state, src->reg, insn->target); in do_binop()
906 static int is_dead_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg) in is_dead_reg() argument
909 FOR_EACH_PTR_TAG(reg->contains, p) { in is_dead_reg()
997 struct hardreg *reg; in kill_pseudo() local
1003 reg = hardregs + i; in kill_pseudo()
1004 FOR_EACH_PTR_TAG(reg->contains, p) { in kill_pseudo()
1008 reg->dead--; in kill_pseudo()
1010 show_pseudo(pseudo), reg->name); in kill_pseudo()
1013 PACK_PTR_LIST(&reg->contains); in kill_pseudo()
1078 struct hardreg *reg = getreg(state, br->cond, NULL); in generate_branch() local
1079 output_insn(state, "testl %s,%s", reg->name, reg->name); in generate_branch()
1095 struct hardreg *reg = hardregs + SWITCH_REG; in generate_switch() local
1098 output_insn(state, "switch on %s", reg->name); in generate_switch()
1106 struct hardreg *reg = getreg(state, ret->src, NULL); in generate_ret() local
1107 if (reg != wants) in generate_ret()
1108 output_insn(state, "movl %s,%s", reg->name, wants->name); in generate_ret()
1148 struct hardreg *reg = getreg(state, insn->src1, NULL); in generate_select() local
1149 output_insn(state, "testl %s,%s", reg->name, reg->name); in generate_select()
1160 struct hardreg *reg; member
1258 struct hardreg *reg, *orig; in generate_asm_inputs() local
1269 reg = asm_arguments[index].reg; in generate_asm_inputs()
1272 move_reg(state, orig, reg); in generate_asm_inputs()
1274 fill_reg(state, reg, pseudo); in generate_asm_inputs()
1275 string = reg->name; in generate_asm_inputs()
1287 arg->reg = NULL; in generate_asm_inputs()
1300 struct hardreg *reg; in generate_asm_outputs() local
1310 reg = target_reg(state, pseudo, NULL); in generate_asm_outputs()
1312 arg->reg = reg; in generate_asm_outputs()
1313 string = reg->name; in generate_asm_outputs()
1464 static void write_reg_to_storage(struct bb_state *state, struct hardreg *reg, pseudo_t pseudo, stru… in write_reg_to_storage() argument
1472 if (reg == out) in write_reg_to_storage()
1474 output_insn(state, "movl %s,%s", reg->name, out->name); in write_reg_to_storage()
1477 if (reg->busy < VERY_BUSY) { in write_reg_to_storage()
1479 storage->regno = reg - hardregs; in write_reg_to_storage()
1480 reg->busy = REG_FIXED; in write_reg_to_storage()
1489 output_insn(state, "movl %s,%s", reg->name, out->name); in write_reg_to_storage()
1500 output_insn(state, "movl %s,%s", reg->name, show_memop(storage)); in write_reg_to_storage()
1544 struct hardreg *reg = hardregs + i; in fill_output() local
1547 FOR_EACH_PTR_TAG(reg->contains, p) { in fill_output()
1549 write_reg_to_storage(state, reg, pseudo, out); in fill_output()
1581 static int final_pseudo_flush(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg) in final_pseudo_flush() argument
1627 output_insn(state, "movl %s,%s", reg->name, show_memop(out)); in final_pseudo_flush()
1631 if (reg == dst) in final_pseudo_flush()
1633 output_insn(state, "movl %s,%s", reg->name, dst->name); in final_pseudo_flush()
1650 struct hardreg *reg = hardregs + out->regno; in generate_output_storage() local
1654 reg->busy = REG_FIXED; in generate_output_storage()
1655 FOR_EACH_PTR_TAG(reg->contains, p) { in generate_output_storage()
1664 if (final_pseudo_flush(state, p, reg)) { in generate_output_storage()
1670 PACK_PTR_LIST(&reg->contains); in generate_output_storage()
1672 flush_reg(state, reg); in generate_output_storage()
1757 struct hardreg *reg = hardregs + s->regno; in mark_used_registers() local
1758 reg->used = 1; in mark_used_registers()