mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-01-29 00:33:01 +00:00
SPU/Debugger: Use bitset for breakpoints
This commit is contained in:
parent
7dc4ccc87d
commit
12bfc7d56a
@ -1839,7 +1839,10 @@ void spu_thread::cpu_work()
|
||||
|
||||
if (has_active_local_bps)
|
||||
{
|
||||
if (local_breakpoints[pc / 4])
|
||||
const u32 pos_at = pc / 4;
|
||||
const u32 pos_bit = 1u << (pos_at % 8);
|
||||
|
||||
if (local_breakpoints[pos_at] & pos_bit)
|
||||
{
|
||||
// Ignore repeatations until a different instruction is issued
|
||||
if (pc != current_bp_pc)
|
||||
|
@ -816,7 +816,7 @@ public:
|
||||
atomic_t<spu_debugger_mode> debugger_mode{};
|
||||
|
||||
// PC-based breakpoint list
|
||||
std::array<atomic_t<bool>, SPU_LS_SIZE / 4> local_breakpoints{};
|
||||
std::array<atomic_t<u8>, SPU_LS_SIZE / 4 / 8> local_breakpoints{};
|
||||
atomic_t<bool> has_active_local_bps = false;
|
||||
u32 current_bp_pc = umax;
|
||||
bool stop_flag_removal_protection = false;
|
||||
|
@ -125,8 +125,10 @@ void breakpoint_list::HandleBreakpointRequest(u32 loc, bool only_add)
|
||||
|
||||
const auto spu = static_cast<spu_thread*>(m_cpu);
|
||||
auto& list = spu->local_breakpoints;
|
||||
const u32 pos_at = loc / 4;
|
||||
const u32 pos_bit = 1u << (pos_at % 8);
|
||||
|
||||
if (list[loc / 4].test_and_invert())
|
||||
if (list[pos_at / 8].fetch_xor(pos_bit) & pos_bit)
|
||||
{
|
||||
if (std::none_of(list.begin(), list.end(), [](auto& val){ return val.load(); }))
|
||||
{
|
||||
|
@ -142,8 +142,17 @@ void debugger_list::ShowAddress(u32 addr, bool select_addr, bool direct)
|
||||
{
|
||||
switch (m_cpu ? m_cpu->id_type() : 0)
|
||||
{
|
||||
case 1: return m_ppu_breakpoint_handler->HasBreakpoint(pc);
|
||||
case 2: return (*spu_bps_list)[pc / 4].load();
|
||||
case 1:
|
||||
{
|
||||
return m_ppu_breakpoint_handler->HasBreakpoint(pc);
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
const u32 pos_at = pc / 4;
|
||||
const u32 pos_bit = 1u << (pos_at % 8);
|
||||
|
||||
return !!((*spu_bps_list)[pos_at] & pos_bit);
|
||||
}
|
||||
default: return false;
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user