d2c14ca44f
eviction; this prevents us from having to worry about moving values from stack slot to stack slot, which is hard.
45 lines
864 B
C
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 : */
|