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.
This commit is contained in:
parent
16bc3bb6ec
commit
16a86adbf8
2 changed files with 7 additions and 2 deletions
|
|
@ -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 native_size = ireg_data[IREG_GET_REG(ir_reg.reg)].native_size;
|
||||||
int requested_size = IREG_GET_SIZE(ir_reg.reg);
|
int requested_size = IREG_GET_SIZE(ir_reg.reg);
|
||||||
|
|
|
||||||
|
|
@ -343,6 +343,8 @@ static inline ir_reg_t codegen_reg_read(int reg)
|
||||||
return ireg;
|
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)
|
static inline ir_reg_t codegen_reg_write(int reg, int uop_nr)
|
||||||
{
|
{
|
||||||
ir_reg_t ireg;
|
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 &&
|
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))
|
!(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)]++;
|
reg_last_version[IREG_GET_REG(reg)]++;
|
||||||
if (!reg_last_version[IREG_GET_REG(reg)])
|
if (!reg_last_version[IREG_GET_REG(reg)])
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue