ack/mach/proto/mcg/reg.h
David Given d2c14ca44f Precisely one stack hreg gets allocated for each vreg/congruence group for
eviction; this prevents us from having to worry about moving values from stack
slot to stack slot, which is hard.
2018-09-08 18:59:55 +02:00

45 lines
864 B
C

#ifndef REG_H
#define REG_H
#define WITH_ATTR(a) (1<<(a))
struct phicongruence
{
int id;
ARRAYOF(struct vreg) vregs;
ARRAYOF(struct hop) definitions;
uint32_t type;
struct hreg* evicted; /* stack slot to evict to */
};
struct hreg
{
const char* id;
const struct burm_register_data* brd;
uint32_t attrs;
bool is_stacked;
int offset;
ARRAYOF(struct hreg) aliases;
};
struct vreg
{
int id;
uint32_t type;
struct phicongruence* congruence;
struct hop* defined;
ARRAYOF(struct hop) used;
struct hreg* evicted; /* stack slot to evict to */
};
typedef PMAPOF(struct hreg, struct vreg) register_assignment_t;
extern struct vreg* new_vreg(void);
extern struct hreg* new_hreg(const struct burm_register_data* brd);
extern struct hreg* new_stacked_hreg(uint32_t type);
#endif
/* vim: set sw=4 ts=4 expandtab : */