mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00:00
SPU Analyzer: Do not terminate blocks on BRA
This commit is contained in:
parent
412db758e8
commit
f51b100a8c
2 changed files with 6 additions and 13 deletions
|
@ -2925,7 +2925,6 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
|
|||
if (g_cfg.core.spu_block_size == spu_block_size_type::giga && !sync)
|
||||
{
|
||||
m_entry_info[target / 4] = true;
|
||||
add_block(target);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2933,13 +2932,9 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
|
|||
{
|
||||
spu_log.notice("[0x%x] At 0x%x: ignoring fixed tail call to 0x%x (SYNC)", entry_point, pos, target);
|
||||
}
|
||||
|
||||
if (target > entry_point)
|
||||
{
|
||||
limit = std::min<u32>(limit, target);
|
||||
}
|
||||
}
|
||||
|
||||
add_block(target);
|
||||
next_block();
|
||||
break;
|
||||
}
|
||||
|
@ -3529,10 +3524,6 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
|
|||
case spu_itype::BRASL:
|
||||
is_call = spu_branch_target(0, op.i16) != ia + 4;
|
||||
break;
|
||||
case spu_itype::BRA:
|
||||
is_call = true;
|
||||
is_tail = true;
|
||||
break;
|
||||
case spu_itype::BISL:
|
||||
case spu_itype::BISLED:
|
||||
is_call = true;
|
||||
|
|
|
@ -503,8 +503,6 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
|
|||
return result;
|
||||
}
|
||||
|
||||
ensure(!absolute);
|
||||
|
||||
auto& result = m_blocks[target].block;
|
||||
|
||||
if (!result)
|
||||
|
@ -7661,10 +7659,14 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
const auto compiled_pos = m_ir->getInt32(m_pos);
|
||||
const u32 target = spu_branch_target(0, op.i16);
|
||||
|
||||
m_block->block_end = m_ir->GetInsertBlock();
|
||||
m_ir->CreateBr(add_block(target, true));
|
||||
const auto real_pos = get_pc(m_pos);
|
||||
value_t<u32> target_val;
|
||||
target_val.value = m_ir->getInt32(target);
|
||||
m_ir->CreateCondBr(m_ir->CreateICmpEQ(real_pos, compiled_pos), add_block(target, true), add_block_indirect({}, target_val));
|
||||
}
|
||||
|
||||
void BRASL(spu_opcode_t op) //
|
||||
|
|
Loading…
Add table
Reference in a new issue