Lines Matching defs:reg

157 		struct hardreg *reg;
184 return op->reg->name;
382 static void flush_reg(struct bb_state *state, struct hardreg *reg)
386 if (reg->busy)
387 output_comment(state, "reg %s flushed while busy is %d!", reg->name, reg->busy);
388 if (!reg->contains)
390 reg->dead = 0;
391 reg->used = 1;
392 FOR_EACH_PTR_TAG(reg->contains, pseudo) {
397 flush_one_pseudo(state, reg, pseudo);
399 free_ptr_list(&reg->contains);
402 static struct storage_hash *find_pseudo_storage(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
431 if (reg && !reg->used) {
433 src->storage->regno = reg - hardregs;
441 static void mark_reg_dead(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
445 FOR_EACH_PTR_TAG(reg->contains, p) {
450 output_comment(state, "marking pseudo %s in reg %s dead", show_pseudo(pseudo), reg->name);
452 reg->dead++;
456 static void add_pseudo_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
458 output_comment(state, "added pseudo %s to reg %s", show_pseudo(pseudo), reg->name);
459 add_ptr_list_tag(&reg->contains, pseudo, TAG_DIRTY);
478 struct hardreg *reg = hardregs;
480 for (i = 0; i < REGNO; i++, reg++) {
481 if (!reg->contains)
482 return reg;
491 struct hardreg *reg;
494 reg = preferred_reg(state, target);
495 if (reg && !reg->contains)
498 reg = empty_reg(state);
499 if (reg)
507 reg = hardregs + i;
508 if (!reg->busy) {
509 flush_reg(state, reg);
517 add_pseudo_reg(state, pseudo, reg);
518 return reg;
524 struct hardreg *reg;
529 reg = hardregs + i;
530 FOR_EACH_PTR_TAG(reg->contains, p) {
533 output_comment(state, "found pseudo %s in reg %s (busy=%d)", show_pseudo(pseudo), reg->name, reg->busy);
534 return reg;
543 struct hardreg *reg = find_in_reg(state, pseudo);
545 if (reg)
546 flush_reg(state, reg);
549 static void flush_cc_cache_to_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
555 output_insn(state, "%s %s", opcodes[opcode], reg->name);
643 struct hardreg *reg;
645 reg = find_in_reg(state, pseudo);
646 if (reg)
647 return reg;
648 reg = target_reg(state, pseudo, target);
649 return fill_reg(state, reg, pseudo);
660 struct hardreg *reg;
670 reg = preferred_reg(state, target);
671 if (reg && !reg->contains) {
672 output_comment(state, "copying %s to preferred target %s", show_pseudo(target), reg->name);
673 move_reg(state, src, reg);
674 return reg;
678 reg = hardregs + i;
679 if (!reg->contains) {
680 output_comment(state, "copying %s to %s", show_pseudo(target), reg->name);
681 output_insn(state, "movl %s,%s", src->name, reg->name);
682 return reg;
694 op->reg->busy--;
719 op->reg = getreg(state, pseudo, target);
720 op->reg->busy++;
736 struct hardreg *reg;
761 reg = find_in_reg(state, pseudo);
762 if (reg) {
764 op->reg = reg;
765 reg->busy++;
775 op->reg = hardregs + src->regno;
776 op->reg->busy++;
798 struct hardreg *reg;
815 reg = target_reg(state, pseudo, NULL);
816 output_insn(state, "lea %s,%s", show_op(state, op), reg->name);
817 return reg->name;
865 static void kill_dead_reg(struct hardreg *reg)
867 if (reg->dead) {
870 FOR_EACH_PTR_TAG(reg->contains, p) {
873 reg->dead--;
876 PACK_PTR_LIST(&reg->contains);
877 assert(!reg->dead);
894 dst = target_copy_reg(state, src->reg, insn->target);
907 static int is_dead_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
910 FOR_EACH_PTR_TAG(reg->contains, p) {
998 struct hardreg *reg;
1004 reg = hardregs + i;
1005 FOR_EACH_PTR_TAG(reg->contains, p) {
1009 reg->dead--;
1010 output_comment(state, "removing pseudo %s from reg %s",
1011 show_pseudo(pseudo), reg->name);
1014 PACK_PTR_LIST(&reg->contains);
1079 struct hardreg *reg = getreg(state, br->cond, NULL);
1080 output_insn(state, "testl %s,%s", reg->name, reg->name);
1093 /* We've made sure that there is a dummy reg live for the output */
1096 struct hardreg *reg = hardregs + SWITCH_REG;
1099 output_insn(state, "switch on %s", reg->name);
1107 struct hardreg *reg = getreg(state, ret->src, NULL);
1108 if (reg != wants)
1109 output_insn(state, "movl %s,%s", reg->name, wants->name);
1149 struct hardreg *reg = getreg(state, insn->src1, NULL);
1150 output_insn(state, "testl %s,%s", reg->name, reg->name);
1161 struct hardreg *reg;
1259 struct hardreg *reg, *orig;
1270 reg = asm_arguments[index].reg;
1273 move_reg(state, orig, reg);
1275 fill_reg(state, reg, pseudo);
1276 string = reg->name;
1288 arg->reg = NULL;
1301 struct hardreg *reg;
1311 reg = target_reg(state, pseudo, NULL);
1313 arg->reg = reg;
1314 string = reg->name;
1466 static void write_reg_to_storage(struct bb_state *state, struct hardreg *reg, pseudo_t pseudo, struct storage *storage)
1474 if (reg == out)
1476 output_insn(state, "movl %s,%s", reg->name, out->name);
1479 if (reg->busy < VERY_BUSY) {
1481 storage->regno = reg - hardregs;
1482 reg->busy = REG_FIXED;
1491 output_insn(state, "movl %s,%s", reg->name, out->name);
1502 output_insn(state, "movl %s,%s", reg->name, show_memop(storage));
1546 struct hardreg *reg = hardregs + i;
1549 FOR_EACH_PTR_TAG(reg->contains, p) {
1551 write_reg_to_storage(state, reg, pseudo, out);
1583 static int final_pseudo_flush(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
1629 output_insn(state, "movl %s,%s", reg->name, show_memop(out));
1633 if (reg == dst)
1635 output_insn(state, "movl %s,%s", reg->name, dst->name);
1652 struct hardreg *reg = hardregs + out->regno;
1656 reg->busy = REG_FIXED;
1657 FOR_EACH_PTR_TAG(reg->contains, p) {
1666 if (final_pseudo_flush(state, p, reg)) {
1672 PACK_PTR_LIST(&reg->contains);
1674 flush_reg(state, reg);
1759 struct hardreg *reg = hardregs + s->regno;
1760 reg->used = 1;