|
|
|
@ -257,7 +257,7 @@ std::pair<ParseResult, ParseInfo> ParseCode(CFGRebuildState& state, u32 address)
|
|
|
|
|
single_branch.ignore = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (state.registered.count(offset) != 0) {
|
|
|
|
|
if (state.registered.contains(offset)) {
|
|
|
|
|
single_branch.address = offset;
|
|
|
|
|
single_branch.ignore = true;
|
|
|
|
|
break;
|
|
|
|
@ -632,12 +632,12 @@ void DecompileShader(CFGRebuildState& state) {
|
|
|
|
|
for (auto label : state.labels) {
|
|
|
|
|
state.manager->DeclareLabel(label);
|
|
|
|
|
}
|
|
|
|
|
for (auto& block : state.block_info) {
|
|
|
|
|
if (state.labels.count(block.start) != 0) {
|
|
|
|
|
for (const auto& block : state.block_info) {
|
|
|
|
|
if (state.labels.contains(block.start)) {
|
|
|
|
|
state.manager->InsertLabel(block.start);
|
|
|
|
|
}
|
|
|
|
|
const bool ignore = BlockBranchIsIgnored(block.branch);
|
|
|
|
|
u32 end = ignore ? block.end + 1 : block.end;
|
|
|
|
|
const u32 end = ignore ? block.end + 1 : block.end;
|
|
|
|
|
state.manager->InsertBlock(block.start, end);
|
|
|
|
|
if (!ignore) {
|
|
|
|
|
InsertBranch(*state.manager, block.branch);
|
|
|
|
@ -737,7 +737,7 @@ std::unique_ptr<ShaderCharacteristics> ScanFlow(const ProgramCode& program_code,
|
|
|
|
|
auto back = result_out->blocks.begin();
|
|
|
|
|
auto next = std::next(back);
|
|
|
|
|
while (next != result_out->blocks.end()) {
|
|
|
|
|
if (state.labels.count(next->start) == 0 && next->start == back->end + 1) {
|
|
|
|
|
if (!state.labels.contains(next->start) && next->start == back->end + 1) {
|
|
|
|
|
back->end = next->end;
|
|
|
|
|
next = result_out->blocks.erase(next);
|
|
|
|
|
continue;
|
|
|
|
|