End block when register version hits a maximum count.
This commit is contained in:
parent
5ca2533f3c
commit
cf508b050f
1 changed files with 6 additions and 0 deletions
|
|
@ -120,6 +120,8 @@ extern ir_reg_t invalid_ir_reg;
|
||||||
|
|
||||||
typedef uint8_t ir_host_reg_t;
|
typedef uint8_t ir_host_reg_t;
|
||||||
|
|
||||||
|
#define REG_VERSION_MAX 250
|
||||||
|
|
||||||
static inline ir_reg_t codegen_reg_read(int reg)
|
static inline ir_reg_t codegen_reg_read(int reg)
|
||||||
{
|
{
|
||||||
ir_reg_t ireg;
|
ir_reg_t ireg;
|
||||||
|
|
@ -132,6 +134,8 @@ static inline ir_reg_t codegen_reg_read(int reg)
|
||||||
reg_version_refcount[IREG_GET_REG(ireg.reg)][ireg.version]++;
|
reg_version_refcount[IREG_GET_REG(ireg.reg)][ireg.version]++;
|
||||||
if (!reg_version_refcount[IREG_GET_REG(ireg.reg)][ireg.version])
|
if (!reg_version_refcount[IREG_GET_REG(ireg.reg)][ireg.version])
|
||||||
fatal("codegen_reg_read - refcount overflow\n");
|
fatal("codegen_reg_read - refcount overflow\n");
|
||||||
|
else if (reg_version_refcount[IREG_GET_REG(ireg.reg)][ireg.version] > REG_VERSION_MAX)
|
||||||
|
CPU_BLOCK_END();
|
||||||
|
|
||||||
return ireg;
|
return ireg;
|
||||||
}
|
}
|
||||||
|
|
@ -148,6 +152,8 @@ static inline ir_reg_t codegen_reg_write(int reg)
|
||||||
reg_last_version[IREG_GET_REG(reg)]++;
|
reg_last_version[IREG_GET_REG(reg)]++;
|
||||||
if (!reg_last_version[IREG_GET_REG(reg)])
|
if (!reg_last_version[IREG_GET_REG(reg)])
|
||||||
fatal("codegen_reg_write - version overflow\n");
|
fatal("codegen_reg_write - version overflow\n");
|
||||||
|
else if (reg_last_version[IREG_GET_REG(reg)] > REG_VERSION_MAX)
|
||||||
|
CPU_BLOCK_END();
|
||||||
reg_version_refcount[IREG_GET_REG(reg)][ireg.version] = 0;
|
reg_version_refcount[IREG_GET_REG(reg)][ireg.version] = 0;
|
||||||
|
|
||||||
return ireg;
|
return ireg;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue