#ifndef M64P_R4300_REGCACHE_H
#define M64P_R4300_REGCACHE_H
#include "r4300/recomp.h"
void init_cache(usf_state_t *, precomp_instr* start);
void free_registers_move_start(usf_state_t *);
void free_all_registers(usf_state_t *);
void free_register(usf_state_t *, int reg);
int is64(usf_state_t *, unsigned int *addr);
int lru_register(usf_state_t *);
int lru_base_register(usf_state_t *);
void set_register_state(usf_state_t *, int reg, unsigned int *addr, int dirty, int is64bits);
int lock_register(usf_state_t *, int reg);
void unlock_register(usf_state_t *, int reg);
int allocate_register_32(usf_state_t *, unsigned int *addr);
int allocate_register_64(usf_state_t *, unsigned long long *addr);
int allocate_register_32_w(usf_state_t *, unsigned int *addr);
int allocate_register_64_w(usf_state_t *, unsigned long long *addr);
void allocate_register_32_manually(usf_state_t *, int reg, unsigned int *addr);
void allocate_register_32_manually_w(usf_state_t *, int reg, unsigned int *addr);
void build_wrappers(usf_state_t *, precomp_instr*, int, int, precomp_block*);
#endif