SPU LLVM: Implement PUTLLC16 for accurate RSX reservations

This commit is contained in:
Elad Ashkenazi 2024-05-24 08:45:58 +03:00
parent e8899bf9fc
commit 3dfbd14de2
2 changed files with 90 additions and 8 deletions

View file

@ -5305,7 +5305,7 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
if (insert_entry)
{
const u32 target_size = get_block_targets(stackframe_pc).size();
const usz target_size = get_block_targets(stackframe_pc).size();
spu_log.trace("Emplacing: block_id=%d, pc=0x%x, target_it=%d/%d, new_pc=0x%x (has_it=%d)", reg_state_it[stackframe_it].iterator_id, stackframe_pc, entry_index + 1, target_size, target_pc, atomic16_info.active);
auto& next = reg_state_it.emplace_back(target_pc, stackframe_it, 0);
@ -5321,7 +5321,7 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
}
next.iterator_id = iterator_id_alloc++;
wi = stackframe_it + 1;
wi = static_cast<u32>(stackframe_it + 1);
ensure(stackframe_it + 1 == reg_state_it.size() - 1);
}
}
@ -6698,12 +6698,6 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
continue;
}
if (g_cfg.core.rsx_accurate_res_access)
{
// For now it is skipped completely in this case
continue;
}
union putllc16_info
{
u32 data;