From cf508b050f6b2f7c85281e7473a43cc57aa15a4c Mon Sep 17 00:00:00 2001 From: SarahW Date: Wed, 25 Jul 2018 20:18:03 +0100 Subject: [PATCH] End block when register version hits a maximum count. --- src/codegen_reg.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/codegen_reg.h b/src/codegen_reg.h index 1e3d339..4fd0dd8 100644 --- a/src/codegen_reg.h +++ b/src/codegen_reg.h @@ -120,6 +120,8 @@ extern ir_reg_t invalid_ir_reg; typedef uint8_t ir_host_reg_t; +#define REG_VERSION_MAX 250 + static inline ir_reg_t codegen_reg_read(int reg) { 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]++; if (!reg_version_refcount[IREG_GET_REG(ireg.reg)][ireg.version]) 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; } @@ -148,6 +152,8 @@ static inline ir_reg_t codegen_reg_write(int reg) reg_last_version[IREG_GET_REG(reg)]++; if (!reg_last_version[IREG_GET_REG(reg)]) 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; return ireg;