mirror of https://github.com/PCSX2/pcsx2.git
Address mask for breakpoints, always clear whole instruction cache (until there's a better solution)
This commit is contained in:
parent
8cd45189c3
commit
8ee14a8039
|
@ -12,6 +12,8 @@ u64 CBreakPoints::breakSkipFirstTicks_ = 0;
|
||||||
std::vector<MemCheck> CBreakPoints::memChecks_;
|
std::vector<MemCheck> CBreakPoints::memChecks_;
|
||||||
std::vector<MemCheck *> CBreakPoints::cleanupMemChecks_;
|
std::vector<MemCheck *> CBreakPoints::cleanupMemChecks_;
|
||||||
|
|
||||||
|
int addressMask = 0x1FFFFFFF;
|
||||||
|
|
||||||
MemCheck::MemCheck()
|
MemCheck::MemCheck()
|
||||||
{
|
{
|
||||||
numHits = 0;
|
numHits = 0;
|
||||||
|
@ -82,9 +84,11 @@ void MemCheck::JitCleanup()
|
||||||
|
|
||||||
size_t CBreakPoints::FindBreakpoint(u32 addr, bool matchTemp, bool temp)
|
size_t CBreakPoints::FindBreakpoint(u32 addr, bool matchTemp, bool temp)
|
||||||
{
|
{
|
||||||
|
addr &= addressMask;
|
||||||
|
|
||||||
for (size_t i = 0; i < breakPoints_.size(); ++i)
|
for (size_t i = 0; i < breakPoints_.size(); ++i)
|
||||||
{
|
{
|
||||||
if (breakPoints_[i].addr == addr && (!matchTemp || breakPoints_[i].temporary == temp))
|
if ((breakPoints_[i].addr & addressMask) == addr && (!matchTemp || breakPoints_[i].temporary == temp))
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,9 +97,11 @@ size_t CBreakPoints::FindBreakpoint(u32 addr, bool matchTemp, bool temp)
|
||||||
|
|
||||||
size_t CBreakPoints::FindMemCheck(u32 start, u32 end)
|
size_t CBreakPoints::FindMemCheck(u32 start, u32 end)
|
||||||
{
|
{
|
||||||
|
start &= addressMask;
|
||||||
|
end &= addressMask;
|
||||||
for (size_t i = 0; i < memChecks_.size(); ++i)
|
for (size_t i = 0; i < memChecks_.size(); ++i)
|
||||||
{
|
{
|
||||||
if (memChecks_[i].start == start && memChecks_[i].end == end)
|
if ((memChecks_[i].start & addressMask) == start && (memChecks_[i].end & addressMask) == end)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,6 +297,8 @@ static inline u32 NotCached(u32 val)
|
||||||
|
|
||||||
MemCheck *CBreakPoints::GetMemCheck(u32 address, int size)
|
MemCheck *CBreakPoints::GetMemCheck(u32 address, int size)
|
||||||
{
|
{
|
||||||
|
address &= addressMask;
|
||||||
|
|
||||||
std::vector<MemCheck>::iterator iter;
|
std::vector<MemCheck>::iterator iter;
|
||||||
for (iter = memChecks_.begin(); iter != memChecks_.end(); ++iter)
|
for (iter = memChecks_.begin(); iter != memChecks_.end(); ++iter)
|
||||||
{
|
{
|
||||||
|
@ -338,11 +346,12 @@ void CBreakPoints::ExecMemCheckJitCleanup()
|
||||||
|
|
||||||
void CBreakPoints::SetSkipFirst(u32 pc)
|
void CBreakPoints::SetSkipFirst(u32 pc)
|
||||||
{
|
{
|
||||||
breakSkipFirstAt_ = pc;
|
breakSkipFirstAt_ = pc & addressMask;
|
||||||
// breakSkipFirstTicks_ = CoreTiming::GetTicks();
|
// breakSkipFirstTicks_ = CoreTiming::GetTicks();
|
||||||
}
|
}
|
||||||
u32 CBreakPoints::CheckSkipFirst(u32 cmpPc)
|
u32 CBreakPoints::CheckSkipFirst(u32 cmpPc)
|
||||||
{
|
{
|
||||||
|
cmpPc &= addressMask;
|
||||||
u32 pc = breakSkipFirstAt_;
|
u32 pc = breakSkipFirstAt_;
|
||||||
if (pc == cmpPc)
|
if (pc == cmpPc)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -384,9 +393,9 @@ void CBreakPoints::Update(u32 addr)
|
||||||
resume = true;
|
resume = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr != 0)
|
// if (addr != 0)
|
||||||
Cpu->Clear(addr-4,8);
|
// Cpu->Clear(addr-4,8);
|
||||||
else
|
// else
|
||||||
SysClearExecutionCache();
|
SysClearExecutionCache();
|
||||||
|
|
||||||
if (resume)
|
if (resume)
|
||||||
|
|
Loading…
Reference in New Issue