hardreg
struct hardreg *src = getreg(state, insn->src, insn->target);
struct hardreg *src = getreg(state, insn->src, insn->target);
struct hardreg *dst;
struct hardreg *reg = getreg(state, br->cond, NULL);
struct hardreg *reg = hardregs + SWITCH_REG;
struct hardreg *wants = hardregs+0;
struct hardreg *reg = getreg(state, ret->src, NULL);
struct hardreg *src1, *src2, *dst;
struct hardreg *reg = getreg(state, insn->src1, NULL);
struct hardreg *reg;
static struct hardreg hardregs[] = {
struct hardreg *reg, *orig;
struct hardreg *reg;
struct hardreg *src;
static void write_reg_to_storage(struct bb_state *state, struct hardreg *reg, pseudo_t pseudo, struct storage *storage)
struct hardreg *out;
struct hardreg *out;
struct hardreg *reg = hardregs + i;
struct hardreg *reg;
static int final_pseudo_flush(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
struct hardreg *dst;
struct hardreg *base;
struct hardreg *index;
struct hardreg *reg = hardregs + out->regno;
struct hardreg *reg = hardregs + s->regno;
static void flush_one_pseudo(struct bb_state *state, struct hardreg *hardreg, pseudo_t pseudo)
output_comment(state, "flushing %s from %s", show_pseudo(pseudo), hardreg->name);
output_insn(state, "movl %s,%s", hardreg->name, show_memop(storage));
static void flush_reg(struct bb_state *state, struct hardreg *reg)
static struct storage_hash *find_pseudo_storage(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
static void mark_reg_dead(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
static void add_pseudo_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
static struct hardreg *preferred_reg(struct bb_state *state, pseudo_t target)
static struct hardreg *empty_reg(struct bb_state *state)
struct hardreg *reg = hardregs;
static struct hardreg *target_reg(struct bb_state *state, pseudo_t pseudo, pseudo_t target)
struct hardreg *reg;
static struct hardreg *find_in_reg(struct bb_state *state, pseudo_t pseudo)
struct hardreg *reg;
struct hardreg *reg = find_in_reg(state, pseudo);
static void flush_cc_cache_to_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
struct hardreg *dst;
static struct hardreg *fill_reg(struct bb_state *state, struct hardreg *hardreg, pseudo_t pseudo)
flush_cc_cache_to_reg(state, pseudo, hardreg);
return hardreg;
output_insn(state, "movl $%lld,%s", pseudo->value, hardreg->name);
output_insn(state, "movl $<%s>,%s", show_pseudo(pseudo), hardreg->name);
output_insn(state, "leal %s,%s", show_memop(src->storage), hardreg->name);
output_insn(state, "movl $<%s>,%s", show_pseudo(def->target), hardreg->name);
src = find_pseudo_storage(state, pseudo, hardreg);
mark_reg_dead(state, pseudo, hardreg);
output_insn(state, "mov.%d %s,%s", 32, show_memop(src->storage), hardreg->name);
output_insn(state, "reload %s from %s", hardreg->name, show_pseudo(pseudo));
return hardreg;
static struct hardreg *getreg(struct bb_state *state, pseudo_t pseudo, pseudo_t target)
struct hardreg *reg;
static void move_reg(struct bb_state *state, struct hardreg *src, struct hardreg *dst)
static struct hardreg *copy_reg(struct bb_state *state, struct hardreg *src, pseudo_t target)
struct hardreg *reg;
struct hardreg *reg;
struct hardreg *reg;
struct hardreg *base;
static void kill_dead_reg(struct hardreg *reg)
static struct hardreg *target_copy_reg(struct bb_state *state, struct hardreg *src, pseudo_t target)
struct hardreg *dst;
static int is_dead_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
struct hardreg *reg1, *reg2;
struct hardreg *dst;
struct hardreg *reg;