End block when register version hits a maximum count.

This commit is contained in:
SarahW 2018-07-25 20:18:03 +01:00
commit cf508b050f

View file

@ -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;