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