VarAction2: Fix reg tracking through previously handled procedures
See: #479
This commit is contained in:
@@ -29,6 +29,7 @@ struct VarAction2GroupVariableTracking {
|
|||||||
std::bitset<256> in;
|
std::bitset<256> in;
|
||||||
std::bitset<256> out;
|
std::bitset<256> out;
|
||||||
std::bitset<256> proc_call_out;
|
std::bitset<256> proc_call_out;
|
||||||
|
std::bitset<256> proc_call_in;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VarAction2ProcedureAnnotation {
|
struct VarAction2ProcedureAnnotation {
|
||||||
|
@@ -1689,9 +1689,10 @@ struct CheckDeterministicSpriteGroupOutputVarBitsProcedureHandler {
|
|||||||
std::bitset<256> new_total = var_tracking->out | new_proc_call_out;
|
std::bitset<256> new_total = var_tracking->out | new_proc_call_out;
|
||||||
var_tracking->proc_call_out = new_proc_call_out;
|
var_tracking->proc_call_out = new_proc_call_out;
|
||||||
if (old_total != new_total) {
|
if (old_total != new_total) {
|
||||||
CheckDeterministicSpriteGroupOutputVarBits(sub, new_total, input_bits, false);
|
CheckDeterministicSpriteGroupOutputVarBits(sub, new_total, &(var_tracking->proc_call_in), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (input_bits != nullptr) (*input_bits) |= var_tracking->proc_call_in;
|
||||||
if (top_level) this->bits |= var_tracking->in;
|
if (top_level) this->bits |= var_tracking->in;
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -1737,7 +1738,7 @@ static bool CheckDeterministicSpriteGroupOutputVarBits(const DeterministicSprite
|
|||||||
proc_handler.ProcessGroup(adjust.subroutine, nullptr, true);
|
proc_handler.ProcessGroup(adjust.subroutine, nullptr, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (store_input_bits != nullptr) *store_input_bits |= bits;
|
if (store_input_bits != nullptr) *store_input_bits = bits;
|
||||||
return dse;
|
return dse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user