From 16a86adbf8dc2eeff474b073fd6d478a3047928e Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 28 Apr 2019 10:04:30 +0100 Subject: [PATCH] Force implicit dependency on previous register version when accessing a partial register. Fixes graphics issues in Windows 95 on Packard Bell PB410A using built-in HT216 video. --- src/codegen_reg.c | 2 +- src/codegen_reg.h | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/codegen_reg.c b/src/codegen_reg.c index eb07cfb..2601b5a 100644 --- a/src/codegen_reg.c +++ b/src/codegen_reg.c @@ -191,7 +191,7 @@ void codegen_reg_mark_as_required() } } -static int reg_is_native_size(ir_reg_t ir_reg) +int reg_is_native_size(ir_reg_t ir_reg) { int native_size = ireg_data[IREG_GET_REG(ir_reg.reg)].native_size; int requested_size = IREG_GET_SIZE(ir_reg.reg); diff --git a/src/codegen_reg.h b/src/codegen_reg.h index bd790a9..6bdb7c2 100644 --- a/src/codegen_reg.h +++ b/src/codegen_reg.h @@ -343,6 +343,8 @@ static inline ir_reg_t codegen_reg_read(int reg) return ireg; } +int reg_is_native_size(ir_reg_t ir_reg); + static inline ir_reg_t codegen_reg_write(int reg, int uop_nr) { ir_reg_t ireg; @@ -357,7 +359,10 @@ static inline ir_reg_t codegen_reg_write(int reg, int uop_nr) if (IREG_GET_REG(reg) > IREG_EBX && last_version && !reg_version[IREG_GET_REG(reg)][last_version].refcount && !(reg_version[IREG_GET_REG(reg)][last_version].flags & REG_FLAGS_REQUIRED)) - add_to_dead_list(®_version[IREG_GET_REG(reg)][last_version], IREG_GET_REG(reg), last_version); + { + if (reg_is_native_size(ireg)) /*Non-native size registers have an implicit dependency on the previous version, so don't add to dead list*/ + add_to_dead_list(®_version[IREG_GET_REG(reg)][last_version], IREG_GET_REG(reg), last_version); + } reg_last_version[IREG_GET_REG(reg)]++; if (!reg_last_version[IREG_GET_REG(reg)])